195640e3a20adea634b4df4ccf8c93f411184c438joi@chromium.org#!/usr/bin/env python 295640e3a20adea634b4df4ccf8c93f411184c438joi@chromium.org# Copyright (c) 2012 The Chromium Authors. All rights reserved. 301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org# Use of this source code is governed by a BSD-style license that can be 401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org# found in the LICENSE file. 501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org''' Toolbar postprocessing class. Modifies the previously processed GRD tree 701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgby creating separate message groups for each of the IDS_COMMAND macros. 801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgAlso adds some identifiers nodes to declare specific ids to be included 901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgin the generated grh file. 1001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org''' 1101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 1201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgimport postprocess_interface 1301fadb72b6e94e6511eaffd1874a8cc095f098a7joi@chromium.orgfrom grit import lazy_re 1401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgimport grit.node.empty 1501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgfrom grit.node import misc 1601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 1701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgclass ToolbarPostProcessor(postprocess_interface.PostProcessor): 1801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org ''' Defines message groups within the grd file for each of the 1901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org IDS_COMMAND stuff. 2001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org ''' 2101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 2201fadb72b6e94e6511eaffd1874a8cc095f098a7joi@chromium.org _IDS_COMMAND = lazy_re.compile(r'IDS_COMMAND_') 2301fadb72b6e94e6511eaffd1874a8cc095f098a7joi@chromium.org _GRAB_PARAMETERS = lazy_re.compile( 2401fadb72b6e94e6511eaffd1874a8cc095f098a7joi@chromium.org r'(IDS_COMMAND_[a-zA-Z0-9]+)_([a-zA-z0-9]+)') 2501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 2601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org def Process(self, rctext, rcpath, grdnode): 2701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org ''' Processes the data in rctext and grdnode. 2801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org Args: 2901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org rctext: string containing the contents of the RC file being processed. 3001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org rcpath: the path used to access the file. 3101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org grdnode: the root node of the grd xml data generated by 3201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org the rc2grd tool. 3301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 3401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org Return: 3501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org The root node of the processed GRD tree. 3601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org ''' 3701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 3801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org release = grdnode.children[2] 3901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org messages = release.children[2] 4001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 4101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org identifiers = grit.node.empty.IdentifiersNode() 4201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org identifiers.StartParsing('identifiers', release) 4301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org identifiers.EndParsing() 4401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org release.AddChild(identifiers) 4501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 4601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 4701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org # 4801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org # Turn the IDS_COMMAND messages into separate message groups 4901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org # with ids that are offsetted to the message group's first id 5001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org # 5101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org previous_name_attr = '' 5201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org previous_prefix = '' 5301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org previous_node = '' 5401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org new_messages_node = self.ConstructNewMessages(release) 5501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org for node in messages.children[:]: 5601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org name_attr = node.attrs['name'] 5701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org if self._IDS_COMMAND.search(name_attr): 5801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org mo = self._GRAB_PARAMETERS.search(name_attr) 5901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org mp = self._GRAB_PARAMETERS.search(previous_name_attr) 6001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org if mo and mp: 6101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org prefix = mo.group(1) 6201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org previous_prefix = mp.group(1) 6301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org new_message_id = mp.group(2) 6401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org if prefix == previous_prefix: 6501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org messages.RemoveChild(previous_name_attr) 6601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org previous_node.attrs['offset'] = 'PCI_' + new_message_id 6701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org del previous_node.attrs['name'] 6801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org new_messages_node.AddChild(previous_node) 6901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org else: 7001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org messages.RemoveChild(previous_name_attr) 7101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org previous_node.attrs['offset'] = 'PCI_' + new_message_id 7201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org del previous_node.attrs['name'] 7301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org new_messages_node.AddChild(previous_node) 7401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org new_messages_node.attrs['first_id'] = previous_prefix 7501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org new_messages_node = self.ConstructNewMessages(release) 7601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org else: 7701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org if self._IDS_COMMAND.search(previous_name_attr): 7801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org messages.RemoveChild(previous_name_attr) 7901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org previous_prefix = mp.group(1) 8001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org new_message_id = mp.group(2) 8101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org previous_node.attrs['offset'] = 'PCI_' + new_message_id 8201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org del previous_node.attrs['name'] 8301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org new_messages_node.AddChild(previous_node) 8401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org new_messages_node.attrs['first_id'] = previous_prefix 8501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org new_messages_node = self.ConstructNewMessages(release) 8601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org else: 8701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org if self._IDS_COMMAND.search(previous_name_attr): 8801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org messages.RemoveChild(previous_name_attr) 8901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org mp = self._GRAB_PARAMETERS.search(previous_name_attr) 9001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org previous_prefix = mp.group(1) 9101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org new_message_id = mp.group(2) 9201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org previous_node.attrs['offset'] = 'PCI_' + new_message_id 9301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org del previous_node.attrs['name'] 9401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org new_messages_node.AddChild(previous_node) 9501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org new_messages_node.attrs['first_id'] = previous_prefix 9601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org new_messages_node = self.ConstructNewMessages(release) 9701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org previous_name_attr = name_attr 9801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org previous_node = node 9901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 10001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 10101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org self.AddIdentifiers(rctext, identifiers) 10201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org return grdnode 10301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 10401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org def ConstructNewMessages(self, parent): 10501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org new_node = grit.node.empty.MessagesNode() 10601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org new_node.StartParsing('messages', parent) 10701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org new_node.EndParsing() 10801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org parent.AddChild(new_node) 10901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org return new_node 11001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 11101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org def AddIdentifiers(self, rctext, node): 11201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org node.AddChild(misc.IdentifierNode.Construct(node, 'IDS_COMMAND_gcFirst', '12000', '')) 11301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org node.AddChild(misc.IdentifierNode.Construct(node, 11401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 'IDS_COMMAND_PCI_SPACE', '16', '')) 11501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org node.AddChild(misc.IdentifierNode.Construct(node, 'PCI_BUTTON', '0', '')) 11601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org node.AddChild(misc.IdentifierNode.Construct(node, 'PCI_MENU', '1', '')) 11701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org node.AddChild(misc.IdentifierNode.Construct(node, 'PCI_TIP', '2', '')) 11801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org node.AddChild(misc.IdentifierNode.Construct(node, 'PCI_OPTIONS_TEXT', '3', '')) 11901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org node.AddChild(misc.IdentifierNode.Construct(node, 'PCI_TIP_DISABLED', '4', '')) 12001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org node.AddChild(misc.IdentifierNode.Construct(node, 'PCI_TIP_MENU', '5', '')) 12101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org node.AddChild(misc.IdentifierNode.Construct(node, 'PCI_TIP_MENU_DISABLED', '6', '')) 12201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org node.AddChild(misc.IdentifierNode.Construct(node, 'PCI_TIP_OPTIONS', '7', '')) 12301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org node.AddChild(misc.IdentifierNode.Construct(node, 'PCI_TIP_OPTIONS_DISABLED', '8', '')) 12401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org node.AddChild(misc.IdentifierNode.Construct(node, 12501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 'PCI_TIP_DISABLED_BY_POLICY', '9', '')) 12601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 127