diff options
author | Shaun McCance <shaunm@gnome.org> | 2012-09-26 07:46:10 -0400 |
---|---|---|
committer | Shaun McCance <shaunm@gnome.org> | 2012-09-26 07:46:10 -0400 |
commit | 24811c8cfcbc14cc480a2fbef2288245019f8a7e (patch) | |
tree | 4d6fa2a872f60f6f2049b6686ac5ff5d562f4b2d | |
parent | 1440e3b495ae502658e5e5ede6c09babce4bc4f9 (diff) | |
download | itstool-24811c8cfcbc14cc480a2fbef2288245019f8a7e.tar.gz |
Implemented ITS 2.0 "ID Value" data category
-rwxr-xr-x | itstool.in | 48 | ||||
-rw-r--r-- | tests/IdValue/idvalue1xml.pot | 23 | ||||
-rw-r--r-- | tests/IdValue/idvalue1xml.xml | 12 | ||||
-rw-r--r-- | tests/IdValue/idvalue2xml.pot | 22 | ||||
-rw-r--r-- | tests/IdValue/idvalue2xml.xml | 4 | ||||
-rw-r--r-- | tests/IdValue/idvalue3XmlRule.xml | 4 | ||||
-rw-r--r-- | tests/IdValue/idvalue3xml.pot | 23 | ||||
-rw-r--r-- | tests/IdValue/idvalue3xml.xml | 11 | ||||
-rw-r--r-- | tests/run_tests.py | 9 |
9 files changed, 155 insertions, 1 deletions
@@ -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', |