5章 テンプレート - 6. テンプレートの展開
ある式を評価した結果の値によって多分岐したい場合には wr-switch wr-cond wr-default を使うと便利です。
wr-switch タグの内側には複数の wr-case タグを記述することができます。それぞれの wr-case タグには value= で式を指定します。wr-case タグは記述されている順にその value= に指定されている式が評価され、最初にその式の値が wr-switch の value= に指定した式の値と一致した wr-case タグのボディーが展開されます。
wr-switch タグ中の、最初に式の値が一致した wr-case のボディーのみが展開されます。wr-switch 中ふたつ以上の wr-case のボディーが展開されることはありません。
C 言語や JavaScript にある switch 構文と類似の動作をしますが、この wr-switch は、各 wr-case の最後に break を必要としません。C や JavaScript のように fall throw することはありません。
<wr-switch value="expr">
<wr-case value="expr1">
.........expr の値が expr1 の場合の展開の記述........
</wr-case>
<wr-case value="expr2">
.........expr の値が expr2 の場合の展開の記述........
</wr-case>
<wr-case value="expr3">
.........expr の値が expr3 の場合の展開の記述........
</wr-case>
<wr-case value="expr4">
.........expr の値が expr4 の場合の展開の記述........
</wr-case>
<wr-default>
.........expr の値がいずれの wr-case に指定された value= の値に
一致しない場合の展開の記述........
</wr-default>
</wr-switch>
<wr-switch value="expr">や<wr-case value="expr"> の expr に書く条件式には、式の開始と終了を表す % 記号はいりません。expr の部分は、あらかじめ % に挟まれているかのように式として評価されます。
expr の部分には任意の値を返す式を書くことができます。
<wr-switch>...</wr-switch> の内側には <wr-case>...</wr-case> の繰り返しと、最後に <wr-default>...</wr-default> のみが記述できます。ただし、例外的に wr-comment は記述することができます。
<wr-default>...</wr-default> は記述しなくても構いません。いずれの wr-case にも一致しない場合に何もしない場合には wr-default を記述する必要はありません。
1月から12月までの月の名前を生成してみます。この例では wr-default は省略されています。
<wr-switch value="number(formatDate(currentTime(), \"M\"))">
<wr-case value="1">睦月</wr-case>
<wr-case value="2">如月</wr-case>
<wr-case value="3">弥生</wr-case>
....
<wr-case value="12">師走</wr-case>
</wr-switch>
1 から 200 までの数を英語の序数表現にしてみます。
<wr-for times="200" count="n">
<wr-switch value="remainder(n, 100)">
<wr-case value="11">%n%th</wr-case>
<wr-case value="12">%n%th</wr-case>
<wr-case value="13">%n%th</wr-case>
<wr-default>
<wr-switch value="remainder(n, 10)">
<wr-case value="1">%n%st</wr-case>
<wr-case value="2">%n%nd</wr-case>
<wr-case value="3">%n%rd</wr-case>
<wr-default>%n%th</wr-default>
</wr-switch>
</wr-default>
</wr-switch>
<br>
</wr-for>