X-Git-Url: https://pere.pagekite.me/gitweb/text-madewithcc.git/blobdiff_plain/0cedd75ff50bb04c5a842b6c03bcb812811a1413..e4aca56795482f5252cd89c9c5bb18f53d24e2fe:/fixup-migrate-gettext.rb diff --git a/fixup-migrate-gettext.rb b/fixup-migrate-gettext.rb index 66785d3..b2d9c7c 100755 --- a/fixup-migrate-gettext.rb +++ b/fixup-migrate-gettext.rb @@ -2,13 +2,13 @@ # coding: utf-8 class PoStr Sections = %w(Headers Source Translated) - attr_accessor :status, :src, :dest, :prev, :type, :location + attr_accessor :status, :src, :srcclean, :dest, :prev, :prevclean, :type, :location def initialize(text) section = 0 @status = '' - @src = '' - @dest = '' - @prev = '' + @src = [] + @dest = [] + @prev = [] text.split(/\n/).each do |lin| # Header @@ -22,9 +22,11 @@ class PoStr @type = value if type == '.' and field == 'type' @location = {:file => field, :line => value} if type == ':' if type == '|' - if field =~ /^msgid "(.*)"/ + #print lin, "\n" + if lin =~ /^\#\| msgid "(.*)"$/ + #print "first '%s'\n" % $1 @prev << $1 - elsif field =~ /^"(.*)"$/ + elsif lin =~ /^\#\| "(.*)"$/ @prev << $1 end end @@ -66,20 +68,56 @@ class PoStr @status == 'fuzzy' end + def srcstr() + return @src.join("") + end + + def deststr() + return @dest.join("") + end + + def prevstr() + return @prev.join("") + end + def output() - # FIXME rewrite to output proper entries + # No use outputting empty translations + if '' == srcstr() && '' == deststr() + return + end if '' != @type - print "#. type: %s\n" % [@type] + print "#. type:%s\n" % [@type] + end + if @location + print "#: %s:%s\n" % [@location[:file], @location[:line]] end if fuzzy? print "#, fuzzy\n" - if '' != @prev - print "#| msgid \"%s\"\n" % [@prev] + if '' != prevstr() + @prev.each_with_index do |lin, idx| + if idx == 0 + print "#| msgid \"%s\"\n" % lin + else + print "#| \"%s\"\n" % lin + end + end + end + end + @src.each_with_index do |lin, idx| + if idx == 0 + print "msgid \"%s\"\n" % lin + else + print "\"%s\"\n" % lin + end + end + @dest.each_with_index do |lin, idx| + if idx == 0 + print "msgstr \"%s\"\n" % lin + else + print "\"%s\"\n" % lin end end - print "msgid \"%s\"\n" % [@src] - print "msgstr \"%s\"\n" % [@dest] - print "\n\n" + print "\n" end end @@ -87,43 +125,71 @@ raise ArgumentError, 'Source file not specified' if ARGV.size != 1 file = ARGV[0] strings = File.open(file,'r').read.split(/\n\n/)[1..-1].map {|str| PoStr.new(str)} -print strings +#print strings c = 0 strings.each do |entry| + # Ignore whitespace changes between prev and src + entry.prevclean = entry.prevstr().gsub(/ +/, ' ') + entry.srcclean = entry.srcstr().gsub(/ +/, ' ') + if entry.fuzzy? - # Ignore whitespace changes between prev and src - if entry.prev.gsub(/ +/, ' ') == entry.src.gsub(/ +/, ' ') + if entry.prevclean == entry.srcclean entry.status = '' - print "clear fuzzy (space)\n" + #print "# clear fuzzy (space)\n" c = c + 1 + entry.output + next end # Rewrite title strings, which lost '#' at the front - if entry.prev.gsub(/^#+ +/, '') == entry.src + if entry.prevclean.gsub(/^#+ +/, '') == entry.srcclean + # FIXME Not safe to clear fuzzy flag, might have bogus translation entry.status = '' - entry.dest.gsub!(/^#+ +/, '') - print "cleared fuzzy (title)\n" - c = c + 1 + if entry.dest[0].gsub!(/^#+ +/, '') || + ('' == entry.dest[0] && entry.dest[1].gsub!(/^#+ +/, '')) + #print "cleared fuzzy (title)\n" + c = c + 1 + end end # Rewrite footnotes to use "" - if entry.src =~ // - print "found footnote\n" - p = entry.prev + if entry.srcclean =~ // + #print "found footnote\n" + p = entry.prevclean p.sub!(/([a-z]\.["”]?)(\d+)(\s)/, "\\1\\3") p.sub!(/([a-z]\.["”]?)(\d+)$/, "\\1") - print p, "\n" - print entry.src, "\n" - if p == entry.src - entry.status = '' - entry.dest.sub!(/([a-z]\.["”»]?)(\d+)(\s)/, "\\1\\3") - entry.dest.sub!(/([a-z]\.["”»]?)(\d+)$/, "\\1") - print "cleared fuzzy (footnote)\n" - c = c + 1 + #print p, "\n" + #print entry.src, "\n" + if p == entry.srcclean + replaced = false + entry.dest.each do |part| + if part.sub!(/([a-z]\.["”»]?)(\d+)(\s)/, "\\1\\3") + replaced = true + end + end + entry.dest.each do |part| + if part.sub!(/([a-z]\.["”»]?)(\d+)$/, "\\1") + replaced = true + end + end + if replaced + #print "cleared fuzzy (footnote)\n" + entry.status = '' + c = c + 1 + end end end end + + # Copy image references and single URLs unchanged, even for non-fuzzies + if entry.prevclean =~ /!\[\]\(Pictures\// || + entry.srcclean =~ /^$/ + entry.dest = entry.src.clone() + entry.status = '' + c = c + 1 + end + entry.output end -print "Would clear %d fuzzy\n" % [c] +print "# Cleared %d fuzzy strings\n" % [c]