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

Unified Diff: tools/grit/grit/gather/interface.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
« no previous file with comments | « tools/grit/grit/gather/igoogle_strings_unittest.py ('k') | tools/grit/grit/gather/json_loader.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/grit/grit/gather/interface.py
diff --git a/tools/grit/grit/gather/interface.py b/tools/grit/grit/gather/interface.py
new file mode 100755
index 0000000000000000000000000000000000000000..c277d379b3cc98b87049ff1fe07fe9d4c88e2332
--- /dev/null
+++ b/tools/grit/grit/gather/interface.py
@@ -0,0 +1,171 @@
+#!/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.
+
+'''Interface for all gatherers.
+'''
+
+
+import os.path
+import types
+
+from grit import clique
+from grit import util
+
+
+class GathererBase(object):
+ '''Interface for all gatherer implementations. Subclasses must implement
+ all methods that raise NotImplemented.'''
+
+ def __init__(self, rc_file, extkey=None, encoding='cp1252', is_skeleton=False):
+ '''Initializes the gatherer object's attributes, but does not attempt to
+ read the input file.
+
+ Args:
+ rc_file: The 'file' attribute of the <structure> node (usually the
+ relative path to the source file).
+ extkey: e.g. 'ID_MY_DIALOG'
+ encoding: e.g. 'utf-8'
+ is_skeleton: Indicates whether this gatherer is a skeleton gatherer, in
+ which case we should not do some types of processing on the
+ translateable bits.
+ '''
+ self.rc_file = rc_file
+ self.extkey = extkey
+ self.encoding = encoding
+ # A default uberclique that is local to this object. Users can override
+ # this with the uberclique they are using.
+ self.uberclique = clique.UberClique()
+ # Indicates whether this gatherer is a skeleton gatherer, in which case
+ # we should not do some types of processing on the translateable bits.
+ self.is_skeleton = is_skeleton
+ # Stores the grd node on which this gatherer is running. This allows
+ # evaluating expressions.
+ self.grd_node = None
+
+ def SetAttributes(self, attrs):
+ '''Sets node attributes used by the gatherer.
+
+ By default, this does nothing. If special handling is desired, it should be
+ overridden by the child gatherer.
+
+ Args:
+ attrs: The mapping of node attributes.
+ '''
+ pass
+
+ def SetDefines(self, defines):
+ '''Sets global defines used by the gatherer.
+
+ By default, this does nothing. If special handling is desired, it should be
+ overridden by the child gatherer.
+
+ Args:
+ defines: The mapping of define values.
+ '''
+ pass
+
+ def SetGrdNode(self, node):
+ '''Sets the grd node on which this gatherer is running.
+ '''
+ self.grd_node = node
+
+ def SetUberClique(self, uberclique):
+ '''Overrides the default uberclique so that cliques created by this object
+ become part of the uberclique supplied by the user.
+ '''
+ self.uberclique = uberclique
+
+ def Parse(self):
+ '''Reads and parses the contents of what is being gathered.'''
+ raise NotImplementedError()
+
+ def GetData(self, lang, encoding):
+ '''Returns the data to be added to the DataPack for this node or None if
+ this node does not add a DataPack entry.
+ '''
+ return None
+
+ def GetText(self):
+ '''Returns the text of what is being gathered.'''
+ raise NotImplementedError()
+
+ def GetTextualIds(self):
+ '''Returns the mnemonic IDs that need to be defined for the resource
+ being gathered to compile correctly.'''
+ return []
+
+ def GetCliques(self):
+ '''Returns the MessageClique objects for all translateable portions.'''
+ return []
+
+ def GetInputPath(self):
+ return self.rc_file
+
+ def GetHtmlResourceFilenames(self):
+ """Returns a set of all filenames inlined by this gatherer."""
+ return []
+
+ def Translate(self, lang, pseudo_if_not_available=True,
+ skeleton_gatherer=None, fallback_to_english=False):
+ '''Returns the resource being gathered, with translateable portions filled
+ with the translation for language 'lang'.
+
+ If pseudo_if_not_available is true, a pseudotranslation will be used for any
+ message that doesn't have a real translation available.
+
+ If no translation is available and pseudo_if_not_available is false,
+ fallback_to_english controls the behavior. If it is false, throw an error.
+ If it is true, use the English version of the message as its own
+ "translation".
+
+ If skeleton_gatherer is specified, the translation will use the nontranslateable
+ parts from the gatherer 'skeleton_gatherer', which must be of the same type
+ as 'self'.
+
+ If fallback_to_english
+
+ Args:
+ lang: 'en'
+ pseudo_if_not_available: True | False
+ skeleton_gatherer: other_gatherer
+ fallback_to_english: True | False
+
+ Return:
+ e.g. 'ID_THIS_SECTION TYPE\n...BEGIN\n "Translated message"\n......\nEND'
+
+ Raises:
+ grit.exception.NotReady() if used before Parse() has been successfully
+ called.
+ grit.exception.NoSuchTranslation() if 'pseudo_if_not_available' and
+ fallback_to_english are both false and there is no translation for the
+ requested language.
+ '''
+ raise NotImplementedError()
+
+ def SubstituteMessages(self, substituter):
+ '''Applies substitutions to all messages in the gatherer.
+
+ Args:
+ substituter: a grit.util.Substituter object.
+ '''
+ pass
+
+ def SetFilenameExpansionFunction(self, fn):
+ '''Sets a function for rewriting filenames before gathering.'''
+ pass
+
+ # TODO(benrg): Move this elsewhere, since it isn't part of the interface.
+ def _LoadInputFile(self):
+ '''A convenience function for subclasses that loads the contents of the
+ input file.
+ '''
+ if isinstance(self.rc_file, types.StringTypes):
+ path = self.GetInputPath()
+ # Hack: some unit tests supply an absolute path and no root node.
+ if not os.path.isabs(path):
+ path = self.grd_node.ToRealPath(path)
+ return util.ReadFile(path, self.encoding)
+ else:
+ return self.rc_file.read()
« no previous file with comments | « tools/grit/grit/gather/igoogle_strings_unittest.py ('k') | tools/grit/grit/gather/json_loader.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698