Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1126)

Unified Diff: tools/grit/grit/gather/igoogle_strings.py

Issue 1410853008: Move grit from DEPS into src. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: webview licenses Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: tools/grit/grit/gather/igoogle_strings.py
diff --git a/tools/grit/grit/gather/igoogle_strings.py b/tools/grit/grit/gather/igoogle_strings.py
new file mode 100755
index 0000000000000000000000000000000000000000..79ed8390c84c4e0c38c1d06f2e72307a1096d873
--- /dev/null
+++ b/tools/grit/grit/gather/igoogle_strings.py
@@ -0,0 +1,123 @@
+#!/usr/bin/env python
+# Copyright (c) 2012 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+'''Support for ALL_ALL.xml format used by Igoogle plug-ins in Google Desktop.'''
+
+import StringIO
+import re
+import xml.sax
+import xml.sax.handler
+import xml.sax.saxutils
+
+from grit.gather import regexp
+from grit import util
+from grit import tclib
+
+# Placeholders can be defined in strings.xml files by putting the name of the
+# placeholder between [![ and ]!] e.g. <MSG>Hello [![USER]!] how are you<MSG>
+PLACEHOLDER_RE = re.compile('(\[!\[|\]!\])')
+
+
+class IgoogleStringsContentHandler(xml.sax.handler.ContentHandler):
+ '''A very dumb parser for splitting the strings.xml file into translateable
+ and nontranslateable chunks.'''
+
+ def __init__(self, parent):
+ self.curr_elem = ''
+ self.curr_text = ''
+ self.parent = parent
+ self.resource_name = ''
+ self.meaning = ''
+ self.translateable = True
+
+ def startElement(self, name, attrs):
+ if (name != 'messagebundle'):
+ self.curr_elem = name
+
+ attr_names = attrs.getQNames()
+ if 'name' in attr_names:
+ self.resource_name = attrs.getValueByQName('name')
+
+ att_text = []
+ for attr_name in attr_names:
+ att_text.append(' ')
+ att_text.append(attr_name)
+ att_text.append('=')
+ att_text.append(
+ xml.sax.saxutils.quoteattr(attrs.getValueByQName(attr_name)))
+
+ self.parent._AddNontranslateableChunk("<%s%s>" %
+ (name, ''.join(att_text)))
+
+ def characters(self, content):
+ if self.curr_elem != '':
+ self.curr_text += content
+
+ def endElement(self, name):
+ if name != 'messagebundle':
+ self.parent.AddMessage(self.curr_text, self.resource_name,
+ self.meaning, self.translateable)
+ self.parent._AddNontranslateableChunk("</%s>\n" % name)
+ self.curr_elem = ''
+ self.curr_text = ''
+ self.resource_name = ''
+ self.meaning = ''
+ self.translateable = True
+
+ def ignorableWhitespace(self, whitespace):
+ pass
+
+
+class IgoogleStrings(regexp.RegexpGatherer):
+ '''Supports the ALL_ALL.xml format used by Igoogle gadgets.'''
+
+ def AddMessage(self, msgtext, description, meaning, translateable):
+ if msgtext == '':
+ return
+
+ msg = tclib.Message(description=description, meaning=meaning)
+
+ unescaped_text = self.UnEscape(msgtext)
+ parts = PLACEHOLDER_RE.split(unescaped_text)
+ in_placeholder = False
+ for part in parts:
+ if part == '':
+ continue
+ elif part == '[![':
+ in_placeholder = True
+ elif part == ']!]':
+ in_placeholder = False
+ else:
+ if in_placeholder:
+ msg.AppendPlaceholder(tclib.Placeholder(part, '[![%s]!]' % part,
+ '(placeholder)'))
+ else:
+ msg.AppendText(part)
+
+ self.skeleton_.append(
+ self.uberclique.MakeClique(msg, translateable=translateable))
+
+ # if statement needed because this is supposed to be idempotent (so never
+ # set back to false)
+ if translateable:
+ self.translatable_chunk_ = True
+
+ # Although we use the RegexpGatherer base class, we do not use the
+ # _RegExpParse method of that class to implement Parse(). Instead, we
+ # parse using a SAX parser.
+ def Parse(self):
+ if self.have_parsed_:
+ return
+ self.have_parsed_ = True
+
+ self.text_ = self._LoadInputFile().strip()
+ self._AddNontranslateableChunk(u'<messagebundle>\n')
+ stream = StringIO.StringIO(self.text_)
+ handler = IgoogleStringsContentHandler(self)
+ xml.sax.parse(stream, handler)
+ self._AddNontranslateableChunk(u'</messagebundle>\n')
+
+ def Escape(self, text):
+ return util.EncodeCdata(text)
« no previous file with comments | « tools/grit/grit/gather/chrome_scaled_image_unittest.py ('k') | tools/grit/grit/gather/igoogle_strings_unittest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698