ruby-changes:4789
From: ko1@a...
Date: Sun, 4 May 2008 09:42:05 +0900 (JST)
Subject: [ruby-changes:4789] seki - Ruby:r16283 (ruby_1_8): sample/erb/erb4html.rb (ERB4Html) : add example of ERB#set_eoutvar. ERB4Html is an auto-quote ERB.
seki 2008-05-04 09:41:52 +0900 (Sun, 04 May 2008) New Revision: 16283 Added directories: branches/ruby_1_8/sample/erb/ Added files: branches/ruby_1_8/sample/erb/erb4html.rb Modified files: branches/ruby_1_8/ChangeLog Log: sample/erb/erb4html.rb (ERB4Html) : add example of ERB#set_eoutvar. ERB4Html is an auto-quote ERB. Added: branches/ruby_1_8/sample/erb/ http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/ChangeLog?r1=16283&r2=16282&diff_format=u http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/sample/erb/erb4html.rb?revision=16283&view=markup Index: ruby_1_8/ChangeLog =================================================================== --- ruby_1_8/ChangeLog (revision 16282) +++ ruby_1_8/ChangeLog (revision 16283) @@ -1,3 +1,8 @@ +Sun May 4 09:35:51 2008 Masatoshi SEKI <m_seki@m...> + + * sample/erb/erb4html.rb (ERB4Html) : add example of ERB#set_eoutvar. + ERB4Html is an auto-quote ERB. + Sat May 3 22:52:48 2008 Hidetoshi NAGAI <nagai@a...> * ext/tk/lib/tkextlib/tile.rb, ext/tk/lib/tkextlib/tile/style.rb, Index: ruby_1_8/sample/erb/erb4html.rb =================================================================== --- ruby_1_8/sample/erb/erb4html.rb (revision 0) +++ ruby_1_8/sample/erb/erb4html.rb (revision 16283) @@ -0,0 +1,60 @@ +require 'erb' + +class ERB + class ERBString < String + def to_s; self; end + + def erb_concat(s) + if self.class === s + concat(s) + else + concat(erb_quote(s)) + end + end + + def erb_quote(s); s; end + end +end + +class ERB4Html < ERB + def self.quoted(s) + HtmlString.new(s) + end + + class HtmlString < ERB::ERBString + def erb_quote(s) + ERB::Util::html_escape(s) + end + end + + def set_eoutvar(compiler, eoutvar = '_erbout') + compiler.put_cmd = "#{eoutvar}.concat" + compiler.insert_cmd = "#{eoutvar}.erb_concat" + + cmd = [] + cmd.push "#{eoutvar} = ERB4Html.quoted('')" + + compiler.pre_cmd = cmd + + cmd = [] + cmd.push(eoutvar) + + compiler.post_cmd = cmd + end +end + +if __FILE__ == $0 + page = <<EOP +<title><%=title%></title> +<p><%=para%></p> +EOP + erb = ERB4Html.new(page) + + title = "<auto-quote>" + para = "<quoted>" + puts erb.result + + title = "<auto-quote>" + para = ERB4Html.quoted("<quoted>") + puts erb.result +end -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/