https://src.fedoraproject.org/rpms/gnome-doc-utils/blob/rawhide/f/gnome-doc-utils-0.20.10-python3.patch diff -U3 -r gnome-doc-utils-0.20.10.orig/xml2po/xml2po/__init__.py gnome-doc-utils-0.20.10/xml2po/xml2po/__init__.py --- gnome-doc-utils-0.20.10.orig/xml2po/xml2po/__init__.py 2011-08-04 09:36:03.000000000 -0500 +++ gnome-doc-utils-0.20.10/xml2po/xml2po/__init__.py 2019-09-10 09:30:28.018627919 -0500 @@ -86,14 +86,14 @@ 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 @@ 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.__next__ and not node.next.isBlankNode()) ): #print >>sys.stderr, "BLANK" node.setContent('') else: @@ -176,7 +176,7 @@ child = node.children while child: self.normalizeNode(child) - child = child.next + child = child.__next__ def normalizeString(self, text, spacepreserve = False): """Normalizes string to be used as key for gettext lookup. @@ -200,7 +200,7 @@ 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) @@ -209,7 +209,7 @@ child = newnode.children while child: result += child.serialize('utf-8') - child = child.next + child = child.__next__ result = re.sub('^ ','', result) result = re.sub(' $','', result) @@ -235,7 +235,7 @@ ctxt.parseDocument() tree = ctxt.doc() if next: - newnode = tree.children.next + newnode = tree.children.__next__ else: newnode = tree.children @@ -243,7 +243,7 @@ child = newnode.children while child: result += child.serialize('utf-8') - child = child.next + child = child.__next__ tree.freeDoc() return result @@ -262,7 +262,7 @@ result += child.content.decode('utf-8') else: result += self.myAttributeSerialize(child) - child = child.next + child = child.__next__ else: result = node.serialize('utf-8') return result @@ -338,7 +338,7 @@ 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.encode('utf-8')), file=sys.stderr) return newelem = newnode.getRootElement() @@ -346,13 +346,13 @@ if newelem and newelem.children: free = node.children while free: - next = free.next + next = free.__next__ free.unlinkNode() free = next if node: copy = newelem.copyNodeList() - next = node.next + next = node.__next__ node.replaceNode(newelem.copyNodeList()) node.next = next @@ -378,7 +378,7 @@ if child.type in ['text'] and child.content.strip()!='': final = True break - child = child.next + child = child.__next__ node.__autofinal__ = final return final @@ -457,7 +457,7 @@ outtxt += '<%s>%s' % (starttag, content, endtag) else: outtxt += self.doSerialize(child) - child = child.next + child = child.__next__ if self.app.operation == 'merge': norm_outtxt = self.normalizeString(outtxt, self.app.isSpacePreserveNode(node)) @@ -534,7 +534,7 @@ outtxt = '' while child: outtxt += self.doSerialize(child) - child = child.next + child = child.__next__ return outtxt def xml_error_handler(arg, ctxt): @@ -577,8 +577,8 @@ raise IOError("Unable to read file '%s'" % xmlfile) try: doc = XMLDocument(xmlfile, self) - except Exception, e: - print >> sys.stderr, "Unable to parse XML file '%s': %s" % (xmlfile, str(e)) + except Exception as 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() @@ -590,14 +590,14 @@ raise IOError("Unable to read file '%s'" % xmlfile) try: doc = XMLDocument(xmlfile, self) - except Exception, e: - print >> sys.stderr, str(e) + except Exception as 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? @@ -619,16 +619,16 @@ raise IOError("Unable to read file '%s'" % xmlfile) try: doc = XMLDocument(xmlfile, self) - except Exception, e: - print >> sys.stderr, str(e) + except Exception as e: + print(str(e), file=sys.stderr) sys.exit(1) doc.generate_messages() self.msg.translationsFollow() try: doc = XMLDocument(origxml, self) - except Exception, e: - print >> sys.stderr, str(e) + except Exception as e: + print(str(e), file=sys.stderr) sys.exit(1) doc.generate_messages() self.output_po() diff -U3 -r gnome-doc-utils-0.20.10.orig/xml2po/xml2po/modes/docbook.py gnome-doc-utils-0.20.10/xml2po/xml2po/modes/docbook.py --- gnome-doc-utils-0.20.10.orig/xml2po/xml2po/modes/docbook.py 2011-01-10 10:08:10.000000000 -0600 +++ gnome-doc-utils-0.20.10/xml2po/xml2po/modes/docbook.py 2019-09-10 09:31:15.199572286 -0500 @@ -43,7 +43,7 @@ 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 @@ 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"+ @@ -198,10 +198,10 @@ # 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 -U3 -r gnome-doc-utils-0.20.10.orig/xml2po/xml2po/modes/gs.py gnome-doc-utils-0.20.10/xml2po/xml2po/modes/gs.py --- gnome-doc-utils-0.20.10.orig/xml2po/xml2po/modes/gs.py 2010-12-13 10:14:07.000000000 -0600 +++ gnome-doc-utils-0.20.10/xml2po/xml2po/modes/gs.py 2019-09-10 09:31:15.201572284 -0500 @@ -20,7 +20,7 @@ # Special case Gnome Summary # -from basic import basicXmlMode +from .basic import basicXmlMode class gsXmlMode(basicXmlMode): """Abstract class for special handling of document types.""" diff -U3 -r gnome-doc-utils-0.20.10.orig/xml2po/xml2po/modes/mallard.py gnome-doc-utils-0.20.10/xml2po/xml2po/modes/mallard.py --- gnome-doc-utils-0.20.10.orig/xml2po/xml2po/modes/mallard.py 2011-01-10 10:08:50.000000000 -0600 +++ gnome-doc-utils-0.20.10/xml2po/xml2po/modes/mallard.py 2019-09-10 09:31:15.212572271 -0500 @@ -39,7 +39,7 @@ except ImportError: from md5 import new as md5_new -from basic import basicXmlMode +from .basic import basicXmlMode class mallardXmlMode(basicXmlMode): """Class for special handling of Mallard document types.""" @@ -112,7 +112,7 @@ 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"+ diff -U3 -r gnome-doc-utils-0.20.10.orig/xml2po/xml2po/modes/ubuntu.py gnome-doc-utils-0.20.10/xml2po/xml2po/modes/ubuntu.py --- gnome-doc-utils-0.20.10.orig/xml2po/xml2po/modes/ubuntu.py 2010-12-13 10:14:07.000000000 -0600 +++ gnome-doc-utils-0.20.10/xml2po/xml2po/modes/ubuntu.py 2019-09-10 09:31:15.213572270 -0500 @@ -2,7 +2,7 @@ import libxml2 -from docbook import docbookXmlMode +from .docbook import docbookXmlMode class ubuntuXmlMode (docbookXmlMode): """Special-casing Ubuntu DocBook website documentation.""" diff -U3 -r gnome-doc-utils-0.20.10.orig/xml2po/xml2po/modes/xhtml.py gnome-doc-utils-0.20.10/xml2po/xml2po/modes/xhtml.py --- gnome-doc-utils-0.20.10.orig/xml2po/xml2po/modes/xhtml.py 2010-12-13 10:14:07.000000000 -0600 +++ gnome-doc-utils-0.20.10/xml2po/xml2po/modes/xhtml.py 2019-09-10 09:31:15.214572269 -0500 @@ -21,7 +21,7 @@ # This implements special instructions for handling XHTML documents # in a better way, particularly to extract some attributes in HTML tags -from basic import basicXmlMode +from .basic import basicXmlMode class xhtmlXmlMode(basicXmlMode): """Class for special handling of XHTML document types.""" diff -U3 -r gnome-doc-utils-0.20.10.orig/xml2po/xml2po/xml2po.py.in gnome-doc-utils-0.20.10/xml2po/xml2po/xml2po.py.in --- gnome-doc-utils-0.20.10.orig/xml2po/xml2po/xml2po.py.in 2010-12-13 10:14:07.000000000 -0600 +++ gnome-doc-utils-0.20.10/xml2po/xml2po/xml2po.py.in 2019-09-10 09:30:28.217627684 -0500 @@ -41,9 +41,9 @@ 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 @@ 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): @@ -82,7 +82,7 @@ name = os.path.join(os.path.dirname(__file__), '..') if os.path.exists(os.path.join(name, 'tests')): - print >> sys.stderr, 'Running from source folder, modifying PYTHONPATH' + print('Running from source folder, modifying PYTHONPATH', file=sys.stderr) sys.path.insert(0, name) from xml2po import Main @@ -142,14 +142,14 @@ elif opt in ('-o', '--output'): output = arg elif opt in ('-v', '--version'): - print VERSION + print(VERSION) sys.exit(0) elif opt in ('-h', '--help'): usage(True) 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 = [] @@ -159,16 +159,16 @@ 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]) --- gnome-doc-utils-0.20.10/xml2po/xml2po/__init__.py.orig 2019-09-10 09:34:42.110328324 -0500 +++ gnome-doc-utils-0.20.10/xml2po/xml2po/__init__.py 2019-09-10 09:34:44.170325899 -0500 @@ -166,7 +166,7 @@ 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.next and not node.next.isBlankNode()) ): #print >>sys.stderr, "BLANK" node.setContent('') else: @@ -176,7 +176,7 @@ child = node.children while child: self.normalizeNode(child) - child = child.__next__ + child = child.next def normalizeString(self, text, spacepreserve = False): """Normalizes string to be used as key for gettext lookup. @@ -209,7 +209,7 @@ child = newnode.children while child: result += child.serialize('utf-8') - child = child.__next__ + child = child.next result = re.sub('^ ','', result) result = re.sub(' $','', result) @@ -235,7 +235,7 @@ ctxt.parseDocument() tree = ctxt.doc() if next: - newnode = tree.children.__next__ + newnode = tree.children.next else: newnode = tree.children @@ -243,7 +243,7 @@ child = newnode.children while child: result += child.serialize('utf-8') - child = child.__next__ + child = child.next tree.freeDoc() return result @@ -262,7 +262,7 @@ result += child.content.decode('utf-8') else: result += self.myAttributeSerialize(child) - child = child.__next__ + child = child.next else: result = node.serialize('utf-8') return result @@ -346,13 +346,13 @@ if newelem and newelem.children: free = node.children while free: - next = free.__next__ + next = free.next free.unlinkNode() free = next if node: copy = newelem.copyNodeList() - next = node.__next__ + next = node.next node.replaceNode(newelem.copyNodeList()) node.next = next @@ -378,7 +378,7 @@ if child.type in ['text'] and child.content.strip()!='': final = True break - child = child.__next__ + child = child.next node.__autofinal__ = final return final @@ -457,7 +457,7 @@ outtxt += '<%s>%s' % (starttag, content, endtag) else: outtxt += self.doSerialize(child) - child = child.__next__ + child = child.next if self.app.operation == 'merge': norm_outtxt = self.normalizeString(outtxt, self.app.isSpacePreserveNode(node)) @@ -534,7 +534,7 @@ outtxt = '' while child: outtxt += self.doSerialize(child) - child = child.__next__ + child = child.next return outtxt def xml_error_handler(arg, ctxt): --- gnome-doc-utils-0.20.10/xml2po/xml2po/__init__.py.orig 2019-09-10 09:39:57.733974912 -0500 +++ gnome-doc-utils-0.20.10/xml2po/xml2po/__init__.py 2019-09-10 09:40:24.761946962 -0500 @@ -326,7 +326,7 @@ pass content = '<%s>%s' % (starttag, text, endtag) - tmp = tmp + content.encode('utf-8') + tmp = tmp + content newnode = None try: @@ -663,7 +663,7 @@ 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 --- gnome-doc-utils-0.20.10/xml2po/xml2po/__init__.py.orig 2019-09-10 09:41:23.853885851 -0500 +++ gnome-doc-utils-0.20.10/xml2po/xml2po/__init__.py 2019-09-10 09:44:23.580699979 -0500 @@ -352,9 +352,10 @@ if node: copy = newelem.copyNodeList() - next = node.next + #next = node.next node.replaceNode(newelem.copyNodeList()) - node.next = next + #print(type(next)) + #node.next = next else: # In practice, this happens with tags such as " " (only whitespace in between) @@ -470,7 +471,7 @@ 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') --- gnome-doc-utils-0.20.10/xml2po/xml2po/modes/docbook.py.orig 2019-09-10 09:46:15.409584334 -0500 +++ gnome-doc-utils-0.20.10/xml2po/xml2po/modes/docbook.py 2019-09-10 09:46:30.164569075 -0500 @@ -184,7 +184,7 @@ 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,7 +193,7 @@ 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__': --- gnome-doc-utils-0.20.10/xml2po/xml2po/xml2po.py.in~ 2019-09-10 09:50:34.000000000 -0500 +++ gnome-doc-utils-0.20.10/xml2po/xml2po/xml2po.py.in 2019-09-10 09:50:45.114305443 -0500 @@ -1,4 +1,4 @@ -#!/usr/bin/python -u +#!/usr/bin/python3 -u # -*- encoding: utf-8 -*- # Copyright (c) 2004, 2005, 2006 Danilo Ĺ egan . # Copyright (c) 2009 Claude Paroz . --- gnome-doc-utils-0.20.10.old/xml2po/xml2po/__init__.py 2021-10-14 16:54:33.332661817 +0900 +++ gnome-doc-utils-0.20.10/xml2po/xml2po/__init__.py 2021-10-14 17:06:31.006607987 +0900 @@ -504,7 +504,7 @@ # !!! This is not very nice thing to do, but I don't know if # raising an exception is any better return False - return tmpstr.find('EXTERNAL_GENERAL_PARSED_ENTITY') != -1 + return tmpstr.find(b'EXTERNAL_GENERAL_PARSED_ENTITY') != -1 def doSerialize(self, node): """Serializes a node and its children, emitting PO messages along the way. @@ -556,7 +556,7 @@ elif output == '-': self.out = sys.stdout else: - self.out = file(output, 'w') + self.out = open(output, 'w') def load_mode(self, modename): try: