MovableType 4 から機能が改善されたテンプレートタグでは、変数に対して四則演算などの基本的な演算を行うことができるようになりました。しかし、それ以外の演算についてはサポートされておらず、今回、(その必要性は別として)各種のビット演算や切上げ・切捨て、乱数生成などが可能になるよう、これを無駄に拡張する MovableType プラグインを書いてみました。
MovableType 標準の op で指定できるパラメータに加えて、以下のパラメータを使用できるようになります。
& または and| または or^ または xor~ または not<< または shl>> または shr<<< または salabsintceilfloorrandpackpack 関数を適用します。右辺値を変換用のテンプレートとして適用します。unpackunpack 関数を適用します。右辺値を変換用のテンプレートとして適用します。左辺値とは name で指定された対象となる変数、右辺値とは value で指定された値です。
乱数生成を JavaScript で行う場合だと、その生成がクライアント側で行われるため、乱数値を用いてテンプレートを分岐するなどの処理(普通はやりません)ができません。このプラグインでは MTSetVar テンプレートタグが処理される段階、サーバ側でテンプレートが処理される段階で値が求められるのでアイディア次第で色々と使えると思います。…まぁ、テンプレートタグの構築にビット演算だとか、そもそもツッコミ満載の演算式が満載です。pack、unpack は地味に便利だと思うんですが(自信ナシ)
<MTSetVar name="var" value="12"> <MTSetVar name="var" value="4" op="&"> - <MTVar var> = 4 <MTSetVar name="var" value="8"> <MTSetVar name="var" value="3" op="or"> - <MTVar var> = 12 <MTSetVar name="var" value="255"> <MTSetVar name="var" value="3" op="^"> - <MTVar var> = 252 <MTSetVar name="var" value="128" op="~"> - <MTVar var> = 4294967167 <MTSetVar name="var" value="1"> <MTSetVar name="var" value="2" op="<<"> - <MTVar var> = 4 <MTSetVar name="var" value="1" op=">>"> - <MTVar var> = 2 <MTSetVar name="var" value="-123" op="abs"> - <MTVar var> = 123 <MTSetVar name="var" value="-123.456" op="int"> - <MTVar var> = -123 <MTSetVar name="var" value="-123.456" op="ceil"> - <MTVar var> = -123 <MTSetVar name="var" value="-123.456" op="floor"> - <MTVar var> = -124 <MTSetVar name="var" value="10" op="rand"> - <MTVar var> = 4.18844079672457 <MTSetVar name="var" value="10" op="rand"> - <MTVar var> = 1.45297858256043 <MTSetVar name="var" value="10" op="rand"> - <MTVar var> = 2.72018384459567 <MTSetVar name="var" value="65"> <MTSetVar name="var" value="C" op="pack"> - <MTVar var> = A <MTSetVar name="var" value="C" op="unpack"> - <MTVar var> = 65 Value Swapping with XOR <MTSetVar name="var1" value="123"> - <MTVar var1> = 123 <MTSetVar name="var2" value="456"> - <MTVar var2> = 456 <MTSetVar name="var1" value="$var2" op="xor"> <MTSetVar name="var2" value="$var1" op="xor"> <MTSetVar name="var1" value="$var2" op="xor"> - <MTVar var1> = 456 - <MTVar var2> = 123
master) ... バグ修正や機能追加など開発途中のバージョンです。開発中の新機能などをいち早く利用できますが、新しいバグが生まれていたり、テストが不十分な場合があります。