ページの作成や編集にはユーザ登録が必要です。
ソースのフィルタリング
- 投稿者: まかまか
- カテゴリ: 新規
- 優先度: 低
- 状態: 提案
- 日時: 2004年03月05日 14時37分14秒
内容
ページ全体に対して何らかの処理を行なうためのプラグインです。このモジュールはWiki::process_wiki()を上書し、HTMLに変換される直前のWIKIフォーマットデータを自由に操作します。
ファイル
- バージョン3.5.3以降でも動くように修正しました
- テーブルに対するパースの不具合を修正しました
sourcefilter-005.tar.gz(431) 0.05
ファイルの構成(ベースクラス)
plugin::sourcefilter::Filter
フィルタリング処理のベースクラスです。あなたのモジュールでこのクラスを継承し、filter()メソッドを設定してください。継承したモジュールをYourPlugin::YourClassとすると、YourPlugin::Install.pm内で
$wiki->add_hook('initialize','YourPlugin::YourClass') $wiki->add_hook('finalize', 'YourPlugin::YourClass')
を呼び出してください。
plugin::sourcefilter::Parser
フィルタリング処理の際に、WIKIフォーマットデータをパースする必要があるかもしれません。このモジュールはWiki::Parserを継承し、処理を手助けします。このモジュール自体は何もしないに等しいので、やはりあなたのクラスで継承してください。
plugin::sourcefilter::Parserのメソッド
_init
ここで初期化処理を行なってください
get_filtered_source
フィルタリングされた結果を返します。フィルタリングされた文字列は$self->{_source}に格納されています。
end_parse
plugin::sourcefilter::Parserで定義されているend_parseメソッドは、パーサオブジェクトを返します(メソッドを連結させられるため)。
filter()メソッド内で
$filterd = plugin::Your::Parser ->new($wiki) ->parse($source) ->get_filtered_source;
などのように使います。具体的な使い方はexampleにあるnoopプラグインとnekoプラグインのFilter.pm、Parser.pmをご覧ください。
examplディレクトリにあるサンプルプラグイン
'noop'
このプラグインは単にsourcefilter::Parser.pmを継承しているだけなので、フィルタリングを行ないますが、その結果は何も変更を加えなかったときと同じデータになります。仕組みを知るのに役立てたり、自分のモジュールを作る際の雛型にしてください。
'neko'
このプラグインは「。」「!」「?」の前に「にゃ」を加えます。Parser.pmで「ただのテキスト」とアンカーリンクの「名前」の部分に対してのみ変換を行なっています(装飾文字やWikiページへのアンカーに対しては変更を加えません)。
使い方
sourcefilterプラグインと、nekoプラグインをwikiのpluginディレクトリにコピーします。管理画面からnekoプラグインをチェックします。正しく動作していれば、ソースフィルタされて「。」「!」「?」に「にゃ」が加えられるはずです(それらの文字がないページはもちろん変わりません)。
設定ファイルについて
'config.dat'にdefault_source_filterという項目を設定すると、デフォルトでフィルタリングを有効にするか無効にするか設定できます。default_source_filterを設定しない場合はデフォルトで有効になります。
例:default_source_filter=on|off (1|0)
ページソースの先頭行に
{{filter on|off}}
を挿入することで、そのページでフィルタリングを行なうかどうかを選択できます。on (1) ならフィルタリングが有効に、off (0) なら無効になります。この設定は、default_source_filterより優先されます。
実際例
注意
複数のフィルタリングプラグインを管理画面で選択してインストールすると、最後にインストールされたもの(Ascii順)が有効になります。フィルタリングプラグインは一つだけ選択するようにしてください。
FSWikiのバージョンが3.5.2で、かつ、mod_perl環境で利用する場合、必ずInstall.pmで'finalize'フックを登録するのと、wiki.cgiの出力処理の前後で
$wiki->do_hook("finalize");
という一文を追加してください。書き換えたメソッドを元に戻すために必要です。
最終更新時間:2004年05月16日 14時42分26秒