修订版 | 58 (tree) |
---|---|
时间 | 2011-05-18 13:20:14 |
作者 | (del#42492) |
Graphviz の Dot ファイルから文法のソースを生成する Ruby スクリプト(dot2grammar.rb) を日本語に対応させた。
@@ -18,27 +18,6 @@ | ||
18 | 18 | hpp_filename = "#{grammarNameCamelized}.hpp" |
19 | 19 | end |
20 | 20 | |
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 | - | |
42 | 21 | def getPhraseFromEdgeLabel(label) |
43 | 22 | # ダブルクオーテーションがあれば削除する |
44 | 23 | if label =~ /"(.+)"/ then |
@@ -58,7 +37,7 @@ | ||
58 | 37 | end |
59 | 38 | end |
60 | 39 | |
61 | - return [getUTF8Name(label), nil, nil] | |
40 | + return [label, nil, nil] | |
62 | 41 | end |
63 | 42 | |
64 | 43 | def getNodeName(name) |
@@ -71,8 +50,6 @@ | ||
71 | 50 | end |
72 | 51 | end |
73 | 52 | |
74 | -graph = GraphViz::parse(ARGV[0]) | |
75 | - | |
76 | 53 | cpp_template = <<END |
77 | 54 | /** |
78 | 55 | * dot2grammar generated. |
@@ -106,7 +83,7 @@ | ||
106 | 83 | <%- |
107 | 84 | i = 0 |
108 | 85 | 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')) | |
110 | 87 | startState = getNodeName(edge.node_one) |
111 | 88 | endState = getNodeName(edge.node_two) |
112 | 89 | -%> |
@@ -119,7 +96,7 @@ | ||
119 | 96 | if (propertyName) { |
120 | 97 | t<%= i %>->getPhrase()->setProperty(*propertyName, <%= propertyInt %>); |
121 | 98 | } |
122 | - <%- else -%> | |
99 | + <%- elsif propertyString != nil then -%> | |
123 | 100 | if (propertyName) { |
124 | 101 | t<%= i %>->getPhrase()->setProperty(*propertyName, "<%= propertyString %>"); |
125 | 102 | } |
@@ -151,8 +128,13 @@ | ||
151 | 128 | #endif |
152 | 129 | END |
153 | 130 | |
131 | +graph = GraphViz::parse(ARGV[0]) | |
132 | + | |
154 | 133 | open(cpp_filename, "w") do |f| |
155 | 134 | f.set_encoding('UTF-8', 'UTF-8') |
156 | 135 | f.write(ERB.new(cpp_template, nil, '-').result(binding)) |
157 | 136 | 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 |