■はじめに このプラグインは、 「KAGでなるべく簡単にループによる表示処理を実現する」プラグインです。 ループによる表示処理は、TJSで書こうとすると、ループ内でKAG的な表示処理を書くのが大変です。 かといって、KAGで書こうとすると、ラベルやjumpの管理が煩雑です。 なので、なるべくそういうことを意識せずにさくっと書けるものを目指しました。 ■導入方法 first.ks等で以下を実行してください。 [call storage="loopset.ks"] 以降、当プラグインの機能が使用できるようになります。 ■基本的な使い方 ループ表示処理には、大きく分けて二つのやり方があります。 単純に指定回数ループしたい時と、配列をループしたい時です。 以下では、この二つのやり方について説明します。 ○指定回数ループする 単純に指定回数ループさせて文字列を表示させたい時には、以下のように書きます。 [loopset count="3" text="hoge"] こうすると、loopsetはtextで指定された文字を3回繰り返します(例だと、hogehogehoge)。 [loopset count="f.HP" text="□"] なんて書くと、簡単にHPバーもどきが作れますね。 textのかわりにmain属性にサブルーチンを設定することもできます。 [loopset count="3" main="*main"] こうすると、loopsetは、*mainサブルーチンを3回実行します。 ○配列をループする 配列をループしたい時は、次のように書きます。 [loopset list="f.list" main="*main"] listに配列を指定すると、配列の長さ分ループしてくれます。 ちょっとトリッキーな書き方として、listで直接配列を宣言することもできます。 [loopset list="['一階の鍵','二階の鍵','玄関の鍵']" main="*main"] 便利ですね。 配列の一部分をループすることもできます。 [loopset list="['a','b','c','d','e']" main="*main" index="1" count="3"] 通常、loopsetは、配列の長さ分ループ処理をおこないますが、 count属性を指定すると、指定した長さに達した段階でループ処理をストップします。 また、index属性を指定すると、loopsetはindexで指定した数からループを始めます。 たとえば、上記の場合、indexが1なのでbからループが始まり、 長さが3(=c)に達した段階でループが終了するため、b、cの2回ループがおこなわれます。 ■サブルーチン内で使える特殊な変数とタグ mainで設定したサブルーチン内では、 tf.loopset.IDでその時ループされている配列のインデックスを受け取れます。 また、tf.loopset.valueでその時ループされている配列の要素を受け取れます。 *main [emb exp="tf.loopset.ID"]番目の要素[emb exp="tf.loopset.value"]です。[r] [return] mainで設定したサブルーチン内では、 linkタグを拡張したlooplinkタグを使うことができます。 *main [looplink target="*jump"][emb exp="tf.loopset.ID"]番目の要素[emb exp="tf.loopset.value"]です。[endlink][r] [return] このように書きます。(終了タグは、linkタグ同様、endlinkを使います) リンク先にtf.loopset.IDとtf.loopset.valueを渡すことができます。 *jump [emb exp="tf.loopset.ID"]番目の要素[emb exp="tf.loopset.value"]がクリックされました。 また、loopsetに任意の引数を渡した場合、 それをサブルーチン内で受け取ることができます。 [loopset count="3" main="*main" hoge="HOGE"] *main 任意の引数hogeの中身は[eval exp="mp.hoge"]です。 [return] ■loopsetの中で更にloopsetを使う mainで設定したサブルーチン内で、更にloopsetタグを書くこともできます。 二重配列を回す時などに便利です。 [cm] [loopset list="f.doubleArr" main="*main"][l] *main [loopset list="tf.loopset.value" main="*main2"] [return] *main2 [looplink target="*jump"]二重配列の要素[emb exp="tf.loopset.value"]です[endlink][r] [return] このように二重三重のloopsetの中でlooplinkを使った場合、 リンク先では、tf.loopset.IDの他、tf.loopset.IDsを受け取ることができます。 このtf.loopset.IDsには、 親ループ、子ループ、孫ループ…の各tf.loopset.IDが配列型で格納されています。 *jump 親ループ[emb exp="tf.loopset.IDs[0]"]周目の[r] 子ループ[emb exp="tf.loopset.IDs[1]"]周目のリンクが押されました。[r] ■タグリファレンス loopset ループ表示処理を行います。 list ループする配列を指定します。 指定しなかった場合、countで指定された値をもとに空の配列を作ります。 つまり、以下の二つは内部的には同じ意味です。 [loopset count="3" text="hoge"] [loopset list="[void,void,void]" count="3" text="hoge"] index ループ処理を配列の何番目から開始するかを指定します。 0始まりであることに注意してください。 指定しなかった場合、ループ処理は0から開始されます。 count ループ処理を配列の長さいくつまで実行するかを指定します。 指定しなかった場合、配列の長さいっぱいまでループ処理をおこないます。 list属性を指定しない場合は、必ず指定してください。 text ループ処理内で表示される文字列です。 ループ処理をおこなう場合は、text/mainのどちらかを必ず指定してください。 main ループ処理内で実行されるサブルーチンです。 ループ処理をおこなう場合は、text/mainのどちらかを必ず指定してください。 header ループ処理の最初に一度だけ実行されるサブルーチンです。 あまり使う機会はないかもしれませんが、 何度も使うループ処理の場合は、headerでまとめておいた方が便利な場合もあります。 footer ループ処理の最後に一度だけ実行されるサブルーチンです。 あまり使う機会はないかもしれませんが、 何度も使うループ処理の場合は、headerでまとめておいた方が便利な場合もあります。 storage サブルーチンが存在するksファイルを指定します。 省略した場合は、そのloopsetタグが存在するksファイル内を検索します。 looplink 基本的に、ほぼすべてのlinkタグの属性がそのまま使えます。