Class: GetText::Tools::MsgMerge::Merger
- Inherits:
-
Object
- Object
- GetText::Tools::MsgMerge::Merger
- Defined in:
- lib/gettext/tools/msgmerge.rb
Overview
:nodoc:
Constant Summary collapse
- 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-Creation-Date:\s*(.*)?\s*$/- POT_DATE_RE =
/POT-Creation-Date:.*?$/- MAX_FUZZY_DISTANCE =
XXX: make sure that its value is proper.
0.5
Instance Method Summary collapse
- #add_obsolete_entry(result, definition) ⇒ Object
- #extract_obsolete_entries(result, definition) ⇒ Object
- #find_by_msgid(entries, msgid) ⇒ Object
- #find_fuzzy_entry(definition, msgid, msgctxt) ⇒ Object
- #generate_obsolete_entry(result, definition) ⇒ Object
- #merge(definition, reference) ⇒ Object
- #merge_entry(definition_entry, reference_entry) ⇒ Object
- #merge_fuzzy_entry(fuzzy_entry, entry) ⇒ Object
- #merge_header(old_header, new_header) ⇒ Object
Instance Method Details
#add_obsolete_entry(result, definition) ⇒ Object
370 371 372 373 374 375 376 |
# File 'lib/gettext/tools/msgmerge.rb', line 370 def add_obsolete_entry(result, definition) obsolete_entry = generate_obsolete_entry(result, definition) unless obsolete_entry.nil? result[:last] = obsolete_entry end result end |
#extract_obsolete_entries(result, definition) ⇒ Object
395 396 397 398 399 400 401 402 403 404 |
# File 'lib/gettext/tools/msgmerge.rb', line 395 def extract_obsolete_entries(result, definition) obsolete_entries = [] definition.each do |entry| id = [entry.msgctxt, entry.msgid] if not result.has_key?(*id) and not entry.msgid == :last obsolete_entries << entry end end obsolete_entries end |
#find_by_msgid(entries, msgid) ⇒ Object
333 334 335 336 337 338 339 340 341 |
# File 'lib/gettext/tools/msgmerge.rb', line 333 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 |
#find_fuzzy_entry(definition, msgid, msgctxt) ⇒ Object
351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 |
# File 'lib/gettext/tools/msgmerge.rb', line 351 def find_fuzzy_entry(definition, msgid, msgctxt) return nil if msgid == :last min_distance_entry = nil min_distance = MAX_FUZZY_DISTANCE same_msgctxt_entries = definition.find_all do |entry| entry.msgctxt == msgctxt and not entry.msgid == :last end same_msgctxt_entries.each do |entry| distance = Levenshtein.normalized_distance(entry.msgid, msgid) if min_distance > distance min_distance = distance min_distance_entry = entry end end min_distance_entry end |
#generate_obsolete_entry(result, definition) ⇒ Object
378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 |
# File 'lib/gettext/tools/msgmerge.rb', line 378 def generate_obsolete_entry(result, definition) obsolete_entry = nil obsolete_entries = extract_obsolete_entries(result, definition) unless obsolete_entries.empty? obsolete_comment = [] obsolete_entries.each do |entry| obsolete_comment << entry.to_s end obsolete_entry = POEntry.new(:normal) obsolete_entry.msgid = :last obsolete_entry.comment = obsolete_comment.join("\n") end obsolete_entry end |
#merge(definition, reference) ⇒ Object
260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 |
# File 'lib/gettext/tools/msgmerge.rb', line 260 def merge(definition, reference) result = GetText::PO.new translated_entries = definition.reject do |entry| entry.msgstr.nil? end reference.each do |entry| msgid = entry.msgid msgctxt = entry.msgctxt id = [msgctxt, msgid] if definition.has_key?(*id) result[*id] = merge_entry(definition[*id], entry) next end if msgctxt.nil? same_msgid_entry = find_by_msgid(translated_entries, msgid) if not same_msgid_entry.nil? and not same_msgid_entry.msgctxt.nil? result[nil, msgid] = merge_fuzzy_entry(same_msgid_entry, entry) next end end fuzzy_entry = find_fuzzy_entry(translated_entries, msgid, msgctxt) unless fuzzy_entry.nil? result[*id] = merge_fuzzy_entry(fuzzy_entry, entry) next end result[*id] = entry end add_obsolete_entry(result, translated_entries) result end |
#merge_entry(definition_entry, reference_entry) ⇒ Object
298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 |
# File 'lib/gettext/tools/msgmerge.rb', line 298 def merge_entry(definition_entry, reference_entry) if definition_entry.msgid.empty? and definition_entry.msgctxt.nil? new_header = merge_header(definition_entry, reference_entry) return new_header end if definition_entry.flag == "fuzzy" entry = definition_entry entry.flag = "fuzzy" return entry end entry = reference_entry entry.translator_comment = definition_entry.translator_comment entry.previous = nil unless definition_entry.msgid_plural == reference_entry.msgid_plural entry.flag = "fuzzy" end entry.msgstr = definition_entry.msgstr entry end |
#merge_fuzzy_entry(fuzzy_entry, entry) ⇒ Object
343 344 345 346 347 |
# File 'lib/gettext/tools/msgmerge.rb', line 343 def merge_fuzzy_entry(fuzzy_entry, entry) merged_entry = merge_entry(fuzzy_entry, entry) merged_entry.flag = "fuzzy" merged_entry end |
#merge_header(old_header, new_header) ⇒ Object
322 323 324 325 326 327 328 329 330 331 |
# File 'lib/gettext/tools/msgmerge.rb', line 322 def merge_header(old_header, new_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.flag = nil header end |