gettext 3.4.4 → 3.4.6
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.
- checksums.yaml +4 -4
- data/doc/text/news.md +13 -0
- data/lib/gettext/po_entry.rb +3 -2
- data/lib/gettext/po_parser.rb +27 -25
- data/lib/gettext/version.rb +2 -2
- data/po/gettext.pot +3 -3
- data/src/po_parser.ry +19 -17
- data/test/test_po_entry.rb +6 -4
- data/test/test_po_parser.rb +10 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 623479874c1f5d1800b18fc285df714bdb8bc48b63f55547e634506ac89a5b4f
|
4
|
+
data.tar.gz: b11c495203dc16e9668430a70f35ba93abe5126db80dbf04c773b72a609b34c8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9b6b842173b961104f45a2a5bc2dc6c1924d012aed19c114d748f8d85c94ae3510b4b7cf8db18a8df7790b19e57ab08b5ff2b7a5bc1ef50509f250a73cbcfce1
|
7
|
+
data.tar.gz: 480d5730ff338bc4bb4a1045df02fd0adfeef8cdc468e1c53977751917a243172f7b97e58b363175fe0566658c04a4c27db8282f0afc4707e1daf091419c47b4
|
data/doc/text/news.md
CHANGED
@@ -1,5 +1,18 @@
|
|
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
|
+
|
10
|
+
## 3.4.5: 2023-07-12 {#version-3-4-5}
|
11
|
+
|
12
|
+
### Improvements
|
13
|
+
|
14
|
+
* po: Added support for escaping `\r` in `msgid`/`msgstr`.
|
15
|
+
|
3
16
|
## 3.4.4: 2023-06-11 {#version-3-4-4}
|
4
17
|
|
5
18
|
### Improvements
|
data/lib/gettext/po_entry.rb
CHANGED
@@ -241,11 +241,12 @@ module GetText
|
|
241
241
|
def escape(string)
|
242
242
|
return "" if string.nil?
|
243
243
|
|
244
|
-
string.gsub(/
|
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"
|
248
|
+
when "\r"
|
249
|
+
"\\r"
|
249
250
|
when "\n"
|
250
251
|
"\\n"
|
251
252
|
else
|
data/lib/gettext/po_parser.rb
CHANGED
@@ -8,7 +8,7 @@
|
|
8
8
|
|
9
9
|
#
|
10
10
|
# DO NOT MODIFY!!!!
|
11
|
-
# This file is automatically generated by Racc 1.7.
|
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',
|
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(
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
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,
|
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 =
|
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
|
-
|
403
|
-
|
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 '#{
|
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',
|
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',
|
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',
|
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',
|
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',
|
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',
|
487
|
+
module_eval(<<'.,.,', 'po_parser.ry', 112)
|
486
488
|
def _reduce_15(val, _values, result)
|
487
489
|
result = val[0]
|
488
490
|
|
data/lib/gettext/version.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
=begin
|
2
2
|
version - version information of gettext
|
3
3
|
|
4
|
-
Copyright (C) 2012-
|
4
|
+
Copyright (C) 2012-2023 Sutou Kouhei <kou@clear-code.com>
|
5
5
|
Copyright (C) 2005-2009 Masao Mutoh
|
6
6
|
|
7
7
|
You may redistribute it and/or modify it under the same
|
@@ -9,5 +9,5 @@
|
|
9
9
|
=end
|
10
10
|
|
11
11
|
module GetText
|
12
|
-
VERSION = "3.4.
|
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.
|
9
|
+
"Project-Id-Version: gettext 3.4.6\n"
|
10
10
|
"Report-Msgid-Bugs-To: \n"
|
11
|
-
"POT-Creation-Date: 2023-
|
12
|
-
"PO-Revision-Date: 2023-
|
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 =
|
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
|
-
|
40
|
-
|
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 '#{
|
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(
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
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,
|
207
|
+
@q.push [:STRING, unescape($1)]
|
206
208
|
str = $'
|
207
209
|
else
|
208
210
|
#c = str[0,1]
|
data/test/test_po_entry.rb
CHANGED
@@ -233,13 +233,15 @@ EOE
|
|
233
233
|
class TestEscape < self
|
234
234
|
def test_normal
|
235
235
|
entry = GetText::POEntry.new(:normal)
|
236
|
-
entry.msgid = "He said \"hello.\""
|
237
|
-
entry.msgstr = "Il a dit \"bonjour.\""
|
236
|
+
entry.msgid = "He said \"hello.\"\r\n"
|
237
|
+
entry.msgstr = "Il a dit \"bonjour.\"\r\n"
|
238
238
|
entry.references = ["file1:1", "file2:10"]
|
239
239
|
expected_po = <<-EOE
|
240
240
|
#: file1:1 file2:10
|
241
|
-
msgid "
|
242
|
-
|
241
|
+
msgid ""
|
242
|
+
"He said \\"hello.\\"\\r\\n"
|
243
|
+
msgstr ""
|
244
|
+
"Il a dit \\"bonjour.\\"\\r\\n"
|
243
245
|
EOE
|
244
246
|
assert_equal(expected_po, entry.to_s)
|
245
247
|
end
|
data/test/test_po_parser.rb
CHANGED
@@ -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.
|
4
|
+
version: 3.4.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kouhei Sutou
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2023-
|
12
|
+
date: 2023-07-12 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: erubi
|