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

ruby-changes:9684

From: akr <ko1@a...>
Date: Thu, 1 Jan 2009 15:28:47 +0900 (JST)
Subject: [ruby-changes:9684] Ruby:r21225 (trunk): * ext/socket/mkconstants.rb: use erb.

akr	2009-01-01 15:28:34 +0900 (Thu, 01 Jan 2009)

  New Revision: 21225

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=21225

  Log:
    * ext/socket/mkconstants.rb: use erb.

  Modified files:
    trunk/ChangeLog
    trunk/ext/socket/mkconstants.rb

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 21224)
+++ ChangeLog	(revision 21225)
@@ -1,3 +1,7 @@
+Thu Jan  1 15:27:07 2009  Tanaka Akira  <akr@f...>
+
+	* ext/socket/mkconstants.rb: use erb.
+
 Thu Jan  1 15:07:56 2009  Tanaka Akira  <akr@f...>
 
 	* ext/socket/mkconstants.rb: add -o option.
Index: ext/socket/mkconstants.rb
===================================================================
--- ext/socket/mkconstants.rb	(revision 21224)
+++ ext/socket/mkconstants.rb	(revision 21225)
@@ -1,4 +1,5 @@
 require 'optparse'
+require 'erb'
 
 opt = OptionParser.new
 
@@ -12,43 +13,59 @@
   opt_o = filename
 }
 
-$out = ''
-def $out.puts(str="")
-  str += "\n" if /\n\z/ !~ str
-  self << str
+C_ESC = {
+  "\\" => "\\\\",
+  '"' => '\"',
+  "\n" => '\n',
+}
+
+0x00.upto(0x1f) {|ch| C_ESC[[ch].pack("C")] ||= "\\%03o" % ch }
+0x7f.upto(0xff) {|ch| C_ESC[[ch].pack("C")] = "\\%03o" % ch }
+C_ESC_PAT = Regexp.union(*C_ESC.keys)
+
+def c_str(str)
+  '"' + str.gsub(C_ESC_PAT, C_ESC) + '"'
 end
 
 opt.parse!
 
+result = ''
+
 # workaround for NetBSD, OpenBSD and etc.
-$out.puts("#define pseudo_AF_FTIP pseudo_AF_RTIP")
+result << "#define pseudo_AF_FTIP pseudo_AF_RTIP\n"
 
-# skip empty lines and comment lines
-DATA.each_line do |s|
-  name, value = s.scan(/\S+/)
-  if name && name[0] != ?#
+def each_data
+  DATA.each_line {|s|
+    name, default_value = s.scan(/\S+/)
+    next unless name && name[0] != ?#
     if name =~ /\AINADDR_/
       define = "sock_define_uconst"
     else
       define = "sock_define_const"
     end
-    $out.puts("#ifdef #{name}")
-    $out.puts("    #{define}(\"#{name}\", #{name});")
-    if value
-    $out.puts("#else")
-    $out.puts("    #{define}(\"#{name}\", #{value});")
-    end
-    $out.puts("#endif")
-    $out.puts
-  end
+    yield define, name, default_value
+  }
 end
 
+result << ERB.new(<<'EOS', nil, '%').result(binding)
+% each_data {|define, name, default_value|
+#ifdef <%=name%>
+    <%=define%>(<%=c_str name%>, <%=name%>);
+%   if default_value
+#else
+    <%=define%>(<%=c_str name%>, <%=default_value%>);
+%   end
+#endif
+
+% }
+EOS
+
 if opt_o
   File.open(opt_o, 'w') {|f|
-    f << $out
+    f << result
   }
 else
-  $stdout << $out
+  $stdout << result
 end
 
 __END__

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

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