gettext 3.4.5 → 3.4.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cea3f2f1c6324088132d87d90494b3110b4ec9f94e442b95e8a606ddcfee037b
4
- data.tar.gz: c6c0772f2e800f1bceaf3ba1d02bc2be3c053e684bcfe5a9e478db6b04f37d79
3
+ metadata.gz: 623479874c1f5d1800b18fc285df714bdb8bc48b63f55547e634506ac89a5b4f
4
+ data.tar.gz: b11c495203dc16e9668430a70f35ba93abe5126db80dbf04c773b72a609b34c8
5
5
  SHA512:
6
- metadata.gz: 93a5f54b50a7fce2eb7be6475dd3a123d92d9f4c04b11b3e7de9bbcb5290089704997115046599706b8c05a9d781afb4ea7152ad6517a9c47eff1ca580bb46f7
7
- data.tar.gz: 3c170cb20251d5df8178cf60f515c8b71da43d51ab7a577cf78f86e478bd2fcc4290c4ce9b6621b4cde4c8f0522e9414592820f3916638cdb2d012288d2ced55
6
+ metadata.gz: 9b6b842173b961104f45a2a5bc2dc6c1924d012aed19c114d748f8d85c94ae3510b4b7cf8db18a8df7790b19e57ab08b5ff2b7a5bc1ef50509f250a73cbcfce1
7
+ data.tar.gz: 480d5730ff338bc4bb4a1045df02fd0adfeef8cdc468e1c53977751917a243172f7b97e58b363175fe0566658c04a4c27db8282f0afc4707e1daf091419c47b4
data/doc/text/news.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # News
2
2
 
3
+ ## 3.4.6: 2023-07-12 {#version-3-4-6}
4
+
5
+ ### Fixes
6
+
7
+ * po: Fixed a bug that parsed `msgid`/`msgstr`/`msgctxt` in `.po`
8
+ may be too much unescaped.
9
+
3
10
  ## 3.4.5: 2023-07-12 {#version-3-4-5}
4
11
 
5
12
  ### Improvements
@@ -241,8 +241,7 @@ module GetText
241
241
  def escape(string)
242
242
  return "" if string.nil?
243
243
 
244
- string.gsub(/([\\"\t\r\n])/) do
245
- special_character = $1
244
+ string.gsub(/[\\"\t\r\n]/) do |special_character|
246
245
  case special_character
247
246
  when "\t"
248
247
  "\\t"
@@ -8,7 +8,7 @@
8
8
 
9
9
  #
10
10
  # DO NOT MODIFY!!!!
11
- # This file is automatically generated by Racc 1.7.0
11
+ # This file is automatically generated by Racc 1.7.1
12
12
  # from Racc grammar file "".
13
13
  #
14
14
 
@@ -19,7 +19,7 @@ require "gettext/po"
19
19
  module GetText
20
20
  class POParser < Racc::Parser
21
21
 
22
- module_eval(<<'...end po_parser.ry/module_eval...', 'po_parser.ry', 123)
22
+ module_eval(<<'...end po_parser.ry/module_eval...', 'po_parser.ry', 122)
23
23
  if GetText.respond_to?(:bindtextdomain)
24
24
  include GetText
25
25
  GetText.bindtextdomain("gettext")
@@ -44,20 +44,23 @@ module_eval(<<'...end po_parser.ry/module_eval...', 'po_parser.ry', 123)
44
44
  @report_warning
45
45
  end
46
46
 
47
- def unescape(orig)
48
- ret = orig.gsub(/\\n/, "\n")
49
- ret.gsub!(/\\t/, "\t")
50
- ret.gsub!(/\\r/, "\r")
51
- ret.gsub!(/\\"/, "\"")
52
- ret
47
+ def unescape(string)
48
+ string.gsub(/\\(.)/) do
49
+ escaped_character = $1
50
+ case escaped_character
51
+ when "t"
52
+ "\t"
53
+ when "r"
54
+ "\r"
55
+ when "n"
56
+ "\n"
57
+ else
58
+ escaped_character
59
+ end
60
+ end
53
61
  end
54
62
  private :unescape
55
63
 
56
- def unescape_string(string)
57
- string.gsub(/\\\\/, "\\")
58
- end
59
- private :unescape_string
60
-
61
64
  def parse(str, data)
62
65
  @translator_comments = []
63
66
  @extracted_comments = []
@@ -102,7 +105,7 @@ module_eval(<<'...end po_parser.ry/module_eval...', 'po_parser.ry', 123)
102
105
  @q.push [:COMMENT, $&]
103
106
  str = $'
104
107
  when /\A\"(.*)\"/
105
- @q.push [:STRING, unescape_string($1)]
108
+ @q.push [:STRING, unescape($1)]
106
109
  str = $'
107
110
  else
108
111
  #c = str[0,1]
@@ -387,7 +390,7 @@ Racc_debug_parser = true
387
390
 
388
391
  module_eval(<<'.,.,', 'po_parser.ry', 26)
389
392
  def _reduce_5(val, _values, result)
390
- @msgctxt = unescape(val[1])
393
+ @msgctxt = val[1]
391
394
 
392
395
  result
393
396
  end
@@ -399,9 +402,8 @@ module_eval(<<'.,.,', 'po_parser.ry', 26)
399
402
 
400
403
  module_eval(<<'.,.,', 'po_parser.ry', 38)
401
404
  def _reduce_8(val, _values, result)
402
- msgid_raw = val[1]
403
- msgid = unescape(msgid_raw)
404
- msgstr = unescape(val[3])
405
+ msgid = val[1]
406
+ msgstr = val[3]
405
407
  use_message_p = true
406
408
  if @fuzzy and not msgid.empty?
407
409
  use_message_p = (not ignore_fuzzy?)
@@ -411,7 +413,7 @@ module_eval(<<'.,.,', 'po_parser.ry', 38)
411
413
  else
412
414
  $stderr.print _("Warning: fuzzy message was used.\n")
413
415
  end
414
- $stderr.print " #{@po_file}: msgid '#{msgid_raw}'\n"
416
+ $stderr.print " #{@po_file}: msgid '#{msgid}'\n"
415
417
  end
416
418
  end
417
419
  @fuzzy = false
@@ -422,7 +424,7 @@ module_eval(<<'.,.,', 'po_parser.ry', 38)
422
424
  end
423
425
  .,.,
424
426
 
425
- module_eval(<<'.,.,', 'po_parser.ry', 61)
427
+ module_eval(<<'.,.,', 'po_parser.ry', 60)
426
428
  def _reduce_9(val, _values, result)
427
429
  if @fuzzy and ignore_fuzzy?
428
430
  if val[1] != ""
@@ -444,7 +446,7 @@ module_eval(<<'.,.,', 'po_parser.ry', 61)
444
446
  end
445
447
  .,.,
446
448
 
447
- module_eval(<<'.,.,', 'po_parser.ry', 82)
449
+ module_eval(<<'.,.,', 'po_parser.ry', 81)
448
450
  def _reduce_10(val, _values, result)
449
451
  if val[0].size > 0
450
452
  result = val[0] + "\000" + val[1]
@@ -458,7 +460,7 @@ module_eval(<<'.,.,', 'po_parser.ry', 82)
458
460
 
459
461
  # reduce 11 omitted
460
462
 
461
- module_eval(<<'.,.,', 'po_parser.ry', 94)
463
+ module_eval(<<'.,.,', 'po_parser.ry', 93)
462
464
  def _reduce_12(val, _values, result)
463
465
  result = val[2]
464
466
 
@@ -466,7 +468,7 @@ module_eval(<<'.,.,', 'po_parser.ry', 94)
466
468
  end
467
469
  .,.,
468
470
 
469
- module_eval(<<'.,.,', 'po_parser.ry', 101)
471
+ module_eval(<<'.,.,', 'po_parser.ry', 100)
470
472
  def _reduce_13(val, _values, result)
471
473
  on_comment(val[0])
472
474
 
@@ -474,7 +476,7 @@ module_eval(<<'.,.,', 'po_parser.ry', 101)
474
476
  end
475
477
  .,.,
476
478
 
477
- module_eval(<<'.,.,', 'po_parser.ry', 109)
479
+ module_eval(<<'.,.,', 'po_parser.ry', 108)
478
480
  def _reduce_14(val, _values, result)
479
481
  result = val.delete_if{|item| item == ""}.join
480
482
 
@@ -482,7 +484,7 @@ module_eval(<<'.,.,', 'po_parser.ry', 109)
482
484
  end
483
485
  .,.,
484
486
 
485
- module_eval(<<'.,.,', 'po_parser.ry', 113)
487
+ module_eval(<<'.,.,', 'po_parser.ry', 112)
486
488
  def _reduce_15(val, _values, result)
487
489
  result = val[0]
488
490
 
@@ -9,5 +9,5 @@
9
9
  =end
10
10
 
11
11
  module GetText
12
- VERSION = "3.4.5"
12
+ VERSION = "3.4.6"
13
13
  end
data/po/gettext.pot CHANGED
@@ -6,10 +6,10 @@
6
6
  #, fuzzy
7
7
  msgid ""
8
8
  msgstr ""
9
- "Project-Id-Version: gettext 3.4.5\n"
9
+ "Project-Id-Version: gettext 3.4.6\n"
10
10
  "Report-Msgid-Bugs-To: \n"
11
- "POT-Creation-Date: 2023-07-12 09:53+0900\n"
12
- "PO-Revision-Date: 2023-07-12 09:53+0900\n"
11
+ "POT-Creation-Date: 2023-07-12 10:23+0900\n"
12
+ "PO-Revision-Date: 2023-07-12 10:23+0900\n"
13
13
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14
14
  "Language-Team: LANGUAGE <LL@li.org>\n"
15
15
  "Language: \n"
data/src/po_parser.ry CHANGED
@@ -24,7 +24,7 @@ class GetText::POParser
24
24
  msgctxt
25
25
  : MSGCTXT string_list
26
26
  {
27
- @msgctxt = unescape(val[1])
27
+ @msgctxt = val[1]
28
28
  }
29
29
  ;
30
30
 
@@ -36,9 +36,8 @@ class GetText::POParser
36
36
  single_message
37
37
  : MSGID string_list MSGSTR string_list
38
38
  {
39
- msgid_raw = val[1]
40
- msgid = unescape(msgid_raw)
41
- msgstr = unescape(val[3])
39
+ msgid = val[1]
40
+ msgstr = val[3]
42
41
  use_message_p = true
43
42
  if @fuzzy and not msgid.empty?
44
43
  use_message_p = (not ignore_fuzzy?)
@@ -48,7 +47,7 @@ class GetText::POParser
48
47
  else
49
48
  $stderr.print _("Warning: fuzzy message was used.\n")
50
49
  end
51
- $stderr.print " #{@po_file}: msgid '#{msgid_raw}'\n"
50
+ $stderr.print " #{@po_file}: msgid '#{msgid}'\n"
52
51
  end
53
52
  end
54
53
  @fuzzy = false
@@ -144,20 +143,23 @@ require "gettext/po"
144
143
  @report_warning
145
144
  end
146
145
 
147
- def unescape(orig)
148
- ret = orig.gsub(/\\n/, "\n")
149
- ret.gsub!(/\\t/, "\t")
150
- ret.gsub!(/\\r/, "\r")
151
- ret.gsub!(/\\"/, "\"")
152
- ret
146
+ def unescape(string)
147
+ string.gsub(/\\(.)/) do
148
+ escaped_character = $1
149
+ case escaped_character
150
+ when "t"
151
+ "\t"
152
+ when "r"
153
+ "\r"
154
+ when "n"
155
+ "\n"
156
+ else
157
+ escaped_character
158
+ end
159
+ end
153
160
  end
154
161
  private :unescape
155
162
 
156
- def unescape_string(string)
157
- string.gsub(/\\\\/, "\\")
158
- end
159
- private :unescape_string
160
-
161
163
  def parse(str, data)
162
164
  @translator_comments = []
163
165
  @extracted_comments = []
@@ -202,7 +204,7 @@ require "gettext/po"
202
204
  @q.push [:COMMENT, $&]
203
205
  str = $'
204
206
  when /\A\"(.*)\"/
205
- @q.push [:STRING, unescape_string($1)]
207
+ @q.push [:STRING, unescape($1)]
206
208
  str = $'
207
209
  else
208
210
  #c = str[0,1]
@@ -62,6 +62,16 @@ EOP
62
62
  class TestPO < self
63
63
  include Helper::Warning
64
64
 
65
+ def test_msgid_escape
66
+ po_file = create_po_file(<<-'EOP')
67
+ msgid "\\\\r \\r \t \r \n"
68
+ msgstr "\\\\r \\r \t \r \n"
69
+ EOP
70
+ entries = parse_po_file(po_file)
71
+ assert_equal("\\\\r \\r \t \r \n",
72
+ entries["\\\\r \\r \t \r \n"].msgstr)
73
+ end
74
+
65
75
  def test_msgstr
66
76
  po_file = create_po_file(<<-EOP)
67
77
  # This is the comment.
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gettext
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.4.5
4
+ version: 3.4.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kouhei Sutou