Hugo 0.60+ 向けに reveal-hugo がアップデートされたようだ

no extension

Hugo 用のスライド・テーマ reveal-hugoHugo 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>

と展開される。

今回はこれで凌ぐか。 準備完了っと。

ブックマーク


  1. この {{ $_hugo_config := `{ "version": 1 }` }}Hugo 0.55 より前のバージョンの shortcodes の互換性を確保するための設定である。 ↩︎