1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
|
from __future__ import annotations
from collections.abc import Callable
from pathlib import Path
class OptionsDict(dict):
"""A dictionary, with attribute access to core markdownit configuration options."""
@property
def maxNesting(self) -> int:
"""Internal protection, recursion limit."""
return self["maxNesting"]
@maxNesting.setter
def maxNesting(self, value: int):
self["maxNesting"] = value
@property
def html(self) -> bool:
"""Enable HTML tags in source."""
return self["html"]
@html.setter
def html(self, value: bool):
self["html"] = value
@property
def linkify(self) -> bool:
"""Enable autoconversion of URL-like texts to links."""
return self["linkify"]
@linkify.setter
def linkify(self, value: bool):
self["linkify"] = value
@property
def typographer(self) -> bool:
"""Enable smartquotes and replacements."""
return self["typographer"]
@typographer.setter
def typographer(self, value: bool):
self["typographer"] = value
@property
def quotes(self) -> str:
"""Quote characters."""
return self["quotes"]
@quotes.setter
def quotes(self, value: str):
self["quotes"] = value
@property
def xhtmlOut(self) -> bool:
"""Use '/' to close single tags (<br />)."""
return self["xhtmlOut"]
@xhtmlOut.setter
def xhtmlOut(self, value: bool):
self["xhtmlOut"] = value
@property
def breaks(self) -> bool:
"""Convert newlines in paragraphs into <br>."""
return self["breaks"]
@breaks.setter
def breaks(self, value: bool):
self["breaks"] = value
@property
def langPrefix(self) -> str:
"""CSS language prefix for fenced blocks."""
return self["langPrefix"]
@langPrefix.setter
def langPrefix(self, value: str):
self["langPrefix"] = value
@property
def highlight(self) -> Callable[[str, str, str], str] | None:
"""Highlighter function: (content, langName, langAttrs) -> escaped HTML."""
return self["highlight"]
@highlight.setter
def highlight(self, value: Callable[[str, str, str], str] | None):
self["highlight"] = value
def read_fixture_file(path: str | Path) -> list[list]:
text = Path(path).read_text(encoding="utf-8")
tests = []
section = 0
last_pos = 0
lines = text.splitlines(keepends=True)
for i in range(len(lines)):
if lines[i].rstrip() == ".":
if section == 0:
tests.append([i, lines[i - 1].strip()])
section = 1
elif section == 1:
tests[-1].append("".join(lines[last_pos + 1 : i]))
section = 2
elif section == 2:
tests[-1].append("".join(lines[last_pos + 1 : i]))
section = 0
last_pos = i
return tests
def _removesuffix(string: str, suffix: str) -> str:
"""Remove a suffix from a string.
Replace this with str.removesuffix() from stdlib when minimum Python
version is 3.9.
"""
if suffix and string.endswith(suffix):
return string[: -len(suffix)]
return string
|