added syntax highlighting
This commit is contained in:
parent
68839c5f96
commit
19a10a35bc
3 changed files with 54 additions and 2 deletions
|
@ -27,7 +27,7 @@ requires = ["hatchling"]
|
|||
build-backend = "hatchling.build"
|
||||
|
||||
[tool.basedpyright]
|
||||
include = ["src"]
|
||||
include = ["src", "."]
|
||||
exclude = [
|
||||
"**/node_modules",
|
||||
"**/__pycache__",
|
||||
|
@ -47,7 +47,9 @@ reportExplicitAny = false
|
|||
reportAny = false
|
||||
reportUnusedCallResult = false
|
||||
reportCallInDefaultInitializer = false
|
||||
allowedUntypedLibraries = ["frontmatter"]
|
||||
enableTypeIgnoreComments = true
|
||||
reportIgnoreCommentWithoutRule = false
|
||||
allowedUntypedLibraries = ["frontmatter", "pygments"]
|
||||
|
||||
[tool.ruff]
|
||||
line-length = 80
|
||||
|
@ -80,4 +82,5 @@ dev = [
|
|||
"basedpyright>=1.29.4",
|
||||
"pytest>=8.4.0",
|
||||
"ruff>=0.11.13",
|
||||
"types-pygments>=2.19.0.20250516",
|
||||
]
|
||||
|
|
|
@ -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,
|
||||
|
|
23
uv.lock
generated
23
uv.lock
generated
|
@ -346,6 +346,27 @@ wheels = [
|
|||
{ url = "https://files.pythonhosted.org/packages/76/42/3efaf858001d2c2913de7f354563e3a3a2f0decae3efe98427125a8f441e/typer-0.16.0-py3-none-any.whl", hash = "sha256:1f79bed11d4d02d4310e3c1b7ba594183bcedb0ac73b27a9e5f28f6fb5b98855", size = 46317, upload-time = "2025-05-26T14:30:30.523Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "types-docutils"
|
||||
version = "0.21.0.20250604"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/ef/d0/d28035370d669f14d4e23bd63d093207331f361afa24d2686d2c3fe6be8d/types_docutils-0.21.0.20250604.tar.gz", hash = "sha256:5a9cc7f5a4c5ef694aa0abc61111e0b1376a53dee90d65757f77f31acfcca8f2", size = 40953, upload-time = "2025-06-04T03:10:27.439Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/89/91/887e9591c1ee50dfbf7c2fa2f3f51bc6db683013b6d2b0cd3983adf3d502/types_docutils-0.21.0.20250604-py3-none-any.whl", hash = "sha256:bfa8628176c06a80cdd1d6f3fb32e972e042db53538596488dfe0e9c5962b222", size = 65915, upload-time = "2025-06-04T03:10:26.067Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "types-pygments"
|
||||
version = "2.19.0.20250516"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "types-docutils" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/71/9a/c1ea3f59001e9d13b93ec8acf02c75b47832423f17471295b8ceebc48a65/types_pygments-2.19.0.20250516.tar.gz", hash = "sha256:b53fd07e197f0e7be38ee19598bd99c78be5ca5f9940849c843be74a2f81ab58", size = 18485, upload-time = "2025-05-16T03:09:30.05Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/a7/0b/32ce3ad35983bf4f603c43cfb00559b37bb5ed90ac4ef9f1d5564b8e4034/types_pygments-2.19.0.20250516-py3-none-any.whl", hash = "sha256:db27de8b59591389cd7d14792483892c021c73b8389ef55fef40a48aa371fbcc", size = 25440, upload-time = "2025-05-16T03:09:29.185Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "typing-extensions"
|
||||
version = "4.14.0"
|
||||
|
@ -389,6 +410,7 @@ dev = [
|
|||
{ name = "basedpyright" },
|
||||
{ name = "pytest" },
|
||||
{ name = "ruff" },
|
||||
{ name = "types-pygments" },
|
||||
]
|
||||
|
||||
[package.metadata]
|
||||
|
@ -409,4 +431,5 @@ dev = [
|
|||
{ name = "basedpyright", specifier = ">=1.29.4" },
|
||||
{ name = "pytest", specifier = ">=8.4.0" },
|
||||
{ name = "ruff", specifier = ">=0.11.13" },
|
||||
{ name = "types-pygments", specifier = ">=2.19.0.20250516" },
|
||||
]
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue