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

1import re 

2 

3__all__ = ["plugin_def_list"] 

4 

5DEFINITION_LIST_PATTERN = re.compile(r"([^\n]+\n(:[ \t][^\n]+\n)+\n?)+") 

6 

7 

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} 

23 

24 

25def render_html_def_list(text): 

26 return "<dl>\n" + text + "</dl>\n" 

27 

28 

29def render_html_def_list_header(text): 

30 return "<dt>" + text + "</dt>\n" 

31 

32 

33def render_html_def_list_item(text): 

34 return "<dd>" + text + "</dd>\n" 

35 

36 

37def render_ast_def_list_header(text): 

38 return {"type": "def_list_header", "text": text[0]["text"]} 

39 

40 

41def render_ast_def_list_item(text): 

42 return {"type": "def_list_item", "text": text[0]["text"]} 

43 

44 

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)