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 で再び導入されました。
オリジナルの実装やその移植が行われていた時代はstart
属性がなかったので,
数値は無視する他なかったようですが,
今はstart
属性があるので,
より直感的な方向で仕様が策定されているようですね.
というわけで, これからMarkdownを使う時は, 「どうせ順序付きリストの数値なんて考慮されないから適当に入れとこう」 と思うのはやめておいたほうが良さそうですね.
後Markdownを実装する時はCommonMarkの仕様をちゃんと把握しておきましょう. なんで把握してないねん私は. 全てチェックするのが面倒とは言え素のMarkdownに安全なPandoc拡張少しつぎ足すぐらいじゃダメでしょ. 全て時間が足りないのが悪い.
Pandoc
最新のPandocでオプションを付けずに変換すると既にstartがつくようになっています.
これは startnum という拡張のしわざで,
pandoc -f markdown-startnum
で変換するとこれまで通りstartがつかずに変換されます.
我々のシステムでもこの拡張は有効にしても良いかもしれません.