Markdown レンダーフック
レンダーフックにより、カスタムテンプレートがマークダウンのレンダリングをオーバーライドできるようになります。
これは、 Goldmark レンダラーでのみサポートされていることに注意してください。
layouts/_default/_markup
にベース名 render-{kind}
を持つテンプレートを作成することで、HTML へのデフォルトの Markdown レンダリングの特定の部分をオーバーライドできます。
また、たとえば layouts/blog/_markup
のように、layouts/[type/section]/_markup
にタイプ/セクション固有のフックを作成することもできます。
現在サポートされているフックの種類は、以下のとおりです。
image
link
heading
codeblock
必要に応じて、出力形式
および 言語
固有のテンプレートを定義できます。 layouts
フォルダーは、以下のようになります。
上記のいくつかの使用例には、以下があります。
- リンクの参照は
.GetPage
を使って解決します。これにより、./my-post.md
(および GitHub で動作する同様の構造) を/blog/2019/01/01/my-post/
などに変換できるため、リンクが移植可能になります。 - 外部リンクに
target=_blank
を追加します。 - 画像を解決して 処理 します。
- ヘッダーリンク を追加します。
見出し、リンク、画像のレンダーフック
render-link
と render-image
に渡されるコンテキスト
render-link
および render-image
テンプレートは、以下のコンテキストを受け取ります。
- Page
- レンダリングされる Page です。
- Destination
- URL です。
- Title
- タイトル属性です。
- Text
- レンダリングされた (HTML) リンクテキストです。
- PlainText
- 上記のプレーンテキストのバリアントです。
render-Heading
に渡されるコンテキスト
render-heading
テンプレートは、以下のコンテキストを受け取ります。
- Page
- レンダリングされる Page です。
- Level
- ヘッダーレベル (1 から 6)
- Anchor
- ページ内のヘッダーに固有の自動生成された html ID です。
- Text
- レンダリングされた (HTML) テキストです。
- PlainText
- 上記のプレーンテキストのバリアントです。
- Attributes (map)
- 属性のマップ (たとえば、
id
、class
) です。現在、リンクの場合、これは常に空であることに注意してください。
また、render-image
テンプレートは、以下のコンテキストも受け取ることになります。
- IsBlock
- これがスタンドアロン画像で、設定オプション markup.goldmark.parser.wrapStandAloneImageWithinParagraph が無効になっている場合は true を返します。
- Ordinal
- 現在のドキュメントに含まれるすべての画像のゼロから始まる序数。
タイトル付きリンク Markdown の例
[Text](https://www.gohugo.io "Title")
以下は、render-link.html テンプレートがどのように見えるかのコード例です。
<a href="{{ .Destination | safeURL }}"{{ with .Title }} title="{{ . }}"{{ end }}{{ if strings.HasPrefix .Destination "http" }} target="_blank" rel="noopener"{{ end }}>{{ .Text | safeHTML }}</a>
画像 Markdown の例
![Text](https://gohugo.io/images/hugo-logo-wide.svg "Title")
以下は、render-image.html テンプレートがどのように見えるかのコード例です。
<p class="md__image">
<img src="{{ .Destination | safeURL }}" alt="{{ .Text }}" {{ with .Title }} title="{{ . }}"{{ end }} />
</p>
見出しリンクの例
以下のテンプレートファイル、
<h{{ .Level }} id="{{ .Anchor | safeURL }}">{{ .Text | safeHTML }} <a href="#{{ .Anchor | safeURL }}">¶</a></h{{ .Level }}>
と、以下の Markdown ファイルに対して、
### Section A
レンダリングされた html は以下のようになります
<h3 id="section-a">Section A <a href="#section-a">¶</a></h3>
コードブロックのためのレンダーフック
すべてのコードブロックまたは特定のタイプ/言語 (以下の例では bash
) のフックテンプレートを追加できます。
これらのコードブロックのデフォルトの動作は、コードのハイライト表示 ですが、これらのコードブロックに属性を渡すことができるので、ほとんどのことに使用できます。一例として、組み込みの GoAT ダイアグラム や、この Mermaid ダイアグラム コードブロック フック の例などがあります。
コードブロック テンプレートで受け取るコンテキスト (".") には、以下のものが含まれます。
- Type (string)
- コードブロックの種類を指定します。これは、コードのハイライト表示を行う際のプログラミング言語、たとえば
bash
になります。 - Attributes (map)
- Markdown から渡された属性です (たとえば、
{ attrName1=attrValue1 attrName2="attr Value 2" }
)。 - Options (map)
- Chroma ハイライト処理オプションです。これは
Type
が既知の Chroma Lexer である場合にのみ入力されます。 - Inner (string)
- コード フェンス間のテキストです。
- Ordinal (integer)
- 現在のドキュメントに含まれるすべてのコードブロックのゼロベースの (ゼロから始まる) 序数です。
- Page
- 所有する
Page
です。 - Position
- ファイル名と位置 (行番号、列) を出力するため、エラーログに役立ちます。たとえば、
{{ errorf "error in code block: %s" .Position }}
です。