diff --git a/crates/nuwiki-core/src/render/html.rs b/crates/nuwiki-core/src/render/html.rs index 8dafd35..e449a8a 100644 --- a/crates/nuwiki-core/src/render/html.rs +++ b/crates/nuwiki-core/src/render/html.rs @@ -492,13 +492,16 @@ impl HtmlRenderer { } fn render_keyword(&self, n: &KeywordNode, w: &mut dyn Write) -> io::Result<()> { + // One class per keyword so stylesheets can colour them independently + // (e.g. red TODO/FIXME/XXX vs green DONE/FIXED/STARTED). TODO keeps the + // vimwiki `todo` class so stock vimwiki CSS still styles it. let (label, class) = match n.keyword { - Keyword::Todo => ("TODO", "keyword keyword-todo"), - Keyword::Done => ("DONE", "keyword keyword-done"), - Keyword::Started => ("STARTED", "keyword keyword-started"), - Keyword::Fixme => ("FIXME", "keyword keyword-fixme"), - Keyword::Fixed => ("FIXED", "keyword keyword-fixed"), - Keyword::Xxx => ("XXX", "keyword keyword-xxx"), + Keyword::Todo => ("TODO", "todo"), + Keyword::Done => ("DONE", "done"), + Keyword::Started => ("STARTED", "started"), + Keyword::Fixme => ("FIXME", "fixme"), + Keyword::Fixed => ("FIXED", "fixed"), + Keyword::Xxx => ("XXX", "xxx"), }; write!(w, "{label}") } diff --git a/crates/nuwiki-core/tests/html_renderer.rs b/crates/nuwiki-core/tests/html_renderer.rs index 9f9110e..bf10fb7 100644 --- a/crates/nuwiki-core/tests/html_renderer.rs +++ b/crates/nuwiki-core/tests/html_renderer.rs @@ -196,8 +196,20 @@ fn inline_code_is_escaped() { #[test] fn keyword_spans() { - let out = render("TODO write tests\n"); - assert!(out.contains("TODO")); + // One class per keyword so a stylesheet can colour groups differently. + // TODO keeps the vimwiki `todo` class. + let cases = [ + ("TODO x\n", "TODO"), + ("DONE x\n", "DONE"), + ("STARTED x\n", "STARTED"), + ("FIXME x\n", "FIXME"), + ("FIXED x\n", "FIXED"), + ("XXX x\n", "XXX"), + ]; + for (src, expected) in cases { + let out = render(src); + assert!(out.contains(expected), "src {src:?} -> {out}"); + } } #[test]