вставить на сайт, подсветка синтаксиса - PullRequest
1 голос
/ 19 ноября 2008

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

Ответы [ 2 ]

2 голосов
/ 19 ноября 2008

Вопрос помечен как "php", но вы "только используете C / C ++"?

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

0 голосов
/ 19 ноября 2008

Построить подсветку только для одного языка (без контекста, с обычными лексемами, такими как 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>";
}
...