mercurial/templater.py
changeset 8194 63c47e4ac617
parent 8015 b5db7dcc1497
child 8198 cf9accffd0b3
equal deleted inserted replaced
8193:94246e90081e 8194:63c47e4ac617
     5 # This software may be used and distributed according to the terms
     5 # This software may be used and distributed according to the terms
     6 # of the GNU General Public License, incorporated herein by reference.
     6 # of the GNU General Public License, incorporated herein by reference.
     7 
     7 
     8 from i18n import _
     8 from i18n import _
     9 import re, sys, os
     9 import re, sys, os
    10 from mercurial import util
    10 from mercurial import util, config
    11 
    11 
    12 path = ['templates', '../templates']
    12 path = ['templates', '../templates']
    13 
    13 
    14 def parsestring(s, quoted=True):
    14 def parsestring(s, quoted=True):
    15     '''parse a string using simple c-like syntax.
    15     '''parse a string using simple c-like syntax.
    61         if not mapfile:
    61         if not mapfile:
    62             return
    62             return
    63         if not os.path.exists(mapfile):
    63         if not os.path.exists(mapfile):
    64             raise util.Abort(_('style not found: %s') % mapfile)
    64             raise util.Abort(_('style not found: %s') % mapfile)
    65 
    65 
    66         i = 0
    66         conf = config.config()
    67         for l in file(mapfile):
    67         conf.read(mapfile)
    68             l = l.strip()
    68 
    69             i += 1
    69         for key, val in conf[''].items():
    70             if not l or l[0] in '#;': continue
    70             if val[0] in "'\"":
    71             m = re.match(r'([a-zA-Z_][a-zA-Z0-9_]*)\s*=\s*(.+)$', l)
    71                 try:
    72             if m:
    72                     self.cache[key] = parsestring(val)
    73                 key, val = m.groups()
    73                 except SyntaxError, inst:
    74                 if val[0] in "'\"":
    74                     raise SyntaxError('%s: %s' %
    75                     try:
    75                                       (conf.getsource('', key), inst.args[0]))
    76                         self.cache[key] = parsestring(val)
    76             else:
    77                     except SyntaxError, inst:
    77                 self.map[key] = os.path.join(self.base, val)
    78                         raise SyntaxError('%s:%s: %s' %
       
    79                                           (mapfile, i, inst.args[0]))
       
    80                 else:
       
    81                     self.map[key] = os.path.join(self.base, val)
       
    82             else:
       
    83                 raise SyntaxError(_("%s:%s: parse error") % (mapfile, i))
       
    84 
    78 
    85     def __contains__(self, key):
    79     def __contains__(self, key):
    86         return key in self.cache or key in self.map
    80         return key in self.cache or key in self.map
    87 
    81 
    88     def _template(self, t):
    82     def _template(self, t):