Extension:SyntaxHighlight

The SyntaxHighlight GeSHi extension allows to display formatted source code with the   tag.

This extension also adds coloring according to the code language settings. Like the  tags and the   tags, the tags shows the coding exactly as it was typed, preserving white space.

This extension also can create line numbers.

Usage
On the wiki page, you can now use "syntaxhighlight" elements:

shows:

Alternative &lt;source&gt; tag
Before 50696, the extension used the tag. This is still supported, but  avoids conflicts if your source code itself contains
 * 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.


 * Show line numbers. Corresponds to the enable_line_numbers flag in GeSHi.
 * Show line numbers. Corresponds to the enable_line_numbers flag in GeSHi.


 * Use this with the parameter  to defines the starting line number of the code block. For example,   will number lines starting at 55. Corresponds to start_line_numbers_at method on GeSHi
 * Use this with the parameter  to defines the starting line number of the code block. For example,   will number lines starting at 55. Corresponds to start_line_numbers_at method on GeSHi


 * Specifies which line is highlighted. Note that the parameter  doesn't affect how it counts the lines. You can specify more lines by separating them with commas (for example,  ).
 * Specifies which line is highlighted. Note that the parameter  doesn't affect how it counts the lines. You can specify more lines by separating them with commas (for example,  ).


 * Specifies what container is used to enclose the source code. Takes values  (default), ,  . Corresponds to set_header_type method on GeSHi.   causes text to wrap, which is helpful if source code is extending off the edge of the window and requires scrolling;   lets you put small code snippets inline.
 * Specifies what container is used to enclose the source code. Takes values  (default), ,  . Corresponds to set_header_type method on GeSHi.   causes text to wrap, which is helpful if source code is extending off the edge of the window and requires scrolling;   lets you put small code snippets inline.


 * Add this parameter to enable strict mode. Corresponds to enable_strict_mode method on GeSHi.
 * Add this parameter to enable 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 by editing MediaWiki:Geshi.css.

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:

A typical result is just:

Supported languages
GeSHi has syntax highlighting for hundreds of computer languages and text file formats (browse its source code). Loading all of these affects performance (T93025), so WMF wikis trim to not support all languages (197449). To see what languages this extension can highlight on a particular wiki,
 * 1) edit source of a wiki page
 * 2) add the "bad" tag
 * 3) preview the page and expand the warning

Below is the full list of languages that GeSHi can highlight. Again, a wiki may drop support for some of these.

Default source language
Added in 50693.

If your site mainly quotes the source code of a particular programming language, you can set a default language. To do so, add a new variable to LocalSettings.php, just after the require_once line. For example, to set the C programming language as the default:

Default links for keywords
To do so, add a new variable to LocalSettings.php, just after the require_once line. We set link to work as an example:

Installation
The MediaWiki extension requires the GeSHi project files from SourceForge to work! To make this easier to install and maintain, the extension in git includes the Geshi project in a subdirectory named.

Notes:
 * GeSHi 1.1.2alpha3 does not work with the MediaWiki extension.
 * You can delete the extensions/SyntaxHighlight_GeSHi/geshi/docs directory to save a few megabytes.

Step 1: downloading
Use a Git tool to clone https://github.com/GeSHi/geshi-1.0 in the extensions directory of your wiki. For example using the Git command-line tool (from within wiki/extensions/):

If you accidentally do this in the wrong directory, you will need to move clone from the current location to wiki/extensions/, like this:

control.

Or you can use the ExtensionDistributor.

Step 2: Installation
Add this line to the end of your LocalSettings.php:


 * GeSHi installation (optional)

If you didn't put GeSHi in the extensions/SyntaxHighlight_GeSHi/geshi directory, then change the following line in SyntaxHighlight_GeSHi.class.php to suit the path of your geshi.php file

Sometimes you will 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:

VisualEditor integration
The plugin enables direct editing with VisualEditor. A popup is opened when a user wants to edit  or   sections. For this to work, VisualEditor must be installed and configured from the latest git version, same for Parsoid. The feature randomly does not work with older Parsoid versions.

Configuration
If you want the dashed border like for    tags you have to add them again.

Method 1: CSS file

 * This method requires r52346 or higher of this extension.

Add to MediaWiki:Geshi.css, MediaWiki:Monobook.css or MediaWiki:Common.css pages:

This will give all GeSHi output (except for enclose="none") a dashed border almost identical to &lt;pre&gt; in monobook/main.css

Method 2: Inline CSS
You can also edit the SyntaxHighlight_GeSHi.class.php around line 215 (Line 264 in SVN trunk 82481). Look for this:

and change it to:

On a Unix-like system simply type this command in the directory containing "SyntaxHighlight_GeSHi.class.php":

Link to Extension Talk (2008): Extension talk:SyntaxHighlight GeSHi/Archive 2008
 * See also 52346.


 * If you already add the extension to LocalSettings.php before changing this, comment it out via "#" and refresh the page, then remove the # and refresh one more time.

Default DIV-based rendering
Long strings will cause the page width to blow up when rendered on a web page. The solution to this is to use the enclose="div" tag, this can be enabled by default by editing SyntaxHighlight_GeSHi.class.php near line 156. Look for the following:

and append an else case to the if statement: