For Development HEAD DRAFTSearch (procedure/syntax/module):

12.80 text.template - 簡単なテンプレート拡張

Module: text.template

このモジュールは、Gauche組み込みの文字列補間機能をより一般的なテンプレートエンジンとして 使えるようにするものです。

Gaucheの文字列補間構文はソース読み込み時にマクロ呼び出しへと展開され、 さらにマクロ展開器により展開されて単純なSchemeコード片となります。 例えば、次のソースコードがある場合:

(let ([x 10])
  #"The square of x is ~(* x x).")

マクロ展開後の最終形は次のコードになります:

(let ([x 10])
  (string-append '"The square of x is " (x->string (* x.0 x.0)) '"."))

これも一種のテンプレート展開と言えるのですが、文字列補間ではテンプレート文字列が 文字列リテラルとしてソースコード上に現れていなければならないという制限があります。 このモジュールでは、文字列と束縛を実行時に与えることができます:

(define *template* "The square of x is ~(* x x).")

(expand-template-string *template*
  (make-template-environment :bindings '(x 10)))
  ⇒ "The square of x is 100."

テンプレート文字列の構文は文字列補間のそれと同じです(文字列の補間参照)。 すなわち、~に続くトークンがScheme式として呼ばれます。もしトークンがシンボルで、 その後の続く文字から区切る必要がある場合は、|によるシンボルエスケープが使えます。

また、テンプレート展開時には、テンプレート中の式を評価するための テンプレート環境を与える必要があります。 文字列補間と違って、テンプレート中の式がローカル束縛を参照することはできません。

Function: expand-template-string template env

テンプレート文字列templateを、テンプレート環境envのもとで展開し、 結果の文字列を返します。

Function: expand-template-file filename env :optional paths

テンプレート文字列をfilenameで指定されるファイルから読み込み、 テンプレート環境envのもとでそれを展開し、結果の文字列を返します。

filenameが絶対パスでない場合は、paths中のディレクトリからの相対パスで 探されます。

Function: make-template-environment :key extends imports bindings

テンプレート環境を作成して返します。テンプレート環境はモジュールのようなものです (モジュール参照)。それはシンボルを値にマップし、 また他のモジュールから束縛をインポートしたり、他のモジュールをextendしたりできます。

キーワード引数extendsimportsはシンボルのリストを取り、 それぞれ継承元のモジュール、あるいはインポート元のモジュールを指定します。

キーワード引数bindingsはディクショナリ(<dictionary>のサブクラスの インスタンス)か、key-valueリストでなければなりません。 それにより表される束縛が環境に取り込まれます。



For Development HEAD DRAFTSearch (procedure/syntax/module):
DRAFT