add markdown parsing
This commit is contained in:
parent
3c14be416a
commit
46f7bc451d
3 changed files with 43 additions and 0 deletions
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)
|
Loading…
Add table
Add a link
Reference in a new issue