Skip to content

feat: add syntax highlighting to code blocks - #85

Open
navahas wants to merge 1 commit into
jfernandez:mainfrom
navahas:main
Open

feat: add syntax highlighting to code blocks#85
navahas wants to merge 1 commit into
jfernandez:mainfrom
navahas:main

Conversation

@navahas

@navahas navahas commented Aug 22, 2026

Copy link
Copy Markdown

Closes #24.

Highlights fenced code blocks server-side with Syntect.

To do this cleanly, parsing moves from markdown-rs to Comrak. Comrak
exposes a code-block hook, so highlighting happens while the AST renders
instead of by scraping the generated HTML afterwards.

Highlighting emits CSS classes, not inline colors, and the class styles
are scoped per theme. That way one pre-rendered copy of the HTML serves
all themes and theme switching stays client-side. Mermaid and unknown
languages pass through untouched.

GFM, frontmatter, and raw HTML passthrough are preserved. syntect is
pure Rust (no C toolchain); the trade-off is a larger binary from its
bundled syntax/theme data.

image

Migrate parsing from markdown-rs to Comrak and highlight code blocks
with Syntect.

Comrak parses to an AST and exposes a codefence highlighter hook, so
highlighting happens during rendering.

- Replace markdown-rs with Comrak, preserving GFM, frontmatter, and raw
  HTML passthrough.
- Add a custom SyntectAdapter; mermaid and unknown languages pass
  through untouched, keeping the language-mermaid marker.
- Emit CSS classes (not inline colors), scoped per theme, so code
  restyles on theme switch with no re-render.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add code syntax highlighting

1 participant