diff options
Diffstat (limited to 'itstool.in')
-rwxr-xr-x | itstool.in | 45 |
1 files changed, 25 insertions, 20 deletions
@@ -109,7 +109,7 @@ class MessageList (object): out.write('"Content-Transfer-Encoding: 8bit\\n"\n') out.write('\n') for msg in msgs: - out.write(msg.format()) + out.write(msg.format().encode('utf-8')) out.write('\n') @@ -126,7 +126,7 @@ class Message (object): class Placeholder (object): def __init__ (self, node): self.node = node - self.name = node.name + self.name = unicode(node.name, 'utf-8') def escape (self, text): return text.replace('\\','\\\\').replace('"', "\\\"").replace("\n","\\n").replace("\t","\\t") @@ -134,6 +134,8 @@ class Message (object): def add_text (self, text): if len(self._message) == 0 or not(isinstance(self._message[-1], basestring)): self._message.append('') + if not isinstance(text, unicode): + text = unicode(text, 'utf-8') self._message[-1] += text.replace('&', '&').replace('<', '<').replace('>', '>') if re.sub('\s+', ' ', text).strip() != '': self._empty = False @@ -146,8 +148,8 @@ class Message (object): def get_placeholder (self, name): placeholder = 1 for holder in self._placeholders: - holdername = '%s-%i' % (holder.name, placeholder) - if holdername == name: + holdername = u'%s-%i' % (holder.name, placeholder) + if holdername == unicode(name, 'utf-8'): return holder placeholder += 1 @@ -173,7 +175,7 @@ class Message (object): if node.children is not None: if len(self._message) == 0 or not(isinstance(self._message[-1], basestring)): self._message.append('') - self._message[-1] += ('</%s>' % node.name) + self._message[-1] += (u'</%s>' % unicode(node.name, 'utf-8')) def is_empty (self): return self._empty @@ -185,7 +187,7 @@ class Message (object): self._ctxt = ctxt def add_source (self, source): - self._sources.append(source) + self._sources.append(unicode(source, 'utf-8')) def get_sources (self): return self._sources @@ -197,13 +199,13 @@ class Message (object): return self._comments def get_string (self): - message = '' + message = u'' placeholder = 1 for msg in self._message: if isinstance(msg, basestring): message += msg elif isinstance(msg, Message.Placeholder): - message += '<_:%s-%i/>' % (msg.name, placeholder) + message += u'<_:%s-%i/>' % (msg.name, placeholder) placeholder += 1 if not self._preserve: message = re.sub('\s+', ' ', message).strip() @@ -216,7 +218,7 @@ class Message (object): self._preserve = preserve def format (self): - ret = '' + ret = u'' for i in range(len(self._comments)): if i != 0: ret += '#.\n' @@ -228,7 +230,7 @@ class Message (object): doadd = True if not doadd: continue - ret += '#. %s\n' % line + ret += u'#. %s\n' % line else: while len(comment) > 72: j = comment.rfind(' ', 0, 72) @@ -236,27 +238,27 @@ class Message (object): j = comment.find(' ') if j == -1: break - ret += '#. %s\n' % comment[:j] + ret += u'#. %s\n' % comment[:j] comment = comment[j+1:] ret += '#. %s\n' % comment for source in self._sources: - ret += '#: %s\n' % source + ret += u'#: %s\n' % source if self._preserve: - ret += '#, no-wrap\n' + ret += u'#, no-wrap\n' if self._ctxt is not None: - ret += 'msgctxt "%s"\n' % self._ctxt + ret += u'msgctxt "%s"\n' % self._ctxt message = self.get_string() if self._preserve: - ret += 'msgid ""\n' + ret += u'msgid ""\n' lines = message.split('\n') for line, no in zip(lines, range(len(lines))): if no == len(lines) - 1: - ret += '"%s"\n' % self.escape(line) + ret += u'"%s"\n' % self.escape(line) else: - ret += '"%s\\n"\n' % self.escape(line) + ret += u'"%s\\n"\n' % self.escape(line) else: - ret += 'msgid "%s"\n' % self.escape(message) - ret += 'msgstr ""\n' + ret += u'msgid "%s"\n' % self.escape(message) + ret += u'msgstr ""\n' return ret @@ -474,6 +476,8 @@ class Document (object): xpath = self._doc.xpathNewContext() reg_ns(xpath, rules) for rule in xml_child_iter(rules): + if rule.type != 'element': + continue if rule.nsDefs() is not None: rule_xpath = self._doc.xpathNewContent() reg_ns(rule_xpath, rule) @@ -616,7 +620,8 @@ class Document (object): ctxt.parseDocument() trnode = ctxt.doc().getRootElement() def scan_node(node): - for child in xml_child_iter(node): + children = [child for child in xml_child_iter(node)] + for child in children: if child.type != 'element': continue if child.ns() is not None and child.ns().content == NS_BLANK: |