Hugo 0.60+ 向けに reveal-hugo がアップデートされたようだ
Hugo 用のスライド・テーマ reveal-hugo を Hugo 0.60+ でも使えるように修正した pull request が
これまでは markdown パーサとして russross/blackfriday にのみ最適化されていたが,今回のマージで既定の yuin/goldmark パーサが使えるようになった。
したがって,Hugo 環境の設定ファイル(config.toml
)でも
[markup]
defaultMarkdownHandler = "blackfriday"
の指定が不要になる。
なお yuin/goldmark パーサのオプションとして
[markup.goldmark.renderer]
unsafe = true
の指定はしておいたほうがいいだろう(既定の false
のままだと本文中の HTML 記述が排除されてしまうため)。
ただし markdown パーサが変わることで shortcodes の挙動が変わるので注意が必要である。 挙動が変わりすぎて問題になるようなら russross/blackfriday パーサに戻すのも手である。
Shortcodes の挙動については,たとえば “fragment
” なら,今までの russross/blackfriday パーサであれば
{{% fragment %}}foo{{% /fragment %}}
{{% fragment %}}bar{{% /fragment %}}
と記述すれば
<p><span class='fragment'>foo</span></p>
<p><span class='fragment'>bar</span></p>
と展開されるが, yuin/goldmark パーサでは
<span class='fragment'>foo</span>
<span class='fragment'>bar</span>
てな感じになり <p>
タグが付加されない。
ちなみに
<p>{{% fragment %}}foo{{% /fragment %}}</p>
<p>{{% fragment %}}bar{{% /fragment %}}</p>
のように強制的に <p>
タグを付けても,どこかに吸い込まれてしまい,同じ結果になる。
更に行間を空けずに
{{% fragment %}}foo{{% /fragment %}}
{{% fragment %}}bar{{% /fragment %}}
とすると,合わせてひとつの段落とみなされるため
<p><span class='fragment'>foo</span>
<span class='fragment'>bar</span></p>
のように全体が <p>
タグで囲まれる。
正しいけど,それがしたいんじゃないんだって! どうにも shortcodes は挙動が謎だよなぁ。
“fragment
” の中身を見ると
{{/* Render .Inner before processing the shortcode. */}}
{{ $_hugo_config := `{ "version": 1 }` }}
<span class='fragment {{ .Get "class" }}'
{{ with .Get "index" }}data-fragment-index='{{ . }}'{{ end }}>
{{ .Inner }}
</span>
とかなっていて,どうやら 0.55 以降にすら対応していないようだ1。
とりあえず要らないものは取って
<span class='fragment{{ with .Get "class" }} {{ . }}{{ end }}'{{ with .Get "index" }} data-fragment-index='{{ . }}'{{ end }}>{{ .Inner }}</span>
てな感じに1行にしてしまえば Hugo 0.60 以降にも対応する気がするが,どういう副作用があるか分からないので,今回は放っておく。
でもこのままでは困るので,私の方で “paragraph
” shortcode を作ってみた。
中身はこんな感じ。
<p{{ with .Get "class" }} class='{{ . }}'{{ end }}{{ with .Get "lang" }} lang='{{ . }}'{{ end }}>{{ .Inner }}</p>
これを使って
{{< paragraph >}}{{% fragment %}}foo{{% /fragment %}}{{< /paragraph >}}
{{< paragraph >}}{{% fragment %}}bar{{% /fragment %}}{{< /paragraph >}}
とすれば意図通り
<p><span class='fragment'>foo</span></p>
<p><span class='fragment'>bar</span></p>
と展開される。
今回はこれで凌ぐか。 準備完了っと。