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
« prev ^ index » next coverage.py v7.2.7, created at 2023-06-03 06:10 +0000
1import re
2from ..util import escape_html
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)
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
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]
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
39def render_html_abbr(key, definition):
40 title_attribute = ""
41 if definition:
42 definition = escape_html(definition)
43 title_attribute = ' title="{}"'.format(definition)
45 return "<abbr{title_attribute}>{key}</abbr>".format(
46 key=key,
47 title_attribute=title_attribute,
48 )
51def render_ast_abbr(key, definition):
52 return {'type': 'abbr', 'text': key, 'definition': definition}
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')
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)