Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1from logging import getLogger
2from .iface import Filter
4log = getLogger(__name__)
7class AbstractReverseFilter(Filter):
8 def placeholder(self, name: str) -> str:
9 raise NotImplementedError("placeholder")
11 tag_escape = {}
13 def render(self, s: str, vals: dict) -> str:
14 valmap = {}
15 for k, v in vals.items():
16 if not v.__hash__:
17 continue
18 if v not in valmap:
19 valmap[str(v)] = self.placeholder(k)
20 for k, v in self.tag_escape.items():
21 valmap[k] = v
22 log.debug("strtr: %s", valmap)
23 res = self.strtr(s, valmap)
24 log.debug("changed: %s <- %s", repr(res[:100]), repr(s[:100]))
25 return res
28class ReverseJinjaFilter(AbstractReverseFilter):
29 tag_escape = dict([(x, "{%raw%}" + x + "{%endraw%}")
30 for x in ["{{", "}}", "{%", "%}"]])
32 def placeholder(self, name: str) -> str:
33 return "{{" + name + "}}"
36class ReverseTemplateFilter(AbstractReverseFilter):
37 tag_escape = {"$": "$$"}
39 def placeholder(self, name: str) -> str:
40 return "${" + name + "}"
43class ReverseFormatFilter(AbstractReverseFilter):
44 tag_escape = {"{": "{{", "}": "}}"}
46 def placeholder(self, name: str) -> str:
47 return "{" + name + "}"
50class ReversePercentFilter(AbstractReverseFilter):
51 tag_escape = {"%": "%%"}
53 def placeholder(self, name: str) -> str:
54 return "%(" + name + ")s"
57class ReverseFstringFilter(ReverseFormatFilter):
58 pass