[kansaipm] テンプレートコマンドのタグ

Yasushi Nakajima sey at jkc.co.jp
Sat Aug 31 09:17:10 CDT 2002


 Greeに関してまたまたお知恵拝借。

 先の例では、@[...]@ というタグを使っていました。これをやめて *[...]* 
にしようかと考え中です。というのは、'@' はShift_JISでは第2バイトに現れ
る文字なので、例えば全角スペースの後に [ があると誤認識する。そのために
「Shift_JISの場合はjperlを使ってね」となるが、気軽にCGIで使うためにはそ
れは避けたい。

 Greeはフォーマットについて汎用性を狙っていて、HTMLやXMLだけでなくTeXも
ターゲットにしています。そのために、タグにTeX(正確にはLaTeX)の特殊文字
は使えない。だから、Template-Toolkitの [%...%] は採用できませんでした。
フォーマットに応じたクラスでタグを変えることも簡単にできるように作ってあ
りますが、やはりデフォルトのタグにできるだけ汎用性を持たせたい。

 つまり、開始タグの一文字目は、Shift_JISの第2バイトに現れない記号文字
で、なおかつHTMLでもXMLでもLaTeXでも特殊文字ではない文字。2文字目以降は
後者の条件のみ。終了タグについては、タグ内に日本語文字列が現れるのはフィー
ルド名の場合のみで、その場合は記号が後ろに付くことはないので、後者の条件
のみでよい。すると、

・開始タグの一文字目に使える文字
  ! ' ( ) * + , - . / : ; = ?

・タグのそれ以外の部分では次の文字もOK
  @ [ ] `

ということに。

 さらにもう一つ考慮すべき条件が。それは、少なくとも開始タグは、通常のテ
キストの内容として現れない文字列であることが望ましい。もちろん \ でのエ
スケープという手段は用意していますが、しょっちゅう出てくるようだと困りま
す。つまり「記号のヘンな組み合わせ」にしておくということです。その場合に
気を付けなければならないのが、プログラムコードに現れにくいということです。
文書中にプログラム例としてコードが現れることはよくありますから。少なくと
も、CやC++やC#やJavaや、もちろんPerlやRubyも、のコードに現れにくい(でき
れば現れない)ものにしておきたい。

 その点で、@[ というのはいい線行ってると思ってたのですが、*[ はどうでしょ
うか。どなたか、*[ という文字列がプログラムコードに現れるようなケースを
ご存じでしょうか?あるいはもっとよい開始タグの案があるでしょうか?

	※…と、ここまで書いてきて自分で気づきました。@[ にせよ *[ にせ
	  よ、正規表現の中には現れうるぞ!うーん。

 もちろんこの問題は絶対的な解決はなくて、どこかで妥協しなければならない
のですが。


中島 靖




More information about the Kansai-pm mailing list