ドキュメント

ID: 36 | 作成日: 2011/09/04 [Sun] 22:15:00 | 最終更新: 2011/11/28 [Mon] 16:27:49
FrontPage / ドキュメント
目次

プラグイン・タグ

プラグインについて

"PolyMoNote"は、プラグインを追加することで本体にはないページ本文で実行できる新しい機能を追加することができます。
プラグインは標準で備わっているものの他に、ユーザーで作成したり他者が作成したものを追加することも可能です。

// プラグインの見本
#プラグイン名(引数A)
     または
#プラグイン名(引数A){引数B}

プラグインをテキスト内で利用する場合は、上記のように記述します。
プラグイン名に使える文字は、半角アルファベットの大文字(A~Z)と"_"(アンダーライン)です。

画像を貼り付けられるプラグイン"IMAGE"を使う場合は…

#IMAGE(){http://example.com/sample.jpg}

と、上記のように記述します。
すると、HTMLに変換されたときは、以下のようになります。

<img src="http://example.com/sample.jpg">

プラグインをインストールするディレクトリは、"pn/lib/plugins"になります。
また、ログイン時に表示されるメニューの"プラグイン設定"の項目から設定を変更できるプラグインは、設定用スクリプトを別途"pn/lib/plugins/config"ディレクトリにインストールします。

タグについて

プラグインとは別に、プラグインと同様に記述して利用する組み込み系のタグがあります。

プラグインは"pn/lib/plugins"ディレクトリ内のスクリプトを削除すると利用できなくなりますが、タグはPolyMoNote文法の処理を行うソース内に組み込まれているため、プラグインをすべて削除しても使えなくなることはありません。

プラグイン・タグの引数

引数というのは、簡単に言うとプラグインやタグに渡す値のことです。
そして、PolyMoNoteのプラグイン・タグでは、"( )"と"{ }"の間に引数を記入します。

複数の引数を記述したい場合は、","(カンマ)で区切ります。

// 複数の引数をカンマで区切って記述
#プラグイン名(引数A. 1, 引数A. 2){引数B. 1, 引数B. 2, 引数B. 3}

プラグインやタグの引数に、プラグインやタグを記述することはできません。

// 以下のような記述はNG
#PLUGIN_A(#PLUGIN_B(sample)){#PLUGIN_C(sample)}

つまり、プラグイン内でプラグインを実行…といった書き方は不可となっています。

複数行プラグイン・タグ

プラグインやタグの引数には、複数行の文字列を指定することが可能です。

ただし、以下のような制限があります。

複数行による引数の記述は、以下のようになります。

// ブロック要素
#PLUGIN(引数A){{{
     引数B. 1
     引数B. 2
     引数B. 3
}}}

// インライン要素(<p>タグで囲まれる)
_#PLUGIN(引数A){{{
     引数B. 1
     引数B. 2
     引数B. 3
}}}

通常は、第二引数を"{"で始まり"}"で閉じますが、複数行の引数の場合は"{{{"で始まり"}}}"で閉じます。
カッコは三個、記述してください。

そして、プラグインやタグの開始一行目の先頭はプラグインの記述のみか、プラグインをインライン要素で記述する"_"(アンダーライン)付きでの記述のみで、一行目の行末は"{{{"まで。
二行目以降に引数を記述して、最終行は"}}}"のみにしてください。

インクルード(取り込み)系プラグイン

INCLUDEプラグインDIARYプラグインなど、他のページを取り込んで表示できるプラグインをインクルード系プラグインといいます。

インクルード系プラグインで取り込まれたページにインクルード系プラグインが記述されていた場合、二重三重にページがループして取り込まれるのを防止するために、取り込まれたページのインクルード系プラグインは実行されません。

たとえば、ページ名"ABC"にINCLUDEプラグインでページ名"ABC"の下位ページ("ABC/001"や"ABC/002"など)を取り込んだとします。
そして、ページ名"ABC/001"にもINCLUDEプラグインが記述されていた場合は、ページ名"ABC/001"のINCLUDEプラグインは無効化されます。

ただし、ページ名"ABC/001"を直接開いた場合には、INCLUDEプラグインは通常どおり実行されます。

日記系プラグインのエピソードの扱いについて

日記系のプラグインやコマンドでは、日記が書かれたページ本文内のレベル2の見出しを、その日の日記の1エピソードのタイトルと判断し、そのタイトルから次のタイトルの間の文章をエピソードの内容として扱われます。

**日記 その1
本文、その1

**日記 その2
本文、その2

**日記 その3
本文、その3

上記のように、ページの本文内にレベル2の見出しが3つある場合は、一日分の日記に3つのエピソード(エントリー)があると解釈されます。

そして、DIARYプラグインは新規に追加されたエピソードを本文の上部に追記するため、日記系のプラグインやコマンドは、上に行くほど"その日の日記の新しいエピソード"として解釈しています。

正規表現について

検索やページの取り込みを行うプラグインやコマンドには、検索対象とするページを"正規表現"を利用して指定するものがあります。

正規表現についての詳しい解説については、ネットなどに解説があるのでそちらで調べていただくとして、こちらでは簡単な例を紹介したいと思います。

たとえば、日記のページを"Diary"から始まるページ名で作成しているとします。

日記のみをリストアップしたいと思い、"Diary"から始まるページのみを検索したい場合は以下のように記述します。

^Diary

単純に、"Diary"がページ名に含まれるページをリストアップしたい場合は、以下のようにします。

Diary

続いて、"Sample"というページがあったとして、そのページだけを取り込みたい場合は以下のように記述します。

^Sample$

プラグインやコマンドにはPAGESプラグインのように検索対象をページ名のみとするものと、SEARCHプラグインのようにページ名とページ本文を検索対象にするものがあります。

見出しのID属性・アンカーリンク

見出しのアンカーリンク名(ID属性)は、設定しない場合は以下のような法則で設定されます。

ID.見出しレベル.同じ見出しレベルに、その見出し名が登場して何回目かの数字-1.URLエンコードして"%"を削除して大文字化した見出し名

たとえば、

といった場合、アンカー名は以下のようになります。

// PolyMoNote記法の例
*Headline
*テスト

// 変換されたアンカー名
ID.01.00.HEADLINE
ID.01.00.E38386E382B9E38388

続いて、ページ内で見出しレベル1の"Headline"という見出し名の使用が二回以上の場合は、以下のようになります。

// PolyMoNote記法の例
*Headline
*Headline

// 変換されたアンカー名
ID.01.00.HEADLINE
ID.01.01.HEADLINE

同じレベルで同じ見出しが複数回使われている場合は、ページ本文の上から初登場時が"ID.レベル.00"、二回目が"ID.レベル.01"となります。

別途、アンカー名が設定されている場合は、そちらが優先されます。

// PolyMoNote記法の例
*Headline#Anchor
*Headline
 
// 変換されたアンカー名
Anchor
ID.01.00.HEADLINE

ただし、HTMLで見出し("h"タグ)に同じ名前を使うことは、あまり望ましくないのでご注意ください。
また、プログラム上では制限していませんが、アンカー名に日本語などのマルチバイト文字列を使うことも望ましくありません。

関連する内容

見出しに関連する、その他の解説です。