我正在运行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 ......在任何一种情况下,都要提前感谢!
答案 0 :(得分:2)
return self::parserHook($text,$args,$parser);