summaryrefslogtreecommitdiff
path: root/itstool.in
diff options
context:
space:
mode:
authorShaun McCance <shaunm@gnome.org>2011-09-03 13:21:09 -0400
committerShaun McCance <shaunm@gnome.org>2011-09-03 13:21:09 -0400
commit0520144626db679e81725aebfaba273a52fd0bf4 (patch)
treebda0095be8d25969373b8f6afa0f7c7527e0f911 /itstool.in
parent092a26470a5032c85ba8a40570ee6fd6c9fe9b30 (diff)
parent7e0739641507d92e1d2ec7e9b7f5e5c7c09a940a (diff)
downloaditstool-0520144626db679e81725aebfaba273a52fd0bf4.tar.gz
Merge: Proper XML error catching [claude]
Diffstat (limited to 'itstool.in')
-rwxr-xr-xitstool.in11
1 files changed, 11 insertions, 0 deletions
diff --git a/itstool.in b/itstool.in
index 1db369c..d0510a9 100755
--- a/itstool.in
+++ b/itstool.in
@@ -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']