[前][次][番号順一覧][スレッド一覧]

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 = "&lt;quoted&gt;"
+  puts erb.result
+
+  title = "<auto-quote>"
+  para = ERB4Html.quoted("&lt;quoted&gt;")
+  puts erb.result
+end

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]