Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.8/site-packages/mistune/plugins/def_list.py: 88%
33 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
3__all__ = ["plugin_def_list"]
5DEFINITION_LIST_PATTERN = re.compile(r"([^\n]+\n(:[ \t][^\n]+\n)+\n?)+")
8def parse_def_list(block, m, state):
9 lines = m.group(0).split("\n")
10 definition_list_items = []
11 for line in lines:
12 if not line:
13 continue
14 if line.strip()[0] == ":":
15 definition_list_items.append(
16 {"type": "def_list_item", "text": line[1:].strip()}
17 )
18 else:
19 definition_list_items.append(
20 {"type": "def_list_header", "text": line.strip()}
21 )
22 return {"type": "def_list", "children": definition_list_items}
25def render_html_def_list(text):
26 return "<dl>\n" + text + "</dl>\n"
29def render_html_def_list_header(text):
30 return "<dt>" + text + "</dt>\n"
33def render_html_def_list_item(text):
34 return "<dd>" + text + "</dd>\n"
37def render_ast_def_list_header(text):
38 return {"type": "def_list_header", "text": text[0]["text"]}
41def render_ast_def_list_item(text):
42 return {"type": "def_list_item", "text": text[0]["text"]}
45def plugin_def_list(md):
46 md.block.register_rule("def_list", DEFINITION_LIST_PATTERN, parse_def_list)
47 md.block.rules.append("def_list")
48 if md.renderer.NAME == "html":
49 md.renderer.register("def_list", render_html_def_list)
50 md.renderer.register("def_list_header", render_html_def_list_header)
51 md.renderer.register("def_list_item", render_html_def_list_item)
52 if md.renderer.NAME == "ast":
53 md.renderer.register("def_list_header", render_ast_def_list_header)
54 md.renderer.register("def_list_item", render_ast_def_list_item)