Index: grit/format/policy_templates/template_formatter.py |
=================================================================== |
--- grit/format/policy_templates/template_formatter.py (revision 0) |
+++ grit/format/policy_templates/template_formatter.py (revision 0) |
@@ -0,0 +1,103 @@ |
+# Copyright (c) 2011 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. |
+ |
+ |
+import os |
+import sys |
+import types |
+ |
+from grit.format import interface |
+from grit.format.policy_templates import policy_template_generator |
+from grit.format.policy_templates import writer_configuration |
+from grit.node import structure |
+from grit.node import message |
+from grit.node import misc |
+ |
+ |
+class TemplateFormatter(interface.ItemFormatter): |
+ '''Creates a template file corresponding to an <output> node of the grit |
+ tree. |
+ |
+ More precisely, processes the whole grit tree for a given <output> node whose |
+ type is 'adm'. TODO(gfeher) add new types here |
+ The result of processing is a policy template file with the |
+ given type and language of the <output> node. A new instance of this class |
+ is created by grit.misc.GritNode for each <output> node. This class does |
+ the interfacing with grit, but the actual template-generating work is done in |
+ policy_template_generator.PolicyTemplateGenerator. |
+ ''' |
+ |
+ def __init__(self, writer_name): |
+ '''Initializes this formatter to output messages with a given writer. |
+ |
+ Args: |
+ writer_name: A string identifying the TemplateWriter subclass used |
+ for generating the output. If writer name is 'adm', then the class |
+ from module 'writers.adm_writer' will be used. |
+ ''' |
+ super(type(self), self).__init__() |
+ writer_module_name = \ |
+ 'grit.format.policy_templates.writers.' + writer_name + '_writer' |
+ __import__(writer_module_name) |
+ # The module that contains the writer class: |
+ self._writer_module = sys.modules[writer_module_name] |
+ |
+ def Format(self, item, lang='en', begin_item=True, output_dir='.'): |
+ '''Generates a template corresponding to an <output> node in the grd file. |
+ |
+ Args: |
+ item: the <grit> root node of the grit tree. |
+ lang: the language of outputted text, e.g.: 'en' |
+ begin_item: True or False, depending on if this function was called at |
+ the beginning or at the end of the item. |
+ output_dir: The output directory, currently unused here. |
+ |
+ Returns: |
+ The text of the template file. |
+ ''' |
+ if not begin_item: |
+ return '' |
+ |
+ self._lang = lang |
+ self._config = writer_configuration.GetConfigurationForBuild(item.defines) |
+ self._policy_data = None |
+ self._messages = {} |
+ self._ParseGritNodes(item) |
+ return self._GetOutput() |
+ |
+ def _GetOutput(self): |
+ '''Generates a template file using the instance variables initialized |
+ in Format() using the writer specified in __init__(). |
+ |
+ Returns: |
+ The text of the policy template based on the parameters passed |
+ to __init__() and Format(). |
+ ''' |
+ policy_generator = policy_template_generator.PolicyTemplateGenerator( |
+ self._config, |
+ self._policy_data) |
+ writer = self._writer_module.GetWriter(self._config) |
+ str = policy_generator.GetTemplateText(writer) |
+ return str |
+ |
+ def _ParseGritNodes(self, item): |
+ '''Collects the necessary information from the grit tree: |
+ the message strings and the policy definitions. |
+ |
+ Args: |
+ item: The grit node parsed currently. |
+ ''' |
+ nodes = [] |
+ if (isinstance(item, misc.IfNode) and not item.IsConditionSatisfied()): |
+ return |
+ if (isinstance(item, structure.StructureNode) and |
+ item.attrs['type'] == 'policy_template_metafile'): |
+ assert self._policy_data == None |
+ json_text = item.gatherer.Translate( |
+ self._lang, |
+ pseudo_if_not_available=item.PseudoIsAllowed(), |
+ fallback_to_english=item.ShouldFallbackToEnglish()) |
+ self._policy_data = eval(json_text) |
+ for child in item.children: |
+ self._ParseGritNodes(child) |
Property changes on: grit/format/policy_templates/template_formatter.py |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |