昨日,寝る直前にまた脳爆発があり,今朝にかけて文字装飾記法とタグ記法周りの概念整理・仕様整理が急速に進んだ。
文字装飾記法は,「文字装飾を伴う慣用表現」のための記法と位置付けることにした。太字記法(##
),斜体記法(//
),下線記法(__
),打ち消し線記法(~~
,翌日のまとめで「打ち消し記法」から改称)の4記法を基本とし,それぞれ所定装体を伴う <b>
,<i>
,<u>
,<s>
HTML 要素に対応する。
@
を使った文字サイズ記法,%
を使った色記法も検討していたが,タグ記法の概念が出来たことで中途半端なものになるため,これは廃案とする。
検討過程
3つの検討方針
実装自体は容易な部類で,記法も概ね固まっていたにもかかわらず文字装飾記法の実装に踏み切れなかった理由として意味論的な問題があり,これが思いのほか難題だった。実装方針は3通り考えられる。
記法の趣旨からしても,軽量標記言語の特性を考えても,1つ目に無理があるのは明らかだ。対応する HTML の <b>
,<i>
,<u>
,<s>
は,私が何度解説を読んでもややこしく感じる代物だ。それを多くの人が正しく理解して使うのは不可能だろう。そもそも「文字装飾記法」という分かりやすい説明体系を捨てることになるが,代替案があるわけでもない。
かといって,2つ目ももったいない。要は <span>
で装体指定だけにするということだが,例えば,太字にはしたいが <b>
にはしたくない場合,打ち消し線は引きたいが <s>
にはしたくない場合がどれだけあるのかと考えると,無難を通り越して臆病過ぎる。失う可接性や応用可能性と釣り合わない。
最終的に採用することになった3つ目も,全く考えなかったわけではないが,柔軟性に欠け,前の2つの悪い所が組み合わされる気もして,有力案にはなっていなかった。
タグ記法による書き分け
この膠着状態を変えたのは,前日に概念としてまとまったばかりのタグ記法だった。
これまで,デラングにおける HTML は,どうしてもデラングで出来ない表現をしたい場合などの“抜け道”とか“救済措置”に近い位置付けで,積極的に使うことを想定していなかった。実際,個人的にはほとんど使っておらず,放置している不具合も多い部分だった。
デラングのタグ記法として間接的に HTML を使うことで,略記法の導入も可能になり,HTML 側の仕様変更に対しても一定の緩衝帯を設けることが出来る。ここに来て初めて,文字装飾記法でも「書き分け」が考えられるようになった。文字装飾記法に対応しうるのが全て1文字要素だったことも幸いした。
昨日の寝る直前に,##太字的な表現##
と <{font-weight:bold}>太字</>
のように書き分けるよりも,##太字##
と <b>太字的な表現</b>
のように書き分ける方がマシであることに気付いて,1つ目の実装方針案は完全に潰せた。
これにより一時的に2つ目の実装方針案が再浮上したが,標準的に使う記法として標準的な用途に最適化不足なのはやはり否めなかった。
決着
最終的に,「文字装飾を伴う慣用表現」という用者が自然に理解出来る範囲での意味論的な位置付けを与え,逸脱する用途ならタグ記法で書き分けるのが使用頻度に対して最適だろうという結論に達した。3つ目の実装方針案を洗練させた格好になる。
例えば,##太字##
は「太字装体の <b>
」に対応する。装体が邪魔なら <b>太字的な表現</b>
と書けるし,意味が邪魔なら <{font-weight:bold}>太字</>
(略記法は検討段階)のように書けるが,これらの場合が稀少なのは明らかで,記述量に上手く釣り合う。ワープロならともかく,軽量標記言語を手書きしようという人にとって難しい使い分けではないだろう。
そもそも,<b>
,<i>
,<u>
,<s>
は,古くからある視覚的要素が HTML5 で慣用的な用途を引き継いで意味論化されたものなので,「文字装飾を伴う慣用表現」と非常に相性が良い。相互変換にも全く問題ない。
何より,直感的に入力すれば構造的に出力されるというデラングの理想に適っている。
文字サイズ記法・色記法は廃案へ
文字装飾記法を「文字装飾を伴う慣用表現」と位置付けたことで,慣用表現を持たない文字サイズ記法・色記法は仲間外れになるが,タグ記法によって出る幕がなくなった感があるので,ここで廃案にすることとした。
第一に,タグ記法で略記法を整備した方が一貫性も応用可能性も高い。特定の値でプロパティを省略出来るようにし,<{white}>白い文字</>
のように書ければ,%white%白い文字%%
と書くのと記述量も大差ない。
もともとパラメーターを必要とする記法の異質感はあり,文字装飾記法の統一感を損うかという懸念はあったので丁度良かった。
波及的検討
組み合わせは「逆」ではなく「入れ子」へ
これまで,複数の文字装飾記法の組み合わせは #/太字と斜体/#
のように,「記号を1つずつ逆さにした終了記号と挟む」といったややこしい説明を考えていたが,##//太字と斜体//##
のような「入れ子」を #/太字と斜体/#
と短縮出来るという考え方にした方が分かりやすいため改めることにした。
タグ記法の発展
今回の検討で,タグ記法が早くも実践的な役割を持つことになり,デラングにおける存在感が一気に増した。
タグ記法に HTML の仕様変更に対する緩衝的な役割を持たせること,要素名の省略で <span>
にすることを考え始めた。