[ruby-list:47947] Re: Erubis新機能予告 (Re: eRuby における % 行)
From:
Makoto Kuwata <kwa@...>
Date:
2011-03-22 11:48:53 UTC
List:
ruby-list #47947
桑田です。リプライが遅れてすみません。
2011/2/25 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>:
> 西山和広です。
>
> At Wed, 23 Feb 2011 22:05:24 +0900,
> Makoto Kuwata wrote:
>
>> ほかに「こんな機能が欲しい」というのがもしあれば、今のうちに
>> おしらせください。
>
> 「%%>」に対応してほしいです。
>
> どういうものなのかは
> http://jp.rubyist.net/magazine/?0017-BundledLibraries
> に書いています。
ERBと違い、Erubisのパーサは正規表現を使ったシンプルな仕組みなので、
「<%%」はサポートできますが「%%>」をサポートできません。
これは技術上の制約からくる仕様です。
> http://znz.s1.xrea.com/t/?date=20110127#p01 に書いたように
> eRuby と非互換なものとは知らずに使って驚いてしまったので、
> 出来れば対応しておいて欲しいです。
そちらの日記を読むと、「%%>」があたかもeRubyの仕様のように書かれてますが、
「<%%」や「%%>」はERB独自の拡張仕様であり、eRubyの仕様ではないです。
Erubisでは技術的に容易な範囲でのみ、ERB独自仕様に追従しています。
これはtrimモードについても同様です。
#そもそもERBの「<%% %%>」はあまりいい仕様とは思えないので真似したくない。
ERBのこの独自仕様は、もともとeRubyを生成するようなeRubyを使うためだと思いますが、
そのような場合、Erubisでは「%%>」のかわりに「%<% %>>」を使うか、
別の埋め込み書式を指定することを強く推奨します。
require 'erubis'
input = <<'END'
[% for item in ['name', 'mail', 'desc'] %]
<p><%= @[%= item %] %></p>
[% end %]
END
pattern = '\\[% %\\]' # or '<%% %%>', etc...
puts Erubis::Eruby.new(input, :pattern=>pattern).result
### 実行結果
#<p><%= @name %></p>
#<p><%= @mail %></p>
#<p><%= @desc %></p>
--
regards,
makoto kuwata