| Index: grit/tool/toolbar_postprocess.py
 | 
| ===================================================================
 | 
| --- grit/tool/toolbar_postprocess.py	(revision 0)
 | 
| +++ grit/tool/toolbar_postprocess.py	(revision 0)
 | 
| @@ -0,0 +1,126 @@
 | 
| +#!/usr/bin/python2.4
 | 
| +# Copyright (c) 2006-2008 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.
 | 
| +
 | 
| +''' Toolbar postprocessing class. Modifies the previously processed GRD tree
 | 
| +by creating separate message groups for each of the IDS_COMMAND macros.
 | 
| +Also adds some identifiers nodes to declare specific ids to be included
 | 
| +in the generated grh file.
 | 
| +'''
 | 
| +
 | 
| +import sys
 | 
| +import re
 | 
| +import postprocess_interface
 | 
| +import grit.node.empty
 | 
| +from grit.node import misc
 | 
| +
 | 
| +class ToolbarPostProcessor(postprocess_interface.PostProcessor):
 | 
| +  ''' Defines message groups within the grd file for each of the
 | 
| +  IDS_COMMAND stuff.
 | 
| +  '''
 | 
| +
 | 
| +  _IDS_COMMAND = re.compile(r'IDS_COMMAND_')
 | 
| +  _GRAB_PARAMETERS = re.compile(r'(IDS_COMMAND_[a-zA-Z0-9]+)_([a-zA-z0-9]+)')
 | 
| +
 | 
| +  def Process(self, rctext, rcpath, grdnode):
 | 
| +    ''' Processes the data in rctext and grdnode.
 | 
| +    Args:
 | 
| +      rctext: string containing the contents of the RC file being processed.
 | 
| +      rcpath: the path used to access the file.
 | 
| +      grdnode: the root node of the grd xml data generated by
 | 
| +      the rc2grd tool.
 | 
| +
 | 
| +    Return:
 | 
| +      The root node of the processed GRD tree.
 | 
| +    '''
 | 
| +
 | 
| +    release = grdnode.children[2]
 | 
| +    messages = release.children[2]
 | 
| +
 | 
| +    identifiers = grit.node.empty.IdentifiersNode()
 | 
| +    identifiers.StartParsing('identifiers', release)
 | 
| +    identifiers.EndParsing()
 | 
| +    release.AddChild(identifiers)
 | 
| +
 | 
| +
 | 
| +    #
 | 
| +    # Turn the IDS_COMMAND messages into separate message groups
 | 
| +    # with ids that are offsetted to the message group's first id
 | 
| +    #
 | 
| +    previous_name_attr = ''
 | 
| +    previous_prefix = ''
 | 
| +    previous_node = ''
 | 
| +    new_messages_node = self.ConstructNewMessages(release)
 | 
| +    for node in messages.children[:]:
 | 
| +      name_attr = node.attrs['name']
 | 
| +      if self._IDS_COMMAND.search(name_attr):
 | 
| +        mo = self._GRAB_PARAMETERS.search(name_attr)
 | 
| +        mp = self._GRAB_PARAMETERS.search(previous_name_attr)
 | 
| +        if mo and mp:
 | 
| +          prefix = mo.group(1)
 | 
| +          previous_prefix = mp.group(1)
 | 
| +          new_message_id = mp.group(2)
 | 
| +          if prefix == previous_prefix:
 | 
| +            messages.RemoveChild(previous_name_attr)
 | 
| +            previous_node.attrs['offset'] = 'PCI_' + new_message_id
 | 
| +            del previous_node.attrs['name']
 | 
| +            new_messages_node.AddChild(previous_node)
 | 
| +          else:
 | 
| +            messages.RemoveChild(previous_name_attr)
 | 
| +            previous_node.attrs['offset'] = 'PCI_' + new_message_id
 | 
| +            del previous_node.attrs['name']
 | 
| +            new_messages_node.AddChild(previous_node)
 | 
| +            new_messages_node.attrs['first_id'] = previous_prefix
 | 
| +            new_messages_node = self.ConstructNewMessages(release)
 | 
| +        else:
 | 
| +          if self._IDS_COMMAND.search(previous_name_attr):
 | 
| +            messages.RemoveChild(previous_name_attr)
 | 
| +            previous_prefix = mp.group(1)
 | 
| +            new_message_id = mp.group(2)
 | 
| +            previous_node.attrs['offset'] = 'PCI_' + new_message_id
 | 
| +            del previous_node.attrs['name']
 | 
| +            new_messages_node.AddChild(previous_node)
 | 
| +            new_messages_node.attrs['first_id'] = previous_prefix
 | 
| +            new_messages_node = self.ConstructNewMessages(release)
 | 
| +      else:
 | 
| +        if self._IDS_COMMAND.search(previous_name_attr):
 | 
| +          messages.RemoveChild(previous_name_attr)
 | 
| +          mp = self._GRAB_PARAMETERS.search(previous_name_attr)
 | 
| +          previous_prefix = mp.group(1)
 | 
| +          new_message_id = mp.group(2)
 | 
| +          previous_node.attrs['offset'] = 'PCI_' + new_message_id
 | 
| +          del previous_node.attrs['name']
 | 
| +          new_messages_node.AddChild(previous_node)
 | 
| +          new_messages_node.attrs['first_id'] = previous_prefix
 | 
| +          new_messages_node = self.ConstructNewMessages(release)
 | 
| +      previous_name_attr = name_attr
 | 
| +      previous_node = node
 | 
| +
 | 
| +
 | 
| +    self.AddIdentifiers(rctext, identifiers)
 | 
| +    return grdnode
 | 
| +
 | 
| +  def ConstructNewMessages(self, parent):
 | 
| +    new_node = grit.node.empty.MessagesNode()
 | 
| +    new_node.StartParsing('messages', parent)
 | 
| +    new_node.EndParsing()
 | 
| +    parent.AddChild(new_node)
 | 
| +    return new_node
 | 
| +
 | 
| +  def AddIdentifiers(self, rctext, node):
 | 
| +    node.AddChild(misc.IdentifierNode.Construct(node, 'IDS_COMMAND_gcFirst', '12000', ''))
 | 
| +    node.AddChild(misc.IdentifierNode.Construct(node,
 | 
| +                                                'IDS_COMMAND_PCI_SPACE', '16', ''))
 | 
| +    node.AddChild(misc.IdentifierNode.Construct(node, 'PCI_BUTTON', '0', ''))
 | 
| +    node.AddChild(misc.IdentifierNode.Construct(node, 'PCI_MENU', '1', ''))
 | 
| +    node.AddChild(misc.IdentifierNode.Construct(node, 'PCI_TIP', '2', ''))
 | 
| +    node.AddChild(misc.IdentifierNode.Construct(node, 'PCI_OPTIONS_TEXT', '3', ''))
 | 
| +    node.AddChild(misc.IdentifierNode.Construct(node, 'PCI_TIP_DISABLED', '4', ''))
 | 
| +    node.AddChild(misc.IdentifierNode.Construct(node, 'PCI_TIP_MENU', '5', ''))
 | 
| +    node.AddChild(misc.IdentifierNode.Construct(node, 'PCI_TIP_MENU_DISABLED', '6', ''))
 | 
| +    node.AddChild(misc.IdentifierNode.Construct(node, 'PCI_TIP_OPTIONS', '7', ''))
 | 
| +    node.AddChild(misc.IdentifierNode.Construct(node, 'PCI_TIP_OPTIONS_DISABLED', '8', ''))
 | 
| +    node.AddChild(misc.IdentifierNode.Construct(node,
 | 
| +                                                'PCI_TIP_DISABLED_BY_POLICY', '9', ''))
 | 
| +
 | 
| 
 | 
| Property changes on: grit/tool/toolbar_postprocess.py
 | 
| ___________________________________________________________________
 | 
| Added: svn:eol-style
 | 
|    + LF
 | 
| 
 | 
| 
 |