Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion lib/poparser/comment.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,16 @@ class Comment
def initialize(type, value)
@type = type
@value = value

if @type.to_s =~ /^previous_/ # these behave more like messages
remove_empty_line
end
end

def to_s(with_label = false)
return to_str unless with_label
if @value.is_a? Array
if @type.to_s =~ /^previous_/ # these behave more like messages
remove_empty_line
string = ["#{COMMENTS_LABELS[@type]} \"\"\n"]
@value.each do |str|
string << "#| \"#{str}\"\n".gsub(/[\p{Blank}]+$/, '')
Expand Down
7 changes: 7 additions & 0 deletions lib/poparser/entry.rb
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,13 @@ def initialize(args = {})
# alias for backward compatibility of this typo
self.class.send(:alias_method, :refrence, :reference)
self.class.send(:alias_method, :refrence=, :reference=)
if self.obsolete?
obsolete_content = SimplePoParser.parse_message(obsolete.value.join("\n").gsub(/^\|/, "#|"))
obsolete_content.each do |name, value|
raise(ArgumentError, "Unknown label #{name}") if !valid_label? name
set_instance_variable(name, value)
end
end
end

# If entry doesn't have any msgid, it's probably a obsolete entry that is
Expand Down
2 changes: 1 addition & 1 deletion lib/poparser/po.rb
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ def obsolete
entry.obsolete?
end
end
alias_method :obsolete, :obsolete
alias_method :cached, :obsolete

# Count of all entries without counting obsolete entries
#
Expand Down
18 changes: 17 additions & 1 deletion spec/poparser/entry_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@
context 'obsolete' do
before do
@entry = PoParser::Entry.new
@entry.obsolete = '#~ msgid "a obsolete entry"'
@entry.obsolete = ['#~ msgid "a obsolete entry"', '#~ msgstr ""']
@entry.flag = 'Fuzzy'
end

Expand All @@ -130,5 +130,21 @@
it 'shouldn\'t mark it as fuzzy' do
expect(@entry.fuzzy?).to be_falsy
end

it 'should further parse the obsolete content' do
path = Pathname.new('spec/poparser/fixtures/complex_obsolete.po').realpath
@po = PoParser::Tokenizer.new.extract_entries(path)
obsolete_entry = @po.obsolete.first
expect(obsolete_entry.obsolete?).to be_truthy
expect(obsolete_entry.msgctxt.value).to eq('Context')
expect(obsolete_entry.msgid.value).to eq('msgid')
expect(obsolete_entry.msgid_plural.value).to eq(['multiline msgid_plural\n', ''])
expect(obsolete_entry.previous_msgctxt.value).to eq('previous context')
expect(obsolete_entry.previous_msgid.value).to eq(
['multiline\n', 'previous messageid']
)
expect(obsolete_entry.previous_msgid_plural.value).to eq('previous msgid_plural')
end

end
end
21 changes: 21 additions & 0 deletions spec/poparser/fixtures/complex_obsolete.po
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# translator-comment
#
#. extract
#: reference1
#: reference2
#, flag
#~| msgctxt "previous context"
#~| msgid ""
#~| "multiline\n"
#~| "previous messageid"
#~| msgid_plural "previous msgid_plural"
#~ msgctxt "Context"
#~ msgid "msgid"
#~ msgid_plural ""
#~ "multiline msgid_plural\n"
#~ ""
#~ msgstr[0] "msgstr 0"
#~ msgstr[1] ""
#~ "msgstr 1 multiline 1\n"
#~ "msgstr 1 line 2\n"
#~ msgstr[2] "msgstr 2"
5 changes: 3 additions & 2 deletions spec/poparser/po_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@

it 'returns all obsolete strings' do
entry2, entry3 = entry.dup, entry.dup
[entry2, entry3].each { |en| en[:obsolete] = 'test' }
[entry2, entry3].each { |en| en[:obsolete] = ['msgid "test"', 'msgstr "test"'] }
@po << [entry, entry2, entry3]
expect(@po.obsolete.size).to eq 2
end
Expand All @@ -60,7 +60,7 @@

it 'shouldn\'t count obsolete entries' do
@po << entry
obsolete = { obsolete: 'sth', flag: 'Fuzzy' }
obsolete = { obsolete: ['msgid "sth"', 'msgstr "sth"'], flag: 'Fuzzy' }
@po << obsolete
expect(@po.size).to eq(1)
end
Expand Down Expand Up @@ -124,4 +124,5 @@
}.to raise_error(RuntimeError, "Duplicate entry, header was already instantiated")
end
end

end