{HTML K#F85E/A-928F}

従来の見出し未満の区切り線記法に,見出し階層を越えられる「階層区切り線」を加える。以下のように,唯一通常の区切り線と区別出来る見出し記号 #
(全角 #
も可)を使う。
* 第1階層
** 第2階層
#========================#
第1階層段落。
#------------------------#
第2階層段落。
#- - - - - - - - - - - - #
第3階層段落。
#. . . . . . . . . . . . #
第4階層段落。
##
第1階層段落(# の数でも調整出来る)。
従来の区切り線記法は,HTML において対応する <hr>
の性質上,見出し未満の区切りにしか使えなかった。
見出し階層を作った後で描写全体に対するフッター的なものを書こうとすると第1階層見出しを作る必要があるが,しばしば大袈裟に感じられることがある。
今回の検討当初は,「空見出し」という概念を主に考えていた。区切り線の長さは任意であるべきなので,どう弄っても自然な形で階層を調整出来そうになかった。その点,見出し内容を空に出来れば手っ取り早い。
しかし,等号も星号も区切り線に使う予定なので,==
のように第2階層以降で内容を空にすると衝突することになる。
区切り線の方を見直しても,--
が区切り線なら ==
はやはり二重の区切り線であってほしい。直感性,下線形見出しとの整合性を考えるとこれは捨て難い。星号による区切り線はそれに比べればまだ転用の余地があったが,その代わり *
を使う Markdown の区切り線記法との互換性が損われる。
そもそも,「空見出し」という概念にも無理がある。文字を書くから見出しなのだし,実質的に区切り線なのだから,直感的とは言い難い。
ここで,唯一区切り線記法と被らない見出し記号である番号記号を思い出した。
番号記号による見出しは,ハッシュタグや駒手記法との衝突を避けつつ atx 式見出しとある程度互換性を持たせるため,##
のように2個以上を条件に対応していた。個人的に好きな記法ではなかったこともあり,おまけのような扱いで,ここまで気付かなかった。
すでに「空見出し」に難を感じていて,区切り線記法での対応に立ち返っていたことで,この ##
が特殊な区切り線とみなせる特徴を持っていることに気付いた。記号を2個以上繰り返す,区切り線に見える記法で,実際,普文の枠線的な装飾に使われることが多い記号でもある。
特に,区切り線記法としての統一感・直感性を保てる2個で第1階層を表せるということは決定的に重要な点で,見出し記号の個数と階層関係が一致しないとどうしてもちぐはぐに見えてしまう。これは,衝突を回避したとしても等号・星号では解決出来ない問題だ。区切り線記号としての最短形が見出し記号としての第1階層に対応しうる唯一の記号が番号記号だった。
ただし,通常の区切り線記号と異なり,個数が階層に対応するため,普文の装飾を兼ねられないという問題があった。上位階層の区切り線を普文上で目立つように書けない。
これは,最新の区切り線記法と下線形見出し記法の検討(9日17歩,19歩)を踏まえ,見出し階層に対応する4種の区切り線と組み合わせる形で解決することにした。つまり,第1階層から順に最短形で #==#
,#--#
,#- -#
,#. .#
というように区切り線と組み合わせることが出来るようにする。これがまた都合が良いことに,よくある装飾に見える。
9日15歩以後,見出しの下線と区切り線は長さで区別出来るようになっているため,区切り線の装体にはある程度多様性を持たせて問題ない。一方,見出しの下線は階層を表す装体になっているため,一定の制限が必要になる。この点でもぴったり噛み合った。
別に2個以上で良いだろうと実装した区切り線記法,おまけ感覚で付けた番号記号による見出し記法,最近の拡張方針……何気ない全てがパズルの要素だったかのように思える神秘的な閃きだった。
この階層区切り線の考案を機に,番号記号による見出しは常に2個を最上位階層とすることにした。つまり,*
,=
と ##
で始まる見出しはともに最上位階層を表す。
これまで,異なる見出し記号を併用することは特に想定しておらず,実際使われていないはずなので,記号の個数は単純に計算していた。見出し階層は相対的な個数で決まるため,*
で始まる見出しがあると ##
は第2階層になる。これは階層区切り線と整合しない。
特に仕様として決めていたことではないため,ここで厳密化することにした。
HTML と CSS の機能的には,可接性を保ちつつ見出し要素を隠すことは造作もないが,SEO 上の懸念が多少ある。今の検索演心の評価理積みはそこまで単純ではないだろうが,伝統的に見出し要素は隠すべきではないとされてきただけに,どこまで不利になるか分からない。出来るだけ行儀の良い実装方法を見つけたい。
そもそも見出し要素を空にしてはいけないのか,<section>
あたりを使って上手く誤魔化せないか,など色々考えてみたが,どれも多かれ少なかれ怪しさが残る。
見出しの無い階層区切りというのは HTML の想定外だったのだろう。
`<hr>`
}{ツイスト}{限界}{まとめ}昨日,寝る直前にまた脳爆発があり,今朝にかけて文字装飾記法とタグ記法周りの概念整理・仕様整理が急速に進んだ。
文字装飾記法は,「文字装飾を伴う慣用表現」のための記法と位置付けることにした。太字記法(##
),斜体記法(//
),下線記法(__
),打ち消し線記法(~~
,翌日のまとめで「打ち消し記法」から改称)の4記法を基本とし,それぞれ所定装体を伴う <b>
,<i>
,<u>
,<s>
HTML 要素に対応する。
@
を使った文字サイズ記法,%
を使った色記法も検討していたが,タグ記法の概念が出来たことで中途半端なものになるため,これは廃案とする。
実装自体は容易な部類で,記法も概ね固まっていたにもかかわらず文字装飾記法の実装に踏み切れなかった理由として意味論的な問題があり,これが思いのほか難題だった。実装方針は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>
にすることを考え始めた。
今日は一日がかりで昨日分のまとめを終わらせるつもりだったが,3分の1くらいしか終わらなかった(15日10歩未完)。
それなりの内容でもあり,昨日の反動でぼんやりしてしまう時間があったこともあるが,デラング構想についての考え事が広がったのも大きかった。
文字装飾記法についての整理から,HTML 研究の必要性を感じた。ウェブアプリを作っているので実用上必要なことは当然知っているが,細かい歴史や設計については知らないことが多い。的確なデラング設計のためには表面的な理解では足りない。文字装飾記法でそれを痛感した。
さらに言えば,幅広く標記言語研究をしたくなった。これまでデラングは「理想の軽量標記言語」を目指してきたが,タグ記法によってその範疇に留まらない可能性を感じるようになった。デラングが目指すべきは「理想の標記言語」であって「標記言語の再定義」なのかもしれない。
ティム・バーナーズ=リーは,WorldWideWeb を作り,URL を作り,HTML を作った。私は,デルンを作り,知番を作り,デラングを作っている。
デラングが発展するにつれ,Markdown が最高の“踏み台”になるという確信も深まる一方だ。やり甲斐に不足はない。