From 5ea472e014ed15f5108250d0230eb6ce5b68d71a Mon Sep 17 00:00:00 2001 From: Daniel Fichtinger Date: Thu, 3 Jul 2025 01:55:53 -0400 Subject: [PATCH] write cached pygments stylesheet to static --- src/zona/builder.py | 6 +++++- src/zona/data/templates/base.html | 6 ++++++ src/zona/markdown.py | 21 ++++++++++++++++----- 3 files changed, 27 insertions(+), 6 deletions(-) diff --git a/src/zona/builder.py b/src/zona/builder.py index ded2363..2c3222f 100644 --- a/src/zona/builder.py +++ b/src/zona/builder.py @@ -96,7 +96,11 @@ class ZonaBuilder: self.item_map = { item.source.resolve(): item for item in self.items } - # print(item_map) + # write code highlighting stylesheet + pygments_style = zmd.get_style_defs(self.config) + (self.layout.content / "static" / "pygments.css").write_text( + pygments_style + ) for item in self.item_map.values(): dst = item.destination # print(item) diff --git a/src/zona/data/templates/base.html b/src/zona/data/templates/base.html index 87a8392..86769f5 100644 --- a/src/zona/data/templates/base.html +++ b/src/zona/data/templates/base.html @@ -10,6 +10,12 @@ type="text/css" media="all" /> +
diff --git a/src/zona/markdown.py b/src/zona/markdown.py index 774a90c..a9e87ba 100644 --- a/src/zona/markdown.py +++ b/src/zona/markdown.py @@ -97,11 +97,7 @@ class ZonaRenderer(HTMLRenderer): except Exception: lexer = TextLexer(stripall=False) # type: ignore - formatter = HtmlFormatter( - style=config.theme, - nowrap=not config.wrap, - noclasses=True, - ) + formatter = get_formatter(self.config) highlighted = highlight(code, lexer, formatter) # type: ignore return ( @@ -110,6 +106,14 @@ class ZonaRenderer(HTMLRenderer): ) +def get_formatter(config: ZonaConfig): + c = config.markdown.syntax_highlighting + formatter = HtmlFormatter( + style=c.theme, nowrap=not c.wrap, nobackground=True + ) + return formatter + + def md_to_html( content: str, config: ZonaConfig | None, @@ -134,3 +138,10 @@ def md_to_html( item_map=item_map, ) return renderer.render(ast) + + +def get_style_defs(config: ZonaConfig) -> str: + formatter = get_formatter(config) + defs = formatter.get_style_defs("pre.code-block code") + assert isinstance(defs, str) + return defs