1 =begin
2 poparser.rb - Generate a .mo
3
4 Copyright (C) 2003-2009 Masao Mutoh <mutoh at highway.ne.jp>
5
6 You may redistribute it and/or modify it under the same
7 license terms as Ruby.
8 =end
9
10 #MODIFIED
11 # removed include GetText etc
12 # added stub translation method _(x)
13 require 'racc/parser'
14
15 module GetText
16
17 class PoParser < Racc::Parser
18
19 def _(x)
20 x
21 end
22
23 module_eval <<'..end src/poparser.ry modeval..id7a99570e05', 'src/poparser.ry', 108
24 def unescape(orig)
25 ret = orig.gsub(/\\n/, "\n")
26 ret.gsub!(/\\t/, "\t")
27 ret.gsub!(/\\r/, "\r")
28 ret.gsub!(/\\"/, "\"")
29 ret
30 end
31
32 def parse(str, data, ignore_fuzzy = true)
33 @comments = []
34 @data = data
35 @fuzzy = false
36 @msgctxt = ""
37 $ignore_fuzzy = ignore_fuzzy
38
39 str.strip!
40 @q = []
41 until str.empty? do
42 case str
43 when /\A\s+/
44 str = $'
45 when /\Amsgctxt/
46 @q.push [:MSGCTXT, $&]
47 str = $'
48 when /\Amsgid_plural/
49 @q.push [:MSGID_PLURAL, $&]
50 str = $'
51 when /\Amsgid/
52 @q.push [:MSGID, $&]
53 str = $'
54 when /\Amsgstr/
55 @q.push [:MSGSTR, $&]
56 str = $'
57 when /\A\[(\d+)\]/
58 @q.push [:PLURAL_NUM, $1]
59 str = $'
60 when /\A\#~(.*)/
61 $stderr.print _("Warning: obsolete msgid exists.\n")
62 $stderr.print " #{$&}\n"
63 @q.push [:COMMENT, $&]
64 str = $'
65 when /\A\#(.*)/
66 @q.push [:COMMENT, $&]
67 str = $'
68 when /\A\"(.*)\"/
69 @q.push [:STRING, $1]
70 str = $'
71 else
72 #c = str[0,1]
73 #@q.push [:STRING, c]
74 str = str[1..-1]
75 end
76 end
77 @q.push [false, '$end']
78 if $DEBUG
79 @q.each do |a,b|
80 puts "[#{a}, #{b}]"
81 end
82 end
83 @yydebug = true if $DEBUG
84 do_parse
85
86 if @comments.size > 0
87 @data.set_comment(:last, @comments.join("\n"))
88 end
89 @data
90 end
91
92 def next_token
93 @q.shift
94 end
95
96 def on_message(msgid, msgstr)
97 if msgstr.size > 0
98 @data[msgid] = msgstr
99 @data.set_comment(msgid, @comments.join("\n"))
100 end
101 @comments.clear
102 @msgctxt = ""
103 end
104
105 def on_comment(comment)
106 @fuzzy = true if (/fuzzy/ =~ comment)
107 @comments << comment
108 end
109
110
111 ..end src/poparser.ry modeval..id7a99570e05
112
113 ##### racc 1.4.5 generates ###
114
115 racc_reduce_table = [
116 0, 0, :racc_error,
117 0, 10, :_reduce_none,
118 2, 10, :_reduce_none,
119 2, 10, :_reduce_none,
120 2, 10, :_reduce_none,
121 2, 12, :_reduce_5,
122 1, 13, :_reduce_none,
123 1, 13, :_reduce_none,
124 4, 15, :_reduce_8,
125 5, 16, :_reduce_9,
126 2, 17, :_reduce_10,
127 1, 17, :_reduce_none,
128 3, 18, :_reduce_12,
129 1, 11, :_reduce_13,
130 2, 14, :_reduce_14,
131 1, 14, :_reduce_15 ]
132
133 racc_reduce_n = 16
134
135 racc_shift_n = 26
136
137 racc_action_table = [
138 3, 13, 5, 7, 9, 15, 16, 17, 20, 17,
139 13, 17, 13, 13, 11, 17, 23, 20, 13, 17 ]
140
141 racc_action_check = [
142 1, 16, 1, 1, 1, 12, 12, 12, 18, 18,
143 7, 14, 15, 9, 3, 19, 20, 21, 23, 25 ]
144
145 racc_action_pointer = [
146 nil, 0, nil, 14, nil, nil, nil, 3, nil, 6,
147 nil, nil, 0, nil, 4, 5, -6, nil, 2, 8,
148 8, 11, nil, 11, nil, 12 ]
149
150 racc_action_default = [
151 -1, -16, -2, -16, -3, -13, -4, -16, -6, -16,
152 -7, 26, -16, -15, -5, -16, -16, -14, -16, -8,
153 -16, -9, -11, -16, -10, -12 ]
154
155 racc_goto_table = [
156 12, 22, 14, 4, 24, 6, 2, 8, 18, 19,
157 10, 21, 1, nil, nil, nil, 25 ]
158
159 racc_goto_check = [
160 5, 9, 5, 3, 9, 4, 2, 6, 5, 5,
161 7, 8, 1, nil, nil, nil, 5 ]
162
163 racc_goto_pointer = [
164 nil, 12, 5, 2, 4, -7, 6, 9, -7, -17 ]
165
166 racc_goto_default = [
167 nil, nil, nil, nil, nil, nil, nil, nil, nil, nil ]
168
169 racc_token_table = {
170 false => 0,
171 Object.new => 1,
172 :COMMENT => 2,
173 :MSGID => 3,
174 :MSGCTXT => 4,
175 :MSGID_PLURAL => 5,
176 :MSGSTR => 6,
177 :STRING => 7,
178 :PLURAL_NUM => 8 }
179
180 racc_use_result_var = true
181
182 racc_nt_base = 9
183
184 Racc_arg = [
185 racc_action_table,
186 racc_action_check,
187 racc_action_default,
188 racc_action_pointer,
189 racc_goto_table,
190 racc_goto_check,
191 racc_goto_default,
192 racc_goto_pointer,
193 racc_nt_base,
194 racc_reduce_table,
195 racc_token_table,
196 racc_shift_n,
197 racc_reduce_n,
198 racc_use_result_var ]
199
200 Racc_token_to_s_table = [
201 '$end',
202 'error',
203 'COMMENT',
204 'MSGID',
205 'MSGCTXT',
206 'MSGID_PLURAL',
207 'MSGSTR',
208 'STRING',
209 'PLURAL_NUM',
210 '$start',
211 'msgfmt',
212 'comment',
213 'msgctxt',
214 'message',
215 'string_list',
216 'single_message',
217 'plural_message',
218 'msgstr_plural',
219 'msgstr_plural_line']
220
221 Racc_debug_parser = true
222
223 ##### racc system variables end #####
224
225 # reduce 0 omitted
226
227 # reduce 1 omitted
228
229 # reduce 2 omitted
230
231 # reduce 3 omitted
232
233 # reduce 4 omitted
234
235 module_eval <<'.,.,', 'src/poparser.ry', 25
236 def _reduce_5( val, _values, result )
237 @msgctxt = unescape(val[1]) + "\004"
238 result
239 end
240 .,.,
241
242 # reduce 6 omitted
243
244 # reduce 7 omitted
245
246 module_eval <<'.,.,', 'src/poparser.ry', 48
247 def _reduce_8( val, _values, result )
248 if @fuzzy and $ignore_fuzzy
249 if val[1] != ""
250 $stderr.print _("Warning: fuzzy message was ignored.\n")
251 $stderr.print " msgid '#{val[1]}'\n"
252 else
253 on_message('', unescape(val[3]))
254 end
255 @fuzzy = false
256 else
257 on_message(@msgctxt + unescape(val[1]), unescape(val[3]))
258 end
259 result = ""
260 result
261 end
262 .,.,
263
264 module_eval <<'.,.,', 'src/poparser.ry', 65
265 def _reduce_9( val, _values, result )
266 if @fuzzy and $ignore_fuzzy
267 if val[1] != ""
268 $stderr.print _("Warning: fuzzy message was ignored.\n")
269 $stderr.print "msgid = '#{val[1]}\n"
270 else
271 on_message('', unescape(val[3]))
272 end
273 @fuzzy = false
274 else
275 on_message(@msgctxt + unescape(val[1]) + "\000" + unescape(val[3]), unescape(val[4]))
276 end
277 result = ""
278 result
279 end
280 .,.,
281
282 module_eval <<'.,.,', 'src/poparser.ry', 76
283 def _reduce_10( val, _values, result )
284 if val[0].size > 0
285 result = val[0] + "\000" + val[1]
286 else
287 result = ""
288 end
289 result
290 end
291 .,.,
292
293 # reduce 11 omitted
294
295 module_eval <<'.,.,', 'src/poparser.ry', 84
296 def _reduce_12( val, _values, result )
297 result = val[2]
298 result
299 end
300 .,.,
301
302 module_eval <<'.,.,', 'src/poparser.ry', 91
303 def _reduce_13( val, _values, result )
304 on_comment(val[0])
305 result
306 end
307 .,.,
308
309 module_eval <<'.,.,', 'src/poparser.ry', 99
310 def _reduce_14( val, _values, result )
311 result = val.delete_if{|item| item == ""}.join
312 result
313 end
314 .,.,
315
316 module_eval <<'.,.,', 'src/poparser.ry', 103
317 def _reduce_15( val, _values, result )
318 result = val[0]
319 result
320 end
321 .,.,
322
323 def _reduce_none( val, _values, result )
324 result
325 end
326
327 end # class PoParser
328
329 end # module GetText