俺式Wiki書式パーサー

PukiWiki書式、tDiary書式、はてな書式、世の中「なんとか書式」が溢れているわけですが、要するに「俺にぴったりの書式なんて無い!」からこうなるわけですよ。

一方で、すべてを統合したスバラシイ書式を作ろう!なんてのは、新しいWikiクローンを作るのと同じわけで。嗚呼乱立。


そういうわけで、自分にぴったりのWiki書式を作れるプログラムを作って、さらに乱立を助長しようと画策中。
*hoge でも !hgoe でも = hoge = でも、自由に書式が作れる。

Rubyで。半分くらい完成。



パース結果はツリー構造になるので、HTMLよりも文章構造をしっかり作れる。たとえば、


*Chapter 1
ほげほげ

**Section 1
ふがふが

**Section 2
うがー


という書式は、


ほげほげ


ほげほげ


うがー


とパースできる。chapterの中にsectionが入る。
こんなのはイヤだ!と言うなら、別にこうパースしなくてもいい。俺式で。


閉じタグを書かなくても、良きに計らってくれるところがポイント。
Sectionの中にSectionは入らないので、前のSectionは閉じてChapterに入れる。



そうすると、たとえば↓こういう書式

  • a
  • b
    • cc
    • dd


目的は、


  • a
  • b

  •  
       
    • cc
    •  
    • dd
    •  


↑こう出力したい。
でも普通に(普通がワカランけど…)パースすると、↓こうなってしまう。


  • a
     
  • b
  •  
    • cc
  •  
    • dd

  • の中に-を入れてしまうのはおかしいし、かといって入れないと後者のようになってしまう。


というわけで、「包含要素」と「コンビネーション要素」で文章構造を作る。

  • は-を含められないけど、-と結合することができる。くっつかぶる。


これで表組みも自然に書ける。

これ とか
↑と くっつかぶる
これも くっつかぶる

あるいは、↓こういう風にも書ける。

これ
とか
↑に含まれるよ
↑とくっつかぶる
ここにテキスト
クッツカブル

↓こうでもいい。

captionを書いてみる
これ
とか
  • 表の
    • 中に
    • リスト
>

右寄せでヨロシク!

左寄せで!

タイトルセルじゃ

^中央寄せ

表の中にブロック要素が書けるWiki書式は今までになかった!省略記法とフル記法を両方用意することでコレを解決。
(まぁ俺書式には両方要らないなら、用意しなくてもいい)



書式の定義は、Rubyパワーを存分に使って、1要素=1クラスでシンプルに書ける。(裏方には黒魔術が使われているものの、表からは見えない)
便利なテンプレートを作ってあるので、それを継承すれば表組みやリスト、見出しなどなどは簡単に作れる。

Delegatorを使ってStringクラスを偽装してあるので、htmlspecialcharsとか書かなくても、<とか>とかを自動的にエスケープしてくれる。便利便利。


現在インライン要素のパーサーを作成中。できたら公開します。