北海道苫小牧市出身の初老PGが書くブログ

永遠のプログラマを夢見る、苫小牧市出身のおじさんのちらしの裏

TTのchompの指定

ドキュメント読んでたら、こんなの見つけました。常識?

CHOMP_NONE 0 +
CHOMP_ONE 1 -
CHOMP_COLLAPSE 2 =
CHOMP_GREEDY 3 ~
http://search.cpan.org/~abw/Template-Toolkit-2.19/lib/Template/Manual/Config.pod

PRE_CHOMP と POST_CHOMP は、 0 か 1 を指定するものだと思ったら、2 とか 3 も指定出来るみたいです。tag modifier(-, =, ~, +)の指定も可能だとのこと。それぞれの意味は以下のようになっています。

:chomp # for PRE_CHOMP and POST_CHOMP
CHOMP_NONE # do not remove whitespace
CHOMP_ONE # remove whitespace to newline
CHOMP_COLLAPSE # collapse whitespace to a single space
CHOMP_GREEDY # remove all whitespace including newlines
http://search.cpan.org/~abw/Template-Toolkit-2.19/lib/Template/Constants.pm

履歴を見たところ、[%= =%]と[%~ ~%]は2.15*1から追加されたようです。全然知らなかった。

バイルのように「空白をとにかく削りたい」、って時は、[%~ ~%]を使うと幸せになれます。


検証

以下、これらのCHOMPのタイプの検証結果です。[%- -%]は改行コードにも依存します*2

テンプレ

それぞれの行の末尾、先頭にスペース4個を加えています。[%+ +%]の部分を、-、=、~にして検証しました。

ghi[% # ここから後ろの空白除去 +%]    
    jkl
mno    
    [%+ # これより前の空白除去 %]pqr
結果
[%+ +%]
ghi    
    jkl
mno    
    pqr

[%- -%](改行LF)
ghi    jkl
mno    pqr

[%- -%](改行CRLF)
ghi    jkl
mno    
pqr

[%= =%]
ghi jkl
mno pqr

[%~ ~%]
ghijkl
mnopqr

*1:2006年5月

*2:[%- -%]が空白を除去する境界を\nとしているからだと思われる。前方空白除去の場合、前の行の\nまでは消しにかかるが、その前の\rは消していない。