尝试将parserHook添加到mediawiki时出错

时间:2014-06-28 14:30:59

标签: php mediawiki

我正在运行Mediawiki 1.23并使用Syntaxhighlight插件。 90%的情况下,我们使用SQL作为指定语言。 。E.g,:

<syntaxhighlight lang="sql">
   select 'foo';
</syntaxhighlight>

所以我想,“为什么不只是有一个单独的”sql“标签来调用荧光笔并将语言设置为SQL?即,

<sql>
   select 'foo';
</sql>

所以我尝试了以下内容,但它不起作用。我可能会误用PHP,我可以使用一些帮助。

在LocalSettings.php中:

require_once "$IP/extensions/SyntaxHighlight_GeSHi/SyntaxHighlight_GeSHi.php";

在SyntaxHighlight_SeSHi.php中,我添加了第三个setHook:

function efSyntaxHighlight_GeSHiSetup( &$parser ) {
    $parser->setHook( 'source', array( 'SyntaxHighlight_GeSHi', 'parserHook' ) );
    $parser->setHook( 'syntaxhighlight', array( 'SyntaxHighlight_GeSHi', 'parserHook' ) );
    $parser->setHook( 'sql', array( 'SyntaxHighlight_GeSHi', 'parserHookSql' ) );
    return true;
}

最后在SyntaxHighlight_SeSHi.class.php中,我尝试保留所有来自解析器的值,但添加(或替换)“lang”值,然后调用原始解析器:

class SyntaxHighlight_GeSHi {
    private static $initialised = false;
    private static $languages = null;

    public static function parserHookSql( $text, $args = array(), $parser ) { 
        $args['lang']='sql';
        self::parserHook($text,$args,$parser);
    }

    public static function parserHook( $text, $args = array(), $parser ) {
        global $wgSyntaxHighlightDefaultLang, $wgUseSiteCss, $wgUseTidy;
        wfProfileIn( __METHOD__ );
        self::initialise();
        ...
        ...

当我这样做时,页面呈现但是sql标签中呈现的文本是“UNIQ088c1443c530026e-sql-00000007-QINU”,所以我显然做错了。

所以对我的PHP有任何帮助,或者我正在以错误的方式扩展mediawiki ......在任何一种情况下,都要提前感谢!

1 个答案:

答案 0 :(得分:2)

return self::parserHook($text,$args,$parser);