CommonMark と Hugo 0.68
先日 Hugo 0.68.x がリリースされたのだが
- Minify config and more! | Hugo
- Hugo 0.68.1: 1 bug fix | Hugo
- Hugo 0.68.2: A couple of Bug Fixes | Hugo
- Hugo 0.68.3: A couple of Bug Fixes | Hugo
どうもまた markdown 周りの挙動が変わったようだ。 例えば
[string] を [][rune] に変換する。
[string]: http://golang.org/ref/spec#String_types
[rune]: http://blog.golang.org/strings "Strings, bytes, runes and characters in Go - The Go Blog"
をレンダリングすると
<a href="http://golang.org/ref/spec#String_types">string</a> を <a href="http://blog.golang.org/strings" title="Strings, bytes, runes and characters in Go - The Go Blog"></a> に変換する。
てな感じに []
記述がまるっと抜け落ちて <a>
要素の中身も空になってしまう。
てっきり yuin/goldmark パーサのバグだと思っていたのだが,どうやらこれは CommonMark の仕様のようだ。
具体的には
[foo][bar]
[bar]: http://bar
と記述すると
<a href="http://bar">foo</a>
のように [bar]
で生成される <a>
要素の中身を foo
に置き換えるらしい。
じゃあ今までがバグだったってこと?
これを回避するには
\[foo][bar]
[bar]: http://bar
とエスケープすれば
[foo]<a href="http://bar">bar</a>
と意図通りにレンダリングしてくれる。 なので最初の記述も
[string] を \[][rune] に変換する。
[string]: http://golang.org/ref/spec#String_types
[rune]: http://blog.golang.org/strings "Strings, bytes, runes and characters in Go - The Go Blog"
とすれば
<a href="http://golang.org/ref/spec#String_types">string</a> を []<a href="http://blog.golang.org/strings" title="Strings, bytes, runes and characters in Go - The Go Blog">rune</a> に変換する。
とできた。
私のブログでは影響が出たのが(結果的には)一箇所のみだったので直すのは簡単だったが,特に Go 言語では []
はスライスを意味する記述なので,今後は気をつけないとなぁ。
まぁ <code>
要素(`...
`)で囲むのが無難か。
改めて CommonMark の仕様を眺めてみたが,不可思議な記述が沢山ある。 たとえば
[bar][]
[bar]: http://bar
と書くと
<a href="http://bar">bar</a>
てな感じに,これまた []
が吸い込まれる。
しかも
[bar][foo]
[bar]: http://bar
とすると,今度は <a>
要素が外れてただの
[bar][foo]
となる。
なんだよそれ orz
雑すぎんだろ! 一度ちゃんと文法を整理したほうがいいんじゃないのか?