simple_po_parser 1.1.1 → 1.1.2
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/Gemfile.lock +1 -1
- data/lib/simple_po_parser.rb +1 -1
- data/lib/simple_po_parser/parser.rb +2 -3
- data/lib/simple_po_parser/tokenizer.rb +1 -1
- data/lib/simple_po_parser/version.rb +1 -1
- data/spec/simple_po_parser/parser_spec.rb +17 -17
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3b7a33f4b10faa83677bce933ae9a517130e7b69
|
4
|
+
data.tar.gz: 3c79c5d7e32c58db9a1556b8681bb52743214b85
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 18cd57e0e5fd0d05926eef3c400430fced95ee98201c29b9b61e41d258245f3dd12baefd29a2dc5caefd7ca8ef4979b49a6ca8c9a726432a0f2560b72cbc0987
|
7
|
+
data.tar.gz: 35450f6ea2e0e0ab58bedd3458681a66d05fa75eddfa6ad3b9be31b7a65f2621caab70b79859c7a04f3002b503e8390b740f0a8349a13ba5fe824b745d7b9501
|
data/Gemfile.lock
CHANGED
data/lib/simple_po_parser.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
module SimplePoParser
|
2
|
-
#
|
2
|
+
# Fast parser directly using Rubys powerful StringScanner (strscan)
|
3
3
|
#
|
4
4
|
# Important notes about StringScanner.scan:
|
5
5
|
# * scan will return nil if there is no match. Using the regex * (zero or more) quantifier will
|
@@ -8,10 +8,9 @@ module SimplePoParser
|
|
8
8
|
# * the start of line anchor ^ is obsolete as scan will only match start of line.
|
9
9
|
# * rubys regex is by default in single-line mode, therefore scan will only match until
|
10
10
|
# the next newline is hit (unless multi-line mode is explicitly enabled)
|
11
|
-
|
11
|
+
class Parser
|
12
12
|
require_relative 'error'
|
13
13
|
require 'strscan'
|
14
|
-
extend self
|
15
14
|
|
16
15
|
# parse a single message of the PO format.
|
17
16
|
#
|
@@ -12,7 +12,7 @@ describe SimplePoParser::Parser do
|
|
12
12
|
:msgid => "",
|
13
13
|
:msgstr => ["", "Project-Id-Version: simple_po_parser 1\\n", "Report-Msgid-Bugs-To: me\\n"]
|
14
14
|
}
|
15
|
-
expect(SimplePoParser::Parser.parse(po_header)).to eq(expected_result)
|
15
|
+
expect(SimplePoParser::Parser.new.parse(po_header)).to eq(expected_result)
|
16
16
|
end
|
17
17
|
|
18
18
|
it "parses the simple entry as expected" do
|
@@ -24,7 +24,7 @@ describe SimplePoParser::Parser do
|
|
24
24
|
:msgid => "msgid",
|
25
25
|
:msgstr => "translated"
|
26
26
|
}
|
27
|
-
expect(SimplePoParser::Parser.parse(po_simple_message)).to eq(expected_result)
|
27
|
+
expect(SimplePoParser::Parser.new.parse(po_simple_message)).to eq(expected_result)
|
28
28
|
end
|
29
29
|
|
30
30
|
it "parses the complex entry as expected" do
|
@@ -43,36 +43,36 @@ describe SimplePoParser::Parser do
|
|
43
43
|
"msgstr[1]" => ["", "msgstr 1 multiline 1\\n", "msgstr 1 line 2\\n"],
|
44
44
|
"msgstr[2]" => "msgstr 2"
|
45
45
|
}
|
46
|
-
expect(SimplePoParser::Parser.parse(po_complex_message)).to eq(expected_result)
|
46
|
+
expect(SimplePoParser::Parser.new.parse(po_complex_message)).to eq(expected_result)
|
47
47
|
end
|
48
48
|
|
49
49
|
context "Errors" do
|
50
50
|
it "errors cascade to ParserError" do
|
51
51
|
message = "invalid message"
|
52
|
-
expect{ SimplePoParser::Parser.parse(message) }.to raise_error(SimplePoParser::ParserError)
|
52
|
+
expect{ SimplePoParser::Parser.new.parse(message) }.to raise_error(SimplePoParser::ParserError)
|
53
53
|
end
|
54
54
|
|
55
55
|
it "raises an error if there is no msgid" do
|
56
56
|
message = "# comment\nmsgctxt \"ctxt\"\nmsgstr \"translation\""
|
57
|
-
expect{ SimplePoParser::Parser.parse(message) }.
|
57
|
+
expect{ SimplePoParser::Parser.new.parse(message) }.
|
58
58
|
to raise_error(SimplePoParser::ParserError, /Message without msgid is not allowed/)
|
59
59
|
end
|
60
60
|
|
61
61
|
it "raises an error if there is no msgstr in singular message" do
|
62
62
|
message = "# comment\nmsgctxt \"ctxt\"\nmsgid \"msg\""
|
63
|
-
expect{ SimplePoParser::Parser.parse(message) }.
|
63
|
+
expect{ SimplePoParser::Parser.new.parse(message) }.
|
64
64
|
to raise_error(SimplePoParser::ParserError,
|
65
65
|
/Singular message without msgstr is not allowed/)
|
66
66
|
end
|
67
67
|
|
68
68
|
it "raises an error if there is no msgstr[0] in plural message" do
|
69
69
|
message = "# comment\nmsgid \"id\"\nmsgid_plural \"msg plural\""
|
70
|
-
expect{ SimplePoParser::Parser.parse(message) }.
|
70
|
+
expect{ SimplePoParser::Parser.new.parse(message) }.
|
71
71
|
to raise_error(SimplePoParser::ParserError,
|
72
72
|
/Plural message without msgstr\[0\] is not allowed/)
|
73
73
|
|
74
74
|
message = "# comment\nmsgid \"id\"\nmsgid_plural \"msg plural\"\nmsgstr[1] \"plural trans\""
|
75
|
-
expect{ SimplePoParser::Parser.parse(message) }.
|
75
|
+
expect{ SimplePoParser::Parser.new.parse(message) }.
|
76
76
|
to raise_error(SimplePoParser::ParserError,
|
77
77
|
/Bad 'msgstr\[index\]' index/)
|
78
78
|
end
|
@@ -80,33 +80,33 @@ describe SimplePoParser::Parser do
|
|
80
80
|
context "comments" do
|
81
81
|
it "raises an error on unknown comment types" do
|
82
82
|
message = "#- no such comment type"
|
83
|
-
expect{ SimplePoParser::Parser.parse(message) }.
|
83
|
+
expect{ SimplePoParser::Parser.new.parse(message) }.
|
84
84
|
to raise_error(SimplePoParser::ParserError, /Unknown comment type/)
|
85
85
|
end
|
86
86
|
|
87
87
|
it "raises an error on unknown previous comment types" do
|
88
88
|
message = "#| msgstr \"no such comment type\""
|
89
|
-
expect{ SimplePoParser::Parser.parse(message) }.
|
89
|
+
expect{ SimplePoParser::Parser.new.parse(message) }.
|
90
90
|
to raise_error(SimplePoParser::ParserError, /Previous comment type .*? unknown/)
|
91
91
|
message = "#| bla "
|
92
|
-
expect{ SimplePoParser::Parser.parse(message) }.
|
92
|
+
expect{ SimplePoParser::Parser.new.parse(message) }.
|
93
93
|
to raise_error(SimplePoParser::ParserError, /Previous comments must start with '#| msg'/)
|
94
94
|
end
|
95
95
|
|
96
96
|
it "raises an error if any lines are not marked obsolete after the first obsolete line" do
|
97
97
|
message = "# comment\n#~msgid \"hi\"\nmsgstr \"should be obsolete\""
|
98
|
-
expect{ SimplePoParser::Parser.parse(message) }.
|
98
|
+
expect{ SimplePoParser::Parser.new.parse(message) }.
|
99
99
|
to raise_error(SimplePoParser::ParserError,
|
100
100
|
/All lines must be obsolete after the first obsolete line, but got/)
|
101
101
|
end
|
102
102
|
|
103
103
|
it "raises an error if previous comments are not marked obsolete in obsolete entries" do
|
104
104
|
message = "# comment\n#| msgid \"hi\"\n#~msgid \"hi\"\n#~msgstr \"should be obsolete\""
|
105
|
-
expect{ SimplePoParser::Parser.parse(message) }.
|
105
|
+
expect{ SimplePoParser::Parser.new.parse(message) }.
|
106
106
|
to raise_error(SimplePoParser::ParserError,
|
107
107
|
/Previous comment entries need to be marked obsolete too in obsolete message entries/)
|
108
108
|
message = "# comment\n#| msgctxt \"hi\"\n#~msgid \"hi\"\n#~msgstr \"should be obsolete\""
|
109
|
-
expect{ SimplePoParser::Parser.parse(message) }.
|
109
|
+
expect{ SimplePoParser::Parser.new.parse(message) }.
|
110
110
|
to raise_error(SimplePoParser::ParserError,
|
111
111
|
/Previous comment entries need to be marked obsolete too in obsolete message entries/)
|
112
112
|
end
|
@@ -115,21 +115,21 @@ describe SimplePoParser::Parser do
|
|
115
115
|
context "message_line" do
|
116
116
|
it "raises an error if a message_line does not start with a double quote" do
|
117
117
|
message = "msgid No starting double quote\""
|
118
|
-
expect{ SimplePoParser::Parser.parse(message) }.
|
118
|
+
expect{ SimplePoParser::Parser.new.parse(message) }.
|
119
119
|
to raise_error(SimplePoParser::ParserError,
|
120
120
|
/A message text needs to start with the double quote character/)
|
121
121
|
end
|
122
122
|
|
123
123
|
it "raises an error if a message_line does not end with a double quote" do
|
124
124
|
message = "msgid \"No ending double quote"
|
125
|
-
expect{ SimplePoParser::Parser.parse(message) }.
|
125
|
+
expect{ SimplePoParser::Parser.new.parse(message) }.
|
126
126
|
to raise_error(SimplePoParser::ParserError,
|
127
127
|
/The message text .*? must be finished with the double quote character/)
|
128
128
|
end
|
129
129
|
|
130
130
|
it "raises an error if there is anything but whitespace after the ending double quote" do
|
131
131
|
message = "msgid \"text\" this shouldn't be here"
|
132
|
-
expect{ SimplePoParser::Parser.parse(message) }.
|
132
|
+
expect{ SimplePoParser::Parser.new.parse(message) }.
|
133
133
|
to raise_error(SimplePoParser::ParserError,
|
134
134
|
/There should be only whitespace until the end of line after the double quote character/)
|
135
135
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: simple_po_parser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dennis-Florian Herr
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-05-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|