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