simple_po_parser 1.0.0 → 1.0.1

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
  SHA1:
3
- metadata.gz: 5af2707fffbad814707531a12d5c255cf0be4912
4
- data.tar.gz: 1a0bc546529532459b6059dc3cf858815cf7f6b5
3
+ metadata.gz: 2e68d02e65b414ab6bf84fd752597af39f47f423
4
+ data.tar.gz: 94bac50f87a8a05c17cf8a368f2f2c02eca168f0
5
5
  SHA512:
6
- metadata.gz: d7b3fe6a2abff7824a0fbb57f4671116370e6b7a84a83d8c871de8b2fdb75f832ecaf4b2f6fe09b6c5794732479685b4f3d130543be23f59a36614cd4e19eaca
7
- data.tar.gz: 480e973695ec4c9ea10b51e7971306862df1b7fb7109ad7ac8fc70a03448d87e1a72b87921dc80f16ef5689cfba3013753959909c4b63ba0babfe9c306020558
6
+ metadata.gz: 91e548c9bbf1221c759d767cd7da8df876b41eb1d1f865dbf87c7175a3b955af8e58ceb314ffc31c82d4d5431ef7eea74c6a8fb4f33bd3737c26ac4583e489a2
7
+ data.tar.gz: 5f2dd9534520dcbc3cc12b5f6119c8a89147a43dd21f1538d9270e02a803807c97e52bb31d61da4c95cf7f40bc77487e4ab50ca52885c55f7181df4f3f4288a6
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- simple_po_parser (0.0.0)
4
+ simple_po_parser (1.0.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/README.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Simple Po Parser
2
2
 
3
+ [![Build Status](https://travis-ci.org/experteer/simple_po_parser.svg?branch=master)](https://travis-ci.org/experteer/simple_po_parser)
4
+ [![Coverage Status](https://img.shields.io/coveralls/experteer/simple_po_parser.svg)](https://coveralls.io/github/experteer/simple_po_parser)
5
+ [![Gem Version](https://badge.fury.io/rb/simple_po_parser.svg)](https://badge.fury.io/rb/simple_po_parser)
6
+
3
7
  This is a simple PO file to ruby hash parser, which complies with [GNU PO file specification](https://www.gnu.org/software/gettext/manual/html_node/PO-Files.html). Tested with the msgcat (GNU gettext-tools) 0.18.3 tool.
4
8
 
5
9
  ## Hash format
@@ -23,11 +23,12 @@ module SimplePoParser
23
23
  begin
24
24
  lines
25
25
  rescue ParserError => pe
26
- puts "Parsing error!"
27
- puts "#{pe.message}"
28
- puts "Backtrace:\n#{pe.backtrace.select{|i| i =~ /lib\/poparser/}.join("\n")}"
29
- puts "\nResult up to error: '#{@result}'"
30
- exit
26
+ error_msg = "SimplePoParser::ParserError"
27
+ error_msg += pe.message
28
+ error_msg += "\nParseing result before error: '#{@result}'"
29
+ error_msg += "\nSimplePoParser filtered backtrace: SimplePoParser::ParserError"
30
+ backtrace = "#{pe.backtrace.select{|i| i =~ /lib\/simple_po_parser/}.join("\n\tfrom ")}"
31
+ raise ParserError, error_msg, backtrace
31
32
  end
32
33
  @result
33
34
  end
@@ -274,7 +275,7 @@ module SimplePoParser
274
275
  skip_whitespace
275
276
  unless end_of_line
276
277
  err_msg = "There should be only whitespace until the end of line"
277
- err_msg += "after the double quote character of a message text."
278
+ err_msg += " after the double quote character of a message text."
278
279
  raise PoSyntaxError.new(err_msg)
279
280
  end
280
281
  text
@@ -1,3 +1,3 @@
1
1
  module SimplePoParser
2
- VERSION = "1.0.0"
2
+ VERSION = "1.0.1"
3
3
  end
@@ -0,0 +1,51 @@
1
+ # PO Header entry
2
+ #
3
+ #, fuzzy
4
+ msgid ""
5
+ msgstr ""
6
+ "Project-Id-Version: simple_po_parser 1\n"
7
+ "Report-Msgid-Bugs-To: me\n"
8
+ "POT-Creation-Date: 2012-05-04 12:56+0000\n"
9
+ "PO-Revision-Date: 2014-05-15 22:24+0330\n"
10
+ "Last-Translator: Dennis-Florian Herr <dennis.herr@experteer.com>\n"
11
+ "Language-Team: English\n"
12
+ "MIME-Version: 1.0\n"
13
+ "Content-Type: text/plain; charset=UTF-8\n"
14
+ "Content-Transfer-Encoding: 8bit\n"
15
+ "Plural-Forms: nplurals=1; plural=0;\n"
16
+
17
+ # translator-comment
18
+ #. extract
19
+ #: reference1
20
+ msgctxt "Context"
21
+ msgid "msgid"
22
+ msgstr "translated"
23
+
24
+ # translator-comment
25
+ #
26
+ #. extract
27
+ #: reference1
28
+ #: reference2
29
+ #, flag
30
+ #| msgctxt "previous context"
31
+ #| msgid ""
32
+ #| "multiline\n"
33
+ #|"previous messageid"
34
+ #| msgid_plural "previous msgid_plural"
35
+ msgctxt "Context"
36
+ msgid "msgid"
37
+ msgid_plural ""
38
+ "multiline msgid_plural\n"
39
+ ""
40
+ msgstr[0] "msgstr 0"
41
+ msgstr[1] ""
42
+ "msgstr 1 multiline 1\n"
43
+ "msgstr 1 line 2\n"
44
+ msgstr[2] "msgstr 2"
45
+
46
+ # translator-comment
47
+ #. extract
48
+ #: reference1
49
+ #~ msgctxt "Context"
50
+ #~ msgid "msgid"
51
+ #~ msgstr "translated"
@@ -0,0 +1,51 @@
1
+ # Persian translation for damned-lies.
2
+ # Copyright (C) 2012 damned-lies's COPYRIGHT HOLDER
3
+ # This file is distributed under the same license as the damned-lies package.
4
+ # Arash Mousavi <mousavi.arash@gmail.com>, 2014.
5
+ #
6
+ msgid ""
7
+ msgstr ""
8
+ "Project-Id-Version: damned-lies master\n"
9
+ "Report-Msgid-Bugs-To: \n"
10
+ "POT-Creation-Date: 2012-05-04 12:56+0000\n"
11
+ "PO-Revision-Date: 2014-05-15 22:24+0330\n"
12
+ "Last-Translator: Arash Mousavi <mousavi.arash@gmail.com>\n"
13
+ "Language-Team: Persian <fa@li.org>\n"
14
+ "MIME-Version: 1.0\n"
15
+ "Content-Type: text/plain; charset=UTF-8\n"
16
+ "Content-Transfer-Encoding: 8bit\n"
17
+ "Plural-Forms: nplurals=1; plural=0;\n"
18
+ "X-Generator: Poedit 1.6.4\n"
19
+
20
+ #: database-content.py:1 database-content.py:129 settings.py:52
21
+ msgid "Afrikaans"
22
+ msgstr "آفریقایی"
23
+
24
+ #: templates/vertimus/vertimus_detail.html:105
25
+ #, python-format
26
+ msgid " including <a href=\"%(img_url)s\">%(stats)s image</a>"
27
+ msgid_plural " including <a href=\"%(img_url)s\">%(stats)s images</a>"
28
+ msgstr[0] ""
29
+ msgstr[1] ""
30
+
31
+ #: templates/vertimus/vertimus_detail.html:136 vertimus/forms.py:79
32
+ msgid "Invalid action. Someone probably posted another action just before you."
33
+ msgstr ""
34
+ "فعالیت نامعتبر. شاید یک نفر دیگر دقیقا قبل از شما یک فعالیت دیگر ارسال کرده "
35
+ "است."
36
+
37
+ #: vertimus/models.py:470
38
+ #, python-format
39
+ #| msgid ""
40
+ #| "Hello,\n"
41
+ #| "\n"
42
+ #| "The new state of %(module)s - %(branch)s - %(domain)s (%(language)s) is "
43
+ #| "now '%(new_state)s'.\n"
44
+ #| "%(url)s\n"
45
+ #| "\n"
46
+ msgid ""
47
+ "The new state of %(module)s - %(branch)s - %(domain)s (%(language)s) is now "
48
+ "'%(new_state)s'."
49
+ msgstr ""
50
+ "وضعیت جدید %(module)s - %(branch)s - %(domain)s (%(language)s) هم‌اکنون "
51
+ "«%(new_state)s» است."
@@ -46,4 +46,95 @@ describe SimplePoParser::Parser do
46
46
  expect(SimplePoParser::Parser.parse(po_complex_message)).to eq(expected_result)
47
47
  end
48
48
 
49
+ context "Errors" do
50
+ it "errors cascade to ParserError" do
51
+ message = "invalid message"
52
+ expect{ SimplePoParser::Parser.parse(message) }.to raise_error(SimplePoParser::ParserError)
53
+ end
54
+
55
+ it "raises an error if there is no msgid" do
56
+ message = "# comment\nmsgctxt \"ctxt\"\nmsgstr \"translation\""
57
+ expect{ SimplePoParser::Parser.parse(message) }.
58
+ to raise_error(SimplePoParser::ParserError, /Message without msgid is not allowed/)
59
+ end
60
+
61
+ it "raises an error if there is no msgstr in singular message" do
62
+ message = "# comment\nmsgctxt \"ctxt\"\nmsgid \"msg\""
63
+ expect{ SimplePoParser::Parser.parse(message) }.
64
+ to raise_error(SimplePoParser::ParserError,
65
+ /Singular message without msgstr is not allowed/)
66
+ end
67
+
68
+ it "raises an error if there is no msgstr[0] in plural message" do
69
+ message = "# comment\nmsgid \"id\"\nmsgid_plural \"msg plural\""
70
+ expect{ SimplePoParser::Parser.parse(message) }.
71
+ to raise_error(SimplePoParser::ParserError,
72
+ /Plural message without msgstr\[0\] is not allowed/)
73
+
74
+ message = "# comment\nmsgid \"id\"\nmsgid_plural \"msg plural\"\nmsgstr[1] \"plural trans\""
75
+ expect{ SimplePoParser::Parser.parse(message) }.
76
+ to raise_error(SimplePoParser::ParserError,
77
+ /Bad 'msgstr\[index\]' index/)
78
+ end
79
+
80
+ context "comments" do
81
+ it "raises an error on unknown comment types" do
82
+ message = "#- no such comment type"
83
+ expect{ SimplePoParser::Parser.parse(message) }.
84
+ to raise_error(SimplePoParser::ParserError, /Unknown comment type/)
85
+ end
86
+
87
+ it "raises an error on unknown previous comment types" do
88
+ message = "#| msgstr \"no such comment type\""
89
+ expect{ SimplePoParser::Parser.parse(message) }.
90
+ to raise_error(SimplePoParser::ParserError, /Previous comment type .*? unknown/)
91
+ message = "#| bla "
92
+ expect{ SimplePoParser::Parser.parse(message) }.
93
+ to raise_error(SimplePoParser::ParserError, /Previous comments must start with '#| msg'/)
94
+ end
95
+
96
+ it "raises an error if any lines are not marked obsolete after the first obsolete line" do
97
+ message = "# comment\n#~msgid \"hi\"\nmsgstr \"should be obsolete\""
98
+ expect{ SimplePoParser::Parser.parse(message) }.
99
+ to raise_error(SimplePoParser::ParserError,
100
+ /All lines must be obsolete after the first obsolete line, but got/)
101
+ end
102
+
103
+ it "raises an error if previous comments are not marked obsolete in obsolete entries" do
104
+ message = "# comment\n#| msgid \"hi\"\n#~msgid \"hi\"\n#~msgstr \"should be obsolete\""
105
+ expect{ SimplePoParser::Parser.parse(message) }.
106
+ to raise_error(SimplePoParser::ParserError,
107
+ /Previous comment entries need to be marked obsolete too in obsolete message entries/)
108
+ message = "# comment\n#| msgctxt \"hi\"\n#~msgid \"hi\"\n#~msgstr \"should be obsolete\""
109
+ expect{ SimplePoParser::Parser.parse(message) }.
110
+ to raise_error(SimplePoParser::ParserError,
111
+ /Previous comment entries need to be marked obsolete too in obsolete message entries/)
112
+ end
113
+ end
114
+
115
+ context "message_line" do
116
+ it "raises an error if a message_line does not start with a double quote" do
117
+ message = "msgid No starting double quote\""
118
+ expect{ SimplePoParser::Parser.parse(message) }.
119
+ to raise_error(SimplePoParser::ParserError,
120
+ /A message text needs to start with the double quote character/)
121
+ end
122
+
123
+ it "raises an error if a message_line does not end with a double quote" do
124
+ message = "msgid \"No ending double quote"
125
+ expect{ SimplePoParser::Parser.parse(message) }.
126
+ to raise_error(SimplePoParser::ParserError,
127
+ /The message text .*? must be finished with the double quote character/)
128
+ end
129
+
130
+ it "raises an error if there is anything but whitespace after the ending double quote" do
131
+ message = "msgid \"text\" this shouldn't be here"
132
+ expect{ SimplePoParser::Parser.parse(message) }.
133
+ to raise_error(SimplePoParser::ParserError,
134
+ /There should be only whitespace until the end of line after the double quote character/)
135
+ end
136
+ end
137
+
138
+ end
139
+
49
140
  end
@@ -0,0 +1,20 @@
1
+ require "spec_helper"
2
+
3
+ describe SimplePoParser do
4
+ let(:po_file) { Pathname.new('spec/simple_po_parser/fixtures/complete_file.po').realpath }
5
+ let(:non_ascii_file) { Pathname.new('spec/simple_po_parser/fixtures/non_ascii_file.po').realpath }
6
+ let(:po_complex_message) { File.read(File.expand_path("fixtures/complex_entry.po", __dir__))}
7
+
8
+ it "parses a po file" do
9
+ expect(SimplePoParser.parse(po_file)).to be_a_kind_of Array
10
+ end
11
+
12
+ it "parses a non ascii po file" do
13
+ expect(SimplePoParser.parse(non_ascii_file)).to be_a_kind_of Array
14
+ end
15
+
16
+ it "parses a single message" do
17
+ expect(SimplePoParser.parse_message(po_complex_message)).to be_a_kind_of Hash
18
+ end
19
+
20
+ end
data/spec/spec_helper.rb CHANGED
@@ -5,11 +5,21 @@
5
5
  #
6
6
  # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
7
7
 
8
- require 'simple_po_parser'
8
+ require 'simplecov'
9
9
  require 'coveralls'
10
10
  require 'awesome_print'
11
11
 
12
- Coveralls.wear!
12
+ SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter.new(
13
+ [SimpleCov::Formatter::HTMLFormatter,
14
+ Coveralls::SimpleCov::Formatter]
15
+ )
16
+
17
+ SimpleCov.start do
18
+ add_group "gem", "lib"
19
+ add_group "spec", "spec"
20
+ end
21
+
22
+ require 'simple_po_parser'
13
23
 
14
24
  RSpec.configure do |config|
15
25
  config.raise_errors_for_deprecations!
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simple_po_parser
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dennis-Florian Herr
@@ -74,10 +74,13 @@ files:
74
74
  - lib/simple_po_parser/tokenizer.rb
75
75
  - lib/simple_po_parser/version.rb
76
76
  - simple_po_parser.gemspec
77
+ - spec/simple_po_parser/fixtures/complete_file.po
77
78
  - spec/simple_po_parser/fixtures/complex_entry.po
78
79
  - spec/simple_po_parser/fixtures/header.po
80
+ - spec/simple_po_parser/fixtures/non_ascii_file.po
79
81
  - spec/simple_po_parser/fixtures/simple_entry.po
80
82
  - spec/simple_po_parser/parser_spec.rb
83
+ - spec/simple_po_parser/simple_po_parser_spec.rb
81
84
  - spec/spec_helper.rb
82
85
  - spec/utils/random_pofile_generator.rb
83
86
  - test/benchmark.po
@@ -106,9 +109,12 @@ signing_key:
106
109
  specification_version: 4
107
110
  summary: A simple PO file to ruby hash parser
108
111
  test_files:
112
+ - spec/simple_po_parser/fixtures/complete_file.po
109
113
  - spec/simple_po_parser/fixtures/complex_entry.po
110
114
  - spec/simple_po_parser/fixtures/header.po
115
+ - spec/simple_po_parser/fixtures/non_ascii_file.po
111
116
  - spec/simple_po_parser/fixtures/simple_entry.po
112
117
  - spec/simple_po_parser/parser_spec.rb
118
+ - spec/simple_po_parser/simple_po_parser_spec.rb
113
119
  - spec/spec_helper.rb
114
120
  - spec/utils/random_pofile_generator.rb