Hugo テーマ 6. Render Hook
2024-08-16 12:36:24 hugo#5 の題材を、今度は Render Hook という機能を使って実装します。
この記事では、最初に少しだけまとめを入れて、次にコードを提示し、そのうえで Render Hook の解説(自分が理解したこと)を書いていきます。
Render Hook とは
Markdown から変換する場合にのみ使える、HTML への変換結果を書き換える方法です。
おおむね、Shortcode と同じ感覚で書き換えの記述をすることができます。
今回やること
Markdown で記述できるリンク [text](destination)
を、destination の内容に応じて次の2パターンの HTML のいずれかに変換します。
<a href="destination">text</a>
<a href="destination" target="_blank" rel="external noopener noreferer">text</a>
Shortcode との違い
- テーマの利用者側
- 😃 Shortcode を呼び出す記述をしなくて済む。
- 😃 意識せずとも、テーマを使うだけで、気が利いた機能を享受できる。
- 🤨 利用者側では変換結果を意識して切り替えることはできない。
- 😨 Markdown 以外の形式で記述している場合は利用できない。
- テーマを作る側
- 😃 Shortcode と比べて、大して記述内容が変わらない。(とはいえ、若干の変更は必要)
- 😨 Markdown の文法・記述ルールを拡張する仕組みではない。
- 🤨 Shortcode との使い分けを考える必要はある。(Render Hook できるものは少数だし、Shortcode の方が柔軟性が高い)
- 🤨 テーマを使ってもらう上でのルールを作っているのだと捉える必要がある。それだけの必然性があるか、有用か、といったことを考える必要がある。
最終形
|
|
ファイルの配置は以下の通りです。 (関係あるファイルのみ表示)
> tree /a /f
\---themes
\---cheep
\---layouts
\---_default
\---_markup
render-link.html
Render Hook
使える局面
Markdown を HTML に変換する際のルールを変える仕組みです。 そのため、Markdown として記述ができないものには、この仕組みを適用することはできません。
また、適用できるものも限られています。
- Blockquote
- Code block
- Heading
- Image
- Link
- Passthrough elements (よく分かっていない)
Hugo 公式のドキュメント Render Hooks Introduction ☐↗ には、上記の内容と、ファイルを配置するべき場所が記載されています。
テンプレートファイルの配置場所
Render Hook もテンプレートとして記述します。
その配置場所は以下の通り。
layouts
\---_default
\---_markup
render-blockquote.html
render-codeblock.html
render-heading.html
render-image.html
render-link.html
Hugo 公式のドキュメント Render Hooks Introduction ☐↗ には、もう少し細かい内容が記載されています。 また、各 Render Hook 内で利用できる Context (プロパティ) が列挙されています。
注意点
私が使った範囲だと注意点はあまりないのですが、Shortcode と違い、$.Site
の形でサイトを参照することはできません。
ただ、どの Render Hook でも .Page.Site
として参照できるようですので、さほど困ることは無いと思われます。
- 📄 Hugo テーマ 6. Render Hook2024-08-16 12:36:24#5 の題材を、今度は Render Hook という機能を使って実装します。
- 📄 pomi2024-08-16 10:26:05ポメラSyncされたメモを操作するツール →後継のソフトウェアpmsyncを使ってください。
- 📄 Goでテーブル駆動のベンチマークをとる方法2024-08-16 10:26:05公式に記載ありますが、まとめてみます。
- 📄 slog-handler-guide2024-08-16 10:26:05slog-handler-guide の解説
- 📄 Popcorn2024-08-16 10:26:05自分がよく使うコマンドを登録して呼び出すための Vim script
- 📄 Ergodox EZ キーボードレイアウト2024-08-16 10:26:05JISレイアウトを参考にした、Ergodox EZ のキーボードレイアウト
- 📄 Go言語でのスタックトレースを簡素化する2024-08-16 10:26:05Go言語のパッケージ: 冗長なスタックトレースを簡素化して出力します。
- 📄 Keychron K15 Pro2024-08-15 21:30:59買ったので雑に感想でも書いてみます。
- 📄 Vim LSP メモ2024-08-15 21:30:59忘れそうな内容をメモ
- 📄 GOEXPERIMENT + Build Constraints2024-08-15 21:30:59例えば GOEXPERIMENT=rangefunc の場合にビルドしたい/したくない場合の書き方