hyogen ブロック
hyogen-md の制御構文は HTML コメント内に書きます。Markdown プレビューでは表示されません。
通常形: @hg … @endhg
<!--
@hg
include ./components/description.md
@endhg
-->
ショートハンド: @@ … @@
@hg / @endhg と 等価です。短く書けます。
<!--@@
include ./components/description.md
@@-->
書き方のバリエーション
改行あり・同一行・minify 相当のいずれでも認識します。
<!--@hg
const title = "Hello"
@endhg-->
<!--@hg /* ブロックコメントなら同一行でも OK */ @endhg-->
<!--@@ /* ワンライナー */ @@-->
同一行にまとめる場合、// 行コメントは行末までがコメントになるため使えません。その場合は /* */ を使ってください。
コメント
@hg 内では JavaScript と同様のコメントが使えます。
<!--
@hg
// 行コメント
/* ブロックコメント */
@endhg
-->
コードフェンス
コードフェンス(``` / ~~~)内の hyogen ブロックは 無視されます(実行しません)。
一方、フェンス本文中の ${expr} は展開します(@hg テンプレートリテラル内 ${} と同規則)。フェンス外の ${…} はリテラルのままです。\${ でエスケープできます。詳細は 式と変数展開。
```markdown
# ${title}
```
{{ }} / {{{ }}} はフェンス内でも従来どおり展開します。
出力時の扱い
デフォルトでは、レンダリング後の Markdown から hyogen コメントは 除去されます。デバッグ用に残す場合は preserveHgComments: true を指定します。
echo
echo <式> は、囲んでいる @hg / @@ コメントを 評価結果の文字列で置換して本文へ出力します。
<!--
@hg
const greet = "Hello world!"
echo greet
@endhg
-->
出力:
Hello world!
宣言と echo を分けて書くこともできます:
<!--@hg
const greet = "Hello world!"
@endhg-->
<!--@@ echo greet @@-->
同一ブロック内の複数 echo(for / do…while 内を含む)は区切りなしで連結します。null / undefined は空文字になります({{ }} と同じ)。
二層モデル
| 領域 | 内容 |
|---|---|
| hyogen ブロック内 | 宣言・代入・echo・include・if / each の構造ディレクティブなど |
{{ }} 内 | 式のみ |