Extension:SyntaxHighlight GeSHi
From MediaWiki.org
The Wikimedia wikis have recently had GeSHi upgraded.
If you edit on a Wikimedia wiki and wonder where your borders went, please see w:en:VP/T and the section below: Problem with CSS / Border.
|
SyntaxHighlight_GeSHi Release status: stable |
|||
|---|---|---|---|
| Implementation | Tag | ||
| Description | Allows source code to be syntax highlighted on the wiki pages. | ||
| Author(s) | Brion Vibber, Tim Starling and Rob Church | ||
| Last Version | rev:50696 (17 May 2009) | ||
| MediaWiki | 1.10.0-1.14.0+ | ||
| License | GPLv2 | ||
| Download | Download snapshot |
||
|
|||
|
check usage (experimental) |
|||
This extension adds the <source> tag to present formatted source code.
As of rev:50696, an alternative tag <syntaxhighlight> is provided. <syntaxhighlight> is recommended to avoid possible conflicts. The original syntax <source> is also used in some other languages, e.g. XML.
Contents |
[edit] Introduction
The <source> tags allow the display of preformatted code modules but in addition they add coloring according to the code language settings. Like the <pre> tags and the <poem> tags, they preserve white space, that is, they depict the code module exactly as it was typed.
[edit] Usage
On the wiki page, you can now use "source" elements:
<source lang="php">
<?php
$v = "string"; // sample initialization
?>
html text
<?
echo $v; // end of php code
?>
</source>
show:
<?php $v = "string"; // sample initialization ?> html text <? echo $v; // end of php code ?>
[edit] Alternative Tag
<source> is also used in some other languages (for example XML). If your source code contains <source>, it will conflict with this tag since there is no way for the interpreter to identify how each is used.
As of rev:50696, an alternative tag <syntaxhighlight> is provided. <syntaxhighlight> is recommended to avoid the conflicts mentioned above.
[edit] Parameters
- lang="??": Defines what programming language the source code is using. This affects how the extension highlights the source code. See the section "Supported languages" in this page for details of supported languages.
- line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS": Type of line numbering to use (default is no line numbering). Corresponds to enable_line_numbers the flag in GeSHi.
- line start="??": Use together with the parameter "line". Define the start number of the line. If you type line start="55", it will start counting at 55, then 56,57,58... and so on. Corresponds to start_line_numbers_at method on GeSHi
- highlight="??": Specifies which line is highlighted. Note that the parameter line start="??" doesn't affect how it counts the lines.
- enclose="??": Specifies what container is used to enclose the source code. Takes values "pre" (default value), "div", "none". Corresponds to set_header_type method on GeSHi.
- strict: Type the name of the parameter to enable the strict mode. Corresponds to enable_strict_mode method on GeSHi.
The effect and usage of these parameters can be consulted in GeSHi's documentation.
Since r22246, you can override the colors using MediaWiki:Geshi.css.
[edit] More Usage
When line numbering is added with line, long code lines will be wrapped. See the example below. When text is the selected language, and numbering is used, the behaviour resembles the use of pre tags with numbering and long-line wrapping.
The following example shows how to color an HTML code listing:
<source lang="html4strict" line start="100" highlight="5"> HTML module goes here... </source>
A typical result is just:
-
<table align=center style="background: ivory;color:maroon;font-style:italic;font-family:arial;font-weight:bold;font-size:10pt;"> -
<tr><th> Heading 1 </th><th> Heading 2 </th></tr>
-
<tr> -
<td style="padding:10px;"> This is cell 1 text </td>
-
<td style="padding:10px;"> This is cell 2 text </td>
-
</tr> -
</table>
[edit] Supported languages
These are the languages known by GeSHi that can be used in the lang parameter.
Note that installed GeSHi version (can be revealed by previewing e.g. <source lang="-"></source>) might not be the most recent version; see bugzilla:10967 for Wikimedia sites.
[edit] Extra features
[edit] Default Source Language
Added in rev:50693.
If the site mainly quote the source code of a specific programming language, it would be helpful to set a default language.
To do so, add a new variable to LocalSettings.php, just before the require_once line. We set C programming language as an example:
$wgSyntaxHighlightDefaultLang = "c"; require_once("extensions/SyntaxHighlight_GeSHi/SyntaxHighlight_GeSHi.php");
[edit] Bugs and Limitations
None so far. You may report bugs by clicking here.
[edit] Showcases
[edit] C#
<source lang="csharp">
// Hello World in Microsoft C# ("C-Sharp").
using System;
class HelloWorld
{
public static int Main(String[] args)
{
Console.WriteLine("Hello, World!");
return 0;
}
}
</source>
Results in:
// Hello World in Microsoft C# ("C-Sharp"). using System; class HelloWorld { public static int Main(String[] args) { Console.WriteLine("Hello, World!"); return 0; } }
[edit] Java
<source lang="java" lines="LINES">
/* This is a regular multi-
* line comment. */
import java.io.*;
/**
* This is a javadoc comment
* @see java.lang.String
*/
public class Main extends Foo
{
@Test
public static void main(final String[] args)
{
// This is a one-line comment
System.out.println("Hello, World!");
int n = 1 + 2;
System.out.println("One plus two is: " + n);
Foo foo = new Foo("foo");
List<Foo> list = new ArrayList<Foo>();
list.add(foo);
}
}
</source>
Results in:
/* This is a regular multi- * line comment. */ import java.io.*; /** * This is a javadoc comment * @see java.lang.String */ public class Main extends Foo { @Test public static void main(final String[] args) { // This is a one-line comment System.out.println("Hello, World!"); int n = 1 + 2; System.out.println("One plus two is: " + n); Foo foo = new Foo("foo"); List<Foo> list = new ArrayList<Foo>(); list.add(foo); } }
[edit] PHP
<source lang="php"> <?php // Hello World in PHP echo 'Hello World!'; ?> </source>
Results in:
<?php // Hello World in PHP echo 'Hello World!'; ?>
[edit] Python
<source lang="python">
# Hello World in Python
def main():
print "Hello World!"
if __name__ == '__main__':
main()
</source>
Results in:
# Hello World in Python def main(): print "Hello World!" if __name__ == '__main__': main()
[edit] Fortran
bugs:
- comments for fortran77 now work.
<source lang="fortran"> C * C *testing this script C * c * comments for fortran77 work! hello = "Hello World!" if hello .eq. 'test' then !do nothing else !do something x = 1 endif </source>
Results in:
C * C *testing this script C * c * comments for fortran77 work! hello = "Hello World!" if hello .eq. 'test' then !do nothing else !do something x = 1 endif
[edit] SQL
<source lang=sql> -- select some data SELECT a, b, COUNT(*) AS c, SUM(d) AS d FROM MyTable WHERE a > b GROUP BY a,b HAVING COUNT(*) > 1 </source>
Results in:
-- select some data SELECT a, b, COUNT(*) AS c, SUM(d) AS d FROM MyTable WHERE a > b GROUP BY a,b HAVING COUNT(*) > 1
[edit] XML
<source lang=xml> <!-- my comment --> <xmlroot> <myelement myattribute="Hello">World</myelement> </xmlroot > </source>
Results in:
<!-- my comment --> <xmlroot> <myelement myattribute="Hello">World</myelement> </xmlroot >
[edit] Installation
[edit] Step 1
Download the 4 extension files from the Subversion repository and save them into the extensions/SyntaxHighlight_GeSHi directory of your wiki. If you have shell access to your server, you may do the following to download the extension:
cd extensions svn co http://svn.wikimedia.org/svnroot/mediawiki/trunk/extensions/SyntaxHighlight_GeSHi
[edit] Step 2: (superfluous)
Step 1 apparently now automatically checks out the 1.0.X stable release of GeSHi, rendering this step superfluous.
(Recommended) Download 1.0.X stable release of Subversion repository in SourceForge.net:
# change to the directory of the SyntaxHighlight_GeSHi extension cd SyntaxHighlight_GeSHi # check out a current version of GeSHi into a directory called geshi svn co http://geshi.svn.sourceforge.net/svnroot/geshi/branches/RELEASE_1_0_X_STABLE/geshi-1.0.X/src/ geshi
The geshi.php file can also be downloaded from GeSHi, and unzip it inside the extensions/SyntaxHighlight_GeSHi directory. (Note: the zip file creates a sub-directory called geshi/, and places the file geshi.php there - Also note that GeSHi 1.1.2alpha3 does not work with this extension!)
(Note: You need both the mediawiki plugin files and the geshi files from sourceforge to make it work!)
[edit] Step 3
Add this line to the end of your LocalSettings.php:
require_once("$IP/extensions/SyntaxHighlight_GeSHi/SyntaxHighlight_GeSHi.php");
[edit] Step 4 (Optional)
If needed, change the following line in SyntaxHighlight_GeSHi.class.php to suit the path of your geshi.php file
require( 'geshi/geshi.php' );
Sometimes you'll need to add the absolute path to geshi (/var/www/html/.../geshi/geshi.php)
Here's a shortcut using the PHP dirname() function with the magic __FILE__ constant:
require(dirname(__FILE__).'/geshi/geshi.php');
[edit] Problem with CSS / Border
If you want the dashed border like for <pre> tags you have to readd them.
[edit] Method 1, CSS
- This method requires r52346 or higher of this extension.
Add to MediaWiki:Monobook.css or MediaWiki:Common.css:
div.mw-geshi {
padding: 1em;
margin:1em 0;
border: 1px dashed #2fab6f;
}
This will give all GeSHi output (except for enclose="none") a dashed border almost identical to <pre> in monobook/main.css
[edit] Method 2,
You can edit the SyntaxHighlight_GeSHi.class.php around line 222. Look for this:
$css[] = "\tline-height: normal; border: 0px none white;";
and change it to:
$css[] = "\tline-height: normal; border: 1px dashed #2f6fab;";
On a Unix-like system simply type this command in the directory containing "SyntaxHighlight_GeSHi.class.php":
sed -i 's/$css\[\] = "\\tline-height: normal; border: 0px none white;";/ <!!!continued... THE LINE ABOVE AND THE LINE BELOW ARE ALL ONE LINE!> $css\[\] = "\\tline-height: normal; border: 1px dashed #2f6fab;";/g' \ SyntaxHighlight_GeSHi.class.php
Link to Extension Talk (2008): Extension_talk:SyntaxHighlight_GeSHi#Problem_with_CSS:_Default_style_for_pre_is_overwritten
- See also rev:52346.
[edit] See also
- GeSHiCodeTag - A working alternative extension that also uses Geshi
- GeSHi - Generic Syntax Highlighter
- ASHighlight (MediaWiki support for Andre Simon's highlight utility)
- Extension:SyntaxHighlight GeSHi extension - An extension to SyntaxHighlight_GeSHi. Enables external file inclusion.
- Extension:Geshi includes every component - no additional downloads
- Extension:Include -- yet another source code syntax highlighter
This extension is being used on one or more of Wikimedia's wikis. It means that the extension is stable and works well enough to be used by such high traffic websites. A full list of the extensions installed on a particular wiki is produced by Special:Version on that wiki.

