MediaWiki Coloration
Un article de Mangue.org, l'encyclopéde libre.
Pour coloriser le code source présent dans les pages de ce wiki, nous avons créé une extension Mediawiki (http://www.mediawiki.org/) reposant sur GeSHi (http://qbnz.com/highlighter/). Cette librairie effectuant la plus grande partie du travail, le code de l'extension est assez simple (bien évidemment, vous pouvez réutiliser ce code source librement pour égayer vos wikis) :
<?php # Based on the Example WikiMedia extension # Enables syntax highlighting using the GeSHi (http://qbnz.com/highlighter/). # Simply enclose you code in <yourlanguage></yourlanguage> tags, and voilà, GeSHi will highlight it for you ! $wgExtensionFunctions[] = "wfGeshiExtension"; function wfGeshiExtension() { include_once("extensions/geshi/geshi.php"); // using a global looks like "porcasse-coding", but no, // this is how the example WikiMedia extension is built :) global $wgParser; // available languages (i.e <actionscript/> tag, <ada/> tag, and so on will be available). $languagesArray = array("actionscript-french", "actionscript", "ada", "apache", "applescript", "asm", "asp", "bash", "c", "caddcl", "cadlisp", "cpp", "csharp", "css", "c_mac", "d", "delphi", "diff", "div", "dos", "eiffel", "freebasic", "gml", "html4strict", "ini", "inno", "java", "javascript", "lisp", "lua", "matlab", "mpasm", "nsis", "objc", "ocaml-brief", "ocaml", "oobas", "oracle8", "pascal", "perl", "php-brief", "php", "python", "qbasic", "ruby", "scheme", "sdlbasic", "smarty", "sql", "vb", "vbnet", "vhdl", "visualfoxpro", "xml"); // for each available language, create an anonymous function that will handle it foreach ( $languagesArray as $language ) { $code = <<<EOT // input is the test to highlight, that will be passed by WikiMedia \$geshi = new GeSHi(\$input, "$language", "extensions/geshi/geshi"); \$geshi->set_encoding("utf-8"); // here you can add code to configure the GeSHi, like activate line numbering, // use custom styles, etc. \$highlighted = \$geshi->parse_code(); if(\$geshi->error) return \$geshi->error . "<br/>" . \$highlighted; else return \$highlighted; EOT; $wgParser->setHook( $language, create_function('$input', $code) ); } } ?>
Dans le code précédent, on suppose bien sûr que la libraire GeSHi est disponible dans le répertoire %MEDIAWIKI%/extensions/geshi/

