plugins:variablegen

差分

この文書の現在のバージョンと選択したバージョンの差分を表示します。

この比較画面にリンクする

plugins:variablegen [2011/03/23 21:28] (現在)
ライン 1: ライン 1:
 +====== NP_VariableGen.php ======
  
 +NP_VariableGenは[[skins:​vars|Nucleus変数]]の[[skins:​vars:​if|<​%if%>​]]のために用意されたプラグインです。
 +
 +[[plugins:​variablegetoption|NP_VariableGetOption]],​ [[plugins:​advancedvariablegetoption|NP_AdvancedVariableGetOption]]の後継に当たる(予定の)プラグインです。
 +
 +:!: **このプラグインには不具合が潜在している可能性があります** :!:
 +
 +:!: **このプラグインは十分なテストが行われていません。** :!:
 +
 +^General Plugin info ^^
 +^作者|[[plugins:​authors:​nkjg|NKJG]]|
 +^最新のバージョン|0.1.1|
 +^入手先|[[http://​niku.suku.name/​item/​524]]|
 +^セキュリティチェック|未了|
 +
 +
 +===== NP_AdvancedVariableGetOptionとの相違点 =====
 +
 +  * Nucleus 3.3から追加された機能、doIfとdoItemVarに対応しました。
 +  * プラグインが自動でセットする変数が分離されました。
 +  * 変数にスタック機能が付加されました
 +
 +その他、細部も異なります。
 +
 +===== インストール方法 =====
 +  - zipファイルを展開して、中身をサーバーのプラグインディレクトリにアップロードする
 +  - 管理画面からプラグインをインストールする
 +
 +===== このプラグインの使い方 =====
 +
 +このプラグインは内部に変数情報を持ち、それを管理します。表示以外には影響を及ぼしません。
 +
 +変数は名前である"​キー"​と、その値で構成されています。変数は表示されておるページでのみ有効で、それを持ち越すことはできません。
 +
 +このプラグインでできることはおおきく分けて以下のとおりです。
 +
 +  * 変数のセット・操作
 +  * 内部の変数を使った擬似的なIf構文
 +  * Nucleusのスキン変数[[skins:​vars:​if|<​%if%>​]]から使用することで内部の変数を使った分岐の実現
 +
 +これらについてはスキン・テンプレート・アイテムへの記述で記述します。
 +
 +===== スキン・テンプレート・アイテムへの記述 =====
 +
 +==== 構成要素 ====
 +
 +このプラグインのパラメータは、以下の要素で構成されます。
 +
 +  * アクション
 +  * アクションの引数
 +
 +アクションは動作の内容です。変数を新たにセットする**"​set"​**、擬似if文を実現する**"​if"​**などが含まれます。
 +
 +アクションはそれぞれ引数を取ります(引数を必要としないものもあります)。引数は以下のいずれかの形です。
 +
 +  * 0個以上のプレフィックス + 値または特殊な値
 +  * 特殊な判断条件
 +
 +値は文字列で、文字列そのものを表します。
 +
 +特殊な値とは、プラグインで提供されるもので、対応する文字列に置き換えられます。特殊な値を使用する際はその前に"​!"​を付けて指定します。
 +
 +  例) "​!url"​は、表示しているURLに置き換えられます。
 +
 +プレフィックスは、値の前に付けることで、値を変化させることができます。プレフィックスの後には":"​を付けます。
 +
 +  例) "​int:​100yen"​は文字列"​100yen"​を整数としてみなし、結果として"​100"​が使用されます。
 +
 +プレフィックスが複数指定されている場合、それらはあとに付けられたもの(右にあるもの)から順に処理されます。
 +
 +  例) "​random:​int:​100yen"​は、まず"​100yen"​を整数としてみなし、その結果の100を用いて、1から100までの乱数を返します。
 +
 +特殊な分岐条件はIf構文、擬似If構文でのみ有効な引数です。先頭に"?"​を付けて記述します。
 +
 +==== 通常の記述 ====
 +
 +変数のセット・操作/​擬似If構文を使用する場合、記述は以下のような体裁になります。
 +
 +  <​%VariableGen(アクション,​ 引数1, 引数2)%>​
 +  <​%Plugin(VariableGen,​ アクション,​ 引数1, 引数2)%>​
 +
 +実行される内容はアクションによって異なります。
 +
 +==== If文での記述 ====
 +
 +Nucleusで実装されているIf構文で使用する際は、引数のみの指定になります。
 +
 +=== 引数が1つの場合 ===
 +
 +  <​%If(VariableGen,​ 引数)%>​
 +
 +引数を1つ指定した場合、その引数が真とみなされる場合、条件式も真になります。
 +
 +== 引数の真偽値 ==
 +
 +引数は以下の条件をすべて満たす場合、真とみなされます。
 +
 +  * PHPで偽とみなされる値でない
 +  * 文字列"​no"​でない
 +
 +=== 引数が2つの場合 ===
 +
 +  <​%If(VariableGen,​ 引数1, 引数2)%>​
 +
 +引数が2つ指定されている場合、以下の条件のいずれかを満たすとき、条件式が真になります。
 +
 +  * 片方の引数に特殊な判断条件が指定されていて、もう片方の引数がそれを満たす
 +  * 両方の引数の値が等しい
 +  * 両方とも引数の値が偽とみなされる
 +  * 片方の引数の値が"​yes"​で、もう片方の引数の値が真とみなされる
 +
 +=== hasPluginを使用するIf文 ===
 +
 +  <​%If(hasPlugin,​ VariableGen,​ 引数)%>​ // ... A
 +  <​%If(hasPlugin,​ VariableGen,​ 引数=値)%>​ // ... B
 +
 +NucleusではhasPluginを用いてIf文を書くことができます。
 +
 +値を指定せずに記述した場合(A)、引数の値を変数の名前とみなし、対応する変数の値が真であれば条件式も真になります。
 +
 +値を指定して記述した場合(B)、引数の値を変数の名前とみなし、対応する変数の値が指定された値と等しければ条件式が真になります。
 +
 +Nucleus 3.24以前の場合、If文はhasPluginを用いたもののみが使用できます。
 +
 +==== アクション ====
 +
 +=== 基本的な操作 ===
 +
 +== アクション : set ==
 +
 +アクションにsetを指定した場合、引数1の値をキーとし、引数2の値をそのキーに対応した値として保存します。
 +
 +  <​%VariableGen(set,​ foo, bar)%> // 変数fooにbarという値が代入される。
 +  <​%VariableGen(set,​ foo, baz)%> // 変数fooにbazという値が代入される。
 +  // この段階で変数fooの値はbaz。
 +
 +== アクション : add ==
 +
 +アクションにaddを指定した場合、引数1の値で指定された変数に、引数2の値を追記します。
 +
 +  <​%VariableGen(set,​ foo, bar)%> // 変数fooにbarという値が代入される。
 +  <​%VariableGen(add,​ foo, baz)%> // 変数fooにbazという値を追記する。
 +  // この段階で変数fooの値はbarbaz。
 +
 +引数1の値で指定された変数が存在しない場合、このアクションの動作はsetと同じです。
 +
 +=== スタック的な操作 ===
 +
 +以下の2つの操作は、変数を配列として扱います。
 +
 +== アクション : push ==
 +
 +アクションにaddを指定した場合、引数1の値で指定された変数を配列とみなし、引数2の値をpushします。
 +
 +  <​%VariableGen(set,​ foo, bar)%> // 変数fooにbarという値が代入される。
 +  <​%VariableGen(push,​ foo, baz)%> // 変数fooにbazという値をpushする。
 +  // この段階で変数fooの値は配列で、最初の値はbar,​ 2番目の値はbazです。
 +
 +引数1の値で指定された変数が存在しない場合、このアクションの動作はsetと同じです。
 +
 +== アクション : unshift ==
 +
 +アクションにaddを指定した場合、引数1の値で指定された変数を配列とみなし、引数2の値をunshiftします。
 +
 +  <​%VariableGen(set,​ foo, bar)%> // 変数fooにbarという値が代入される。
 +  <​%VariableGen(unshift,​ foo, baz)%> // 変数fooにbazという値をunshiftする。
 +  // この段階で変数fooの値は配列で、最初の値はbaz,​ 2番目の値はbarです。
 +
 +引数1の値で指定された変数が存在しない場合、このアクションの動作はsetと同じです。
 +
 +=== 範囲を指定して操作する ===
 +
 +以上の操作、つまり
 +
 +  * set
 +  * add
 +  * push
 +  * unshift
 +
 +は範囲を指定して実行することができます。
 +
 +各アクション名の後に":​start"​をつけたものが範囲の開始地点に、":​end"​をつけたものが範囲の終了地点になります。
 +
 +以下に例を示します。
 +
 +  <​%VariableGen(set:​start,​ foo)%>​bar<​%VariableGen(set:​end)%>​
 +  // この段階で変数fooの中身はbarです。
 +
 +これを用いて、任意のNucleus変数を用いた操作が可能です。
 +
 +  <​%VariableGen(set:​start,​ foo)%><​%itemtitle(xml)%><​%VariableGen(set:​end)%>​
 +
 +=== 数学的な操作 ===
 +
 +アクションmath:​plusは、引数1の値で指定された変数の値を整数とみなし、引数2の値を整数とみなして加算します。
 +
 +  <​%VariableGetOption(set,​ foo, 4100)%>
 +  <​%VariableGetOption(math:​plus,​ foo, 26)%>
 +  // この段階でfooの値は4126です。
 +
 +同様に、math:​subは減算、math:​multipleは乗算、math:​divideは除算を行います。
 +
 +すべての計算結果は整数で返されます。
 +
 +=== その他の操作 ===
 +
 +== アクション : unset ==
 +
 +アクションunsetは引数1の値で指定された変数を削除します。
 +
 +  <​%VariableGen(set,​ foo, bar)%>
 +  <​%VariableGen(unset,​ foo)%>
 +  // この段階で変数fooは存在しない
 +
 +== アクション : invert ==
 +
 +アクションinvertは引数1の値で指定された変数の値を逆転させます。
 +
 +変数の値はPHP上で偽とみなされるとき、および'​no'​であるときに偽とみなされ、それ以外で真とみなされます。
 +
 +アクションinvertは変数の値が偽であるときに、新たに'​yes'​を代入し、それ以外のときに'​no'​を代入します。
 +
 +  <​%VariableGen(set,​ foo, bar)%>
 +  // この段階で変数fooの値はbarであり、真とみなされる
 +  <​%VariableGen(invert,​ foo)%>
 +  // この段階で変数fooの値のnoであり、偽とみなされる
 +
 +== アクション : output == 
 +
 +アクションoutputは引数1の値を出力します。**引数1で指定された変数の値でないことに注意してください。**
 +
 +  <​%VariableGen(output,​ foo)%>
 +  // 出力結果はfooです。
 +
 +==== 擬似的なIf構文 ====
 +
 +NP_VariableGenは擬似的なIf構文をサポートしています。
 +
 +コアで実装されているIf構文とはいくつかの大きな違いがあります。
 +
 +=== 実行の有無 ===
 +
 +Nucleusのコアで実装されているIf構文は、条件式の結果が偽だった場合、対応する範囲のNucleus変数はパースされることなくスキップされます。
 +
 +  <​%If(偽である文)%>​
 +  <!-- この部分は実行すらされない -->
 +  <​%endif%>​
 +
 +NP_VariableGenで実装されている擬似If構文は、条件式の結果に依らず、常に実行されます。
 +
 +  <​%VariableGen(if,​ foo, bar)%><​!-- この式の値は偽 -->
 +  <!-- この部分は実行されているが表示されない -->
 +  <​%VariableGen(endif)%>​
 +
 +=== 式の判定のタイミング ===
 +
 +NP_VariableGenの擬似If構文は、対応する範囲の終了時に条件式の判定を行っています。
 +
 +  <​%VariableGen(set,​ foo, bar)%>
 +  <!-- この段階で変数fooの値はbar -->
 +  <​%VariableGen(if,​ var:foo, baz)%>
 +    <!-- 条件式『変数fooの値がbazと等しければ真』 -->
 +    <!-- この段階では条件式は偽だが…… -->
 +    <​%VariableGen(set,​ foo, baz)%>
 +    <!-- ここで変数fooにbazを代入 -->
 +  <​%VariableGen(endif)%>​
 +  <!-- 判定のタイミングはここ -->
 +  <!-- このときfooの値はbazであり、条件式の結果が真になるので、囲まれた範囲が表示される -->
 +
 +=== 使用可能な場所 ===
 +
 +Nucleus 3.3現在、スキン変数の<​%if%>​はスキンでのみ使用可能ですが、擬似if構文は、スキン、テンプレート、コメント・テンプレート、アイテム中で有効です。
 +
 +==== 擬似If構文関連のアクション ====
 +
 +以下のアクションが実装されています。
 +
 +  * if
 +  * ifnot
 +  * else
 +  * elseif
 +  * elseifnot
 +  * endif
 +
 +==== 特殊な判断条件 ====
 +
 +特殊な判断条件は、If文、擬似If文で使用できます。先頭に"?"​をつけて表現します。
 +
 +=== withlink ===
 +
 +withlinkは、判断対象にHTMLのA要素が含まれる場合に真になります。
 +
 +  <​%VariableGen(set:​start,​ html)%>
 +    <a href="​http://​google.com">​Google</​a>​
 +  <​%VariableGen(set:​end)%>​
 +  <​%If(VariableGen,​ var:html, ?​withlink)%>​
 +    // この条件文は真
 +  <​%EndIf%>​
 +
 +=== preg ===
 +
 +pregは正規表現での判定を行います。
 +
 +?​pregの後に続けて正規表現を記述します。
 +
 +  <​%VariableGen(set:​start,​ html)%>
 +    <a href="​http://​google.com">​Google</​a>​
 +  <​%VariableGen(set:​end)%>​
 +  <​%If(VariableGen,​ var:html, ?​preg/​google/​i)%>​
 +    // この条件文は真
 +  <​%EndIf%>​
 +
 +=== over ===
 +
 +overは、判断対象を整数値とみなし、その値がある値以上であれば真になります。
 +
 +  <​%VariableGen(set,​ age, 45)%>
 +  <​%If(VariableGen,​ var:age, ?​over20)%>​
 +    // この条件文は真
 +  <​%EndIf%>​
 +
 +=== under ===
 +
 +underは、判断対象を整数値とみなし、その値がある値以下であれば真になります。
 +
 +  <​%VariableGen(set,​ age, 18)%>
 +  <​%If(VariableGen,​ var:age, ?​under20)%>​
 +    // この条件文は真
 +  <​%EndIf%>​
 +
 +==== プレフィックス ====
 +
 +プレフィックスをつけることによって、値の扱い方を指定することができます。現在実装されているプレフィックスは15種類です。
 +
 +複数のプレフィックスを付けた場合、後(右)に付けられたプレフィックスが先に処理されます。
 +
 +それぞれのプレフィックスの後には":"​を付けます。
 +
 +=== プレフィックス : var ===
 +
 +プレフィックスvarは、値を変数名とみなし、対応する変数の値を返します。
 +
 +  <​%VariableGen(set,​ foo, bar)%>
 +  <​%VariableGen(set,​ hoge, var:​foo)%>​
 +  // 変数hogeの値にはこのときfooの値だったbarが入ります。
 +
 +=== プレフィックス : first ===
 +
 +プレフィックスfirstは、値を変数名とみなし、さらにその変数を配列とみなし、その最初の値を返します。
 +
 +  <​%VariableGen(set,​ foo, bar)%>
 +  <​%VariableGen(push,​ foo, baz)%>
 +  <​%VariableGen(first,​ hoge, first:​foo)%>​
 +  // 変数hogeの値にはこのときfooの最初の値だったbarが入ります。
 +
 +=== プレフィックス : last ===
 +
 +プレフィックスlastは、値を変数名とみなし、さらにその変数を配列とみなし、その最後の値を返します。
 +
 +  <​%VariableGen(set,​ foo, bar)%>
 +  <​%VariableGen(push,​ foo, baz)%>
 +  <​%VariableGen(last,​ hoge, first:​foo)%>​
 +  // 変数hogeの値にはこのときfooの最後の値だったbazが入ります。
 +
 +=== プレフィックス : pop ===
 +
 +プレフィックスpopは、基本的にlastと同様ですが、取り出した値が配列から削除されます。
 +
 +=== プレフィックス : shift ===
 +
 +プレフィックスpopは、基本的にfirstと同様ですが、取り出した値が配列から削除されます。
 +
 +=== プレフィックス : cookie ===
 +
 +プレフィックスcookieは、値をcookie名とみなし、対応する値を取得します。一部の文字は削除されます。
 +
 +=== プレフィックス : get ===
 +
 +プレフィックスgetは、値をGETのクエリの名前とみなし、対応する文字列を取得します。一部の文字は削除されます。
 +
 +=== プレフィックス : post ===
 +
 +プレフィックスgetは、値をPOSTのクエリの名前とみなし、対応する文字列を取得します。一部の文字は削除されます。
 +
 +=== プレフィックス : request ===
 +
 +プレフィックスrequestは、値をクエリの名前とみなし、対応する文字列を取得します。一部の文字は削除されます。
 +
 +=== プレフィックス : path ===
 +
 +プレフィックスpathは、PATH_INFOの情報を取得することができます。
 +
 +以下に例を示します。
 +
 +  PATH_INFOがblog/​1/​category/​4の場合、
 +  path:​blogの値は1になり、path:​categoryの値は4になります。
 +
 +=== プレフィックス : random ===
 +
 +プレフィックスrandomは、値を整数とみなし、1からその整数までの乱数を返します。
 +
 +=== プレフィックス : int ===
 +
 +プレフィックスintは、値を整数とみなし、その整数を返します。
 +
 +=== プレフィックス : length ===
 +
 +プレフィックスlengthは、値を文字列とみなし、その長さを返します。
 +
 +=== プレフィックス : yesno ===
 +
 +プレフィックスyesnoは、値の真偽値を判定し、真なら'​yes'​を、偽なら'​no'​を返します。
 +
 +=== プレフィックス : count ===
 +
 +プレフィックスcountは、値を配列とみなし、その要素数を返します。
 +
 +==== 特殊な値 ====
 +
 +特殊な値はプラグインが自動でセットする値です。先頭に"​!"​を付けて表現します。
 +
 +===== 一覧 =====
 +
 +==== アクション一覧 ====
 +
 +^名前^動作^
 +^set|変数に値を代入する|
 +^add|変数に値を追記する|
 +^push|変数に値をpushする|
 +^unshift|変数に値をunshiftする|
 +^set:​start|範囲を指定して、変数に値を代入する(開始地点)|
 +^add:​start|範囲を指定して、変数に値を追記する(開始地点)|
 +^push:​start|範囲を指定して、変数に値をpushする(開始地点)|
 +^unshift:​start|範囲を指定して、変数に値をunshiftする(開始地点)|
 +^set:​end|範囲を指定して、変数に値を代入する(終了地点)|
 +^add:​end|範囲を指定して、変数に値を追記する(終了地点)|
 +^push:​end|範囲を指定して、変数に値をpushする(終了地点)|
 +^unshift:​end|範囲を指定して、変数に値をunshiftする(終了地点)|
 +^math:​plus|値で変数を加算する|
 +^math:​sub|値で変数を減算する|
 +^math:​multiple|値で変数を乗算する|
 +^math:​divide|値で変数を除算する|
 +^invert|変数の値を逆転させる|
 +^output|値を出力する|
 +^unset|変数を削除する|
 +^if|(擬似if構文)|
 +^ifnot|(擬似if構文)|
 +^else|(擬似if構文)|
 +^elseif|(擬似if構文)|
 +^elseifnot|(擬似if構文)|
 +^endif|(擬似if構文)|
 +
 +==== プレフィックス一覧 ====
 +
 +^名前^返り値^
 +^var|変数の値|
 +^first|変数(配列)の最初の値|
 +^last|変数(配列)の最後の値|
 +^pop|変数(配列)の最後の値(配列の要素はひとつ減る)|
 +^shift|変数(配列)の最初の値(配列の要素はひとつ減る)|
 +^cookie|対応するcookieの値|
 +^get|対応するGETクエリの値|
 +^post|対応するPOSTクエリの値|
 +^request|対応するGETクエリまたはPOSTクエリの値|
 +^path|PATH_INFOで対応する値|
 +^random|乱数|
 +^int|整数|
 +^length|文字列の長さ|
 +^yesno|真偽値('​yes'​または'​no'​)|
 +^count|配列の長さ|
 +
 +==== 特殊な値一覧 ====
 +
 +^名前^説明^有効な状況^
 +^url|表示しているURL|すべて|
 +^uri|表示しているURI|すべて|
 +^skintype|スキン・タイプ|すべて|
 +^skinname|スキンの名前|すべて|
 +^skinid|スキンID|すべて|
 +^blog|選択されているブログの名前|ブログが選択されているとき|
 +^blogid|選択されているブログのID|ブログが選択されているとき|
 +^category|選択されているカテゴリーの名前|カテゴリーが選択されているとき|
 +^categoryid|選択されているカテゴリーのID|カテゴリーが選択されているとき|
 +^itemid|アイテム・ページで表示しているアイテムのID|アイテム・ページ|
 +^member|メンバー・ページで表示しているメンバーの名前|メンバー・ページ|
 +^memberid|メンバー・ページで表示しているメンバーのID|メンバー・ページ|
 +^archive-year|アーカイヴ・ページで表示している年|アーカイヴ・ページ|
 +^archive-month|アーカイヴ・ページで表示している月|アーカイヴ・ページ|
 +^archive-date|アーカイヴ・ページで表示している日|アーカイヴ・ページ|
 +^imagepopup-collection|画像のポップアップ・ページで、表示している画像のコレクション|画像のポップアップ・ページ|
 +^visitor-member|閲覧者がメンバーである場合、その名前|閲覧者がメンバーである場合|
 +^visitor-memberid|閲覧者がメンバーである場合、そのID|閲覧者がメンバーである場合|
 +^item-title|表示しているアイテムのタイトル|テンプレート内/​コメント・テンプレート内/​アイテム内|
 +^item-itemid|表示しているアイテムのID|テンプレート内/​コメント・テンプレート内/​アイテム内|
 +^item-category|表示しているアイテムのカテゴリーの名前|テンプレート内/​コメント・テンプレート内/​アイテム内|
 +^item-categoryid|表示しているアイテムのカテゴリーID|テンプレート内/​コメント・テンプレート内/​アイテム内|
 +^item-author|表示しているアイテムの作者の名前|テンプレート内/​コメント・テンプレート内/​アイテム内|
 +^item-authorid|表示しているアイテムの作者のID|テンプレート内/​コメント・テンプレート内/​アイテム内|
 +^comment-author|表示しているコメントの作者の名前|コメント・テンプレート内|
 +^comment-authorid|表示しているコメントの作者のID|コメント・テンプレート内|
 +^current|対応する範囲|擬似If構文の条件式|
 +^yes|常に'​yes'​|すべて|
 +^no|常に'​no'​|すべて|
 +
 +
 +==== 特殊な判断条件一覧 ====
 +
 +^名前^説明^例^
 +^withlink|HTMLのリンクが含まれる場合真|?​withlink|
 +^preg|指定した表現にマッチした場合真|?​preg/​Nucleus$/​i|
 +^over|指定した数以上の場合真|?​over20|
 +^under|指定した数以下の場合真|?​under17|
 +
 +===== 例文 =====
 +
 +==== アイテム・ページで、指定されたアイテムを表示している場合のみスキン中のある範囲を表示する ====
 +
 +スキン変数<​%if%>​が使用できます。
 +
 +  <​%if(VariableGen,​ !itemid, 4126)%>
 +  <!-- なにか -->
 +  <​%endif%>​
 +
 +==== 指定された範囲にHTMLリンクが存在しない場合、その範囲を表示しない ====
 +
 +擬似If構文を使用します。
 +
 +[[plugins:​nolinknodisplay|NP_NoLinkNoDisplay]](公開停止)の機能に相当します。
 +
 +  <​%VariableGen(if,​ !current, ?​withlink)%>​
 +  <!-- なにか -->
 +  <​%VariableGen(endif)%>​
 +
 +==== アイテムのカテゴリーが指定されたものと一致する場合にのみ、テンプレートのある範囲を表示する。 ====
 +
 +[[plugins:​ifcategorynameis|NP_IfCategoryNameIs]](公開停止)の機能に相当します。
 +
 +テンプレート中で、擬似If構文を使用します。
 +
 +  <​%VariableGen(if,​ !item-category,​ Weblog)%>​
 +  <!-- なにか -->
 +  <​%VariableGen(endif)%>​
 +
 +==== テンプレート中のある範囲について、表示、非表示を交互に切り替える ====
 +
 +テンプレート中で、擬似If構文とアクションinvertを使用します。
 +
 +  <​%VariableGen(invert,​ toggle)%>​
 +  <​%VariableGen(if,​ var:​toggle)%>​
 +  <!-- なにか -->
 +  <​%VariableGen(endif)%>​
 
plugins/variablegen.txt · 最終更新: 2011/03/23 21:28 (外部編集)