Extension:GeSHiHighlight
From MediaWiki.org
|
GeSHiHighlight Release status: unknown |
|
|---|---|
| Implementation | Tag |
| Description | This extension allows syntax highlighting using GeSHi |
| Author(s) | User:Largos |
| Download | see below |
| Example | Ciscavate:MediaWiki Extensions |
Note: There is a new GeSHi-highlighting extension for MediaWiki that I tried called GeSHiCodeTag and it works pretty well! And the guy also documented it very well.
This extension can be seen in action on the Ciscavate.org wiki: [1] The GeSHiHighlight main page is at Ciscavate:MediaWiki_Extensions
The advantages of GeSHiHighlight over GeSHiColor are 1) it handles more langugages, 2) is still being maintained, and 3) seems to work better in general, although I can't vouch for that personally.
(There is a more active-seeming page for GeSHiHilight at: m:User:Ajqnic:GeSHiHighlight)
Contents |
[edit] History (brief)
The pre tags in MediaWiki are nice, but they don't quite cut it for source code. With that in mind, I went questing for a syntax highlighting extension, and found "SyntaxHighlight" (http://www.wickle.com/wikis/index.php/Syntax_Highlight_extension) by Coffman, but I disagree with the use of two tags--one to specify you are in a code block, and another to specify the language:
<code><perl/> foreach(@myarr){print $_;}</code>
To get arround that, I hacked Coffman's 1.2 release to accept language tags:
<perl>foreach(@myarr){print $_;}</perl>
<java>public class foo{ /* .... */ }</java>
That version is available here: ...... but I'm not planning on updating it again.
There is another drawback--SyntaxHighlight uses enscript, which (IMO) produces horrible results---better than just pre when dealing with source code, but I want more than comments, strings and keywords to be fontified.
Enter GeSHi.
[edit] MediaWiki and GeSHi
GeSHi (found here: http://qbnz.com/highlighter/index.php ) is a syntax highlighing library written in php. I'm new to php (and by new, I mean I wrote my first line of php code about 4 hours prior writing this--see above) and I was amazed at how easy it was to use GeSHi (this says nothing about my love/hate for php in general...).
Why GeSHi?
- Better highlighting. Flat-out kicks enscript's ass. I'm not fond of the default colors, but that can be dealt with later.
- php. enscript, being an external program was writing files with md5hash names, which caused update issues when I was testing, command line params changed causing issues, not quite as elegant. (Using an external program was also my first inclination when thinking about this problem--I actually almost discarded GeSHi because of this narrow-mindedness.)
- It seems to be actively developed. The release I'm using now is only about a week old.
So, where's the source? Here:
<?php # GeSHiHighlight.php # # By: E. Rogan Creswick (aka: Largos) # creswick@gmail.com # wiki.ciscavate.org # # License: GeSHi Highlight is released under the Gnu Public License (GPL), and comes with no warranties. # The text of the GPL can be found here: http://www.gnu.org/licenses/gpl.html # Loosely based on SyntaxHighlight.php by Coffman, (www.wickle.com) # you want to change the below two lines require_once("geshi.php"); // i asume geshi.php is in the same directory as GeSHiHighlight.php (that is 'extensions' dir) define("GESHI_PATH","extensions/geshi");// definition where are stored geshi language parsing files # ok, end of editing :) class SyntaxSettings {}; $wgSyntaxSettings = new SyntaxSettings; $wgExtensionFunctions[] = "wfSyntaxExtension"; function wfSyntaxExtension() { global $wgParser; $langArray = geshi_list_languages(GESHI_PATH); # $langArray = array("actionscript","ada","apache","asm","asp","bash", # "caddcl","cadlisp","c","cpp","css","delphi", # "html4strict","java","javascript","lisp", "lua", # "nsis","oobas","pascal","perl","php-brief","php", # "python","qbasic","sql","vb","visualfoxpro","xml"); foreach ( $langArray as $lang ){ if ($lang == "" || $lang == "div") continue; $wgParser->setHook( $lang, create_function( '$text', '$geshi = new GeSHi(rtrim(ltrim($text,"\n\r")), "' ."$lang". '", GESHI_PATH); return $geshi->parse_code();')); } } /** * function: geshi_list_languages * ------------------------- * List supported languages by reading the files in the geshi/geshi subdirectory * (added by JeffK -- Jeff, any more contact info?) -- I haven't tested the code is is, will do that shortly. -Rogan * */ function geshi_list_languages ( $path = 'geshi/' ) { $lang_list = array(); if ($handle = opendir($path)) { while (false !== ($file = readdir($handle))) { // Loop over the directory. if(is_dir($file)) continue; // Drop anything that is a directory, cause we want files only if( ".php" == substr($file, strrpos($file, "."),4)) // process only .php files { $lang_list[]= substr($file, 0, strrpos($file, ".")); } } closedir($handle); } sort($lang_list); //sort the output, i like ordered lists in Wiki Version page :) return $lang_list; } ?>
Yep, that's it. Bang. Pretty syntax highlighting with 28 language tags, for 28 languages (disclaimer: I haven't tested all these, and I have suspicions about html4strict working out of the box, but still.)
WARNING - Geshi not only adds tags like <php>, <java> etc. but also the tags <div> and <css>. If you use divs in the wiki content, Geshi will highlight them and your pages may look incorrect. To fix this, after downloading GeSHi and unpacking it, rename files like geshi/div.php and geshi/css.php to something like geshi/divgeshi.php and geshi/cssgeshi.php
Now everything will look fine again. Naturally, if you do want to use the geshi div/css highlighters, you now have to enclose then in <cssgeshi></cssgeschi> instead of <css></css>
[edit] Updates
[edit] 2nd November 2007
By HappyDog
- Removed 'div' from the list of languages, as this ends up parsing any standard HTML <div> tags as code.
- Fixed PHP notice-level error caused by missing quote marks around the $lang paramter in runtime-created function.
[edit] Installation
- Install GeSHi per the GeSHi install instructions (link above)
- Cut & paste the above code to a file called GeSHiHighlight.php
- Put GeSHiHighlight.php in your MediaWiki installations' extensions folder
- Add:
to LocalSettings.php
include("extensions/GeSHiHighlight.php");

