2008-11-19 9 views
1

Je reçois un hébergeur et j'ai des projets avec des coéquipiers. J'ai pensé que c'était une bonne idée d'avoir mon propre site de collage qui n'a pas de date d'expiration sur la pâte (je sais http://pastie.org/ existe) et d'autres choses. Je voulais savoir. Qu'est-ce qu'une simple mise en évidence lib je peux utiliser sur le code? Je n'utiliserais que C/C++.coller sur le site, coloration syntaxique

Répondre

2

La question est étiquetée "php" mais vous "utiliseriez seulement C/C++"? La solution PHP est GeSHi.

+0

Parce qu'il suppose comme Le site de collage serait écrit en PHP ... (ou c'est une exigence). – PhiLho

0

Construire un surligneur pour une seule langue (contexte libre, avec lexèmes réguliers tels que C++) est en fait assez facile parce que vous pouvez tout simplement envelopper tous vos lexèmes dans une grande expression régulière:

$cpplex = '/ 
    (?<string>"(?:\\\\"|.)*?")| 
    (?<char>\'(?:\\\\\'|.)*?\')| 
    (?<comment>\\/\\/.*?\n|\\/\*.*?\*\\/)| 
    (?<preprocessor>#\w+(?:\\\\\n|[^\\\\])*?\n)| # This one is not perfect! 
    (?<number> 
     (?: # Integer followed by optional fractional part. 
      (?:0(?: 
        x[0-9a-f]+|[0-7]*)|\d+) 
      (?:\.\d*)?(?:e[+-]\d+)?) 
     |(?: # Just the fractional part. 
      (?:\.\d*)(?:e[+-]\d+)?))| 
    (?<keyword>asm|auto|break|case…)|   # TODO Complete. Include ciso646! 
    (?<identifier>\\w(?:\\w|\\d)*) 
    /xs'; 

$matches = preg_match_all($cpplex, $input, $matches, PREG_OFFSET_CAPTURE); 

foreach ($matches as $match) { 
    // TODO: determine which group was matched. 
    // Don't forget lexemes that are *not* part of the expression: 
    // i.e. whitespaces and operators. These are between the matches. 
    echo "<span class=\"$keyword\">$token</span>"; 
} 
Questions connexes