]> pere.pagekite.me Git - text-madewithcc.git/blobdiff - fixup-migrate-gettext.rb
Translated using Weblate (German)
[text-madewithcc.git] / fixup-migrate-gettext.rb
index 66785d3d65bfa8c1e65f537a78304c020e87e572..b2d9c7ca28c4f6326bda2080e3a3528e666eae79 100755 (executable)
@@ -2,13 +2,13 @@
 # coding: utf-8
 class PoStr
   Sections = %w(Headers Source Translated)
 # 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 = ''
   def initialize(text)
     section = 0
     @status = ''
-    @src = ''
-    @dest = ''
-    @prev = ''
+    @src = []
+    @dest = []
+    @prev = []
 
     text.split(/\n/).each do |lin|
       # Header
 
     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 == '|'
           @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
               @prev << $1
-            elsif field =~ /^"(.*)"$/
+            elsif lin =~ /^\#\| "(.*)"$/
               @prev << $1
             end
           end
               @prev << $1
             end
           end
@@ -66,20 +68,56 @@ class PoStr
     @status == 'fuzzy'
   end
 
     @status == 'fuzzy'
   end
 
+  def srcstr()
+    return @src.join("")
+  end
+
+  def deststr()
+    return @dest.join("")
+  end
+
+  def prevstr()
+    return @prev.join("")
+  end
+
   def output()
   def output()
-    # FIXME rewrite to output proper entries
+    # No use outputting empty translations
+    if '' == srcstr() && '' == deststr()
+      return
+    end
     if '' != @type
     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"
     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
       end
     end
-    print "msgid \"%s\"\n" % [@src]
-    print "msgstr \"%s\"\n" % [@dest]
-    print "\n\n"
+    print "\n"
   end
 end
 
   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)}
 
 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|
 
 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?
   if entry.fuzzy?
-    # Ignore whitespace changes between prev and src
-    if entry.prev.gsub(/ +/, ' ') == entry.src.gsub(/ +/, ' ')
+    if entry.prevclean == entry.srcclean
       entry.status = ''
       entry.status = ''
-      print "clear fuzzy (space)\n"
+      #print "# clear fuzzy (space)\n"
       c = c + 1
       c = c + 1
+      entry.output
+      next
     end
 
     # Rewrite title strings, which lost '#' at the front
     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.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 "<placeholder type=\"footnote\" id=\"0\"/>"
     end
 
     # Rewrite footnotes to use "<placeholder type=\"footnote\" id=\"0\"/>"
-    if entry.src =~ /<placeholder type=\\"footnote\\" id=\\"0\\"\/>/
-      print "found footnote\n"
-      p = entry.prev
+    if entry.srcclean =~ /<placeholder type=\\"footnote\\" id=\\"0\\"\/>/
+      #print "found footnote\n"
+      p = entry.prevclean
       p.sub!(/([a-z]\.["”]?)(\d+)(\s)/, "\\1<placeholder type=\\\"footnote\\\" id=\\\"0\\\"\/>\\3")
       p.sub!(/([a-z]\.["”]?)(\d+)$/, "\\1<placeholder type=\\\"footnote\\\" id=\\\"0\\\"\/>")
       p.sub!(/([a-z]\.["”]?)(\d+)(\s)/, "\\1<placeholder type=\\\"footnote\\\" id=\\\"0\\\"\/>\\3")
       p.sub!(/([a-z]\.["”]?)(\d+)$/, "\\1<placeholder type=\\\"footnote\\\" id=\\\"0\\\"\/>")
-      print p, "\n"
-      print entry.src, "\n"
-      if p == entry.src
-        entry.status = ''
-        entry.dest.sub!(/([a-z]\.["”»]?)(\d+)(\s)/, "\\1<placeholder type=\\\"footnote\\\" id=\\\"0\\\"\/>\\3")
-        entry.dest.sub!(/([a-z]\.["”»]?)(\d+)$/, "\\1<placeholder type=\\\"footnote\\\" id=\\\"0\\\"\/>")
-        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<placeholder type=\\\"footnote\\\" id=\\\"0\\\"\/>\\3")
+            replaced = true
+          end
+        end
+        entry.dest.each do |part|
+          if part.sub!(/([a-z]\.["”»]?)(\d+)$/, "\\1<placeholder type=\\\"footnote\\\" id=\\\"0\\\"\/>")
+            replaced = true
+          end
+        end
+        if replaced
+          #print "cleared fuzzy (footnote)\n"
+          entry.status = ''
+          c = c + 1
+        end
       end
     end
   end
       end
     end
   end
+
+  # Copy image references and single URLs unchanged, even for non-fuzzies
+  if entry.prevclean =~ /!\[\]\(Pictures\// ||
+     entry.srcclean =~ /^<ulink url=\\\".+\\\"\/>$/
+    entry.dest = entry.src.clone()
+    entry.status = ''
+    c = c + 1
+  end
+
   entry.output
 end
   entry.output
 end
-print "Would clear %d fuzzy\n" % [c]
+print "# Cleared %d fuzzy strings\n" % [c]