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 preprocessing code. Turns all IDS_COMMAND macros in the RC file 701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orginto simpler constructs that can be understood by GRIT. Also deals with 801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgexpansion of $lf; placeholders into the correct linefeed character. 901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org''' 1001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 1101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgimport preprocess_interface 1201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 1301fadb72b6e94e6511eaffd1874a8cc095f098a7joi@chromium.orgfrom grit import lazy_re 1401fadb72b6e94e6511eaffd1874a8cc095f098a7joi@chromium.org 1501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgclass ToolbarPreProcessor(preprocess_interface.PreProcessor): 1601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org ''' Toolbar PreProcessing class. 1701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org ''' 1801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 1901fadb72b6e94e6511eaffd1874a8cc095f098a7joi@chromium.org _IDS_COMMAND_MACRO = lazy_re.compile( 2001fadb72b6e94e6511eaffd1874a8cc095f098a7joi@chromium.org r'(.*IDS_COMMAND)\s*\(([a-zA-Z0-9_]*)\s*,\s*([a-zA-Z0-9_]*)\)(.*)') 2101fadb72b6e94e6511eaffd1874a8cc095f098a7joi@chromium.org _LINE_FEED_PH = lazy_re.compile(r'\$lf;') 2201fadb72b6e94e6511eaffd1874a8cc095f098a7joi@chromium.org _PH_COMMENT = lazy_re.compile(r'PHRWR') 2301fadb72b6e94e6511eaffd1874a8cc095f098a7joi@chromium.org _COMMENT = lazy_re.compile(r'^(\s*)//.*') 2401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 2501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 2601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org def Process(self, rctext, rcpath): 2701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org ''' Processes the data in rctext. 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 3201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org Return: 3301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org The processed text. 3401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org ''' 3501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 3601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org ret = '' 3701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org rclines = rctext.splitlines() 3801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org for line in rclines: 3901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 4001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org if self._LINE_FEED_PH.search(line): 4101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org # Replace "$lf;" placeholder comments by an empty line. 4201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org # this will not be put into the processed result 4301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org if self._PH_COMMENT.search(line): 4401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org mm = self._COMMENT.search(line) 4501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org if mm: 4601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org line = '%s//' % mm.group(1) 4701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 4801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org else: 4901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org # Replace $lf by the right linefeed character 5001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org line = self._LINE_FEED_PH.sub(r'\\n', line) 5101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 5201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org # Deal with IDS_COMMAND_MACRO stuff 5301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org mo = self._IDS_COMMAND_MACRO.search(line) 5401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org if mo: 5501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org line = '%s_%s_%s%s' % (mo.group(1), mo.group(2), mo.group(3), mo.group(4)) 5601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 5701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org ret += (line + '\n') 5801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 5901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org return ret 6001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 6101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 62