330 lines
6.6 KiB
Ruby
330 lines
6.6 KiB
Ruby
=begin
|
|
poparser.rb - Generate a .mo
|
|
|
|
Copyright (C) 2003-2009 Masao Mutoh <mutoh at highway.ne.jp>
|
|
|
|
You may redistribute it and/or modify it under the same
|
|
license terms as Ruby.
|
|
=end
|
|
|
|
#MODIFIED
|
|
# removed include GetText etc
|
|
# added stub translation method _(x)
|
|
require 'racc/parser'
|
|
|
|
module GetText
|
|
|
|
class PoParser < Racc::Parser
|
|
|
|
def _(x)
|
|
x
|
|
end
|
|
|
|
module_eval <<'..end src/poparser.ry modeval..id7a99570e05', 'src/poparser.ry', 108
|
|
def unescape(orig)
|
|
ret = orig.gsub(/\\n/, "\n")
|
|
ret.gsub!(/\\t/, "\t")
|
|
ret.gsub!(/\\r/, "\r")
|
|
ret.gsub!(/\\"/, "\"")
|
|
ret
|
|
end
|
|
|
|
def parse(str, data, ignore_fuzzy = true)
|
|
@comments = []
|
|
@data = data
|
|
@fuzzy = false
|
|
@msgctxt = ""
|
|
$ignore_fuzzy = ignore_fuzzy
|
|
|
|
str.strip!
|
|
@q = []
|
|
until str.empty? do
|
|
case str
|
|
when /\A\s+/
|
|
str = $'
|
|
when /\Amsgctxt/
|
|
@q.push [:MSGCTXT, $&]
|
|
str = $'
|
|
when /\Amsgid_plural/
|
|
@q.push [:MSGID_PLURAL, $&]
|
|
str = $'
|
|
when /\Amsgid/
|
|
@q.push [:MSGID, $&]
|
|
str = $'
|
|
when /\Amsgstr/
|
|
@q.push [:MSGSTR, $&]
|
|
str = $'
|
|
when /\A\[(\d+)\]/
|
|
@q.push [:PLURAL_NUM, $1]
|
|
str = $'
|
|
when /\A\#~(.*)/
|
|
$stderr.print _("Warning: obsolete msgid exists.\n")
|
|
$stderr.print " #{$&}\n"
|
|
@q.push [:COMMENT, $&]
|
|
str = $'
|
|
when /\A\#(.*)/
|
|
@q.push [:COMMENT, $&]
|
|
str = $'
|
|
when /\A\"(.*)\"/
|
|
@q.push [:STRING, $1]
|
|
str = $'
|
|
else
|
|
#c = str[0,1]
|
|
#@q.push [:STRING, c]
|
|
str = str[1..-1]
|
|
end
|
|
end
|
|
@q.push [false, '$end']
|
|
if $DEBUG
|
|
@q.each do |a,b|
|
|
puts "[#{a}, #{b}]"
|
|
end
|
|
end
|
|
@yydebug = true if $DEBUG
|
|
do_parse
|
|
|
|
if @comments.size > 0
|
|
@data.set_comment(:last, @comments.join("\n"))
|
|
end
|
|
@data
|
|
end
|
|
|
|
def next_token
|
|
@q.shift
|
|
end
|
|
|
|
def on_message(msgid, msgstr)
|
|
if msgstr.size > 0
|
|
@data[msgid] = msgstr
|
|
@data.set_comment(msgid, @comments.join("\n"))
|
|
end
|
|
@comments.clear
|
|
@msgctxt = ""
|
|
end
|
|
|
|
def on_comment(comment)
|
|
@fuzzy = true if (/fuzzy/ =~ comment)
|
|
@comments << comment
|
|
end
|
|
|
|
|
|
..end src/poparser.ry modeval..id7a99570e05
|
|
|
|
##### racc 1.4.5 generates ###
|
|
|
|
racc_reduce_table = [
|
|
0, 0, :racc_error,
|
|
0, 10, :_reduce_none,
|
|
2, 10, :_reduce_none,
|
|
2, 10, :_reduce_none,
|
|
2, 10, :_reduce_none,
|
|
2, 12, :_reduce_5,
|
|
1, 13, :_reduce_none,
|
|
1, 13, :_reduce_none,
|
|
4, 15, :_reduce_8,
|
|
5, 16, :_reduce_9,
|
|
2, 17, :_reduce_10,
|
|
1, 17, :_reduce_none,
|
|
3, 18, :_reduce_12,
|
|
1, 11, :_reduce_13,
|
|
2, 14, :_reduce_14,
|
|
1, 14, :_reduce_15 ]
|
|
|
|
racc_reduce_n = 16
|
|
|
|
racc_shift_n = 26
|
|
|
|
racc_action_table = [
|
|
3, 13, 5, 7, 9, 15, 16, 17, 20, 17,
|
|
13, 17, 13, 13, 11, 17, 23, 20, 13, 17 ]
|
|
|
|
racc_action_check = [
|
|
1, 16, 1, 1, 1, 12, 12, 12, 18, 18,
|
|
7, 14, 15, 9, 3, 19, 20, 21, 23, 25 ]
|
|
|
|
racc_action_pointer = [
|
|
nil, 0, nil, 14, nil, nil, nil, 3, nil, 6,
|
|
nil, nil, 0, nil, 4, 5, -6, nil, 2, 8,
|
|
8, 11, nil, 11, nil, 12 ]
|
|
|
|
racc_action_default = [
|
|
-1, -16, -2, -16, -3, -13, -4, -16, -6, -16,
|
|
-7, 26, -16, -15, -5, -16, -16, -14, -16, -8,
|
|
-16, -9, -11, -16, -10, -12 ]
|
|
|
|
racc_goto_table = [
|
|
12, 22, 14, 4, 24, 6, 2, 8, 18, 19,
|
|
10, 21, 1, nil, nil, nil, 25 ]
|
|
|
|
racc_goto_check = [
|
|
5, 9, 5, 3, 9, 4, 2, 6, 5, 5,
|
|
7, 8, 1, nil, nil, nil, 5 ]
|
|
|
|
racc_goto_pointer = [
|
|
nil, 12, 5, 2, 4, -7, 6, 9, -7, -17 ]
|
|
|
|
racc_goto_default = [
|
|
nil, nil, nil, nil, nil, nil, nil, nil, nil, nil ]
|
|
|
|
racc_token_table = {
|
|
false => 0,
|
|
Object.new => 1,
|
|
:COMMENT => 2,
|
|
:MSGID => 3,
|
|
:MSGCTXT => 4,
|
|
:MSGID_PLURAL => 5,
|
|
:MSGSTR => 6,
|
|
:STRING => 7,
|
|
:PLURAL_NUM => 8 }
|
|
|
|
racc_use_result_var = true
|
|
|
|
racc_nt_base = 9
|
|
|
|
Racc_arg = [
|
|
racc_action_table,
|
|
racc_action_check,
|
|
racc_action_default,
|
|
racc_action_pointer,
|
|
racc_goto_table,
|
|
racc_goto_check,
|
|
racc_goto_default,
|
|
racc_goto_pointer,
|
|
racc_nt_base,
|
|
racc_reduce_table,
|
|
racc_token_table,
|
|
racc_shift_n,
|
|
racc_reduce_n,
|
|
racc_use_result_var ]
|
|
|
|
Racc_token_to_s_table = [
|
|
'$end',
|
|
'error',
|
|
'COMMENT',
|
|
'MSGID',
|
|
'MSGCTXT',
|
|
'MSGID_PLURAL',
|
|
'MSGSTR',
|
|
'STRING',
|
|
'PLURAL_NUM',
|
|
'$start',
|
|
'msgfmt',
|
|
'comment',
|
|
'msgctxt',
|
|
'message',
|
|
'string_list',
|
|
'single_message',
|
|
'plural_message',
|
|
'msgstr_plural',
|
|
'msgstr_plural_line']
|
|
|
|
Racc_debug_parser = true
|
|
|
|
##### racc system variables end #####
|
|
|
|
# reduce 0 omitted
|
|
|
|
# reduce 1 omitted
|
|
|
|
# reduce 2 omitted
|
|
|
|
# reduce 3 omitted
|
|
|
|
# reduce 4 omitted
|
|
|
|
module_eval <<'.,.,', 'src/poparser.ry', 25
|
|
def _reduce_5( val, _values, result )
|
|
@msgctxt = unescape(val[1]) + "\004"
|
|
result
|
|
end
|
|
.,.,
|
|
|
|
# reduce 6 omitted
|
|
|
|
# reduce 7 omitted
|
|
|
|
module_eval <<'.,.,', 'src/poparser.ry', 48
|
|
def _reduce_8( val, _values, result )
|
|
if @fuzzy and $ignore_fuzzy
|
|
if val[1] != ""
|
|
$stderr.print _("Warning: fuzzy message was ignored.\n")
|
|
$stderr.print " msgid '#{val[1]}'\n"
|
|
else
|
|
on_message('', unescape(val[3]))
|
|
end
|
|
@fuzzy = false
|
|
else
|
|
on_message(@msgctxt + unescape(val[1]), unescape(val[3]))
|
|
end
|
|
result = ""
|
|
result
|
|
end
|
|
.,.,
|
|
|
|
module_eval <<'.,.,', 'src/poparser.ry', 65
|
|
def _reduce_9( val, _values, result )
|
|
if @fuzzy and $ignore_fuzzy
|
|
if val[1] != ""
|
|
$stderr.print _("Warning: fuzzy message was ignored.\n")
|
|
$stderr.print "msgid = '#{val[1]}\n"
|
|
else
|
|
on_message('', unescape(val[3]))
|
|
end
|
|
@fuzzy = false
|
|
else
|
|
on_message(@msgctxt + unescape(val[1]) + "\000" + unescape(val[3]), unescape(val[4]))
|
|
end
|
|
result = ""
|
|
result
|
|
end
|
|
.,.,
|
|
|
|
module_eval <<'.,.,', 'src/poparser.ry', 76
|
|
def _reduce_10( val, _values, result )
|
|
if val[0].size > 0
|
|
result = val[0] + "\000" + val[1]
|
|
else
|
|
result = ""
|
|
end
|
|
result
|
|
end
|
|
.,.,
|
|
|
|
# reduce 11 omitted
|
|
|
|
module_eval <<'.,.,', 'src/poparser.ry', 84
|
|
def _reduce_12( val, _values, result )
|
|
result = val[2]
|
|
result
|
|
end
|
|
.,.,
|
|
|
|
module_eval <<'.,.,', 'src/poparser.ry', 91
|
|
def _reduce_13( val, _values, result )
|
|
on_comment(val[0])
|
|
result
|
|
end
|
|
.,.,
|
|
|
|
module_eval <<'.,.,', 'src/poparser.ry', 99
|
|
def _reduce_14( val, _values, result )
|
|
result = val.delete_if{|item| item == ""}.join
|
|
result
|
|
end
|
|
.,.,
|
|
|
|
module_eval <<'.,.,', 'src/poparser.ry', 103
|
|
def _reduce_15( val, _values, result )
|
|
result = val[0]
|
|
result
|
|
end
|
|
.,.,
|
|
|
|
def _reduce_none( val, _values, result )
|
|
result
|
|
end
|
|
|
|
end # class PoParser
|
|
|
|
end # module GetText
|