• R/O
  • SSH
  • HTTPS

hands-free: 提交


Commit MetaInfo

修订版58 (tree)
时间2011-05-18 13:20:14
作者(del#42492)

Log Message

Graphviz の Dot ファイルから文法のソースを生成する Ruby スクリプト(dot2grammar.rb) を日本語に対応させた。

更改概述

差异

--- trunk/external/Dot2Grammar/dot2grammar.rb (revision 57)
+++ trunk/external/Dot2Grammar/dot2grammar.rb (revision 58)
@@ -18,27 +18,6 @@
1818 hpp_filename = "#{grammarNameCamelized}.hpp"
1919 end
2020
21-def getUTF8Name(name)
22- if name =~ /(\\x[0-9a-fA-F]{2})+/ then
23- name = name.gsub(/\\x/, "\x")
24- puts "---start---"
25- puts name
26- buffer = name.downcase.unpack("h*")[0]
27- p buffer
28- result = ""
29- while 0 < buffer.size
30- p [buffer.slice(0, 2).to_i(16)].pack("U")
31- result = result + [buffer.slice(0, 2).to_i(16)].pack("U")
32- buffer = buffer.slice(2, buffer.size - 2)
33- end
34- p result
35- puts "--- end ---"
36- return result
37- else
38- return name
39- end
40-end
41-
4221 def getPhraseFromEdgeLabel(label)
4322 # ダブルクオーテーションがあれば削除する
4423 if label =~ /"(.+)"/ then
@@ -58,7 +37,7 @@
5837 end
5938 end
6039
61- return [getUTF8Name(label), nil, nil]
40+ return [label, nil, nil]
6241 end
6342
6443 def getNodeName(name)
@@ -71,8 +50,6 @@
7150 end
7251 end
7352
74-graph = GraphViz::parse(ARGV[0])
75-
7653 cpp_template = <<END
7754 /**
7855 * dot2grammar generated.
@@ -106,7 +83,7 @@
10683 <%-
10784 i = 0
10885 graph.each_edge do |edge|
109- (phrase, propertyInt, propertyString) = getPhraseFromEdgeLabel(edge['label'].to_s)
86+ (phrase, propertyInt, propertyString) = getPhraseFromEdgeLabel(edge['label'].source.encode('Shift_JIS', 'UTF-8'))
11087 startState = getNodeName(edge.node_one)
11188 endState = getNodeName(edge.node_two)
11289 -%>
@@ -119,7 +96,7 @@
11996 if (propertyName) {
12097 t<%= i %>->getPhrase()->setProperty(*propertyName, <%= propertyInt %>);
12198 }
122- <%- else -%>
99+ <%- elsif propertyString != nil then -%>
123100 if (propertyName) {
124101 t<%= i %>->getPhrase()->setProperty(*propertyName, "<%= propertyString %>");
125102 }
@@ -151,8 +128,13 @@
151128 #endif
152129 END
153130
131+graph = GraphViz::parse(ARGV[0])
132+
154133 open(cpp_filename, "w") do |f|
155134 f.set_encoding('UTF-8', 'UTF-8')
156135 f.write(ERB.new(cpp_template, nil, '-').result(binding))
157136 end
158-open(hpp_filename, "w") do |f| f.write(ERB.new(hpp_template, nil, '-').result(binding)) end
137+open(hpp_filename, "w") do |f|
138+ f.set_encoding('UTF-8', 'UTF-8')
139+ f.write(ERB.new(hpp_template, nil, '-').result(binding))
140+end
Show on old repository browser