1

私はウェブホストを取得していて、チームマットとのプロジェクトがあります。ペーストの有効期限がない( http://pastie.org/が存在することを知っています)など、自分のペーストサイトを用意するのはいい考えだと思いました。知りたかった。コードで使用できる単純なハイライトライブラリは何ですか?私はC/C++のみを使用します。

4

2 に答える 2

2

質問には「php」というタグが付けられていますが、「C/C++ のみを使用しますか?」

PHP ソリューションはGeSHiです。

于 2008-11-19T07:51:21.257 に答える
0

基本的にすべての語彙素を 1 つの大きな正規表現にラップできるため、1 つの言語 (コンテキスト フリー、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>";
}
于 2008-11-19T08:22:38.713 に答える