Mercurial > hg-stable
comparison mercurial/templater.py @ 37105:638a241202a3
templater: add hook point to populate additional mapping items
The 'revcache' dict will be inserted by this hook.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Thu, 15 Mar 2018 21:49:33 +0900 |
parents | f0b6fbea00cf |
children | 888507ec655e |
comparison
equal
deleted
inserted
replaced
37104:656ac240f392 | 37105:638a241202a3 |
---|---|
575 | 575 |
576 @abc.abstractmethod | 576 @abc.abstractmethod |
577 def lookup(self, context, mapping, key): | 577 def lookup(self, context, mapping, key): |
578 """Return a resource for the key if available; otherwise None""" | 578 """Return a resource for the key if available; otherwise None""" |
579 | 579 |
580 @abc.abstractmethod | |
581 def populatemap(self, context, origmapping, newmapping): | |
582 """Return a dict of additional mapping items which should be paired | |
583 with the given new mapping""" | |
584 | |
580 class nullresourcemapper(resourcemapper): | 585 class nullresourcemapper(resourcemapper): |
581 def availablekeys(self, context, mapping): | 586 def availablekeys(self, context, mapping): |
582 return set() | 587 return set() |
583 | 588 |
584 def knownkeys(self): | 589 def knownkeys(self): |
585 return set() | 590 return set() |
586 | 591 |
587 def lookup(self, context, mapping, key): | 592 def lookup(self, context, mapping, key): |
588 return None | 593 return None |
594 | |
595 def populatemap(self, context, origmapping, newmapping): | |
596 return {} | |
589 | 597 |
590 class engine(object): | 598 class engine(object): |
591 '''template expansion engine. | 599 '''template expansion engine. |
592 | 600 |
593 template expansion works like this. a map file contains key=value | 601 template expansion works like this. a map file contains key=value |
632 newres = self._resources.availablekeys(self, newmapping) | 640 newres = self._resources.availablekeys(self, newmapping) |
633 mapping = {k: v for k, v in origmapping.iteritems() | 641 mapping = {k: v for k, v in origmapping.iteritems() |
634 if (k in knownres # not a symbol per self.symbol() | 642 if (k in knownres # not a symbol per self.symbol() |
635 or newres.isdisjoint(self._defaultrequires(k)))} | 643 or newres.isdisjoint(self._defaultrequires(k)))} |
636 mapping.update(newmapping) | 644 mapping.update(newmapping) |
645 mapping.update( | |
646 self._resources.populatemap(self, origmapping, newmapping)) | |
637 return mapping | 647 return mapping |
638 | 648 |
639 def _defaultrequires(self, key): | 649 def _defaultrequires(self, key): |
640 """Resource keys required by the specified default symbol function""" | 650 """Resource keys required by the specified default symbol function""" |
641 v = self._defaults.get(key) | 651 v = self._defaults.get(key) |
687 def process(self, t, mapping): | 697 def process(self, t, mapping): |
688 '''Perform expansion. t is name of map element to expand. | 698 '''Perform expansion. t is name of map element to expand. |
689 mapping contains added elements for use during expansion. Is a | 699 mapping contains added elements for use during expansion. Is a |
690 generator.''' | 700 generator.''' |
691 func, data = self._load(t) | 701 func, data = self._load(t) |
702 # populate additional items only if they don't exist in the given | |
703 # mapping. this is slightly different from overlaymap() because the | |
704 # initial 'revcache' may contain pre-computed items. | |
705 extramapping = self._resources.populatemap(self, {}, mapping) | |
706 if extramapping: | |
707 extramapping.update(mapping) | |
708 mapping = extramapping | |
692 return _flatten(func(self, mapping, data)) | 709 return _flatten(func(self, mapping, data)) |
693 | 710 |
694 engines = {'default': engine} | 711 engines = {'default': engine} |
695 | 712 |
696 def stylelist(): | 713 def stylelist(): |