added syntax highlighting

This commit is contained in:
Daniel Fichtinger 2025-06-24 00:37:17 -04:00
parent 68839c5f96
commit 19a10a35bc
3 changed files with 54 additions and 2 deletions

View file

@ -2,13 +2,20 @@ from rich import print
from typing import Any, override
from pathlib import Path
from marko.inline import Link, Image
from marko.block import FencedCode
from marko.html_renderer import HTMLRenderer
from marko.parser import Parser
from zona.layout import Layout
from pygments import highlight
from pygments.lexers import get_lexer_by_name, TextLexer
from pygments.formatters import HtmlFormatter
from zona import util
from zona.models import Item
# TODO: create Ashen pygments style (separate package probably)
class ZonaRenderer(HTMLRenderer):
def __init__(
@ -73,6 +80,25 @@ class ZonaRenderer(HTMLRenderer):
f"{caption}</div>"
)
@override
def render_fenced_code(self, element: FencedCode):
# code = element.children
code = "".join(child.children for child in element.children) # type: ignore
lang = element.lang or "text"
try:
lexer = get_lexer_by_name(lang, stripall=False)
except Exception:
lexer = TextLexer(stripall=False) # type: ignore
formatter = HtmlFormatter(style="monokai", nowrap=True, noclasses=True)
highlighted = highlight(code, lexer, formatter) # type: ignore
return (
f'<pre class="code-block language-{lang}">'
f"<code>{highlighted}</code></pre>"
)
def md_to_html(
content: str,