forked from pool/gimp-help
d53a221f2c
- Update to version 2.10.0, no changes overview provided. - Build with Python 3, add gimp-help-2.10.0-python3.patch. - Clean up spec file, drop unused dependencies. - Drop huge ChangeLog (verbatim git log), README and TERMINOLOGY files, not useful for end users. OBS-URL: https://build.opensuse.org/request/show/821162 OBS-URL: https://build.opensuse.org/package/show/graphics/gimp-help?expand=0&rev=8
315 lines
14 KiB
Diff
315 lines
14 KiB
Diff
diff -urNp a/tools/xml2po/__init__.py b/tools/xml2po/__init__.py
|
|
--- a/tools/xml2po/__init__.py 2019-11-28 11:45:00.889048989 +0100
|
|
+++ b/tools/xml2po/__init__.py 2020-01-06 13:24:24.715787902 +0100
|
|
@@ -86,14 +86,14 @@ class MessageOutput:
|
|
self.messages.append(t)
|
|
if spacepreserve:
|
|
self.nowrap[t] = True
|
|
- if t in self.linenos.keys():
|
|
+ if t in list(self.linenos.keys()):
|
|
self.linenos[t].append((self.filename, tag, lineno))
|
|
else:
|
|
self.linenos[t] = [ (self.filename, tag, lineno) ]
|
|
if (not self.do_translations) and comment and not t in self.comments:
|
|
self.comments[t] = comment
|
|
else:
|
|
- if t in self.linenos.keys():
|
|
+ if t in list(self.linenos.keys()):
|
|
self.linenos[t].append((self.filename, tag, lineno))
|
|
else:
|
|
self.linenos[t] = [ (self.filename, tag, lineno) ]
|
|
@@ -166,7 +166,7 @@ class XMLDocument(object):
|
|
elif node.isText():
|
|
if node.isBlankNode():
|
|
if self.app.options.get('expand_entities') or \
|
|
- (not (node.prev and not node.prev.isBlankNode() and node.next and not node.next.isBlankNode()) ):
|
|
+ (not (node.prev and not node.prev.isBlankNode() and node.nextElementSibling() and not node.next.isBlankNode()) ):
|
|
#print >>sys.stderr, "BLANK"
|
|
node.setContent('')
|
|
else:
|
|
@@ -200,7 +200,7 @@ class XMLDocument(object):
|
|
tree = ctxt.doc()
|
|
newnode = tree.getRootElement()
|
|
except:
|
|
- print >> sys.stderr, """Error while normalizing string as XML:\n"%s"\n""" % (text)
|
|
+ print("""Error while normalizing string as XML:\n"%s"\n""" % (text), file=sys.stderr)
|
|
return text
|
|
|
|
self.normalizeNode(newnode)
|
|
@@ -259,7 +259,7 @@ class XMLDocument(object):
|
|
if not self.expand_entities:
|
|
result += '&' + child.name + ';'
|
|
else:
|
|
- result += child.content.decode('utf-8')
|
|
+ result += child.content
|
|
else:
|
|
result += self.myAttributeSerialize(child)
|
|
child = child.next
|
|
@@ -326,7 +326,7 @@ class XMLDocument(object):
|
|
pass
|
|
|
|
content = '<%s>%s</%s>' % (starttag, text, endtag)
|
|
- tmp = tmp + content.encode('utf-8')
|
|
+ tmp = tmp + content
|
|
|
|
newnode = None
|
|
try:
|
|
@@ -338,7 +338,7 @@ class XMLDocument(object):
|
|
pass
|
|
|
|
if not newnode:
|
|
- print >> sys.stderr, """Error while parsing translation as XML:\n"%s"\n""" % (text.encode('utf-8'))
|
|
+ print("""Error while parsing translation as XML:\n"%s"\n""" % (text), file=sys.stderr)
|
|
return
|
|
|
|
newelem = newnode.getRootElement()
|
|
@@ -354,7 +354,7 @@ class XMLDocument(object):
|
|
copy = newelem.copyNodeList()
|
|
next = node.next
|
|
node.replaceNode(newelem.copyNodeList())
|
|
- node.next = next
|
|
+ node.__next__ = next
|
|
|
|
else:
|
|
# In practice, this happens with tags such as "<para> </para>" (only whitespace in between)
|
|
@@ -406,7 +406,7 @@ class XMLDocument(object):
|
|
translation = self.app.getTranslation(outtxt) # unicode or None
|
|
if translation is not None:
|
|
self.replaceAttributeContentsWithText(attr,
|
|
- translation.encode('utf-8'))
|
|
+ translation)
|
|
else:
|
|
self.app.msg.outputMessage(outtxt, node.lineNo(), "", spacepreserve=False,
|
|
tag = node.name + ":" + attr.name)
|
|
@@ -447,14 +447,14 @@ class XMLDocument(object):
|
|
norm_outtxt = self.normalizeString(outtxt, self.app.isSpacePreserveNode(node))
|
|
translation = self.app.getTranslation(norm_outtxt)
|
|
else:
|
|
- translation = outtxt.decode('utf-8')
|
|
+ translation = outtxt
|
|
|
|
starttag = self.startTagForNode(node)
|
|
endtag = self.endTagForNode(node)
|
|
|
|
worth = self.worthOutputting(node)
|
|
if not translation:
|
|
- translation = outtxt.decode('utf-8')
|
|
+ translation = outtxt
|
|
if worth and self.app.options.get('mark_untranslated'):
|
|
node.setLang('C')
|
|
|
|
@@ -463,7 +463,7 @@ class XMLDocument(object):
|
|
# repl[0] may contain translated attributes with
|
|
# non-ASCII chars, so implicit conversion to <str> may fail
|
|
replacement = '<%s>%s</%s>' % \
|
|
- (repl[0].decode('utf-8'), repl[3], repl[2])
|
|
+ (repl[0], repl[3], repl[2])
|
|
translation = translation.replace('<placeholder-%d/>' % (i+1), replacement)
|
|
|
|
if worth:
|
|
@@ -542,7 +542,7 @@ class Main(object):
|
|
elif output == '-':
|
|
self.out = sys.stdout
|
|
else:
|
|
- self.out = file(output, 'w')
|
|
+ self.out = open(output, 'w')
|
|
|
|
def load_mode(self, modename):
|
|
try:
|
|
@@ -565,7 +565,7 @@ class Main(object):
|
|
try:
|
|
doc = XMLDocument(xmlfile, self)
|
|
except Exception as e:
|
|
- print >> sys.stderr, "Unable to parse XML file '%s': %s" % (xmlfile, str(e))
|
|
+ print("Unable to parse XML file '%s': %s" % (xmlfile, str(e)), file=sys.stderr)
|
|
sys.exit(1)
|
|
self.current_mode.preProcessXml(doc.doc, self.msg)
|
|
doc.generate_messages()
|
|
@@ -578,13 +578,13 @@ class Main(object):
|
|
try:
|
|
doc = XMLDocument(xmlfile, self)
|
|
except Exception as e:
|
|
- print >> sys.stderr, str(e)
|
|
+ print(str(e), file=sys.stderr)
|
|
sys.exit(1)
|
|
|
|
try:
|
|
mfile = open(mofile, "rb")
|
|
except:
|
|
- print >> sys.stderr, "Can't open MO file '%s'." % (mofile)
|
|
+ print("Can't open MO file '%s'." % (mofile), file=sys.stderr)
|
|
self.gt = gettext.GNUTranslations(mfile)
|
|
self.gt.add_fallback(NoneTranslations())
|
|
# Has preProcessXml use cases for merge?
|
|
@@ -607,7 +607,7 @@ class Main(object):
|
|
try:
|
|
doc = XMLDocument(xmlfile, self)
|
|
except Exception as e:
|
|
- print >> sys.stderr, str(e)
|
|
+ print(str(e), file=sys.stderr)
|
|
sys.exit(1)
|
|
doc.generate_messages()
|
|
|
|
@@ -615,7 +615,7 @@ class Main(object):
|
|
try:
|
|
doc = XMLDocument(origxml, self)
|
|
except Exception as e:
|
|
- print >> sys.stderr, str(e)
|
|
+ print(str(e), file=sys.stderr)
|
|
sys.exit(1)
|
|
doc.generate_messages()
|
|
self.output_po()
|
|
@@ -646,11 +646,11 @@ class Main(object):
|
|
|
|
text should be a string to look for.
|
|
"""
|
|
- #print >>sys.stderr,"getTranslation('%s')" % (text.encode('utf-8'))
|
|
+ #print >>sys.stderr,"getTranslation('%s')" % (text)
|
|
if not text or text.strip() == '':
|
|
return text
|
|
if self.gt:
|
|
- res = self.gt.ugettext(text.decode('utf-8'))
|
|
+ res = self.gt.gettext(text)
|
|
return res
|
|
|
|
return text
|
|
diff -urNp a/tools/xml2po/modes/docbook.py b/tools/xml2po/modes/docbook.py
|
|
--- a/tools/xml2po/modes/docbook.py 2019-11-28 11:45:00.889048989 +0100
|
|
+++ b/tools/xml2po/modes/docbook.py 2020-01-06 13:10:18.324679751 +0100
|
|
@@ -43,7 +43,7 @@ try:
|
|
except ImportError:
|
|
from md5 import new as md5_new
|
|
|
|
-from basic import basicXmlMode
|
|
+from .basic import basicXmlMode
|
|
|
|
class docbookXmlMode(basicXmlMode):
|
|
"""Class for special handling of DocBook document types.
|
|
@@ -131,7 +131,7 @@ class docbookXmlMode(basicXmlMode):
|
|
hash = self._md5_for_file(fullpath)
|
|
else:
|
|
hash = "THIS FILE DOESN'T EXIST"
|
|
- print >>sys.stderr, "Warning: image file '%s' not found." % fullpath
|
|
+ print("Warning: image file '%s' not found." % fullpath, file=sys.stderr)
|
|
|
|
msg.outputMessage("@@image: '%s'; md5=%s" % (attr, hash), node.lineNo(),
|
|
"When image changes, this message will be marked fuzzy or untranslated for you.\n"+
|
|
@@ -184,7 +184,7 @@ class docbookXmlMode(basicXmlMode):
|
|
else:
|
|
ai.addChild(copy)
|
|
if match.group(3):
|
|
- copy.newChild(None, "year", match.group(3).encode('utf-8'))
|
|
+ copy.newChild(None, "year", match.group(3))
|
|
if match.group(1) and match.group(2):
|
|
holder = match.group(1)+"(%s)" % match.group(2)
|
|
elif match.group(1):
|
|
@@ -193,15 +193,15 @@ class docbookXmlMode(basicXmlMode):
|
|
holder = match.group(2)
|
|
else:
|
|
holder = "???"
|
|
- copy.newChild(None, "holder", holder.encode('utf-8'))
|
|
+ copy.newChild(None, "holder", holder)
|
|
|
|
# Perform some tests when ran standalone
|
|
if __name__ == '__main__':
|
|
test = docbookXmlMode()
|
|
- print "Ignored tags : " + repr(test.getIgnoredTags())
|
|
- print "Final tags : " + repr(test.getFinalTags())
|
|
- print "Space-preserve tags: " + repr(test.getSpacePreserveTags())
|
|
+ print("Ignored tags : " + repr(test.getIgnoredTags()))
|
|
+ print("Final tags : " + repr(test.getFinalTags()))
|
|
+ print("Space-preserve tags: " + repr(test.getSpacePreserveTags()))
|
|
|
|
- print "Credits from string: '%s'" % test.getStringForTranslators()
|
|
- print "Explanation for credits:\n\t'%s'" % test.getCommentForTranslators()
|
|
+ print("Credits from string: '%s'" % test.getStringForTranslators())
|
|
+ print("Explanation for credits:\n\t'%s'" % test.getCommentForTranslators())
|
|
|
|
diff -urNp a/tools/xml2po/modes/gimphelp.py b/tools/xml2po/modes/gimphelp.py
|
|
--- a/tools/xml2po/modes/gimphelp.py 2019-11-28 11:45:00.889048989 +0100
|
|
+++ b/tools/xml2po/modes/gimphelp.py 2020-01-06 11:59:17.387855373 +0100
|
|
@@ -31,7 +31,7 @@ try:
|
|
except ImportError:
|
|
from md5 import new as md5_new
|
|
|
|
-from docbook import docbookXmlMode
|
|
+from .docbook import docbookXmlMode
|
|
|
|
class gimphelpXmlMode(docbookXmlMode):
|
|
"""Class for special handling of gimp-help DocBook document types.
|
|
@@ -91,10 +91,10 @@ class gimphelpXmlMode(docbookXmlMode):
|
|
# Perform some tests when ran standalone
|
|
if __name__ == '__main__':
|
|
test = gimphelpXmlMode()
|
|
- print "Ignored tags : " + repr(test.getIgnoredTags())
|
|
- print "Final tags : " + repr(test.getFinalTags())
|
|
- print "Space-preserve tags: " + repr(test.getSpacePreserveTags())
|
|
+ print("Ignored tags : " + repr(test.getIgnoredTags()))
|
|
+ print("Final tags : " + repr(test.getFinalTags()))
|
|
+ print("Space-preserve tags: " + repr(test.getSpacePreserveTags()))
|
|
|
|
- print "Credits from string: '%s'" % test.getStringForTranslators()
|
|
- print "Explanation for credits:\n\t'%s'" % test.getCommentForTranslators()
|
|
+ print("Credits from string: '%s'" % test.getStringForTranslators())
|
|
+ print("Explanation for credits:\n\t'%s'" % test.getCommentForTranslators())
|
|
|
|
diff -urNp a/tools/xml2po.py b/tools/xml2po.py
|
|
--- a/tools/xml2po.py 2019-11-28 11:45:00.889048989 +0100
|
|
+++ b/tools/xml2po.py 2020-01-06 11:59:17.387855373 +0100
|
|
@@ -1,4 +1,4 @@
|
|
-#!/usr/bin/env python2
|
|
+#!/usr/bin/env python3
|
|
# -*- encoding: utf-8 -*-
|
|
# Copyright (c) 2004, 2005, 2006 Danilo Šegan <danilo@gnome.org>.
|
|
# Copyright (c) 2009 Claude Paroz <claude@2xlibre.net>.
|
|
@@ -41,9 +41,9 @@ NULL_STRING = '/dev/null'
|
|
if not os.path.exists('/dev/null'): NULL_STRING = 'NUL'
|
|
|
|
def usage (with_help = False):
|
|
- print >> sys.stderr, "Usage: %s [OPTIONS] [XMLFILE]..." % (sys.argv[0])
|
|
+ print("Usage: %s [OPTIONS] [XMLFILE]..." % (sys.argv[0]), file=sys.stderr)
|
|
if with_help:
|
|
- print >> sys.stderr, """
|
|
+ print("""
|
|
OPTIONS may be some of:
|
|
-a --automatic-tags Automatically decides if tags are to be considered
|
|
"final" or not
|
|
@@ -72,7 +72,7 @@ EXAMPLES:
|
|
using -p option for each XML file:
|
|
%(command)s -p de.po chapter1.xml > chapter1.de.xml
|
|
%(command)s -p de.po chapter2.xml > chapter2.de.xml
|
|
-""" % {'command': sys.argv[0]}
|
|
+""" % {'command': sys.argv[0]}, file=sys.stderr)
|
|
|
|
|
|
def main(argv):
|
|
@@ -148,7 +148,7 @@ def main(argv):
|
|
sys.exit(0)
|
|
|
|
if operation == 'update' and output != "-":
|
|
- print >> sys.stderr, "Option '-o' is not yet supported when updating translations directly. Ignoring this option."
|
|
+ print("Option '-o' is not yet supported when updating translations directly. Ignoring this option.", file=sys.stderr)
|
|
|
|
# Treat remaining arguments as XML files
|
|
filenames = []
|
|
@@ -158,16 +158,16 @@ def main(argv):
|
|
try:
|
|
xml2po_main = Main(default_mode, operation, output, options)
|
|
except IOError:
|
|
- print >> sys.stderr, "Error: cannot open file %s for writing." % (output)
|
|
+ print("Error: cannot open file %s for writing." % (output), file=sys.stderr)
|
|
sys.exit(5)
|
|
|
|
if operation == 'merge':
|
|
if len(filenames) > 1:
|
|
- print >> sys.stderr, "Error: You can merge translations with only one XML file at a time."
|
|
+ print("Error: You can merge translations with only one XML file at a time.", file=sys.stderr)
|
|
sys.exit(2)
|
|
|
|
if not mofile:
|
|
- print >> sys.stderr, "Error: You must specify MO file when merging translations."
|
|
+ print("Error: You must specify MO file when merging translations.", file=sys.stderr)
|
|
sys.exit(3)
|
|
|
|
xml2po_main.merge(mofile, filenames[0])
|