Wikiは決まった作法で文章を書くとHTMLに変換してくれ、HTML言語を知らなくてもWeb上に装飾した文章で表現することができます。
最近は、Wikiエンジンを搭載したツールも多かったりしますが、そういったものを使ったときには使い方が固定されるところもあるので、自分の考えていた用途で使えないという場合もあります。
例えば、Wikipediaで使われているMediaWikiを使うと、Wikipedia同等のものを導入することができますが、あそこまで大規模な文章管理の仕組みは必要なかったり、ユーザー管理が弱かったりもしますので社内で使いづらい、なんて場合もあります。
PEARのText_WikiはそのWikiエンジンの部分だけを提供してくれますので、オリジナルのシステムに導入することができ、色んな用途で使うことも可能になります。
Text_Wikiを導入する
これは、一般的なPEARパッケージのインストールと同様なのであまり詳しく書きません。
ネットワークやチャンネルの設定が終っていれば、
$ pear install Text_Wiki
でいけるかもしれません。
Text_Wikiを使ってみる
基本的な使い方であれば、下記のように書くことでWiki文法の文章をHTMLに変換してくれます。
<?php require_once "Text/Wiki.php"; $wiki = new Text_Wiki(); // Wiki文法で書かれた文章をXhtmlに変換する $wiki->setFormatConf('Xhtml', 'translate', HTML_SPECIALCHARS); // Wiki文法で書いた文章 $text = "これは、**''Text_Wiki''**で書かれたものです。"; // 変換 echo $wiki->transform($text, 'xhtml'); ?>
$ php wiki.php <p>これは、<strong><i>Text_Wiki</i></strong>で書かれたものです。</p>
wiki.php内の$textに代入している文章の中にWiki文法が使われています。
「** XXXX **」のフォーマットで書くと強調表示(<strong>タグ)に、「'' XXXX ''」のフォーマットで書くと斜体(<i>タグ)に変換されます。
setFormatConf()では、Wiki文法をXhtmlに変換するように設定するものです。
Text_WikiのWiki文法は、WikkiTikkiTavi とcoWiki の文法を組み合わせているようです。
使えるWiki文法の詳細は、マニュアルページ に書かれています。
Wiki文法をカスタマイズする
オリジナルのWikiエンジンを作るということなので、その文法を改変するということもできます。
まずは、既定のルールを無効にしています。
先ほどの、wiki.phpのサンプル内で使われていた斜体にするWiki文法(''で囲む)を無効にしてみます。
// 斜体のWiki文法を削除 $wiki->deleterule('italic'); // Wiki文法で書いた文章 $text="これは、**''Text_Wiki''**で書かれたものです。";
$ php wiki.php <p>これは、<strong>''Text_Wiki''</strong>で書かれたものです。</p>
斜体のWiki文法が無効になっていますね。
予め定義されているルールは、マニュアルのページのルールの一覧
に書かれています。
次に、Wiki文法をオリジナルの書き方に変更してみます。
デフォルトで、強調表示するWiki文法である「** XXXX **」という書き方を、「@@@ XXXX @@@」という表現に変えてみます。
まず、Text_Wikiの各種パーサがまとめられたディレクトリ内に、オリジナルのWiki文法用のものを定義します。
$ cd /path/to/pear/Text/Wiki/Parse/Default $ ls Anchor.php Delimiter.php Image.php Prefilter.php Tighten.php Blockquote.php Embed.php Include.php Raw.php Toc.php Bold.php Emphasis.php Interwiki.php Revise.php Tt.php Break.php Freelink.php Italic.php Smiley.php Underline.php Center.php Function.php List.php Strong.php Url.php Code.php Heading.php Newline.php Subscript.php Wikilink.php Colortext.php Horiz.php Paragraph.php Superscript.php Deflist.php Html.php Phplookup.php Table.php
この中には、Wiki文法1つにつき、1ファイルが置かれています。
テンプレとして使えるので、ここではまず元々あるStrong.phpをコピーしてCustomstrong.phpファイルを作ります。
次に、ファイルを開いてClass名を命名規則に沿って「Text_Wiki_Parse_Customstrong」に変更した後、Wiki文法のフォーマットを作ります。
var $regex = "/@@@(.*?)@@@/";
次に、HTML構文に変換する役割を持つファイルを作ります。
これは、先ほどのディレクトリとは異なる場所に定義されています。
$ cd /path/to/pear/Text/Wiki/Render/Xhtml
この中には、先ほどのParseディレクトリ内のファイルと1対1の関係でファイルが置かれています。
なので、同様にStrong.phpファイルをコピーしてCustomstrong.phpとし、Class名を「Text_Wiki_Render_Xhtml_Customstrong」としておきましょう。
これで準備が整ったので、先ほどのwiki.phpを使って動作確認をしてみましょう。
新しいルールを適用するに当たって、insertRule()という関数を使って、先ほどのルールを使用できるようにしています。
$wiki->insertRule('Customstrong'); // Wiki文法で書いた文章 $text="これは、@@@Text_Wiki@@@で書かれたものです。";
$ php wiki.php <p>これは、<strong>Text_Wiki</strong>で書かれたものです。</p>
ちなみに、このままだと元々の強調表現である「** XXXX **」という文法も使えるため、下記のように書いてルールを置き換えてしまうこともできます。
$wiki->changeRule('Strong', 'Customstrong'); // Wiki文法で書いた文章 $text="これは、@@@Text_Wiki@@@で**書かれた**ものです。";
$ php wiki.php <p>これは、<strong>Text_Wiki</strong>で**書かれた**ものです。</p>
その他にもHTMLタグに変換した際にCSSを適用させることもできます。
$conf = array( 'css_table' => 'my_table_class', 'css_tr' => 'my_tr_class', 'css_td' => 'my_td_class' ); $wiki->setRenderConf('Xhtml', 'Table', $conf); $text="|| テーブル ||";
$ php wiki.php <table class="my_table_class"> <tr class="my_tr_class"> <td class="my_td_class">テーブル</td> </tr> </table>
Text_Wikiを使って色々な形式にカスタマイズし、オリジナルのWikiエンジンを作り出したり、既存のWikiエンジンの文法を取り入れることも可能です。
既存のWikiエンジンの文法を取り入れたい場合、カスタマイズするよりText_Wikiをベースに作られたText_Wiki_Mediawiki (MediaWikiの文法を取り入れたもの)もあるようなので、そっちを使ってみるのも良いかもしれません。
関連記事
[PHP] 余計なHTMLタグや属性を消してくれるHTML Purifier
[PHP] pChartの使い方 - 棒グラフとレーダーチャートを描いてみる
[PEAR] Text_Wiki_Mediawikiを使ってみる
自分だけのオリジナルWikipediaを作ろう! - MediaWikiインストール -
MediaWiki1.10.0リリース と 1.9.3からのバージョンアップ
ノンプログラミングでも利用可能!PHPで多様なグラフを作れるpChart