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 /itstool.in | |
parent | 1440e3b495ae502658e5e5ede6c09babce4bc4f9 (diff) | |
download | itstool-24811c8cfcbc14cc480a2fbef2288245019f8a7e.tar.gz |
Implemented ITS 2.0 "ID Value" data category
Diffstat (limited to 'itstool.in')
-rwxr-xr-x | itstool.in | 48 |
1 files changed, 47 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) |