simple_po_parser 1.1.5 → 1.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2256e646107eff9f32342d0f8f7eb244482ff085b3c20dabee7ecb2df56233a2
4
- data.tar.gz: fffd4466d4932178ef820d780cdfc9ec05084a602b878787d0cd14058504d8ed
3
+ metadata.gz: 7b32bc4f19bd4e4967e9395bb2869e377e75f63bac97a0820ced810d03191b73
4
+ data.tar.gz: 24bb37816cc545d65b2840ad96628bc17b4f7c994eeabe8d0cb43307302c89d1
5
5
  SHA512:
6
- metadata.gz: 97d621fb94d213c18a08947cd772e301e57b0ee0390ef62a0538e98a265e5af881843681aa423ca4b384a5b278641623497fa691708c11e5403fdc626c2218cf
7
- data.tar.gz: 1de5dea5bc4bb5a57cd9032e818669eef21a1c5666b1df9f336110774291291b3fd590384c96112301e8332942e5fe0052a8c986355d8a19b9257294e0466c99
6
+ metadata.gz: 7469e3b963f89d2f35a29cef3d3c7f4fe3bb0e78e9cbbad9fd6e8f9a800a44b804c1193abfefa2685027d773fdf0c86faaa6abab1d0d84df35ca068e6b0eb209
7
+ data.tar.gz: 1283c455623d2e8c387e8b57d963dffd11a244dfdd4c4049f10444c4cf1fffa3adc5c9c59b83c8c463ac0167c1bd410741a1c17bd06b70f50e7822d8e8fb3bf2
data/CHANGELOG.md CHANGED
@@ -1,15 +1,35 @@
1
- Version 1.1.0
1
+ Changelog
2
2
  =============
3
3
 
4
+ ## Version 1.1.6
5
+ * fixes parsing of multiline strings that have content on the first line. Fixes issue #3, added via PR #4 by @mgruner
6
+
7
+ ## Version 1.1.5
8
+ * added support for windows CRLF line endings. Fixes issue #2
9
+ * Note: CRLF support is enabled if the first line ends in a CRLF and reduces performance by about 50%. Performance for files only using \n is not affected. Files not using \r\n in the first line but somewhere else in the file might trigger errors.
10
+
11
+ ## Version 1.1.4
12
+ * see 1.1.5. **Shouldn't be used**.
13
+
14
+ ## Version 1.1.3
15
+
16
+ * merged PR#1 from @christopherstat for UTF-8 support of legacy ruby versions
17
+
18
+ ## Version 1.1.2
19
+ * Made the parser thread-safe
20
+
21
+ ## Version 1.1.2
22
+ * Made the parser thread-safe
23
+
24
+ ## Version 1.1.0
25
+
4
26
  * for line types only parsed once the parser returns a string instead of an array with one string
5
27
 
6
- Version 1.0.1
7
- =============
28
+ ## Version 1.0.1
8
29
 
9
30
  * added specs
10
31
  * fixed minor parser errors
11
32
 
12
- Version 1.0.0
13
- =============
33
+ ## Version 1.0.0
14
34
 
15
35
  * initial release
data/Rakefile CHANGED
@@ -20,15 +20,15 @@ namespace :parser do
20
20
  require 'benchmark'
21
21
  require 'simple_po_parser'
22
22
 
23
- desc "Benchmark of 100 full PoParser runs of test/benchmark.po"
23
+ desc "Benchmark of 1000 full PoParser runs of test/benchmark.po"
24
24
  task "benchmark" do
25
25
  pofile = File.expand_path("test/benchmark.po", __dir__)
26
26
  Benchmark.bmbm do |x|
27
- x.report("Parser:") {100.times { SimplePoParser.parse(pofile) }}
27
+ x.report("Parser:") {1000.times { SimplePoParser.parse(pofile) }}
28
28
  end
29
29
  end
30
30
 
31
- desc "Generate 5 random PO files with 100 to 500 messages and benchmark each full PoParser run"
31
+ desc "Generate 5 random PO files with 1000 to 5000 messages and benchmark each full PoParser run"
32
32
  task 'five_random_po_full' do
33
33
  include Benchmark
34
34
  require_relative 'spec/utils/random_pofile_generator'
@@ -37,7 +37,7 @@ namespace :parser do
37
37
  total = nil
38
38
  total_length = 0
39
39
  for i in 0..5 do
40
- length = (Random.new.rand * 400.0 + 100).to_i
40
+ length = (Random.new.rand * 4000.0 + 1000).to_i
41
41
  total_length += length
42
42
  puts "Benchmarking file of length #{length}"
43
43
  SimplePoParser::RandomPoFileGenerator.generate_file(pofile, length)
@@ -109,7 +109,7 @@ module SimplePoParser
109
109
  skip_whitespace
110
110
  text = message_line
111
111
  add_result(:msgctxt, text)
112
- message_multiline(:msgctxt) if text.empty?
112
+ message_multiline(:msgctxt) if @scanner.peek(1) == '"'
113
113
  end
114
114
  msgid
115
115
  rescue PoSyntaxError => pe
@@ -127,7 +127,7 @@ module SimplePoParser
127
127
  skip_whitespace
128
128
  text = message_line
129
129
  add_result(:msgid, text)
130
- message_multiline(:msgid) if text.empty?
130
+ message_multiline(:msgid) if @scanner.peek(1) == '"'
131
131
  if msgid_plural
132
132
  msgstr_plural
133
133
  else
@@ -155,7 +155,7 @@ module SimplePoParser
155
155
  skip_whitespace
156
156
  text = message_line
157
157
  add_result(:msgid_plural, text)
158
- message_multiline(:msgid_plural) if text.empty?
158
+ message_multiline(:msgid_plural) if @scanner.peek(1) == '"'
159
159
  true
160
160
  else
161
161
  false
@@ -174,7 +174,7 @@ module SimplePoParser
174
174
  skip_whitespace
175
175
  text = message_line
176
176
  add_result(:msgstr, text)
177
- message_multiline(:msgstr) if text.empty?
177
+ message_multiline(:msgstr) if @scanner.peek(1) == '"'
178
178
  skip_whitespace
179
179
  raise PoSyntaxError, "Unexpected content after expected message end #{@scanner.peek(10).inspect}" unless @scanner.eos?
180
180
  else
@@ -202,7 +202,7 @@ module SimplePoParser
202
202
  skip_whitespace
203
203
  text = message_line
204
204
  add_result(msgstr_key, text)
205
- message_multiline(msgstr_key) if text.empty?
205
+ message_multiline(msgstr_key) if @scanner.peek(1) == '"'
206
206
  msgstr_plural(num+1)
207
207
  elsif num == 0 # and msgstr_key was false
208
208
  raise PoSyntaxError, "Plural message without msgstr[0] is not allowed. Line started unexpectedly with #{@scanner.peek(10).inspect}."
@@ -238,7 +238,7 @@ module SimplePoParser
238
238
  skip_whitespace
239
239
  text = message_line
240
240
  add_result(key, text)
241
- previous_multiline(key) if text.empty?
241
+ previous_multiline(key) if @scanner.match?(/#\|\p{Blank}*"/)
242
242
  else
243
243
  raise PoSyntaxError, "Previous comments must start with '#| msg'. #{@scanner.peek(10).inspect} unknown."
244
244
  end
@@ -265,8 +265,10 @@ module SimplePoParser
265
265
 
266
266
  # parses a multiline message
267
267
  #
268
- # multiline messages are indicated by an empty content as first line and the next line
269
- # starting with the double quote character
268
+ # Multiline messages are usually indicated by an empty string as the first line,
269
+ # followed by more lines starting with the double quote character.
270
+ #
271
+ # However, according to the PO file standard, the first line can also contain content.
270
272
  def message_multiline(key)
271
273
  begin
272
274
  skip_whitespace
@@ -1,5 +1,5 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  module SimplePoParser
4
- VERSION = "1.1.5"
4
+ VERSION = "1.1.6"
5
5
  end
@@ -0,0 +1,10 @@
1
+ #| msgid "multiline\n"
2
+ #|"previous messageid"
3
+ #|"with non-empty first line"
4
+ msgid ""
5
+ "multiline string "
6
+ "with empty first line "
7
+ "and trailing spaces"
8
+ msgstr "multiline string"
9
+ "with non-empty first line"
10
+ "and no trailing spaces"
@@ -4,6 +4,7 @@ describe SimplePoParser::Parser do
4
4
  let (:po_header) { File.read(File.expand_path("fixtures/header.po", __dir__))}
5
5
  let(:po_complex_message) { File.read(File.expand_path("fixtures/complex_entry.po", __dir__))}
6
6
  let(:po_simple_message) { File.read(File.expand_path("fixtures/simple_entry.po", __dir__))}
7
+ let(:po_multiline_message) { File.read(File.expand_path("fixtures/multiline.po", __dir__))}
7
8
 
8
9
  it "parses the PO header" do
9
10
  expected_result = {
@@ -27,6 +28,15 @@ describe SimplePoParser::Parser do
27
28
  expect(SimplePoParser::Parser.new.parse(po_simple_message)).to eq(expected_result)
28
29
  end
29
30
 
31
+ it "parses the multiline entry as expected" do
32
+ expected_result = {
33
+ :msgid => ["", "multiline string ", "with empty first line ", "and trailing spaces"],
34
+ :msgstr => ["multiline string", "with non-empty first line", "and no trailing spaces"],
35
+ :previous_msgid => ["multiline\\n", "previous messageid", "with non-empty first line"],
36
+ }
37
+ expect(SimplePoParser::Parser.new.parse(po_multiline_message)).to eq(expected_result)
38
+ end
39
+
30
40
  it "parses the complex entry as expected" do
31
41
  expected_result = {
32
42
  :translator_comment => ["translator-comment", ""],
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.5
4
+ version: 1.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dennis-Florian Herr
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-06-09 00:00:00.000000000 Z
11
+ date: 2022-03-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -65,6 +65,7 @@ files:
65
65
  - spec/simple_po_parser/fixtures/complex_entry.po
66
66
  - spec/simple_po_parser/fixtures/crlf_encoded.po
67
67
  - spec/simple_po_parser/fixtures/header.po
68
+ - spec/simple_po_parser/fixtures/multiline.po
68
69
  - spec/simple_po_parser/fixtures/non_ascii_file.po
69
70
  - spec/simple_po_parser/fixtures/simple_entry.po
70
71
  - spec/simple_po_parser/parser_spec.rb
@@ -76,7 +77,7 @@ homepage: http://github.com/experteer/simple_po_parser
76
77
  licenses:
77
78
  - MIT
78
79
  metadata: {}
79
- post_install_message:
80
+ post_install_message:
80
81
  rdoc_options: []
81
82
  require_paths:
82
83
  - lib
@@ -91,9 +92,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
91
92
  - !ruby/object:Gem::Version
92
93
  version: '0'
93
94
  requirements: []
94
- rubyforge_project:
95
- rubygems_version: 2.7.6
96
- signing_key:
95
+ rubygems_version: 3.2.15
96
+ signing_key:
97
97
  specification_version: 4
98
98
  summary: A simple PO file to ruby hash parser
99
99
  test_files:
@@ -101,6 +101,7 @@ test_files:
101
101
  - spec/simple_po_parser/fixtures/complex_entry.po
102
102
  - spec/simple_po_parser/fixtures/crlf_encoded.po
103
103
  - spec/simple_po_parser/fixtures/header.po
104
+ - spec/simple_po_parser/fixtures/multiline.po
104
105
  - spec/simple_po_parser/fixtures/non_ascii_file.po
105
106
  - spec/simple_po_parser/fixtures/simple_entry.po
106
107
  - spec/simple_po_parser/parser_spec.rb