WikiFormeでattribute
またしても仕様改革の気配。
問題は、syntax.yamlの引数付きsyntax。
block: table_cell: "|" table_cell header: "*"
の、headerとか。
WikiFormeの今後の目論見として、syntax.yamlを自由に変換できるようにしたい。つまり、table_cellのマークを最初は「|」にしていたのを、後から「,」に変更するとか。出来て当たり前の機能のように思えて、これが難しい。
これをやるためには、Wiki記法をなんらかの中間表現に変換できるようにしないといけない。syntax A → 中間表現 → syntax Bと。ちなみにこれができると、複数の人が一つのソース(文章)を、自分の好きなsyntaxで編集できるようにもなる。ソースはいつも中間表現で保存しておいて、編集するときにその人用のsyntaxに変換する。これはおいしい。
で、引数付きsyntaxが無い頃は、syntaxをすべて外した書式を中間表現にすればいいと思っていた。要素にはすべて名前が付いているので、それを使えばいい。(要素に名前を付けないといけないのはそのため)
が、引数付きsyntaxは、今のところ中間表現に変換できない。引数付きsyntaxは↓こんな風に使う。
|table|table|table
,table,table,table
区切りを「|」にするのか「,」にするのか。要素自体は中間表現に変換できる。↓
\table table|table|table
他にも↓こんな。
\link{text>url}の「>」 |*head|table| |*head|table|の「*」 |[-2-]2列ブチ抜きセル|の[-2-]
こういうものを、中間表現に変換したい。
で、ここでふと思うに、引数付きsyntaxを使いたい場面というのは、だいたい限られている。
- 区切る(tableのセルを区切るとか)
- 2つに別ける(リンクのtext>urlとか)
- 3つに別ける(2つに別けるがあれば3つに別けるもあるだろう!)
- 属性を与える(*を付けるとヘッダとか、セルを2行結合させるとか)
せいぜいこのくらい?
で、中間表現としてXMLを採用するなら、↓こんな風に中間表現にすることができる。(メンドーなので閉じタグ省略)
<table_split><item>A</><item>B</><item>C</></> <link><text>text</><url>url</></> <table_cell header="true" align="center">hoge cell</>
というわけで、structure.yamlの書式が変わる。
block: table_cell: parent: table_row syntax: - attribute: header - attribute: align - attribute: valign - attribute: char table_split: parent: table_body syntax: - split: cells inline: link: syntax: - div2: [text, url]
syntax:以下を追加。attribute, split, div2が、「属性を与える」「区切る」「2つに別ける」で、headerやらcellsやらtext,urlやらは、変数名(またはHashのkey名)。process時に自分で区切ったり2つに別けたりする処理を書かなくても、既に変数に入っている。(この方が便利というか、自分で区切られると中間表現に変換できなくなるわけで)
それに対してsyntax.yamlの側は以下。
block: table_cell: "|" table_cell header: "*" table_split: "," table_split cells: "," inline: link: ["[[", "]]"] link text_url: ">"
ここにきて、このsyntax指定だけモジューラブルじゃないというのは、不完全燃焼な気がする。というわけで、block, inlineに続いて、syntax要素が登場。syntax要素という名前はおかしいか。記述できるわけじゃない。同じファイルに書くのもおかしいかな。
syntax: split: attribute: div2:
細かい仕様は未定。
また仕様が肥大化していく。コード量も増えていく。そして時間は減っていく。目標はまた遠のく。なんてこった。