add markdown parsing

This commit is contained in:
Daniel Fichtinger 2025-06-20 21:57:21 -04:00
parent 3c14be416a
commit 46f7bc451d
3 changed files with 43 additions and 0 deletions

View file

@ -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
View 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
View 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>"