06 December 2007

MediaWikiのエクステンション、SyntaxHighlight_GeSHiの導入

GeSHiとは

GeSHiとはシンタックスハイライト(ソースコードに色付けして、見やすくしてくれる機能。はてなダイアリーのスーパーpre記法みたいなの)機能を提供してくれる、phpのライブラリです。約70種類の言語に対応しています。GeSHiとはGeneric Syntax Highlighterの略です。


SyntaxHighlight_GeSHi

GeSHiをつかってシンタックスハイライトを行うMediaWikiのエクステンションです。


導入方法

僕の場合、MediaWikiをland.toというレンタルサーバで運用しているため、以下はその前提で話を進めています。


SyntaxHighlight_GeSHiのダウンロード

Subversionリポジトリからダウンロードし、extensions/SyntaxHighlight_GeSHiに保存します。ただ単純に上記のリンクからSyntaxHighlight_GeSHi.php、SyntaxHighlight_GeSHi.i18n.php、SyntaxHighlight_GeSHi.class.phpの3つのファイルをダウンロードし、SyntaxHighlight_GeSHiというディレクトリに保存して、サーバーのextensions下に設置するという方法でも大丈夫です。


GeSHiのダウンロード

GeSHiの公式サイトから最新版をダウンロードし解凍します。展開されたgeshiディレクトリの中身はgeshi.php、geshi、docs、contribです。geshiディレクトリには各言語用のファイル。docsには公式にあるものと同じドキュメント。contribにはサンプルやユーティリティプログラムが入っています。例えばcontribのcssgen.phpは、GeSHi用のオリジナルのcssを作るプログラムみたいです。

これらをextensions/SyntaxHighlight_GeSHiにアップロードします。こんな構成になると思います。

extensions
└/SyntaxHighlight_GeSHi
  ├SyntaxHighlight_GeSHi.php
  ├SyntaxHighlight_GeSHi.i18n.php
  ├SyntaxHighlight_GeSHi.class.php
  └/geshi
    ├geshi.php
    ├/geshi
    ├/docs
    └/contrib

LocalSetting.phpの変更

以下の一文を追加します。

require_once("extensions/SyntaxHighlight_GeSHi/SyntaxHighlight_GeSHi.php");


サーバのシェルの実行権限がある場合

サーバのシェルの実行権限がある場合は話が早いと思います。次のようなコマンドを入力して、

cd extensions
svn co http://svn.wikimedia.org/svnroot/mediawiki/trunk/extensions/SyntaxHighlight_GeSHi SyntaxHighlight_GeSHi
cd SyntaxHighlight_GeSHi
svn co http://geshi.svn.sourceforge.net/svnroot/geshi/trunk/geshi-1.0.X/src/ geshi

あとはLocalSetting.phpを書き換えればインストールできると思います。試してないので、出来ないかもしれませんけど。


使い方

タグをつかいます。langに設定できる言語は、ここの一覧を参照してください。

<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>

パラメーター

langの他、いくつか設定できるパラメーターがあります。


lang

言語を設定します。


line

Geshiのenable_line_numbersメソッドに対応します。行番号を振るかどうかをきめるパラメーターです。enable_line_numbersはGESHI_NORMAL_LINE_NUMBERS、GESHI_FANCY_LINE_NUMBERS、GESHI_NO_LINE_NUMBERSという3種類の引数をとり、GESHI_FANCY_LINE_NUMBERSが設定された場合は、強調する行番号を設定できます(例えば10行ごとに行番号を太字にするなど)。しかしこのエクステンションでは、このlineパラメーターに文字でも数字でも何でもいいんで設定しておくと、GESHI_FANCY_LINE_NUMBERSが設定される仕様になっていました。というわけで、lineに何か文字か数字などを渡せば、5行ごとに強調された行番号が表示され、lineを設定しなければ行番号は表示されないということになっています。

<source lang="php" line="なんでもよい">
 ソースコード
source>

start

GeSHiのstart_line_numbers_atメソッドに対応します。行番号が何番から始まるかを指定します。数字を渡してあげれば大丈夫です。負数を渡してはいけません。


enclose

Geshiのset_header_typeメソッドに対応します。これはsourceタグ内のコードをpreタグで囲うかdivタグで囲うかを設定するパラメータです。デフォルトではpreタグを使う設定になっており、encloseにdivを渡すとdivタグで囲う設定に出来ます。また上記のlineで行番号を表示させた場合、強制的にdivタグを使用します。これはxhtmlをvalidに保つためです。なおMediaWikiのデフォルトのスキンの場合、divタグを使う設定にすると、コードの周りを囲う点線と灰色の背景が表示されなくなります。

<source lang="c" enclose="div">
 ソースコード
source>

strict

GeSHiの enable_strict_modeメソッドに対応します。コードの色づけをstrict(厳密)に行うかどうかを設定します。例えばphpで次のようなコードの場合、


普通だとこんな風に表示されます。

f:id:cou929_la:20071205184550j:image

imgタグのsrcの中のコードが真っ赤になっています。

strictをfalseに設定すると、

f:id:cou929_la:20071205184618j:image

ダブルクオートの中のコードも外側と同じように色づけされます。



参考サイト