Title: KAGParserEx プラグイン
Author: miahmie, wtnbgo
●これは何か?
KAGParserを置き換えて拡張するプラグインです。
安定したら本体側にcontribする予定ですが,
状況次第ではこのままで行くかもしれません。
現在のところ,拡張されるのは下記4点のみです。
なお,仕様は予告無く変更される場合があります。
・タグの複数行記述が可能になる multiLineTagEnabled プロパティの追加
行末に "\" を記述し,次の行の先頭に ";" を入れることで,
複数行にわたるタグを記述できます。
※行末に "\" のみで次の行頭に ";" がないとエラーになります。
@tag hoge=123 fuga=test \
; someoption=true \
; andmore=false
行頭に ";" を入れるのは,旧仕様のパーサーに通しても ch タグとして
認識されないようにコメントとする無理やりな adhoc 仕様です。
"\" の前には必ず1つ以上のスペースを空けてください。
空けないと前の要素とくっついて認識されてしまいます。
また,タグ名は必ず1行目に記述します。
; ダメな例:
@tag hoge=123\ ← hoge="123\"と認識
@tag hoge\ ← hoge\=trueと認識
@ \ ← \ というタグ名で認識
現仕様では,[~]表記で複数行のタグを記述する場合,そのタグを閉じた以降に
さらにタグを続けても無視されるようになっています。
(改行タグも自動で挿入されません)
[tag hoge=123 fuga=test \
; someoption=true \
; andmore=false][このタグは無視される]
・getNextTag() の帰り値中に "taglist" メンバを追加
設定されている値はタグ名が記載順格納された配列です。
記載された順にコマンド処理したい場合に有用です。
・パラメータマクロ展開機能
paramMacros (辞書オブジェクト) に対して以下の形のマクロ情報を登録できます
パラメータ名 => [パラメータ名,値,パラメータ名,値 ... ]
この登録に合致するパラメータ名があった場合に、
登録されているパラメータ一覧をそこに差し込んだものとして処理します
パラメータ値の先頭に % や & があるとそれは実際の実行時に解釈されて
それぞれマクロ展開/実体参照として機能します。
関連して以下のシステムタグが追加されています
パラメータマクロ登録
@pmacro name=パラメータマクロ名 param1=value param2=value ...
&や%の指定は、普通に書くと pmacro の登録時に処理されてしまう
のでマクロ実行時に処理させたい場合はエスケープしておいて下さい
パラメータマクロ削除
@erasepmacro name=パラメータマクロ名
・embタグのescapeパラメータの追加
embタグで"[~]"を返しても,常にエスケープされて通常の文字列として
評価されていた動作を,escape パラメータでエスケープ有無を指定できます。
エスケープしない場合は,通常のタグとして評価されます。
[emb exp="'[tag1][tag2]'" escape=false] ⇒ [tag1][tag2]が展開・評価されます
パラメータ省略時は escape=true(従来通りの動作)です。
使用に際しては
[macro name=extract][emb escape=false exp=%exp][endmacro]
などとして適当なマクロを介して使うと良いかと思います。
なお,"@~"形式の文字列で返しても通常のテキストとして評価されるので
必ず"[~]"の形式でタグ文字列を返してください。
動的に生成したマクロを含むタグなども評価されるので便利ですが,
embの無限再帰も可能になってしまっているので使用には十分注意してください。
●マクロパラメータの展開「*」の挙動の違いについて
KAGParserではマクロ展開の「*」以前に書かれているオプションが上書きされて
消えてしまうというバグっぽい挙動がありますが,KAGParserExでは
paramMacros対応のため構造を変えた関係で「*」以前のパラメータも有効となります。
例:
[macro name=hoge]
[tag foo=bar * baz]
[endmacro]
において
[hoge fuga=piyo]
とすると,
・KAGParser では [tag fuga=piyo baz]
・KAGParserEx では [tag foo=bar fuga=piyo baz]
が渡る
●ソースについて
KAGParserのソースをそのまま流用&改造して組み込んでいます。
ソースはsvn copyしているので,ログから本体側からの変更点を追うことができます。
KAGParser.cpp <- src/core/utils/KAGParser.cpp
KAGParser.h <- src/core/utils/KAGParser.h
tjsHashSearch.h <- src/core/tjs/tjsHashSearch.h
●使い方
KAGParserEx.dll をリンクすると,KAGParserクラスが置き換わります。
アンリンクすると,元に戻ります。
●ライセンス
このプラグインのライセンスは吉里吉里本体に準拠してください。