547df6a593164421fe716cba71ae712df8ef5ec8
[packages/precise/mcollective.git] / lib / mcollective / vendor / i18n / lib / i18n / gettext / po_parser.rb
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