gettext 3.3.7 → 3.3.8

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.
Files changed (114) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +4 -0
  3. data/doc/text/news.md +25 -0
  4. data/gettext.gemspec +1 -0
  5. data/lib/gettext/mo.rb +7 -5
  6. data/lib/gettext/tools/msginit.rb +216 -50
  7. data/lib/gettext/tools/parser/glade.rb +38 -40
  8. data/lib/gettext/tools/parser/gtk_builder_ui_definitions.rb +6 -3
  9. data/lib/gettext/tools/parser/ruby.rb +2 -2
  10. data/lib/gettext/version.rb +2 -2
  11. data/locale/bg/LC_MESSAGES/gettext.mo +0 -0
  12. data/locale/bs/LC_MESSAGES/gettext.mo +0 -0
  13. data/locale/ca/LC_MESSAGES/gettext.mo +0 -0
  14. data/locale/cs/LC_MESSAGES/gettext.mo +0 -0
  15. data/locale/de/LC_MESSAGES/gettext.mo +0 -0
  16. data/locale/el/LC_MESSAGES/gettext.mo +0 -0
  17. data/locale/eo/LC_MESSAGES/gettext.mo +0 -0
  18. data/locale/es/LC_MESSAGES/gettext.mo +0 -0
  19. data/locale/et/LC_MESSAGES/gettext.mo +0 -0
  20. data/locale/fr/LC_MESSAGES/gettext.mo +0 -0
  21. data/locale/hr/LC_MESSAGES/gettext.mo +0 -0
  22. data/locale/hu/LC_MESSAGES/gettext.mo +0 -0
  23. data/locale/it/LC_MESSAGES/gettext.mo +0 -0
  24. data/locale/ja/LC_MESSAGES/gettext.mo +0 -0
  25. data/locale/ko/LC_MESSAGES/gettext.mo +0 -0
  26. data/locale/lv/LC_MESSAGES/gettext.mo +0 -0
  27. data/locale/nb/LC_MESSAGES/gettext.mo +0 -0
  28. data/locale/nl/LC_MESSAGES/gettext.mo +0 -0
  29. data/locale/pt_BR/LC_MESSAGES/gettext.mo +0 -0
  30. data/locale/ru/LC_MESSAGES/gettext.mo +0 -0
  31. data/locale/sr/LC_MESSAGES/gettext.mo +0 -0
  32. data/locale/uk/LC_MESSAGES/gettext.mo +0 -0
  33. data/locale/vi/LC_MESSAGES/gettext.mo +0 -0
  34. data/locale/zh/LC_MESSAGES/gettext.mo +0 -0
  35. data/locale/zh_TW/LC_MESSAGES/gettext.mo +0 -0
  36. data/po/bg/gettext.edit.po +19 -537
  37. data/po/bg/gettext.po +0 -423
  38. data/po/bs/gettext.edit.po +19 -537
  39. data/po/bs/gettext.po +0 -423
  40. data/po/ca/gettext.edit.po +19 -537
  41. data/po/ca/gettext.po +0 -423
  42. data/po/cs/gettext.edit.po +19 -537
  43. data/po/cs/gettext.po +0 -423
  44. data/po/de/gettext.edit.po +19 -537
  45. data/po/de/gettext.po +0 -423
  46. data/po/el/gettext.edit.po +19 -537
  47. data/po/el/gettext.po +0 -423
  48. data/po/eo/gettext.edit.po +19 -537
  49. data/po/eo/gettext.po +0 -423
  50. data/po/es/gettext.edit.po +19 -537
  51. data/po/es/gettext.po +0 -423
  52. data/po/et/gettext.edit.po +19 -537
  53. data/po/et/gettext.po +0 -423
  54. data/po/fr/gettext.edit.po +19 -537
  55. data/po/fr/gettext.po +0 -423
  56. data/po/gettext.pot +20 -602
  57. data/po/hr/gettext.edit.po +19 -537
  58. data/po/hr/gettext.po +0 -423
  59. data/po/hu/gettext.edit.po +19 -537
  60. data/po/hu/gettext.po +0 -423
  61. data/po/it/gettext.edit.po +19 -537
  62. data/po/it/gettext.po +0 -423
  63. data/po/ja/gettext.edit.po +19 -537
  64. data/po/ja/gettext.po +0 -423
  65. data/po/ko/gettext.edit.po +19 -537
  66. data/po/ko/gettext.po +0 -423
  67. data/po/lv/gettext.edit.po +19 -537
  68. data/po/lv/gettext.po +0 -423
  69. data/po/nb/gettext.edit.po +19 -537
  70. data/po/nb/gettext.po +0 -423
  71. data/po/nl/gettext.edit.po +19 -537
  72. data/po/nl/gettext.po +0 -423
  73. data/po/pt_BR/gettext.edit.po +19 -537
  74. data/po/pt_BR/gettext.po +0 -423
  75. data/po/ru/gettext.edit.po +19 -537
  76. data/po/ru/gettext.po +0 -423
  77. data/po/sr/gettext.edit.po +19 -537
  78. data/po/sr/gettext.po +0 -423
  79. data/po/sv/gettext.edit.po +17 -538
  80. data/po/sv/gettext.po +0 -423
  81. data/po/uk/gettext.edit.po +19 -537
  82. data/po/uk/gettext.po +0 -423
  83. data/po/vi/gettext.edit.po +19 -537
  84. data/po/vi/gettext.po +0 -423
  85. data/po/zh/gettext.edit.po +19 -537
  86. data/po/zh/gettext.po +0 -423
  87. data/po/zh_TW/gettext.edit.po +19 -537
  88. data/po/zh_TW/gettext.po +0 -423
  89. data/test/fixtures/_.rb +1 -1
  90. data/test/fixtures/{gladeparser.glade → glade/2.glade} +0 -0
  91. data/test/fixtures/glade/3.glade +63 -0
  92. data/test/fixtures/multi_text_domain.rb +12 -12
  93. data/test/fixtures/np_.rb +1 -1
  94. data/test/fixtures/ns_.rb +1 -1
  95. data/test/fixtures/p_.rb +1 -1
  96. data/test/fixtures/ruby/{percent_i.rb → percent_lower_i.rb} +0 -0
  97. data/test/fixtures/ruby/{percent_w.rb → percent_lower_w.rb} +0 -0
  98. data/test/fixtures/ruby/{percent_I.rb → percent_upper_i.rb} +0 -0
  99. data/test/fixtures/ruby/{percent_W.rb → percent_upper_w.rb} +0 -0
  100. data/test/fixtures/s_.rb +1 -1
  101. data/test/fixtures/simple.rb +1 -1
  102. data/test/fixtures/upper_nn_.rb +77 -0
  103. data/test/po/_.pot +20 -4
  104. data/test/po/ja/_.edit.po +24 -0
  105. data/test/po/np_.pot +8 -5
  106. data/test/po/ns_.pot +6 -4
  107. data/test/po/p_.pot +3 -3
  108. data/test/po/s_.pot +6 -4
  109. data/test/test_parser.rb +35 -17
  110. data/test/tools/parser/test_glade.rb +91 -0
  111. data/test/tools/parser/test_gtk_builder_ui_definitions.rb +19 -1
  112. data/test/tools/parser/test_ruby.rb +4 -4
  113. data/test/tools/test_msginit.rb +77 -3
  114. metadata +24 -7
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '062339537f378d590d0257675937b866739f3fabefab874a71e22c4962081dd0'
4
- data.tar.gz: 45b32dc00ca6d62925de104a25814309f6ec3c3db9407feb6530808f4c273fd7
3
+ metadata.gz: 854c34e40028ef9e71045cbd1c8f77a4846c5f668de2cef716017b52d05515b2
4
+ data.tar.gz: bc0a5bcb8a1a30ed0b5de8272bae275a996f5ef5e6533a281997a67bf99f3f95
5
5
  SHA512:
6
- metadata.gz: c9d94745d0acd678adcc0b9e26eb5e862e4b02dbe12ad8b51f77860860eb941bea5b29f6178db92df02ed2ee496a0aa0153ac3e72655d16f398be98ff6f7e470
7
- data.tar.gz: e23e77aba1d2cf1a3b2d1bd3b682b2639837d8539df973cc9d56a1361f26b6f6200d6305516bda527d02670fe67e09d630f733a755e2462d319b7b06c3e22547
6
+ metadata.gz: 6978df6c5a2e52c5eb9b1101bb89fd2ec3febec663bf1418b054929572a333935cd02cfba15b93818ae3b89971b2fb442b2f8f48c0370fd516bacd7085eac915
7
+ data.tar.gz: a7fbb7a6b3e93a374440ad2ae3c69f43aeb238c54479825c45e8b14f5f90408fa05b2c06db05078af531defecc7b181bda30e0a2e53068718422ba66bbd7ae94
data/Rakefile CHANGED
@@ -86,6 +86,10 @@ end
86
86
  xgettext_options = ["--add-comments=TRANSLATORS:"]
87
87
  GetText::Tools::Task.define do |task|
88
88
  task.spec = spec
89
+ task.files = task.files.reject do |file|
90
+ file.start_with?("samples/") or
91
+ file.start_with?("test/")
92
+ end
89
93
  task.xgettext_options.concat(xgettext_options)
90
94
  end
91
95
 
data/doc/text/news.md CHANGED
@@ -1,5 +1,30 @@
1
1
  # News
2
2
 
3
+ ## 3.3.8: 2021-06-09 {#version-3-3-8}
4
+
5
+ ### Improvements
6
+
7
+ * msginit: Added support for generating plural forms with
8
+ Unicode's CLDR plural rules data.
9
+ [GitHub#85][Suggested by Michaël Hoste]
10
+
11
+ * rxgettext ui: Added support for GtkBuilder UI definitions format
12
+ with `.glade` extension.
13
+ [GitHub#74][Reported by dorle-o]
14
+
15
+ ### Fixes
16
+
17
+ * rxgettext ruby: Fixed a bug that `Nn_` isn't extracted.
18
+ [GitHub#86][Reported by Kai Ramuenke]
19
+
20
+ ### Thanks
21
+
22
+ * Kai Ramuenke
23
+
24
+ * Michaël Hoste
25
+
26
+ * dorle-o
27
+
3
28
  ## 3.3.7: 2021-01-18 {#version-3-3-7}
4
29
 
5
30
  ### Improvements
data/gettext.gemspec CHANGED
@@ -30,6 +30,7 @@ So you can use GNU gettext tools for maintaining.
30
30
  s.required_ruby_version = ">= 2.5.0"
31
31
 
32
32
  s.add_runtime_dependency("locale", ">= 2.0.5")
33
+ s.add_runtime_dependency("red-datasets")
33
34
  s.add_runtime_dependency("text", ">= 1.3.0")
34
35
  s.add_development_dependency("rake")
35
36
  s.add_development_dependency("racc")
data/lib/gettext/mo.rb CHANGED
@@ -278,11 +278,13 @@ module GetText
278
278
 
279
279
  def load_from_file(filename)
280
280
  @filename = filename
281
- begin
282
- File.open(filename, 'rb'){|f| load_from_stream(f)}
283
- rescue => e
284
- e.set_backtrace("File: #{@filename}")
285
- raise e
281
+ File.open(filename, 'rb') do |f|
282
+ begin
283
+ load_from_stream(f)
284
+ rescue => e
285
+ e.set_backtrace(["#{filename}:#{f.lineno}"] + e.backtrace)
286
+ raise e
287
+ end
286
288
  end
287
289
  end
288
290
 
@@ -1,7 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  #
3
3
  # Copyright (C) 2012 Haruka Yoshihara <yoshihara@clear-code.com>
4
- # Copyright (C) 2012-2014 Kouhei Sutou <kou@clear-code.com>
4
+ # Copyright (C) 2012-2021 Sutou Kouhei <kou@clear-code.com>
5
5
  #
6
6
  # License: Ruby's or LGPL
7
7
  #
@@ -19,11 +19,14 @@
19
19
  # along with this program. If not, see <http://www.gnu.org/licenses/>.
20
20
 
21
21
  require "etc"
22
+ require "optparse"
23
+
24
+ require "datasets"
25
+ require "locale/info"
26
+
22
27
  require "gettext"
23
28
  require "gettext/po_parser"
24
29
  require "gettext/tools/msgmerge"
25
- require "locale/info"
26
- require "optparse"
27
30
 
28
31
  module GetText
29
32
  module Tools
@@ -320,53 +323,8 @@ module GetText
320
323
  end
321
324
 
322
325
  def plural_forms(language)
323
- case language
324
- when "ja", "vi", "ko", /\Azh.*\z/
325
- nplural = "1"
326
- plural_expression = "0"
327
- when "en", "de", "nl", "sv", "da", "no", "fo", "es", "pt",
328
- "it", "bg", "el", "fi", "et", "he", "eo", "hu", "tr",
329
- "ca", "nb"
330
- nplural = "2"
331
- plural_expression = "n != 1"
332
- when "pt_BR", "fr"
333
- nplural = "2"
334
- plural_expression = "n>1"
335
- when "lv"
336
- nplural = "3"
337
- plural_expression = "n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2"
338
- when "ga"
339
- nplural = "3"
340
- plural_expression = "n==1 ? 0 : n==2 ? 1 : 2"
341
- when "ro"
342
- nplural = "3"
343
- plural_expression = "n==1 ? 0 : " +
344
- "(n==0 || (n%100 > 0 && n%100 < 20)) ? 1 : 2"
345
- when "lt", "bs"
346
- nplural = "3"
347
- plural_expression = "n%10==1 && n%100!=11 ? 0 : " +
348
- "n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2"
349
- when "ru", "uk", "sr", "hr"
350
- nplural = "3"
351
- plural_expression = "n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +
352
- "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2"
353
- when "cs", "sk"
354
- nplural = "3"
355
- plural_expression = "(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2"
356
- when "pl"
357
- nplural = "3"
358
- plural_expression = "n==1 ? 0 : n%10>=2 && " +
359
- "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2"
360
- when "sl"
361
- nplural = "4"
362
- plural_expression = "n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 " +
363
- "|| n%100==4 ? 2 : 3"
364
- else
365
- nplural = nil
366
- plural_expression = nil
367
- end
368
-
369
- "nplurals=#{nplural}; plural=#{plural_expression};"
326
+ converter = CLDRPluralsConverter.new(language)
327
+ converter.convert
370
328
  end
371
329
 
372
330
  DESCRIPTION_TITLE = /^SOME DESCRIPTIVE TITLE\.$/
@@ -408,6 +366,214 @@ module GetText
408
366
  def year
409
367
  now.year
410
368
  end
369
+
370
+ class CLDRPluralsConverter
371
+ def initialize(language)
372
+ @language = language
373
+
374
+ end
375
+
376
+ def convert
377
+ n_plurals = nil
378
+ expression = nil
379
+ plurals = Datasets::CLDRPlurals.new
380
+ plurals.each do |locale|
381
+ next unless locale.name == @language
382
+ n_plurals, expression = convert_plural_rules(locale.rules)
383
+ break
384
+ end
385
+ "nplurals=#{n_plurals}; plural=#{expression};"
386
+ end
387
+
388
+ private
389
+ def convert_plural_rules(rules)
390
+ n_plurals = 1
391
+ conditions = []
392
+ order = [
393
+ "one",
394
+ "zero",
395
+ "two",
396
+ "few",
397
+ "many",
398
+ "other",
399
+ ]
400
+ rules = rules.reject do |rule|
401
+ rule.integer_samples.nil?
402
+ end
403
+ rules = rules.sort_by do |rule|
404
+ order.index(rule.count)
405
+ end
406
+ rules[0..-2].each do |rule|
407
+ next if rule.condition.nil?
408
+ condition = convert_plural_condition(rule.condition)
409
+ next if condition.nil?
410
+ next if condition == false
411
+ n_plurals += 1
412
+ conditions << condition
413
+ end
414
+ expression = ""
415
+ case conditions.size
416
+ when 0
417
+ expression << "0"
418
+ when 1
419
+ condition = conditions[0]
420
+ case condition
421
+ when "(n == 1)"
422
+ expression << "n != 1"
423
+ when "(n <= 1)"
424
+ expression << "n > 1"
425
+ else
426
+ expression << "#{condition} ? 1 : 0"
427
+ end
428
+ else
429
+ (conditions.size + 1).times do |i|
430
+ if i == conditions.size
431
+ expression << i.to_s
432
+ else
433
+ condition = conditions[i]
434
+ expression << "#{condition} ? #{i} : "
435
+ end
436
+ end
437
+ end
438
+ [n_plurals, expression]
439
+ end
440
+
441
+ def convert_plural_condition(condition)
442
+ case condition[0]
443
+ when :and
444
+ gettext_condition = nil
445
+ condition[1..-1].each do |sub_condition|
446
+ sub_gettext_condition = convert_plural_condition(sub_condition)
447
+ case sub_gettext_condition
448
+ when String
449
+ if gettext_condition.is_a?(String)
450
+ gettext_condition << " && #{sub_gettext_condition}"
451
+ else
452
+ gettext_condition = sub_gettext_condition
453
+ end
454
+ when TrueClass
455
+ unless gettext_condition.is_a?(String)
456
+ gettext_condition = true
457
+ end
458
+ when FalseClass
459
+ return false
460
+ else
461
+ raise "unknown value #{sub_gettext_condition.inspect}"
462
+ end
463
+ end
464
+ gettext_condition
465
+ when :or
466
+ gettext_condition = false
467
+ condition[1..-1].each do |sub_condition|
468
+ sub_gettext_condition = convert_plural_condition(sub_condition)
469
+ case sub_gettext_condition
470
+ when String
471
+ if gettext_condition.is_a?(String)
472
+ gettext_condition << " || #{sub_gettext_condition}"
473
+ else
474
+ gettext_condition = sub_gettext_condition
475
+ end
476
+ when TrueClass
477
+ return true
478
+ when FalseClass
479
+ else
480
+ raise "unknown value #{sub_gettext_condition.inspect}"
481
+ end
482
+ end
483
+ gettext_condition
484
+ when :equal
485
+ left = convert_plural_condition(condition[1])
486
+ right = condition[2]
487
+ case left
488
+ when String
489
+ right = compact_equal_values(right)
490
+ gettext_conditions = right.collect do |right_value|
491
+ case right_value
492
+ when Range
493
+ if right_value.begin.zero?
494
+ "(#{left} <= #{right_value.end})"
495
+ else
496
+ "(#{left} >= #{right_value.begin} && " +
497
+ "#{left} <= #{right_value.end})"
498
+ end
499
+ else
500
+ "(#{left} == #{right_value})"
501
+ end
502
+ end
503
+ if gettext_conditions.size == 1
504
+ gettext_conditions[0]
505
+ else
506
+ gettext_conditions.join(" || ")
507
+ end
508
+ when 0
509
+ if right.include?(0)
510
+ true
511
+ else
512
+ false
513
+ end
514
+ else
515
+ false
516
+ end
517
+ when :not_equal
518
+ left = convert_plural_condition(condition[1])
519
+ right = condition[2]
520
+ case left
521
+ when String
522
+ right = compact_equal_values(right)
523
+ gettext_conditions = right.collect do |right_value|
524
+ case right_value
525
+ when Range
526
+ "(#{left} < #{right_value.begin} || " +
527
+ "#{left} > #{right_value.end})"
528
+ else
529
+ "(#{left} != #{right_value})"
530
+ end
531
+ end
532
+ if gettext_conditions.size == 1
533
+ gettext_conditions[0]
534
+ else
535
+ gettext_conditions = gettext_conditions.collect do |gettext_condition|
536
+ "(#{gettext_condition})"
537
+ end
538
+ gettext_conditions.join(" && ")
539
+ end
540
+ when 0
541
+ if right.include?(0)
542
+ false
543
+ else
544
+ true
545
+ end
546
+ else
547
+ false
548
+ end
549
+ when :mod
550
+ left = convert_plural_condition(condition[1])
551
+ right = condition[2]
552
+ case left
553
+ when "n"
554
+ "(n % #{right})"
555
+ else
556
+ false
557
+ end
558
+ when "n", "i"
559
+ "n"
560
+ when "v", "w"
561
+ 0
562
+ when "f", "t", "c", "e"
563
+ false
564
+ else
565
+ raise "unknown operator: #{condition[0].inspect}"
566
+ end
567
+ end
568
+
569
+ def compact_equal_values(values)
570
+ if values == [0, 1]
571
+ [0..1]
572
+ else
573
+ values
574
+ end
575
+ end
576
+ end
411
577
  end
412
578
  end
413
579
  end
@@ -1,14 +1,20 @@
1
- # -*- coding: utf-8 -*-
2
-
3
- =begin
4
- parser/glade.rb - parser for Glade-2
5
-
6
- Copyright (C) 2013 Kouhei Sutou <kou@clear-code.com>
7
- Copyright (C) 2004,2005 Masao Mutoh
8
-
9
- You may redistribute it and/or modify it under the same
10
- license terms as Ruby or LGPL.
11
- =end
1
+ # Copyright (C) 2004,2005 Masao Mutoh
2
+ # Copyright (C) 2013 Kouhei Sutou <kou@clear-code.com>
3
+ #
4
+ # License: Ruby's or LGPL
5
+ #
6
+ # This library is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU Lesser General Public License as published by
8
+ # the Free Software Foundation, either version 3 of the License, or
9
+ # (at your option) any later version.
10
+ #
11
+ # This library is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ # GNU Lesser General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU Lesser General Public License
17
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
12
18
 
13
19
  require 'cgi'
14
20
  require 'gettext'
@@ -24,15 +30,11 @@ module GetText
24
30
  GLADE_RE = /glade-2.0.dtd/
25
31
 
26
32
  def target?(file) # :nodoc:
27
- data = IO.readlines(file)
28
- if XML_RE =~ data[0] and GLADE_RE =~ data[1]
29
- true
30
- else
31
- if File.extname(file) == '.glade'
32
- raise _("`%{file}' is not glade-2.0 format.") % {:file => file}
33
- end
34
- false
35
- end
33
+ return false unless File.extname(file) == ".glade"
34
+ data = File.read(file)
35
+ return false unless data.include?("<?xml")
36
+ return false unless data.include?("glade-2.0.dtd")
37
+ true
36
38
  end
37
39
 
38
40
  def parse(path, options={})
@@ -57,7 +59,7 @@ module GetText
57
59
 
58
60
  private
59
61
  def parse_source(input) # :nodoc:
60
- targets = []
62
+ po = []
61
63
  target = false
62
64
  start_line_no = nil
63
65
  val = nil
@@ -69,14 +71,14 @@ module GetText
69
71
  target = true
70
72
  if TARGET2 =~ $1
71
73
  val = $1
72
- add_target(val, start_line_no, targets)
74
+ add_po_entry(po, val, start_line_no)
73
75
  val = nil
74
76
  target = false
75
77
  end
76
78
  elsif target
77
79
  if TARGET2 =~ line
78
80
  val << $1
79
- add_target(val, start_line_no, targets)
81
+ add_po_entry(po, val, start_line_no)
80
82
  val = nil
81
83
  target = false
82
84
  else
@@ -84,26 +86,22 @@ module GetText
84
86
  end
85
87
  end
86
88
  end
87
- targets
89
+ po
88
90
  end
89
91
 
90
- def add_target(val, line_no, targets) # :nodoc:
91
- return unless val.size > 0
92
- assoc_data = targets.assoc(val)
93
- val = CGI.unescapeHTML(val)
94
- if assoc_data
95
- targets[targets.index(assoc_data)] = assoc_data << "#{@path}:#{line_no}"
96
- else
97
- targets << [val.gsub(/\n/, '\n'), "#{@path}:#{line_no}"]
92
+ def add_po_entry(po, value, line_no) # :nodoc:
93
+ return if value.empty?
94
+ value = CGI.unescapeHTML(value)
95
+ value = value.gsub(/\n/, "\n")
96
+ po_entry = po.find do |entry|
97
+ entry.msgid == value
98
98
  end
99
- targets
99
+ if po_entry.nil?
100
+ po_entry = POEntry.new(:normal)
101
+ po_entry.msgid = value
102
+ po << po_entry
103
+ end
104
+ po_entry.references << "#{@path}:#{line_no}"
100
105
  end
101
106
  end
102
107
  end
103
-
104
- if __FILE__ == $0
105
- # ex) ruby glade.rb foo.glade bar.glade
106
- ARGV.each do |file|
107
- p GetText::GladeParser.parse(file)
108
- end
109
- end