added syntax highlighting
This commit is contained in:
parent
68839c5f96
commit
19a10a35bc
3 changed files with 54 additions and 2 deletions
|
@ -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,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue