• 作成:

CommonMarkでは順序付きリストの数値は無視されなくなっていました

古典的Markdownでは順序付きリストの数値は無視されます

Markdownをそれなりに書いている人はみんな知っていると思いますが, 古典的Markdown処理系では

2. foo
3. bar

<ol>
<li>foo</li>
<li>bar</li>
</ol>

と変換されて, 数値が2から始まることは無視されます.

というか順序付きリストの数値は基本無視ですね.

これはHTMLの順序付きリストは1から始まり, これを制御するweb標準的方法はなかったためです.

同僚がチケット管理システムのMarkdownのこの挙動がバグではないかと質問していたので, 仕様ですと返しました.

CommonMarkでは無視されない

今調べてみると CommonMark Spec では数値の始まりは無視されないようですね.

変換結果を見るとstart属性に数値が設定されています.

start

この整数値を持つ属性は、リスト項目の序数の開始値を指定します。序数の形式が XXXI のようなローマ数字や文字であっても、値は常に数値で表現します。 "C" という文字から始めるには、<ol start="3"> を使用します。メモ: この属性は HTML4 で非推奨になりましたが、 HTML5 で再び導入されました。

<ol>: 順序付きリスト要素 - HTML: HyperText Markup Language | MDN

オリジナルの実装やその移植が行われていた時代はstart属性がなかったので, 数値は無視する他なかったようですが, 今はstart属性があるので, より直感的な方向で仕様が策定されているようですね.

というわけで, これからMarkdownを使う時は, 「どうせ順序付きリストの数値なんて考慮されないから適当に入れとこう」 と思うのはやめておいたほうが良さそうですね.

後Markdownを実装する時はCommonMarkの仕様をちゃんと把握しておきましょう. なんで把握してないねん私は. 全てチェックするのが面倒とは言え素のMarkdownに安全なPandoc拡張少しつぎ足すぐらいじゃダメでしょ. 全て時間が足りないのが悪い.

Pandoc

最新のPandocでオプションを付けずに変換すると既にstartがつくようになっています.

これは startnum という拡張のしわざで,

pandoc -f markdown-startnum

で変換するとこれまで通りstartがつかずに変換されます.

我々のシステムでもこの拡張は有効にしても良いかもしれません.