summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShaun McCance <shaunm@gnome.org>2012-09-26 07:46:10 -0400
committerShaun McCance <shaunm@gnome.org>2012-09-26 07:46:10 -0400
commit24811c8cfcbc14cc480a2fbef2288245019f8a7e (patch)
tree4d6fa2a872f60f6f2049b6686ac5ff5d562f4b2d
parent1440e3b495ae502658e5e5ede6c09babce4bc4f9 (diff)
downloaditstool-24811c8cfcbc14cc480a2fbef2288245019f8a7e.tar.gz
Implemented ITS 2.0 "ID Value" data category
-rwxr-xr-xitstool.in48
-rw-r--r--tests/IdValue/idvalue1xml.pot23
-rw-r--r--tests/IdValue/idvalue1xml.xml12
-rw-r--r--tests/IdValue/idvalue2xml.pot22
-rw-r--r--tests/IdValue/idvalue2xml.xml4
-rw-r--r--tests/IdValue/idvalue3XmlRule.xml4
-rw-r--r--tests/IdValue/idvalue3xml.pot23
-rw-r--r--tests/IdValue/idvalue3xml.xml11
-rw-r--r--tests/run_tests.py9
9 files changed, 155 insertions, 1 deletions
diff --git a/itstool.in b/itstool.in
index ec9cf72..3aff4ea 100755
--- a/itstool.in
+++ b/itstool.in
@@ -34,6 +34,7 @@ NS_ITS = 'http://www.w3.org/2005/11/its'
NS_ITST = 'http://itstool.org/extensions/'
NS_BLANK = 'http://itstool.org/extensions/blank/'
NS_XLINK = 'http://www.w3.org/1999/xlink'
+NS_XML = 'http://www.w3.org/XML/1998/namespace'
class NoneTranslations:
def gettext(self, message):
@@ -94,6 +95,8 @@ class MessageList (object):
msgdict[key].add_marker(marker)
for comment in msg.get_comments():
msgdict[key].add_comment(comment)
+ for idvalue in msg.get_id_values():
+ msgdict[key].add_id_value(idvalue)
if msg.get_preserve_space():
msgdict[key].set_preserve_space()
if msg.get_locale_filter() is not None:
@@ -174,6 +177,7 @@ class Message (object):
self._placeholders = []
self._sources = []
self._markers = []
+ self._id_values = []
self._locale_filter = None
self._comments = []
self._preserve = False
@@ -268,6 +272,12 @@ class Message (object):
def get_markers (self):
return self._markers
+ def add_id_value(self, id_value):
+ self._id_values.append(id_value)
+
+ def get_id_values(self):
+ return self._id_values
+
def add_comment (self, comment):
if comment is not None:
self._comments.append(comment)
@@ -307,6 +317,8 @@ class Message (object):
if not markers.has_key(marker):
ret += '#. (itstool) path: ' + marker + '\n'
markers[marker] = marker
+ for idvalue in self._id_values:
+ ret += '#. (itstool) id: ' + idvalue + '\n'
if self._locale_filter is not None:
ret += '#. (itstool) locale filter: ' + self._locale_filter + '\n'
comments = []
@@ -471,7 +483,7 @@ class Document (object):
self._its_translate_nodes = {}
self._its_within_text_nodes = {}
self._its_locale_filters = {}
-
+ self._its_id_values = {}
self._its_loc_notes = {}
self._its_preserve_space_nodes = {}
self._itst_drop_nodes = {}
@@ -514,6 +526,25 @@ class Document (object):
if rule.nsProp('selector', None) is not None:
for node in self._try_xpath_eval(xpath, rule.nsProp('selector', None)):
self._itst_drop_nodes[node] = rule.nsProp('drop', None)
+ elif xml_is_ns_name(rule, NS_ITS, 'idValueRule'):
+ sel = rule.nsProp('selector', None)
+ idv = rule.nsProp('idValue', None)
+ if sel is not None and idv is not None:
+ for node in self._try_xpath_eval(xpath, sel):
+ try:
+ oldnode = xpath.contextNode()
+ except:
+ oldnode = None
+ xpath.setContextNode(node)
+ idvalue = self._try_xpath_eval(xpath, idv)
+ if isinstance(idvalue, basestring):
+ self._its_id_values[node] = idvalue
+ else:
+ for val in idvalues:
+ self._its_id_values[node] = val.content
+ break
+ xpath.setContextNode(oldnode)
+ pass
elif xml_is_ns_name(rule, NS_ITST, 'contextRule'):
if rule.nsProp('selector', None) is not None:
for node in self._try_xpath_eval(xpath, rule.nsProp('selector', None)):
@@ -982,6 +1013,10 @@ class Document (object):
ctxt = self._itst_contexts.get(node)
if ctxt is not None:
msg.set_context(ctxt)
+ idvalue = self.get_its_id_value(node)
+ if idvalue is not None:
+ basename = os.path.basename(self._filename)
+ msg.add_id_value(basename + '#' + idvalue)
if self.get_preserve_space(node):
msg.set_preserve_space()
if self.get_its_locale_filter(node) != '*':
@@ -1025,6 +1060,10 @@ class Document (object):
self.generate_external_resource_message(node)
for attr in xml_attr_iter(node):
self.generate_external_resource_message(attr)
+ idvalue = self.get_its_id_value(node)
+ if idvalue is not None:
+ basename = os.path.basename(self._filename)
+ msg.add_id_value(basename + '#' + idvalue)
if withinText:
path = path + '/' + node.name
@@ -1130,6 +1169,11 @@ class Document (object):
return 'yes'
return 'no'
+ def get_its_id_value(self, node):
+ if node.hasNsProp('id', NS_XML):
+ return node.nsProp('id', NS_XML)
+ return self._its_id_values.get(node, None)
+
def get_its_loc_notes(self, node):
ret = []
if node.hasNsProp('locNote', NS_ITS):
@@ -1157,6 +1201,8 @@ class Document (object):
compval = 'its:localeFilterList="%s"' % self.get_its_locale_filter(node)
elif category == 'externalResourceRefPointer':
compval = 'its:externalResourceRefPointer="%s"' % self._its_externals.get(node, '')
+ elif category == 'idValue':
+ compval = 'its:idValue="%s"' % (self.get_its_id_value(node) or '')
else:
sys.stderr.write('Error: Unrecognized category %s\n' % category)
sys.exit(1)
diff --git a/tests/IdValue/idvalue1xml.pot b/tests/IdValue/idvalue1xml.pot
new file mode 100644
index 0000000..0b7c66f
--- /dev/null
+++ b/tests/IdValue/idvalue1xml.pot
@@ -0,0 +1,23 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2012-09-26 07:25-0400\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. (itstool) path: msg/text
+#. (itstool) id: idvalue1xml.xml#settingsMissing_t
+#: tests/IdValue/idvalue1xml.xml:8
+msgid "Can't find settings file."
+msgstr ""
+
+#. (itstool) path: msg/desc
+#. (itstool) id: idvalue1xml.xml#settingsMissing_d
+#: tests/IdValue/idvalue1xml.xml:9
+msgid "The module cannot find the default settings file. You need to re-initialize the system."
+msgstr ""
+
diff --git a/tests/IdValue/idvalue1xml.xml b/tests/IdValue/idvalue1xml.xml
new file mode 100644
index 0000000..a9de49d
--- /dev/null
+++ b/tests/IdValue/idvalue1xml.xml
@@ -0,0 +1,12 @@
+<doc
+ xmlns:its="http://www.w3.org/2005/11/its" >
+ <its:rules version="2.0">
+ <its:idValueRule selector="//text" idValue="concat(../@name, '_t')"/>
+ <its:idValueRule selector="//desc" idValue="concat(../@name, '_d')"/>
+ </its:rules>
+ <msg name="settingsMissing">
+ <text>Can't find settings file.</text>
+ <desc>The module cannot find the default settings file.
+ You need to re-initialize the system.</desc>
+ </msg>
+</doc>
diff --git a/tests/IdValue/idvalue2xml.pot b/tests/IdValue/idvalue2xml.pot
new file mode 100644
index 0000000..d35df0e
--- /dev/null
+++ b/tests/IdValue/idvalue2xml.pot
@@ -0,0 +1,22 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2012-09-26 07:28-0400\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. (itstool) path: file/res
+#. (itstool) id: idvalue2xml.xml#btnAgain
+#: tests/IdValue/idvalue2xml.xml:2
+msgid "Try Again"
+msgstr ""
+
+#. (itstool) path: file/res
+#: tests/IdValue/idvalue2xml.xml:3
+msgid "click this to re-run the process with the current settings."
+msgstr ""
+
diff --git a/tests/IdValue/idvalue2xml.xml b/tests/IdValue/idvalue2xml.xml
new file mode 100644
index 0000000..a27ad31
--- /dev/null
+++ b/tests/IdValue/idvalue2xml.xml
@@ -0,0 +1,4 @@
+<file>
+ <res name="retryBtn" xml:id="btnAgain">Try Again</res>
+ <res name="retryTip">click this to re-run the process with the current settings.</res>
+</file>
diff --git a/tests/IdValue/idvalue3XmlRule.xml b/tests/IdValue/idvalue3XmlRule.xml
new file mode 100644
index 0000000..35bcaaa
--- /dev/null
+++ b/tests/IdValue/idvalue3XmlRule.xml
@@ -0,0 +1,4 @@
+<its:rules xmlns:its="http://www.w3.org/2005/11/its" version="2.0">
+ <its:idValueRule selector="//text" idValue="concat(../@name, '_t')"/>
+ <its:idValueRule selector="//desc" idValue="concat(../@name, '_d')"/>
+ </its:rules>
diff --git a/tests/IdValue/idvalue3xml.pot b/tests/IdValue/idvalue3xml.pot
new file mode 100644
index 0000000..c5e43c6
--- /dev/null
+++ b/tests/IdValue/idvalue3xml.pot
@@ -0,0 +1,23 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2012-09-26 07:29-0400\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. (itstool) path: msg/text
+#. (itstool) id: idvalue3xml.xml#settingsMissing_t
+#: tests/IdValue/idvalue3xml.xml:5
+msgid "Can't find settings file."
+msgstr ""
+
+#. (itstool) path: msg/desc
+#. (itstool) id: idvalue3xml.xml#settingsMissing_d
+#: tests/IdValue/idvalue3xml.xml:6
+msgid "The module cannot find the default settings file. You need to re-initialize the system."
+msgstr ""
+
diff --git a/tests/IdValue/idvalue3xml.xml b/tests/IdValue/idvalue3xml.xml
new file mode 100644
index 0000000..bd7834a
--- /dev/null
+++ b/tests/IdValue/idvalue3xml.xml
@@ -0,0 +1,11 @@
+<doc
+ xmlns:its="http://www.w3.org/2005/11/its" >
+ <its:rules xmlns:its="http://www.w3.org/2005/11/its" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.0" xlink:type="simple" xlink:href="idvalue3XmlRule.xml"/>
+ <msg name="settingsMissing">
+ <text>Can't find settings file.</text>
+ <desc>The module cannot find the default settings file.
+ You need to re-initialize the system.</desc>
+ </msg>
+</doc>
+
+
diff --git a/tests/run_tests.py b/tests/run_tests.py
index e32c874..0b07a8a 100644
--- a/tests/run_tests.py
+++ b/tests/run_tests.py
@@ -174,6 +174,15 @@ class ItstoolTests(unittest.TestCase):
def test_ExternalResource3Attr(self):
self._test_pot_generation('ExternalResource/Attr/ExternalResource3AttrXml.xml')
+ def test_IdValue1(self):
+ self._test_pot_generation('IdValue/idvalue1xml.xml')
+
+ def test_IdValue2(self):
+ self._test_pot_generation('IdValue/idvalue2xml.xml')
+
+ def test_IdValue3(self):
+ self._test_pot_generation('IdValue/idvalue3xml.xml')
+
def test_Locale1(self):
self._test_translation_process('LocaleFilter/Locale1Xml.xml',
outputs=[('LocaleFilter/Locale1Xml.fr_FR.po',