class GetText::Tools::MsgMerge::Merger
@private
Constants
- POT_DATE_EXTRACT_RE
Merge the reference with the definition: take the #. and
#: comments from the reference, take the # comments from
the definition, take the msgstr from the definition. Add this merged entry to the output message list.
- POT_DATE_RE
Public Class Methods
new(reference, definition, config)
click to toggle source
# File lib/gettext/tools/msgmerge.rb, line 82 def initialize(reference, definition, config) @reference = reference @definition = definition @translated_entries = @definition.reject do |entry| entry.msgstr.nil? end @fuzzy_entry_finder = FuzzyEntryFinder.new(@translated_entries) @config = config end
Public Instance Methods
merge()
click to toggle source
# File lib/gettext/tools/msgmerge.rb, line 92 def merge result = GetText::PO.new @reference.each do |entry| id = [entry.msgctxt, entry.msgid] result[*id] = merge_definition(entry) end add_obsolete_entry(result) if @config.output_obsolete_entries? result end
Private Instance Methods
add_obsolete_entry(result)
click to toggle source
# File lib/gettext/tools/msgmerge.rb, line 176 def add_obsolete_entry(result) obsolete_entry = generate_obsolete_entry(result) return if obsolete_entry.nil? result[:last] = obsolete_entry end
extract_obsolete_entries(result)
click to toggle source
# File lib/gettext/tools/msgmerge.rb, line 197 def extract_obsolete_entries(result) @definition.find_all do |entry| if entry.obsolete? true elsif entry.msgstr.nil? false else id = [entry.msgctxt, entry.msgid] not result.has_key?(*id) end end end
find_by_msgid(entries, msgid)
click to toggle source
# File lib/gettext/tools/msgmerge.rb, line 160 def find_by_msgid(entries, msgid) same_msgid_entries = entries.find_all do |entry| entry.msgid == msgid end same_msgid_entries = same_msgid_entries.sort_by do |entry| entry.msgctxt end same_msgid_entries.first end
generate_obsolete_entry(result)
click to toggle source
# File lib/gettext/tools/msgmerge.rb, line 183 def generate_obsolete_entry(result) obsolete_entries = extract_obsolete_entries(result) obsolete_comments = obsolete_entries.collect do |entry| entry.to_s end return nil if obsolete_comments.empty? obsolete_entry = POEntry.new(:normal) obsolete_entry.msgid = :last obsolete_entry.comment = obsolete_comments.join("\n") obsolete_entry end
merge_definition(entry)
click to toggle source
# File lib/gettext/tools/msgmerge.rb, line 105 def merge_definition(entry) msgid = entry.msgid msgctxt = entry.msgctxt id = [msgctxt, msgid] if @definition.has_key?(*id) return merge_entry(entry, @definition[*id]) end return entry unless @config.enable_fuzzy_matching? if msgctxt.nil? same_msgid_entry = find_by_msgid(@translated_entries, msgid) if same_msgid_entry and same_msgid_entry.msgctxt return merge_fuzzy_entry(entry, same_msgid_entry) end end fuzzy_entry = @fuzzy_entry_finder.find(msgid, msgctxt) if fuzzy_entry return merge_fuzzy_entry(entry, fuzzy_entry) end entry end
merge_entry(reference_entry, definition_entry)
click to toggle source
# File lib/gettext/tools/msgmerge.rb, line 131 def merge_entry(reference_entry, definition_entry) if definition_entry.header? return merge_header(reference_entry, definition_entry) end entry = reference_entry entry.translator_comment = definition_entry.translator_comment entry.previous = nil if definition_entry.fuzzy? or definition_entry.msgid_plural != reference_entry.msgid_plural entry.flags << "fuzzy" unless entry.fuzzy? end entry.msgstr = definition_entry.msgstr entry end
merge_fuzzy_entry(entry, fuzzy_entry)
click to toggle source
# File lib/gettext/tools/msgmerge.rb, line 170 def merge_fuzzy_entry(entry, fuzzy_entry) merged_entry = merge_entry(entry, fuzzy_entry) merged_entry.flags << "fuzzy" unless merged_entry.fuzzy? merged_entry end
merge_header(new_header, old_header)
click to toggle source
# File lib/gettext/tools/msgmerge.rb, line 149 def merge_header(new_header, old_header) header = old_header if POT_DATE_EXTRACT_RE =~ new_header.msgstr create_date = $1 pot_creation_date = "POT-Creation-Date: #{create_date}" header.msgstr = header.msgstr.gsub(POT_DATE_RE, pot_creation_date) end header.flags = [] header end