WikiForme 0.7の計画
あけましておめでとうございます。本年もよろしくお願い申し上げます。
今は12/25にリリースしたWikiForme 0.6に続くWikiForme 0.7を開発中です。
現在実装されている主要な機能には構造化、親要素補完、継承、文法カスタマイズがありますが、さらに文脈依存文法と正規表現マッチを加えたいと思っています。まだまだWiki記法の常識をブチ破っていきます。
文脈依存シンタックスは、文脈に応じてWiki記法の文法が変化していく機能です。
たとえばFlotでグラフを書く記法は、今は↓このような文法ですが、
#flot 400x300 #flotX 1, 2, 3, 4 #flotY 4, 2, 8, 7 ^flotLabel 系列1 // ↑記号が多い
文脈依存シンタックスを導入すると、↓こんな風にかけるようになります(という計画)
#flot 400x300 系列1: 1, 2, 3, 4 4, 2, 8, 7 // ↑スッキリ
つまり、#flotと書いた時点でFlot用の文法が使えるようになります。#flot要素を抜けた後は通常の文法に戻ります。
他にも、たとえば「===」要素の中で「S6文法」が有効になるようにしておけば、今は↓このように書いているWiki記法が、
=== *タイトル ^s6style fontSize: 80% ?s6page separator: fade
↓このように書けるようになるはず。
=== *タイトル ^fontSize: 80% ?separator: fade
Wiki記法は多機能になるほど記号が増えてしまって「暗号」になりがちですが、文脈依存シンタックスがあれば記号の種類を減らせて、より自然に文章を書けると思います。
正規表現マッチは、今まで行頭のマークでしかマッチできなかった文法を、あらゆる正規表現でマッチできるようにしようという計画です。これで「はてな記法互換文法」なども作れるようになります。
これだけでは普通と言えば普通ですが、あらゆる正規表現というのがポイントです。たとえば正規表現に//mオプションを付けて「.」が改行にもマッチするようにしてやれば、ヒアドキュメントが書けます(ただ、名前付き捕獲式(→Ruby 1.9/鬼車)が必須かも…)
// 正規表現は /^script <<(?<here>.*)$\n(.*?)^\k<here>$/m script <<END ここに 何か 書く END
機能追加の影響でパーサ部分が大幅に書き換えになるので、ついでに記法バンドルのフォーマットも改良します。
現状↓
f = Format.block :chapter f.default_syntax '*' f.contain :@contents, :@blank # 省略記法 f.process_html {|text, children| XML[:h2, @children] } # フル記法 f.module_eval { def process_html XML[:h2, @children] end }
計画↓
Format.block :chapter do syntax '*' contain :@contents, :@blank # 省略記法 process_html {|text, children| XML[:h2, @children] } # フル記法 def process_html XML[:h2, @children] end end
ぱっと見たときに後者の方が分かりやすいと思います。do 〜 end はクラス定義のスコープで実行されるので、module_evalと書かなくてもそのままメソッドを定義できます。