Replace markdown-it-py with small function in common/ (#32664)
* Replace markdown-it-py with small function in common/ * simple test * unused * lock * linting fixespull/32668/head^2
parent
541b5cbf13
commit
5265d13fe0
5 changed files with 64 additions and 5 deletions
@ -0,0 +1,45 @@ |
||||
HTML_REPLACEMENTS = [ |
||||
(r'&', r'&'), |
||||
(r'"', r'"'), |
||||
] |
||||
|
||||
def parse_markdown(text: str, tab_length: int = 2) -> str: |
||||
lines = text.split("\n") |
||||
output: list[str] = [] |
||||
list_level = 0 |
||||
|
||||
def end_outstanding_lists(level: int, end_level: int) -> int: |
||||
while level > end_level: |
||||
level -= 1 |
||||
output.append("</ul>") |
||||
if level > 0: |
||||
output.append("</li>") |
||||
return end_level |
||||
|
||||
for i, line in enumerate(lines): |
||||
if i + 1 < len(lines) and lines[i + 1].startswith("==="): # heading |
||||
output.append(f"<h1>{line}</h1>") |
||||
elif line.startswith("==="): |
||||
pass |
||||
elif line.lstrip().startswith("* "): # list |
||||
line_level = 1 + line.count(" " * tab_length, 0, line.index("*")) |
||||
if list_level >= line_level: |
||||
list_level = end_outstanding_lists(list_level, line_level) |
||||
else: |
||||
list_level += 1 |
||||
if list_level > 1: |
||||
output[-1] = output[-1].replace("</li>", "") |
||||
output.append("<ul>") |
||||
output.append(f"<li>{line.replace('*', '', 1).lstrip()}</li>") |
||||
else: |
||||
list_level = end_outstanding_lists(list_level, 0) |
||||
if len(line) > 0: |
||||
output.append(line) |
||||
|
||||
end_outstanding_lists(list_level, 0) |
||||
output_str = "\n".join(output) + "\n" |
||||
|
||||
for (fr, to) in HTML_REPLACEMENTS: |
||||
output_str = output_str.replace(fr, to) |
||||
|
||||
return output_str |
@ -0,0 +1,15 @@ |
||||
import os |
||||
|
||||
from openpilot.common.basedir import BASEDIR |
||||
from openpilot.common.markdown import parse_markdown |
||||
|
||||
|
||||
class TestMarkdown: |
||||
def test_all_release_notes(self): |
||||
with open(os.path.join(BASEDIR, "RELEASES.md")) as f: |
||||
release_notes = f.read().split("\n\n") |
||||
assert len(release_notes) > 10 |
||||
|
||||
for rn in release_notes: |
||||
md = parse_markdown(rn) |
||||
assert len(md) > 0 |
Loading…
Reference in new issue