diff options
author | Shaun McCance <shaunm@gnome.org> | 2011-09-03 13:21:09 -0400 |
---|---|---|
committer | Shaun McCance <shaunm@gnome.org> | 2011-09-03 13:21:09 -0400 |
commit | 0520144626db679e81725aebfaba273a52fd0bf4 (patch) | |
tree | bda0095be8d25969373b8f6afa0f7c7527e0f911 /itstool.in | |
parent | 092a26470a5032c85ba8a40570ee6fd6c9fe9b30 (diff) | |
parent | 7e0739641507d92e1d2ec7e9b7f5e5c7c09a940a (diff) | |
download | itstool-0520144626db679e81725aebfaba273a52fd0bf4.tar.gz |
Merge: Proper XML error catching [claude]
Diffstat (limited to 'itstool.in')
-rwxr-xr-x | itstool.in | 11 |
1 files changed, 11 insertions, 0 deletions
@@ -287,9 +287,14 @@ def xml_is_ns_name (node, ns, name): return False return node.name == name and node.ns() is not None and node.ns().content == ns +def xml_error_catcher(doc, error): + doc._xml_err += " %s" % error + class Document (object): def __init__ (self, filename, messages): + self._xml_err = '' + libxml2.registerErrorHandler(xml_error_catcher, self) ctxt = libxml2.createFileParserCtxt(filename) ctxt.lineNumbers(1) ctxt.replaceEntities(1) @@ -313,6 +318,7 @@ class Document (object): self._localrules.append(child) pre_process(child) pre_process(self._doc) + self._check_errors() self._msgs = messages self._its_translate_nodes = {} self._its_within_text_nodes = {} @@ -325,6 +331,10 @@ class Document (object): self._itst_credits = None self._itst_externals = [] + def _check_errors(self): + if self._xml_err: + raise libxml2.parserError(self._xml_err) + def apply_its_rule(self, rule, xpath): if rule.type != 'element': return @@ -644,6 +654,7 @@ class Document (object): if child.type == 'element': fix_node_ns(child, childnsdefs) fix_node_ns(node, {}) + self._check_errors() def translate_attrs(self, oldnode, newnode): trans_attrs = [attr for attr in xml_attr_iter(oldnode) if self._its_translate_nodes.get(attr, 'no') == 'yes'] |