2008-11-19 3 views
1

Я получаю веб-хостинг, и у меня есть проекты с teammats. Я подумал, что это хорошая идея иметь мой собственный сайт пасты, у которого нет даты истечения срока действия пасты (я знаю, http://pastie.org/ существует) и другие вещи. Я хотел знать. Что такое простая подсветка lib, которую я могу использовать для кода? Я бы использовал только C/C++.паста на сайте, подсветка синтаксиса

ответ

2

Вопрос с тегом «php», но вы «используете только C/C++»?

PHP-решение - GeSHi.

+0

Поскольку он предполагает такие сайт вставки будет написан на PHP ... (или это требование). – PhiLho 2008-11-19 11:53:26

0

Построение фломастер только один язык (контекст свободный, с регулярными лексем, таких как C++) на самом деле очень легко, потому что вы в принципе можно обернуть все лексемы в один большой регулярное выражение:

$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>"; 
} 
Смежные вопросы