summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tools/grit/grit/xtb_reader.py19
1 files changed, 18 insertions, 1 deletions
diff --git a/tools/grit/grit/xtb_reader.py b/tools/grit/grit/xtb_reader.py
index f785879..ad29d03 100644
--- a/tools/grit/grit/xtb_reader.py
+++ b/tools/grit/grit/xtb_reader.py
@@ -7,6 +7,7 @@
'''
+import sys
import xml.sax
import xml.sax.handler
@@ -28,6 +29,8 @@ class XtbContentHandler(xml.sax.handler.ContentHandler):
self.current_structure = []
# Set to the language ID when we see the <translationbundle> node.
self.language = ''
+ # Keep track of the if block we're inside. We can't nest ifs.
+ self.if_expr = None
def startElement(self, name, attrs):
if name == 'translation':
@@ -39,13 +42,27 @@ class XtbContentHandler(xml.sax.handler.ContentHandler):
self.current_structure.append((True, attrs.getValue('name')))
elif name == 'translationbundle':
self.language = attrs.getValue('lang')
+ elif name == 'if':
+ assert self.if_expr is None, "Can't nest <if> in xtb files"
+ self.if_expr = attrs.getValue('expr')
def endElement(self, name):
if name == 'translation':
assert self.current_id != 0
- self.callback(self.current_id, self.current_structure)
+
+ # If we're in an if block, only call the callback (add the translation)
+ # if the expression is True.
+ should_run_callback = True
+ if self.if_expr:
+ should_run_callback = eval(self.if_expr, {}, {'os': sys.platform})
+ if should_run_callback:
+ self.callback(self.current_id, self.current_structure)
+
self.current_id = 0
self.current_structure = []
+ elif name == 'if':
+ assert self.if_expr is not None
+ self.if_expr = None
def characters(self, content):
if self.current_id != 0: