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/