概要

PyukiWiki ではプラグインに対応しています。
PukiWikiのプラグインにある程度準拠していますが*1、 多くの変更点・拡張された点があります。

標準プラグインについて

以下のディレクトリ・拡張子で保存します。
  • ディレクトリ:./plugin
  • 拡張子: .inc.pl

convert メソッド

ページ内で、行の先頭から以下の様に記述すると、PyukiWikiはパラメータを判断し、プラグインを実行します。
#プラグイン名
#プラグイン名(arg1,arg2...)
のようにして実行します。

この場合のプラグインは

sub plugin_プラグイン名_convert {
}
と記載します。

inline メソッド

ページ内で、以下のような文字列が文中に記述すると、PyukiWikiはパラメータを判断し、プラグインを実行します。
&プラグイン名
&プラグイン名(arg1,arg2);
&プラグイン名(arg1,arg2...) { argn };

引数は、(){}指定の区別なく、,(カンマ)区切りの単一の文字列として、@_ に渡されますので、関数側で分割する必要があります。

&plugin(arg1,arg2,arg3){arg4};
文字列 "arg1,arg2,arg3,arg4" として渡される。

容易に記述するには、下記の方法が便利です。

sub plugin_プラグイン名_convert
{
  my ($args) = @_;
  my @args = split(/,/, $args);

ページ内に記述されたプラグインは、その戻り値の文字列(HTML)に置き換えられ、そのままページ内に表示されます。

actionメソッド

アドレス指定時に
wiki.cgi?cmd=プラグイン名&パラメータ1=値1...
の様に指定することによって、プラグインディレクトリ/プラグイン名.inc.pl 内の plugin_プラグイン名_action が呼びだされます。
sub plugin_プラグイン名_action
{

パラメータに指定された値は、 $::form{パラメータ1} で参照することが出来ます。
プラグインの戻り値として

('msg'=>ページ名, 'body'=>ボディ)
を返すことにより、その内容を表示することができます。

また、exit によりページの表示を抑制することもできます。
※この場合は、必ず exit の前に &close_db; を呼び出してください。

       :
    &close_db;
    exit;
}

return値は、下記の内容を含めることができます。

'msg'=>"string"
ページ名 タブ区切りでいくつかの文字を返すことができます。
ページ名 \t メッセージ \t エラーメッセージ
タブ区切りによる複数メッセージ返値機能は0.1.6にて機能各著されました。
'body'=>"htmlstring"
本文です。wikiテキストの場合は、前もって &text_to_html 関数で変換しておく必要があります。
'header'=>"htmlstring"
<head>〜</head>内に記述できるHTMLタグです。スタイルシートやJavaScriptの読み込みに便利です。0.1.6で追加されました。
'http_header'->"HTTPヘッダ\n"
Content-type: text/htmlの直後に出す文字列です。必ず改行を1度だけ行なってください。空文字列の場合、サーバー異常ステータスが返されることがあります。0.1.6で追加されました。
'ispage'->1
プラグイン自身がページを操作している物であることを自己申告します。0.1.6で追加されました。

プラグインのリソース

プラグインを呼び出す際に、自動的にリソースを読み込みます。

以下のディレクトリ・拡張子で保存します。

  • ディレクトリ:./resource
  • 拡張子: .txt

リソース動的読み込み機能は、0.1.6で追加されました。

強制読み込みプラグイン(0.1.6実装)

PyukiWikiを読み込みと同時にユーザーがどのような操作をしても必ず読み込まれる特殊なプラグインです。

以下のディレクトリ・拡張子で保存します。

  • ディレクトリ:./lib
  • 拡張子:.inc.cgi

通常、配布時には、.inc.plの状態ですが、動作させる時には、.inc.cgiにリネームをします。

initメソッド

プラグインを初期化します。
PyukiWikiから自動的に読み込まれます。
リターン値は、actionと同等の予定

標準関数ハック

PyukiWikiの標準関数の代替関数を定義できます

なお、強制読み込みプラグインも、action、inline、convert メソッドを持つことができますが、別途 ./plugin/*.inc.pl に呼び出し用のプラグインを設置する必要があります。

sub plugin_explugin_init {
	return(
		'msg'=>'',
		'body'=>'',
		'header'=>'<!--explugin-->',
		'http_header'=>'X-Powered: PyukiWiki EXplugin\n',
		'init'=>1
	);
}

# encode関数をハックする
#sub encode {
#	my ($encoded) = @_;
#	$encoded =~ s/(.)/unpack('H2', $1)/eg;
#	return $encoded;
#}

1;

リファレンス

主な関数の説明

プラグインの中では、いくつかの関数がそのまま使用できます。
&text_to_html
wikiテキストからHTMLに変換します。
&do_write
ページに書き込みします。この直後は必ず
&close_db;
exit;
でプログラム制御をして下さい。
&htmlspecialchars
HTMLをエスケープする
&javascriptspecialchars
JavaScript文字列をエスケープする
&dbmname
内部のファイル名形式(16進)に変換する
&undbmname
内部のファイル名形式からWikiページ名等に変換する
&encode
URIエンコードをする
&make_link
ブラケットリンク等を処理する
&authadminpassword
管理者パスワードの認証をする
&code_convert
charsetを変換する
&load_module
perlモジュールをロードする

主な変数の説明

プラグインの中では、いくつかの変数がそのまま使用できます。
$::ascript
スクリプト名
$::form{変数}
POST または GETメソッドによるHTTPからの引数
$::form{cmd}
コマンド名称
$::form{mypage}
ページ名
$::database{ページ名}
ページのソース
$::resource{リソース名}
リソースの内容
$::HTTP_HEADER
HTTPヘッダー
$::IN_HEAD
<head>〜</head>に入れるべきHTMLタグ

プラグインの雛形


*1 言語の差はありますが

このサーバーは、CloudCore VPS 新プランのFreeBSDで、virtioで動作しています。

Sitemap