In article <87zmc0zf4f.wl%kazuhiko@...>,
Kazuhiko <kazuhiko@...> writes:
> $ echo '{{hoge}}' | ruby lib/hikidoc.rb
> <div class="plugin">{{hoge}}</div>
>
> $ echo 'aa{{hoge}}' | ruby lib/hikidoc.rb
> <p>aa<span class="plugin">{{hoge}}</span></p>
>
> のように、行の一部かどうかでブロック要素になったりインライン要素になった
> りはしますが、「{{〜}}」という文字列を、{{や}}も含めたままでクラス指定付
> きの HTML に書き出す、というのが HikiDoc 側の仕事です。
えーと、わかっているとは思うのですがいちおう確認しておくと、
「〜」という部分にいったい何が記法として許されるのか、という
点が問題で、入力の中の「{{〜}}」の部分を認識して取り出す、と
いう点は HikiDoc 側の話になります。
「〜」の中に「}}」が入れられるのかとか、「"」「'」がどう入る
かとか。
> 個人的にはときどきそういうこともありますが、プラグインをどうするかは完全
> にアプリケーション依存なので、プラグインについて tDiary と Hiki で非互換
> があってもさほど問題はない、というふうに考え直しました。
>
> そういう意味で田中さんの元のパッチのうち、プラグイン記法として valid か
> どうかを判断する部分は、tDiary の wiki_style.rb 側でやるのがいいと思いま
> すが、いかがでしょうか?
はい、そう思いますので、<87vemu9mlm.fsf@...> のパッチ
(3番目のパッチ) ではそうなっています。
HikiDoc#initialize に :plugin_syntax オプションを追加し、
wiki_style.rb 側でそれに Ruby 言語の文法を検査するものを指定
しています。
指定しなければ、現在の HikiDoc で実装されているプラグインの
文法になります。
HikiDoc を継承して、文法を検査するメソッドを override する、
という案も考えましたが、他のオプションがすでに存在したのでそ
こに追加という方法を選んでおきました。
> おっしゃるとおりです。で、ヒアドキュメントについては上述のように tDiary
> の wiki_style.rb で吸収するとしても、プラグイン記法中の「}}」をどうする
> か、という問題は残りそうです。
<87vemu9mlm.fsf@...> のパッチだと、プラグイン内部の記法
を指定でき、wiki_style.rb で Ruby の記法を指定し、Ruby のコー
ドとして正しくないところではプラグインの終了を認識しないので、
here document (とか、他にも正規表現とか文字列でも % で書くも
のも含め) 内部の「}}」はそのまま記述可能で、プラグインの終了
とはみなされないはずです。
> 「"」や「'」に関係なく /\{\{.*?\}\}/ でプラグイン文字列を取得する方針に
> して、「}}」を書きたければエスケープする、というのが現実的な解でしょうか?
単純だからといって幸せとは限らないような。
ただ、{{...}} という記法を変えられる (拡張できる) なら、ブレー
スの数を可変にして {{{{{{{...}}}}}}} とか書けるようにして、
内部で連続してあらわれる } の数よりも長くしておけば内部では
エスケープしなくていいとかという方法も考えたりはしました。
もちろん、{...} の対であることは重要ではなくて、十分に長いター
ミネータを指定できればいいので、{{))...((}} とかで可変長な謎
の記法を発明してもいいのですが。
--
[田中 哲][たなか あきら][Tanaka Akira]
|