MoonWolfです。

Masatoshi SEKI wrote:
> えっと、
> 行頭が<%で、行末が%>は改行を削除するつもりでした。
> <% ... %>foo<% ... %>\n
> でも削除という意味です。
> この仕様の是非については、全然主張はありません。

trimの処理は物理行か、対応する<%〜%>で完結したほうが判りやすいです。
[ruby-list:37896]の例のように<%と%>が対応していなくて、
しかも行が違うとなると改行が出力されない原因を調べるのが大変です。

> 現在のところ、"<%", "<%=", "<%#"ではじまって"%>"で終わる時の改行を
> 削除しようと思っています。

これは対応する<%〜%>でtrimするということですよね?

例1のような複数行の<%〜%>はtrimして、例2ではtrimしないということでよいですか?

  例1
  <%
    title = cgi['title'][0]
    body  = cgi['body'][0]
  %>

  例2
  <% ... %>foo<% ... %>

> CVS版(roughの方)はエスケープの挙動をerubyにそろえたつもりです。
> もうちょっといろいろ試してみます。

ERbLightとの互換性が無くなりますね。
tDiaryでは2段階でERbLightを適用する為、'<%%=footer_proc%%>'という記述を
していますが、ERBを使用する場合は'<%%=footer_proc%>'と書かなければいけない。

まぁtDiaryはERbLightを同梱してるから実害はなさそうですが。


<%〜%>の中に行コメント(#)を書くと同じ行にあるテキストや<%〜%>まで影響を受けてしまいます。

  $ erb -x
  <% # %> foo <%="bar"%>
  ^D
  _erbout = '';  # ; _erbout.concat " foo "; _erbout.concat(("bar").to_s); _erbout
  .concat "\n"
  _erbout;

erubyも同じように行コメントの影響を受けるようです。

  $ ruby -r eruby -e'puts ERuby::Compiler.new.compile_file(STDIN)'
  <% # %> foo <%="bar"%>
  ^D
   # ; print " foo "; print(("bar")); print "\n"

これは実装の都合でしょうか? それとも仕様?