ZF入門も書かずに脈絡なく。しかも.NET 1.1。ごめん、がんばる。
ここしばらく久しぶりに仕事でC#を使っている。まぁだいぶ勘も戻ってきて、「やっぱ慣れてる言語はよいなー」とか思っていたのだが、ちょっと欲しい機能が見つからなかった。
いま実装中の機能で、DataSetにキャッシュしたデータをもとにUPDATE用のクエリを生成するのだが、状況によってすこしだけ異なるクエリを生成し分ける必要にせまられ、簡単なテンプレートエンジンが欲しくなったのだ。
ひょっとするとすでに優秀なライブラリがあるかもしれない(実はあとでNVelocityなんてのがあることに気づいた)が、探して評価している時間もないので割り切った機能で自作をしてみた。
仕事で作ったやつなのでネタにするのはちょっと抵抗あるが、仕様検討も含めて1時間かかるかかからないかくらいの規模だし、どうせ誰かが似たようなやつ作ってるだろうしでソースを公開してみることにした。需要あるかはわからんけど。
ってほど機能があるわけではないが、標準のString.Formatのインデックスベースのプレースホルダの代わりにIDictionaryのキーやDataColumnのカラム名を使うように考えた。要はこちらで紹介されている「JSON - String.prototype.supplant」みたいな記法だ。
たとえば
string template = "name={Name}, value={Value}";
みたいなテンプレートがあって、これに
ただし、パラメータ名の表記は後ろにコロン+フォーマット指定ができるように展開するため、String.Formatと同様にフォーマット指定できるようにしてみた。
ソースみればだいたいわかると思うが、以下のようなプロセスで展開する。
このくらいの感じ。例によってNYSLってことで。
セコメントをする