Hide keyboard shortcuts

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 

3 

4log = getLogger(__name__) 

5 

6 

7class AbstractReverseFilter(Filter): 

8 def placeholder(self, name: str) -> str: 

9 raise NotImplementedError("placeholder") 

10 

11 tag_escape = {} 

12 

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 

26 

27 

28class ReverseJinjaFilter(AbstractReverseFilter): 

29 tag_escape = dict([(x, "{%raw%}" + x + "{%endraw%}") 

30 for x in ["{{", "}}", "{%", "%}"]]) 

31 

32 def placeholder(self, name: str) -> str: 

33 return "{{" + name + "}}" 

34 

35 

36class ReverseTemplateFilter(AbstractReverseFilter): 

37 tag_escape = {"$": "$$"} 

38 

39 def placeholder(self, name: str) -> str: 

40 return "${" + name + "}" 

41 

42 

43class ReverseFormatFilter(AbstractReverseFilter): 

44 tag_escape = {"{": "{{", "}": "}}"} 

45 

46 def placeholder(self, name: str) -> str: 

47 return "{" + name + "}" 

48 

49 

50class ReversePercentFilter(AbstractReverseFilter): 

51 tag_escape = {"%": "%%"} 

52 

53 def placeholder(self, name: str) -> str: 

54 return "%(" + name + ")s" 

55 

56 

57class ReverseFstringFilter(ReverseFormatFilter): 

58 pass