feat: implement core markdown rendering pipeline

Add minimal e2e pipeline to transform content → HTML:

- src/error.rs: Custom error types with thiserror
- src/content.rs: YAML frontmatter parsing via gray_matter
- src/render.rs: Markdown → HTML via pulldown-cmark
- src/templates.rs: Maud templates for base layout and posts
- src/main.rs: Pipeline orchestrator

All 15 blog posts successfully rendered to public/blog/*/index.html.
Added thiserror and walkdir dependencies.
Added public/ and DepMap fragment to .gitignore and AGENTS.md.
This commit is contained in:
Timothy DeHerrera
2026-01-24 19:01:30 -07:00
parent 8df37127a1
commit e07a9e87e6
9 changed files with 387 additions and 1 deletions

32
src/render.rs Normal file
View File

@@ -0,0 +1,32 @@
//! Markdown to HTML rendering via pulldown-cmark.
use pulldown_cmark::{html, Options, Parser};
/// Render markdown content to HTML.
///
/// Currently performs basic rendering. Future phases will intercept
/// code blocks for Tree-sitter highlighting.
pub fn markdown_to_html(markdown: &str) -> String {
let options = Options::ENABLE_TABLES
| Options::ENABLE_FOOTNOTES
| Options::ENABLE_STRIKETHROUGH
| Options::ENABLE_TASKLISTS;
let parser = Parser::new_ext(markdown, options);
let mut html_output = String::new();
html::push_html(&mut html_output, parser);
html_output
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_basic_markdown() {
let md = "# Hello\n\nThis is a *test*.";
let html = markdown_to_html(md);
assert!(html.contains("<h1>Hello</h1>"));
assert!(html.contains("<em>test</em>"));
}
}