mercurial/templater.py
changeset 38355 d4fae9a0ab1f
parent 38354 e637dc0b3b1f
child 38438 f79237942dec
equal deleted inserted replaced
38354:e637dc0b3b1f 38355:d4fae9a0ab1f
   840         x = parse(tmpl)
   840         x = parse(tmpl)
   841         if self._aliasmap:
   841         if self._aliasmap:
   842             x = _aliasrules.expand(self._aliasmap, x)
   842             x = _aliasrules.expand(self._aliasmap, x)
   843         return x
   843         return x
   844 
   844 
       
   845     def _findsymbolsused(self, tree, syms):
       
   846         if not tree:
       
   847             return
       
   848         op = tree[0]
       
   849         if op == 'symbol':
       
   850             s = tree[1]
       
   851             if s in syms[0]:
       
   852                 return # avoid recursion: s -> cache[s] -> s
       
   853             syms[0].add(s)
       
   854             if s in self.cache or s in self._map:
       
   855                 # s may be a reference for named template
       
   856                 self._findsymbolsused(self.load(s), syms)
       
   857             return
       
   858         if op in {'integer', 'string'}:
       
   859             return
       
   860         # '{arg|func}' == '{func(arg)}'
       
   861         if op == '|':
       
   862             syms[1].add(getsymbol(tree[2]))
       
   863             self._findsymbolsused(tree[1], syms)
       
   864             return
       
   865         if op == 'func':
       
   866             syms[1].add(getsymbol(tree[1]))
       
   867             self._findsymbolsused(tree[2], syms)
       
   868             return
       
   869         for x in tree[1:]:
       
   870             self._findsymbolsused(x, syms)
       
   871 
       
   872     def symbolsuseddefault(self):
       
   873         """Look up (keywords, filters/functions) referenced from the default
       
   874         unnamed template
       
   875 
       
   876         This may load additional templates from the map file.
       
   877         """
       
   878         return self.symbolsused('')
       
   879 
       
   880     def symbolsused(self, t):
       
   881         """Look up (keywords, filters/functions) referenced from the name
       
   882         template 't'
       
   883 
       
   884         This may load additional templates from the map file.
       
   885         """
       
   886         syms = (set(), set())
       
   887         self._findsymbolsused(self.load(t), syms)
       
   888         return syms
       
   889 
   845     def renderdefault(self, mapping):
   890     def renderdefault(self, mapping):
   846         """Render the default unnamed template and return result as string"""
   891         """Render the default unnamed template and return result as string"""
   847         return self.render('', mapping)
   892         return self.render('', mapping)
   848 
   893 
   849     def render(self, t, mapping):
   894     def render(self, t, mapping):