--- xml2po/xml2po/__init__.py.orig 2011-08-05 00:36:03.000000000 +1000 +++ xml2po/xml2po/__init__.py 2022-01-15 16:27:41.000000000 +1100 @@ -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) ] @@ -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) @@ -326,7 +326,7 @@ pass content = '<%s>%s' % (starttag, text, endtag) - tmp = tmp + content.encode('utf-8') + tmp = tmp + content # .encode('utf-8') newnode = None try: @@ -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, file=sys.stderr) return newelem = newnode.getRootElement() @@ -350,11 +350,19 @@ free.unlinkNode() free = next + if node: copy = newelem.copyNodeList() next = node.next - node.replaceNode(newelem.copyNodeList()) - node.next = next + try: + node.replaceNode(newelem.copyNodeList()) + node.addSibling(next) + except: + pass + #print(">>> type(node)=%s " % (type(node), ), + # file=sys.stderr) + # FIXME: Replace next line with correct + # node.next = next else: # In practice, this happens with tags such as " " (only whitespace in between) @@ -463,14 +471,14 @@ norm_outtxt = self.normalizeString(outtxt, self.app.isSpacePreserveNode(node)) translation = self.app.getTranslation(norm_outtxt) else: - translation = outtxt.decode('utf-8') + translation = outtxt # .decode('utf-8') starttag = self.startTagForNode(node) endtag = self.endTagForNode(node) worth = self.worthOutputting(node) if not translation: - translation = outtxt.decode('utf-8') + translation = outtxt # .decode('utf-8') if worth and self.app.options.get('mark_untranslated'): node.setLang('C') @@ -577,8 +585,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 +598,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 +627,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() @@ -663,7 +671,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) # .decode('utf-8') return res return text @@ -683,4 +691,3 @@ return True else: return node.name in self.current_mode.getSpacePreserveTags() -