Info  
Door: aRAchNiONMoeilijkheidsgraad: 3/3
Geplaatst op: 12-10-2005 Reacties: 0
Views: 4166Log in om zelf te reageren
 Waardering: 10/10 (1 stem)

Uitleg

Deze functie highlight python code! Misschien is hij niet direct nuttig voor iemand, maar wel leerzaam.

Script

/*
one line to give the program\'s name and an idea of what it does.
Copyright (C) yyyy  name of author

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
*/

function strins($string, $i, $insert)
    {
    $i--;
    return substr($string, 0, $i) . $insert . substr($string, $i);
    }

function highlight_python($string)
    {
    $string = htmlspecialchars($string);
    $string = str_replace(\'=\', \'<strong>=</strong>\', $string);
    $string = nl2br($string);
    $string = explode(\'<br />\', $string);

    $line = 1;
    $stringmode = null;
    $echostring = null;
    foreach ($string as $substring)
        {
        $i = 22+strlen($line);
        if ($stringmode==\'\\\'\\\'\\\'\' || $stringmode==\'\"\"\"\')
            {
            $substring = \'<span class=\"mlstring\">\' . $substring;
            $i += 23;
            }
        elseif ($stringmode==\'/*\')
            {
            $substring = \'<span class=\"comment\">\' . $substring;
            $i += 22;
            }
        else
            {
            $stringmode = null;
            }
        if (!($line%2))
            {
            $class = \' class=\"altline\"\';
            }
        else
            {
            $class = \'\';
            }
        $substring = \'<span\'.$class.\' id=\"line\'.$line.\'\"><span>\' . $substring . \'</span></span>\';

        while ($i < strlen($substring)-14)
            {
            $char = substr($substring, $i-1, 1);
            $charduo = substr($substring, $i-1, 2);
            $chartrio = substr($substring, $i-1, 3);
            $charsext = substr($substring, $i-1, 6);
            if ($stringmode==null)
                {
                if ($chartrio==\'\\\'\\\'\\\'\' || $chartrio==\'\"\"\"\')
                    {
                    $stringmode = $chartrio;
                    $substring = strins($substring, $i, \'<span class=\"mlstring\">\');
                    $i += 23;
                    }
                elseif ($char==\'\\\'\')
                    {
                    $stringmode = $char;
                    $substring = strins($substring, $i, \'<span class=\"string\">\');
                    $i += 21;
                    }
                elseif ($charsext==\'&quot;\')
                    {
                    $stringmode = $charsext;
                    $substring = strins($substring, $i, \'<span class=\"string\">\');
                    $i += 21;
                    }
                elseif ($charduo==\'/*\' || $charduo==\'//\')
                    {
                    $stringmode = $charduo;
                    $substring = strins($substring, $i, \'<span class=\"comment\">\');
                    $i += 22;
                    }
                elseif ($char==\'#\')
                    {
                    $stringmode = $char;
                    $substring = strins($substring, $i, \'<span class=\"comment\">\');
                    $i += 22;
                    }
                }
            else
                {
                if ( ( $char==$stringmode || $charsext==$stringmode || $chartrio==$stringmode || $charduo==\'*/\') && $char!=\'#\')
                    {
                    $substring = strins($substring, $i+strlen($stringmode), \'</span>\');
                    $stringmode = null;
                    $i += 7;
                    }
                }
            $i++;
            }
        
        if ($stringmode==\'\\\'\\\'\\\'\' || $stringmode==\'\"\"\"\' || $stringmode==\'/*\' || $stringmode==\'//\' || $stringmode==\'#\')
            {
            $substring .= \'</span>\';
            }
        
        $echostring .= $substring.\'<br />\';
        $line++;
        }
    
    /* special words */
    $constrwords = array(\'def\', \'if\', \'else\', \'elif\', \'try:\', \'except:\');
    foreach ($constrwords as $word)
        {
        $echostring = str_replace($word, \'<span class=\"constrword\">\'.$word.\'</span>\', $echostring);
        }
    
    $specialwords = array(\'this\', \'pass\', \'import\', \'from\', \'global\', \'return\');
    foreach ($specialwords as $word)
        {
        $echostring = str_replace($word, \'<span class=\"specialword\">\'.$word.\'</span>\', $echostring);
        }
    
    /* patterns */
    $pattern = \'/([a-z_]+)(?=(\\(.*?\\)))/\';
    while (preg_match($pattern, $echostring))
        {
        $echostring = preg_replace($pattern, \'<span class=\"function\">\\\\1</span>\', $echostring);
        }
    
    $echostring = str_replace(\'    \', \'&nbsp;&nbsp;&nbsp;&nbsp;\', $echostring);
    
    $echostring = str_replace(\'(\', \'<strong>(</strong>\', $echostring);
    $echostring = str_replace(\')\', \'<strong>)</strong>\', $echostring);
    $echostring = str_replace(\'[\', \'<strong>[</strong>\', $echostring);
    $echostring = str_replace(\']\', \'<strong>]</strong>\', $echostring);
    $echostring = str_replace(\':\', \'<strong>:</strong>\', $echostring);
    
    return \'<div class=\"paste\">\'.$echostring.\'</div>\';
    }

Nog geen reacties

Om te reageren moet je ingelogd zijn.
Nog niet geregistreerd? Doe dat dan nu!


Terug naar gewone pagina

Websitemaken wordt gehost door Nucleus.be, uw Hosting Solution Builder