| Index: grit/gather/admin_template.py
 | 
| ===================================================================
 | 
| --- grit/gather/admin_template.py	(revision 0)
 | 
| +++ grit/gather/admin_template.py	(revision 0)
 | 
| @@ -0,0 +1,79 @@
 | 
| +#!/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.
 | 
| +
 | 
| +'''Gatherer for administrative template files.
 | 
| +'''
 | 
| +
 | 
| +import re
 | 
| +import types
 | 
| +
 | 
| +from grit.gather import regexp
 | 
| +from grit import exception
 | 
| +from grit import tclib
 | 
| +from grit import util
 | 
| +
 | 
| +
 | 
| +class MalformedAdminTemplateException(exception.Base):
 | 
| +  '''This file doesn't look like a .adm file to me.'''
 | 
| +  def __init__(self, msg=''):
 | 
| +    exception.Base.__init__(self, msg)
 | 
| +
 | 
| +
 | 
| +class AdmGatherer(regexp.RegexpGatherer):
 | 
| +  '''Gatherer for the translateable portions of an admin template.
 | 
| +
 | 
| +  This gatherer currently makes the following assumptions:
 | 
| +  - there is only one [strings] section and it is always the last section
 | 
| +    of the file
 | 
| +  - translateable strings do not need to be escaped.
 | 
| +  '''
 | 
| +
 | 
| +  # Finds the strings section as the group named 'strings'
 | 
| +  _STRINGS_SECTION = re.compile('(?P<first_part>.+^\[strings\])(?P<strings>.+)\Z',
 | 
| +                                re.MULTILINE | re.DOTALL)
 | 
| +
 | 
| +  # Finds the translateable sections from within the [strings] section.
 | 
| +  _TRANSLATEABLES = re.compile('^\s*[A-Za-z0-9_]+\s*=\s*"(?P<text>.+)"\s*$',
 | 
| +                               re.MULTILINE)
 | 
| +
 | 
| +  def __init__(self, text):
 | 
| +    regexp.RegexpGatherer.__init__(self, text)
 | 
| +
 | 
| +  def Escape(self, text):
 | 
| +    return text.replace('\n', '\\n')
 | 
| +
 | 
| +  def UnEscape(self, text):
 | 
| +    return text.replace('\\n', '\n')
 | 
| +
 | 
| +  def Parse(self):
 | 
| +    if self.have_parsed_:
 | 
| +      return
 | 
| +    m = self._STRINGS_SECTION.match(self.text_)
 | 
| +    if not m:
 | 
| +      raise MalformedAdminTemplateException()
 | 
| +    # Add the first part, which is all nontranslateable, to the skeleton
 | 
| +    self._AddNontranslateableChunk(m.group('first_part'))
 | 
| +    # Then parse the rest using the _TRANSLATEABLES regexp.
 | 
| +    self._RegExpParse(self._TRANSLATEABLES, m.group('strings'))
 | 
| +
 | 
| +  # static method
 | 
| +  def FromFile(adm_file, ext_key=None, encoding='cp1252'):
 | 
| +    '''Loads the contents of 'adm_file' in encoding 'encoding' and creates
 | 
| +    an AdmGatherer instance that gathers from those contents.
 | 
| +
 | 
| +    The 'ext_key' parameter is ignored.
 | 
| +
 | 
| +    Args:
 | 
| +      adm_file: file('bingo.rc') | 'filename.rc'
 | 
| +      encoding: 'utf-8'
 | 
| +
 | 
| +    Return:
 | 
| +      AdmGatherer(contents_of_file)
 | 
| +    '''
 | 
| +    if isinstance(adm_file, types.StringTypes):
 | 
| +      adm_file = util.WrapInputStream(file(adm_file, 'r'), encoding)
 | 
| +    return AdmGatherer(adm_file.read())
 | 
| +  FromFile = staticmethod(FromFile)
 | 
| +
 | 
| 
 | 
| Property changes on: grit/gather/admin_template.py
 | 
| ___________________________________________________________________
 | 
| Added: svn:eol-style
 | 
|    + LF
 | 
| 
 | 
| 
 |