add markdown parsing
This commit is contained in:
parent
3c14be416a
commit
46f7bc451d
3 changed files with 43 additions and 0 deletions
|
@ -39,6 +39,7 @@ executionEnvironments = [
|
|||
# off | basic | standard | strict | recommended | all
|
||||
typeCheckingMode = "recommended"
|
||||
reportExplicitAny = false
|
||||
reportAny = false
|
||||
reportUnusedCallResult = false
|
||||
allowedUntypedLibraries = ["frontmatter"]
|
||||
|
||||
|
|
35
src/zona/markdown.py
Normal file
35
src/zona/markdown.py
Normal file
|
@ -0,0 +1,35 @@
|
|||
from typing import Any, override
|
||||
import marko
|
||||
from marko import Markdown
|
||||
from marko.block import Document
|
||||
from marko.inline import Link, Image
|
||||
from marko.html_renderer import HTMLRenderer
|
||||
|
||||
|
||||
class ZonaRenderer(HTMLRenderer):
|
||||
# TODO: resolve relative links and replace with url?
|
||||
@override
|
||||
def render_link(self, element: Link):
|
||||
href = element.dest
|
||||
if href.endswith(".md") and not href.startswith("http"):
|
||||
href = href[:-3] + ".html"
|
||||
body: Any = self.render_children(element)
|
||||
return f'<a href="{href}" target="_blank"{body}</a>'
|
||||
|
||||
@override
|
||||
def render_image(self, element: Image):
|
||||
# get alt text from children
|
||||
text = self.render_children(element)
|
||||
title = element.title or ""
|
||||
caption = f"<small>{text}</small>" if text else ""
|
||||
return (
|
||||
f'<div class="image-container">\n'
|
||||
# TODO: convert to plaintext and add as alt attribute
|
||||
f'<img src="{element.dest}" title="{title}">\n'
|
||||
f"{caption}</div>"
|
||||
)
|
||||
|
||||
|
||||
def md_to_html(content: str) -> str:
|
||||
md = Markdown(renderer=ZonaRenderer)
|
||||
return md.convert(content)
|
7
tests/test_markdown.py
Normal file
7
tests/test_markdown.py
Normal file
|
@ -0,0 +1,7 @@
|
|||
from zona.markdown import md_to_html
|
||||
|
||||
|
||||
def test_render():
|
||||
content = "# Hello World!"
|
||||
out = md_to_html(content)
|
||||
assert out.strip() == "<h1>Hello World!</h1>"
|
Loading…
Add table
Add a link
Reference in a new issue