hyogen-md

0.10.0

制御構造

条件分岐、ループ、レイアウト継承を hyogen ブロックで書きます。ifeach本文を挟む構造ディレクティブです(Pug 風)。

if / else / else if

<!--
@hg
const isNight = true
@endhg
-->

# Light Status

Night is {{ isNight }}.
<!--
@hg
if isNight
@endhg-->
I can see the full moon.
<!--
@hg
else
@endhg-->
I can see the shiny sun.
<!--
@hg
endif
@endhg
-->

構造

if <式> … 本文 …(else if <式> … 本文 …)* …(else … 本文 …)? … endif

  • 条件式は &#123;&#123; &#125;&#125; 内と同じ式(JS の truthy / falsy で評価)
  • 分岐内に each や入れ子 if を書ける
  • 空の分岐(本文なし)も可
  • 未対の if や余分な endifparse_error

else if の例

<!--
@hg
if score >= 90
@endhg-->
Grade A.
<!--
@hg
else if score >= 60
@endhg-->
Grade B.
<!--
@hg
else
@endhg-->
Grade C.
<!--
@hg
endif
@endhg
-->

each

配列やオブジェクトの配列をループします。

<!--
@hg
const data = ["apple", "banana", "orange"]
@endhg
-->

# Fruits

<!--
@hg
each item in data
@endhg
-->
- {{ item }}
<!--
@hg
endeach
@endhg
-->

オブジェクトの配列:

<!--
@hg
each item in data
@endhg
-->
- {{ item.key }} is {{ item.value }}
<!--
@hg
endeach
@endhg
-->

ネスト上限

if / each構造ネスト合計は最大 20 です。超過すると当該ブロックをスキップし、nest_limit_exceeded 警告が出ます。

extend / block

レイアウト継承とブロック上書きです(Pug / Blade / Twig 風)。多重継承はサポートしません

layout.md

# {{ title }}

{{ description }}

<!--
@hg
block contents
@endhg-->

Default contents here.

<!--
@hg
endblock
@endhg
-->

---

Copyright example LLC.

page.md

<!--
@hg
extend layout.md

const title = "My Page"
const description = "A sample page"
@endhg
-->

<!--
@hg
block contents
@endhg-->

Custom page content.

<!--
@hg
endblock
@endhg
-->

ルール

項目内容
終了タグendblock のみ(end block は不可)
extend の位置ファイル先頭の @hg で必須(その上に front matter は可)
block 以外の本文子(extend する側)では 無視
未定義の blocklayout のデフォルト本文が残る
component 内不可(スキップ + 警告)

関連