2002-04-29 [長年日記]

テンプレート中でのエスケープ

よく考えた見たら、今のテンプレートのエスケープはいけていなくて、テンプレート中のマクロのリテラルの中に「}」をどうやってもかけないことが発覚。とりあえず今のところ問題になっていないのでそのままにしておくとして(変更するとテンプレートを結構直さなくちゃいけなくなりそうだし)、新しい方では直さないと。

テンプレート中でのメタキャラクタは、「{}\」の3つということにして、これらの文字は「\」でエスケープする。マクロのリテラルの中に、「\」を書きたい場合にはこれもエスケープする必要があるので結局二重にエスケープすることになる。たとえば、

{@Concat("C:\\\\Windows")}

みたいな感じになる。これをテンプレートのパーサが解釈して、

@Concat("C:\\Windows")

というのをマクロのパーサに渡して、マクロのパーサは、リテラルを「C:\Windows」と解釈するという感じ。