gettext 2.2.0 → 2.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/Rakefile CHANGED
@@ -14,10 +14,10 @@
14
14
 
15
15
  $:.unshift "./lib"
16
16
 
17
+ require "tempfile"
17
18
  require 'rake'
18
19
  require 'rubygems'
19
20
  require "yard/rake/yardoc_task"
20
- require 'rake/testtask'
21
21
  require 'gettext/version'
22
22
 
23
23
  require "bundler/gem_helper"
@@ -34,37 +34,35 @@ PKG_VERSION = GetText::VERSION
34
34
  ############################################################
35
35
  # GetText tasks for developing
36
36
  ############################################################
37
- desc "Create lib/gettext/tools/poparser.rb"
38
- task :poparser do
39
- poparser_path = "lib/gettext/tools/poparser.rb"
40
- racc = File.join(Config::CONFIG['bindir'], "racc")
41
- if ! FileTest.exist?(racc)
42
- puts "racc was not found: #{racc}"
43
- exit 1
44
- else FileTest.exist?(racc)
45
- ruby "#{racc} -g src/poparser.ry -o src/poparser.tmp.rb"
46
- $stderr.puts %Q[ruby #{racc} -g src/poparser.ry -o src/poparser.tmp.rb]
47
-
48
- file = open(poparser_path, "w")
49
-
50
- file.print "=begin\n"
51
- file.print <<-EOS
52
- poparser.rb - Generate a .mo
53
-
54
- Copyright (C) 2003-2009 Masao Mutoh <mutomasa at gmail.com>
55
-
56
- You may redistribute it and/or modify it under the same
57
- license terms as Ruby.
58
- EOS
59
- file.print "=end\n\n"
60
-
61
- tmpfile = open("src/poparser.tmp.rb")
62
- file.print tmpfile.read
63
- file.close
64
- tmpfile.close
65
- File.delete("src/poparser.tmp.rb")
66
- $stderr.puts "Create #{poparser_path}."
37
+ poparser_rb_path = "lib/gettext/tools/poparser.rb"
38
+ desc "Create #{poparser_rb_path}"
39
+ task :poparser => poparser_rb_path
40
+
41
+ poparser_ry_path = "src/poparser.ry"
42
+ file poparser_rb_path => poparser_ry_path do
43
+ racc = File.join(Gem.bindir, "racc")
44
+ tempfile = Tempfile.new("gettext-poparser")
45
+ command_line = "#{racc} -g #{poparser_ry_path} -o #{tempfile.path}"
46
+ ruby(command_line)
47
+ $stderr.puts("ruby #{command_line}")
48
+
49
+ File.open(poparser_rb_path, "w") do |poparser_rb|
50
+ poparser_rb.puts(<<-EOH)
51
+ # -*- coding: utf-8 -*-
52
+ #
53
+ # poparser.rb - Generate a .mo
54
+ #
55
+ # Copyright (C) 2003-2009 Masao Mutoh <mutomasa at gmail.com>
56
+ # Copyright (C) 2012 Kouhei Sutou <kou@clear-code.com>
57
+ #
58
+ # You may redistribute it and/or modify it under the same
59
+ # license terms as Ruby or LGPL.
60
+
61
+ EOH
62
+
63
+ poparser_rb.puts(tempfile.read)
67
64
  end
65
+ $stderr.puts "Create #{poparser_rb_path}."
68
66
  end
69
67
 
70
68
 
@@ -162,18 +160,60 @@ end
162
160
 
163
161
  task :package => [:makemo]
164
162
 
165
- ############################################################
166
- # Misc tasks
167
- ############################################################
163
+ namespace :test do
164
+ namespace :pot do
165
+ pot_base_dir = "test/pot"
166
+ directory pot_base_dir
167
+
168
+ pot_paths = []
169
+ ruby_base_paths = [
170
+ "non_ascii", "npgettext", "nsgettext",
171
+ "pgettext", "backslash",
172
+ ]
173
+ ruby_paths = Dir.glob("test/testlib/{#{ruby_base_paths.join(',')}}.rb")
174
+ ruby_paths.each do |ruby_path|
175
+ pot_base_path = File.basename(ruby_path).sub(/\.rb\z/, ".pot")
176
+ pot_path = "#{pot_base_dir}/#{pot_base_path}"
177
+ pot_paths << pot_path
178
+ file pot_path => [pot_base_dir, ruby_path] do
179
+ require "gettext/tools"
180
+ GetText.rgettext(ruby_path, pot_path)
181
+ end
182
+ end
183
+
184
+ desc "Update pot files for testing"
185
+ task :update => pot_paths
186
+ end
187
+
188
+ namespace :mo do
189
+ mo_paths = []
190
+ language_paths = Dir.glob("test/po/*")
191
+ language_paths.each do |language_path|
192
+ language = File.basename(language_path)
193
+ po_paths = Dir.glob("#{language_path}/*.po")
194
+ po_paths.each do |po_path|
195
+ mo_base_path = File.basename(po_path).sub(/\.po\z/, ".mo")
196
+ mo_path = "test/locale/#{language}/LC_MESSAGES/#{mo_base_path}"
197
+ mo_paths << mo_path
198
+ file mo_path => [po_path, poparser_rb_path] do
199
+ require "gettext/tools"
200
+ GetText.rmsgfmt(po_path, mo_path)
201
+ end
202
+ end
203
+ end
204
+
205
+ desc "Update mo files for testing"
206
+ task :update => mo_paths
207
+ end
208
+
209
+ desc "Prepare test environment"
210
+ task :prepare => "test:mo:update"
211
+ end
212
+
168
213
  desc 'Run all tests'
169
- task :test do
170
- Dir.chdir("test") do
171
- if RUBY_PLATFORM =~ /win32/
172
- sh "rake.bat", "test"
173
- else
174
- ruby "-S", "rake", "test"
175
- end
176
- end
214
+ task :test => "test:prepare" do
215
+ options = ARGV - Rake.application.top_level_tasks
216
+ ruby "test/run-test.rb", *options
177
217
  end
178
218
 
179
219
  YARD::Rake::YardocTask.new do |t|
data/gettext.gemspec CHANGED
@@ -28,5 +28,8 @@ So you can use GNU GetText tools for maintaining.
28
28
  end
29
29
 
30
30
  s.add_runtime_dependency("locale")
31
+ s.add_development_dependency("racc")
31
32
  s.add_development_dependency("yard")
33
+ s.add_development_dependency("test-unit")
34
+ s.add_development_dependency("test-unit-notify")
32
35
  end
@@ -20,64 +20,68 @@ class String
20
20
  alias :bytesize :size
21
21
  end
22
22
 
23
- alias :_old_format_m :% # :nodoc:
23
+ begin
24
+ "%<key>" % {:key => "value"}
25
+ rescue ArgumentError
26
+ alias :_old_format_m :% # :nodoc:
24
27
 
25
- PERCENT_MATCH_RE = Regexp.union(
26
- /%%/,
27
- /%\{(.+?)\}/,
28
- /%<(.+?)>(.*?\d*\.?\d*[bBdiouxXeEfgGcps])/
29
- )
28
+ PERCENT_MATCH_RE = Regexp.union(
29
+ /%%/,
30
+ /%\{(.+?)\}/,
31
+ /%<(.+?)>(.*?\d*\.?\d*[bBdiouxXeEfgGcps])/
32
+ )
30
33
 
31
- # call-seq:
32
- # %(arg)
33
- # %(hash)
34
- #
35
- # Format - Uses str as a format specification, and returns the result of applying it to arg.
36
- # If the format specification contains more than one substitution, then arg must be
37
- # an Array containing the values to be substituted. See Kernel::sprintf for details of the
38
- # format string. This is the default behavior of the String class.
39
- # * arg: an Array or other class except Hash.
40
- # * Returns: formatted String
41
- #
42
- # (e.g.) "%s, %s" % ["Masao", "Mutoh"]
43
- #
44
- # Also you can use a Hash as the "named argument". This is recommanded way for Ruby-GetText
45
- # because the translators can understand the meanings of the msgids easily.
46
- # * hash: {:key1 => value1, :key2 => value2, ... }
47
- # * Returns: formatted String
48
- #
49
- # (e.g.)
50
- # For strings.
51
- # "%{firstname}, %{familyname}" % {:firstname => "Masao", :familyname => "Mutoh"}
52
- #
53
- # With field type to specify format such as d(decimal), f(float),...
54
- # "%<age>d, %<weight>.1f" % {:age => 10, :weight => 43.4}
55
- def %(args)
56
- if args.kind_of?(Hash)
57
- ret = dup
58
- ret.gsub!(PERCENT_MATCH_RE) {|match|
59
- if match == '%%'
60
- '%'
61
- elsif $1
62
- key = $1.to_sym
63
- args.has_key?(key) ? args[key] : match
64
- elsif $2
65
- key = $2.to_sym
66
- args.has_key?(key) ? sprintf("%#{$3}", args[key]) : match
67
- end
68
- }
69
- ret
70
- else
71
- ret = gsub(/%([{<])/, '%%\1')
72
- begin
73
- ret._old_format_m(args)
74
- rescue ArgumentError => e
75
- if $DEBUG
76
- $stderr.puts " The string:#{ret}"
77
- $stderr.puts " args:#{args.inspect}"
78
- puts e.backtrace
79
- else
80
- raise ArgumentError, e.message
34
+ # call-seq:
35
+ # %(arg)
36
+ # %(hash)
37
+ #
38
+ # Format - Uses str as a format specification, and returns the result of applying it to arg.
39
+ # If the format specification contains more than one substitution, then arg must be
40
+ # an Array containing the values to be substituted. See Kernel::sprintf for details of the
41
+ # format string. This is the default behavior of the String class.
42
+ # * arg: an Array or other class except Hash.
43
+ # * Returns: formatted String
44
+ #
45
+ # (e.g.) "%s, %s" % ["Masao", "Mutoh"]
46
+ #
47
+ # Also you can use a Hash as the "named argument". This is recommanded way for Ruby-GetText
48
+ # because the translators can understand the meanings of the msgids easily.
49
+ # * hash: {:key1 => value1, :key2 => value2, ... }
50
+ # * Returns: formatted String
51
+ #
52
+ # (e.g.)
53
+ # For strings.
54
+ # "%{firstname}, %{familyname}" % {:firstname => "Masao", :familyname => "Mutoh"}
55
+ #
56
+ # With field type to specify format such as d(decimal), f(float),...
57
+ # "%<age>d, %<weight>.1f" % {:age => 10, :weight => 43.4}
58
+ def %(args)
59
+ if args.kind_of?(Hash)
60
+ ret = dup
61
+ ret.gsub!(PERCENT_MATCH_RE) {|match|
62
+ if match == '%%'
63
+ '%'
64
+ elsif $1
65
+ key = $1.to_sym
66
+ args.has_key?(key) ? args[key] : match
67
+ elsif $2
68
+ key = $2.to_sym
69
+ args.has_key?(key) ? sprintf("%#{$3}", args[key]) : match
70
+ end
71
+ }
72
+ ret
73
+ else
74
+ ret = gsub(/%([{<])/, '%%\1')
75
+ begin
76
+ ret._old_format_m(args)
77
+ rescue ArgumentError => e
78
+ if $DEBUG
79
+ $stderr.puts " The string:#{ret}"
80
+ $stderr.puts " args:#{args.inspect}"
81
+ puts e.backtrace
82
+ else
83
+ raise ArgumentError, e.message
84
+ end
81
85
  end
82
86
  end
83
87
  end
@@ -20,7 +20,7 @@
20
20
  require 'stringio'
21
21
 
22
22
  module GetText
23
- class MOFile < Hash
23
+ class MoFile < Hash
24
24
  class InvalidFormat < RuntimeError; end;
25
25
 
26
26
  attr_reader :filename
@@ -122,23 +122,24 @@ module GetText
122
122
  io.pos = header.translated_table_offset
123
123
  trans_table_data = io.read((4 * 2) * header.nstrings).unpack(endian_type_astr)
124
124
 
125
- original_strings = Array.new(header.nstrings)
125
+ msgids = Array.new(header.nstrings)
126
126
  for i in 0...header.nstrings
127
127
  io.pos = orig_table_data[i * 2 + 1]
128
- original_strings[i] = io.read(orig_table_data[i * 2 + 0])
128
+ msgids[i] = io.read(orig_table_data[i * 2 + 0])
129
129
  end
130
130
 
131
131
  clear
132
132
  for i in 0...header.nstrings
133
133
  io.pos = trans_table_data[i * 2 + 1]
134
- str = io.read(trans_table_data[i * 2 + 0])
134
+ msgstr = io.read(trans_table_data[i * 2 + 0])
135
135
 
136
- if (! original_strings[i]) || original_strings[i] == ""
137
- if str
136
+ msgid = msgids[i]
137
+ if msgid.nil? || msgid.empty?
138
+ if msgstr
138
139
  @charset = nil
139
140
  @nplurals = nil
140
141
  @plural = nil
141
- str.each_line{|line|
142
+ msgstr.each_line{|line|
142
143
  if /^Content-Type:/i =~ line and /charset=((?:\w|-)+)/i =~ line
143
144
  @charset = $1
144
145
  elsif /^Plural-Forms:\s*nplurals\s*\=\s*(\d*);\s*plural\s*\=\s*([^;]*)\n?/ =~ line
@@ -151,11 +152,9 @@ module GetText
151
152
  @plural = "0" unless @plural
152
153
  end
153
154
  else
154
- if @charset and @output_charset
155
- str = convert_encoding(str, original_strings[i])
156
- end
155
+ msgstr = convert_encoding(msgstr, msgid)
157
156
  end
158
- self[original_strings[i]] = str.freeze
157
+ self[convert_encoding(msgid, msgid)] = msgstr.freeze
159
158
  end
160
159
  self
161
160
  end
@@ -303,6 +302,8 @@ module GetText
303
302
  private
304
303
  if "".respond_to?(:encode)
305
304
  def convert_encoding(string, original_string)
305
+ return string if @output_charset.nil? or @charset.nil?
306
+
306
307
  begin
307
308
  string.encode(@output_charset, @charset)
308
309
  rescue EncodingError
@@ -331,6 +332,9 @@ module GetText
331
332
  end
332
333
  end
333
334
  end
335
+
336
+ # Just for backward compatibility.
337
+ MOFile = MoFile
334
338
  end
335
339
 
336
340
  # Test
@@ -342,7 +346,7 @@ if $0 == __FILE__
342
346
  end
343
347
 
344
348
  ARGV.each{ |item|
345
- mo = GetText::MOFile.open(item)
349
+ mo = GetText::MoFile.open(item)
346
350
  puts "------------------------------------------------------------------"
347
351
  puts "charset = \"#{mo.charset}\""
348
352
  puts "nplurals = \"#{mo.nplurals}\""
@@ -170,7 +170,7 @@ module GetText
170
170
 
171
171
  if path
172
172
  charset = @output_charset || lang.charset || Locale.charset || "UTF-8"
173
- @mofiles[lang_key] = MOFile.open(path, charset)
173
+ @mofiles[lang_key] = MoFile.open(path, charset)
174
174
  else
175
175
  @mofiles[lang_key] = :empty
176
176
  end
@@ -183,6 +183,22 @@ module GetText
183
183
  return plural ? msgstrs[1] : msgstrs[0]
184
184
  end
185
185
 
186
+ # for testing.
187
+ def dump_all_textdomains
188
+ [
189
+ @@textdomain_pool.dup,
190
+ @@textdomain_group_pool.dup,
191
+ @@gettext_classes.dup,
192
+ ]
193
+ end
194
+
195
+ # for testing.
196
+ def restore_all_textdomains(dumped_all_textdomains)
197
+ @@textdomain_pool, @@textdomain_group_pool, @@gettext_classes =
198
+ dumped_all_textdomains
199
+ clear_caches
200
+ end
201
+
186
202
  # for testing.
187
203
  def clear_all_textdomains
188
204
  @@textdomain_pool = {}
@@ -1,17 +1,16 @@
1
- # encoding: utf-8
2
-
3
- =begin
4
- poparser.rb - Generate a .mo
5
-
6
- Copyright (C) 2003-2009 Masao Mutoh <mutomasa at gmail.com>
7
-
8
- You may redistribute it and/or modify it under the same
9
- license terms as Ruby.
10
- =end
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # poparser.rb - Generate a .mo
4
+ #
5
+ # Copyright (C) 2003-2009 Masao Mutoh <mutomasa at gmail.com>
6
+ # Copyright (C) 2012 Kouhei Sutou <kou@clear-code.com>
7
+ #
8
+ # You may redistribute it and/or modify it under the same
9
+ # license terms as Ruby or LGPL.
11
10
 
12
11
  #
13
12
  # DO NOT MODIFY!!!!
14
- # This file is automatically generated by Racc 1.4.6
13
+ # This file is automatically generated by Racc 1.4.8
15
14
  # from Racc grammer file "".
16
15
  #
17
16
 
@@ -19,9 +18,30 @@ require 'racc/parser.rb'
19
18
  module GetText
20
19
  class PoParser < Racc::Parser
21
20
 
22
- module_eval(<<'...end poparser.ry/module_eval...', 'poparser.ry', 108)
23
- include GetText
24
- GetText.bindtextdomain("rgettext")
21
+ module_eval(<<'...end poparser.ry/module_eval...', 'poparser.ry', 114)
22
+ if GetText.respond_to?(:bindtextdomain)
23
+ include GetText
24
+ GetText.bindtextdomain("rgettext")
25
+ else
26
+ def _(message_id)
27
+ message_id
28
+ end
29
+ private :_
30
+ end
31
+
32
+ attr_writer :ignore_fuzzy, :report_warning
33
+ def initialize
34
+ @ignore_fuzzy = true
35
+ @report_warning = true
36
+ end
37
+
38
+ def ignore_fuzzy?
39
+ @ignore_fuzzy
40
+ end
41
+
42
+ def report_warning?
43
+ @report_warning
44
+ end
25
45
 
26
46
  def unescape(orig)
27
47
  ret = orig.gsub(/\\n/, "\n")
@@ -30,50 +50,57 @@ module_eval(<<'...end poparser.ry/module_eval...', 'poparser.ry', 108)
30
50
  ret.gsub!(/\\"/, "\"")
31
51
  ret
32
52
  end
53
+ private :unescape
54
+
55
+ def unescape_string(string)
56
+ string.gsub(/\\\\/, "\\")
57
+ end
58
+ private :unescape_string
33
59
 
34
- def parse(str, data, ignore_fuzzy = true)
60
+ def parse(str, data)
35
61
  @comments = []
36
62
  @data = data
37
63
  @fuzzy = false
38
64
  @msgctxt = ""
39
- $ignore_fuzzy = ignore_fuzzy
40
65
 
41
66
  str.strip!
42
67
  @q = []
43
68
  until str.empty? do
44
69
  case str
45
70
  when /\A\s+/
46
- str = $'
71
+ str = $'
47
72
  when /\Amsgctxt/
48
- @q.push [:MSGCTXT, $&]
49
- str = $'
73
+ @q.push [:MSGCTXT, $&]
74
+ str = $'
50
75
  when /\Amsgid_plural/
51
- @q.push [:MSGID_PLURAL, $&]
52
- str = $'
76
+ @q.push [:MSGID_PLURAL, $&]
77
+ str = $'
53
78
  when /\Amsgid/
54
- @q.push [:MSGID, $&]
55
- str = $'
79
+ @q.push [:MSGID, $&]
80
+ str = $'
56
81
  when /\Amsgstr/
57
- @q.push [:MSGSTR, $&]
58
- str = $'
82
+ @q.push [:MSGSTR, $&]
83
+ str = $'
59
84
  when /\A\[(\d+)\]/
60
- @q.push [:PLURAL_NUM, $1]
61
- str = $'
85
+ @q.push [:PLURAL_NUM, $1]
86
+ str = $'
62
87
  when /\A\#~(.*)/
63
- $stderr.print _("Warning: obsolete msgid exists.\n")
64
- $stderr.print " #{$&}\n"
65
- @q.push [:COMMENT, $&]
66
- str = $'
88
+ if report_warning?
89
+ $stderr.print _("Warning: obsolete msgid exists.\n")
90
+ $stderr.print " #{$&}\n"
91
+ end
92
+ @q.push [:COMMENT, $&]
93
+ str = $'
67
94
  when /\A\#(.*)/
68
- @q.push [:COMMENT, $&]
69
- str = $'
95
+ @q.push [:COMMENT, $&]
96
+ str = $'
70
97
  when /\A\"(.*)\"/
71
- @q.push [:STRING, $1]
72
- str = $'
98
+ @q.push [:STRING, unescape_string($1)]
99
+ str = $'
73
100
  else
74
- #c = str[0,1]
75
- #@q.push [:STRING, c]
76
- str = str[1..-1]
101
+ #c = str[0,1]
102
+ #@q.push [:STRING, c]
103
+ str = str[1..-1]
77
104
  end
78
105
  end
79
106
  @q.push [false, '$end']
@@ -109,7 +136,7 @@ module_eval(<<'...end poparser.ry/module_eval...', 'poparser.ry', 108)
109
136
  @comments << comment
110
137
  end
111
138
 
112
- def parse_file(po_file, data, ignore_fuzzy = true)
139
+ def parse_file(po_file, data)
113
140
  args = [ po_file ]
114
141
  # In Ruby 1.9, we must detect proper encoding of a PO file.
115
142
  if String.instance_methods.include?(:encode)
@@ -117,7 +144,7 @@ module_eval(<<'...end poparser.ry/module_eval...', 'poparser.ry', 108)
117
144
  args << "r:#{encoding}"
118
145
  end
119
146
  @po_file = po_file
120
- parse(File.open(*args) {|io| io.read }, data, ignore_fuzzy)
147
+ parse(File.open(*args) {|io| io.read }, data)
121
148
  end
122
149
 
123
150
  def detect_file_encoding(po_file)
@@ -133,33 +160,33 @@ module_eval(<<'...end poparser.ry/module_eval...', 'poparser.ry', 108)
133
160
  ##### State transition tables begin ###
134
161
 
135
162
  racc_action_table = [
136
- 3, 13, 5, 7, 9, 15, 16, 17, 20, 17,
137
- 13, 17, 13, 13, 11, 17, 23, 20, 13, 17 ]
163
+ 2, 13, 10, 9, 6, 17, 16, 15, 22, 15,
164
+ 15, 13, 13, 13, 15, 11, 22, 24, 13, 15 ]
138
165
 
139
166
  racc_action_check = [
140
- 1, 16, 1, 1, 1, 12, 12, 12, 18, 18,
141
- 7, 14, 15, 9, 3, 19, 20, 21, 23, 25 ]
167
+ 1, 17, 1, 1, 1, 14, 14, 14, 19, 19,
168
+ 12, 6, 16, 9, 18, 2, 20, 22, 24, 25 ]
142
169
 
143
170
  racc_action_pointer = [
144
- nil, 0, nil, 14, nil, nil, nil, 3, nil, 6,
145
- nil, nil, 0, nil, 4, 5, -6, nil, 2, 8,
146
- 8, 11, nil, 11, nil, 12 ]
171
+ nil, 0, 15, nil, nil, nil, 4, nil, nil, 6,
172
+ nil, nil, 3, nil, 0, nil, 5, -6, 7, 2,
173
+ 10, nil, 9, nil, 11, 12 ]
147
174
 
148
175
  racc_action_default = [
149
- -1, -16, -2, -16, -3, -13, -4, -16, -6, -16,
150
- -7, 26, -16, -15, -5, -16, -16, -14, -16, -8,
151
- -16, -9, -11, -16, -10, -12 ]
176
+ -1, -16, -16, -2, -3, -4, -16, -6, -7, -16,
177
+ -13, 26, -5, -15, -16, -14, -16, -16, -8, -16,
178
+ -9, -11, -16, -10, -16, -12 ]
152
179
 
153
180
  racc_goto_table = [
154
- 12, 22, 14, 4, 24, 6, 2, 8, 18, 19,
155
- 10, 21, 1, nil, nil, nil, 25 ]
181
+ 12, 21, 23, 14, 4, 5, 3, 7, 8, 20,
182
+ 18, 19, 1, nil, nil, nil, nil, nil, 25 ]
156
183
 
157
184
  racc_goto_check = [
158
- 5, 9, 5, 3, 9, 4, 2, 6, 5, 5,
159
- 7, 8, 1, nil, nil, nil, 5 ]
185
+ 5, 9, 9, 5, 3, 4, 2, 6, 7, 8,
186
+ 5, 5, 1, nil, nil, nil, nil, nil, 5 ]
160
187
 
161
188
  racc_goto_pointer = [
162
- nil, 12, 5, 2, 4, -7, 6, 9, -7, -17 ]
189
+ nil, 12, 5, 3, 4, -6, 6, 7, -10, -18 ]
163
190
 
164
191
  racc_goto_default = [
165
192
  nil, nil, nil, nil, nil, nil, nil, nil, nil, nil ]
@@ -252,10 +279,10 @@ Racc_debug_parser = true
252
279
 
253
280
  # reduce 4 omitted
254
281
 
255
- module_eval(<<'.,.,', 'poparser.ry', 23)
282
+ module_eval(<<'.,.,', 'poparser.ry', 25)
256
283
  def _reduce_5(val, _values, result)
257
284
  @msgctxt = unescape(val[1]) + "\004"
258
-
285
+
259
286
  result
260
287
  end
261
288
  .,.,
@@ -264,12 +291,14 @@ module_eval(<<'.,.,', 'poparser.ry', 23)
264
291
 
265
292
  # reduce 7 omitted
266
293
 
267
- module_eval(<<'.,.,', 'poparser.ry', 35)
294
+ module_eval(<<'.,.,', 'poparser.ry', 37)
268
295
  def _reduce_8(val, _values, result)
269
- if @fuzzy and $ignore_fuzzy
296
+ if @fuzzy and ignore_fuzzy?
270
297
  if val[1] != ""
271
- $stderr.print _("Warning: fuzzy message was ignored.\n")
272
- $stderr.print " #{@po_file}: msgid '#{val[1]}'\n"
298
+ if report_warning?
299
+ $stderr.print _("Warning: fuzzy message was ignored.\n")
300
+ $stderr.print " #{@po_file}: msgid '#{val[1]}'\n"
301
+ end
273
302
  else
274
303
  on_message('', unescape(val[3]))
275
304
  end
@@ -278,17 +307,19 @@ module_eval(<<'.,.,', 'poparser.ry', 35)
278
307
  on_message(@msgctxt + unescape(val[1]), unescape(val[3]))
279
308
  end
280
309
  result = ""
281
-
310
+
282
311
  result
283
312
  end
284
313
  .,.,
285
314
 
286
- module_eval(<<'.,.,', 'poparser.ry', 52)
315
+ module_eval(<<'.,.,', 'poparser.ry', 56)
287
316
  def _reduce_9(val, _values, result)
288
317
  if @fuzzy and $ignore_fuzzy
289
318
  if val[1] != ""
290
- $stderr.print _("Warning: fuzzy message was ignored.\n")
291
- $stderr.print "msgid = '#{val[1]}\n"
319
+ if report_warning?
320
+ $stderr.print _("Warning: fuzzy message was ignored.\n")
321
+ $stderr.print "msgid = '#{val[1]}\n"
322
+ end
292
323
  else
293
324
  on_message('', unescape(val[3]))
294
325
  end
@@ -297,53 +328,53 @@ module_eval(<<'.,.,', 'poparser.ry', 52)
297
328
  on_message(@msgctxt + unescape(val[1]) + "\000" + unescape(val[3]), unescape(val[4]))
298
329
  end
299
330
  result = ""
300
-
331
+
301
332
  result
302
333
  end
303
334
  .,.,
304
335
 
305
- module_eval(<<'.,.,', 'poparser.ry', 70)
336
+ module_eval(<<'.,.,', 'poparser.ry', 76)
306
337
  def _reduce_10(val, _values, result)
307
338
  if val[0].size > 0
308
339
  result = val[0] + "\000" + val[1]
309
340
  else
310
341
  result = ""
311
342
  end
312
-
343
+
313
344
  result
314
345
  end
315
346
  .,.,
316
347
 
317
348
  # reduce 11 omitted
318
349
 
319
- module_eval(<<'.,.,', 'poparser.ry', 82)
350
+ module_eval(<<'.,.,', 'poparser.ry', 88)
320
351
  def _reduce_12(val, _values, result)
321
352
  result = val[2]
322
-
353
+
323
354
  result
324
355
  end
325
356
  .,.,
326
357
 
327
- module_eval(<<'.,.,', 'poparser.ry', 89)
358
+ module_eval(<<'.,.,', 'poparser.ry', 95)
328
359
  def _reduce_13(val, _values, result)
329
360
  on_comment(val[0])
330
-
361
+
331
362
  result
332
363
  end
333
364
  .,.,
334
365
 
335
- module_eval(<<'.,.,', 'poparser.ry', 97)
366
+ module_eval(<<'.,.,', 'poparser.ry', 103)
336
367
  def _reduce_14(val, _values, result)
337
368
  result = val.delete_if{|item| item == ""}.join
338
-
369
+
339
370
  result
340
371
  end
341
372
  .,.,
342
373
 
343
- module_eval(<<'.,.,', 'poparser.ry', 101)
374
+ module_eval(<<'.,.,', 'poparser.ry', 107)
344
375
  def _reduce_15(val, _values, result)
345
376
  result = val[0]
346
-
377
+
347
378
  result
348
379
  end
349
380
  .,.,