Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.8/site-packages/mistune/plugins/abbr.py: 24%

37 statements  

« prev     ^ index     » next       coverage.py v7.2.7, created at 2023-06-03 06:10 +0000

1import re 

2from ..util import escape_html 

3 

4 

5DEF_ABBR = re.compile( 

6 # *[HTML]: 

7 # *[HTML]: Hyper Text Markup Language 

8 # *[HTML]: 

9 # Hyper Text Markup Language 

10 r'\*\[([^\]]+)\]:' 

11 r'((?:[ \t]*\n(?: {3,}|\t)[^\n]+)|(?:[^\n]*))\n*' 

12) 

13 

14 

15def parse_def_abbr(block, m, state): 

16 def_abbrs = state.get('def_abbrs', {}) 

17 label = m.group(1) 

18 definition = m.group(2) 

19 def_abbrs[label] = definition.strip() 

20 state['def_abbrs'] = def_abbrs 

21 

22 

23def parse_inline_abbr(inline, m, state): 

24 def_abbrs = state['def_abbrs'] 

25 label = m.group(0) 

26 return 'abbr', label, def_abbrs[label] 

27 

28 

29def after_parse_def_abbr(md, tokens, state): 

30 def_abbrs = state.get('def_abbrs') 

31 if def_abbrs: 

32 labels = list(def_abbrs.keys()) 

33 abbr_pattern = r'|'.join(re.escape(k) for k in labels) 

34 md.inline.register_rule('abbr', abbr_pattern, parse_inline_abbr) 

35 md.inline.rules.append('abbr') 

36 return tokens 

37 

38 

39def render_html_abbr(key, definition): 

40 title_attribute = "" 

41 if definition: 

42 definition = escape_html(definition) 

43 title_attribute = ' title="{}"'.format(definition) 

44 

45 return "<abbr{title_attribute}>{key}</abbr>".format( 

46 key=key, 

47 title_attribute=title_attribute, 

48 ) 

49 

50 

51def render_ast_abbr(key, definition): 

52 return {'type': 'abbr', 'text': key, 'definition': definition} 

53 

54 

55def plugin_abbr(md): 

56 md.block.register_rule('def_abbr', DEF_ABBR, parse_def_abbr) 

57 md.before_render_hooks.append(after_parse_def_abbr) 

58 md.block.rules.append('def_abbr') 

59 

60 if md.renderer.NAME == 'html': 

61 md.renderer.register('abbr', render_html_abbr) 

62 elif md.renderer.NAME == 'ast': 

63 md.renderer.register('abbr', render_ast_abbr)