From 5d760b4cdf83ee071870c59ce2350995b35cb25e Mon Sep 17 00:00:00 2001 From: Gregory Marco Date: Sat, 30 Aug 2025 23:07:22 -0500 Subject: [PATCH] Allow parsing toml metadata out of specially delimited comments. --- src/lib.rs | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 1fb9128..1360b2c 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -373,7 +373,7 @@ pub struct PageRenderer { fn parse_markdown (content: &str, metadata: &mut Table) -> String { let mut metadata_str = String::new(); let mut in_metadata = false; - let parser = pulldown_cmark::Parser::new_ext(content, pulldown_cmark::Options::ENABLE_YAML_STYLE_METADATA_BLOCKS).map(|event| { + let parser = pulldown_cmark::Parser::new_ext(content, pulldown_cmark::Options::ENABLE_YAML_STYLE_METADATA_BLOCKS).filter(|event| { match &event { Event::Start(tag) => { if let Tag::MetadataBlock(_) = tag { @@ -385,24 +385,33 @@ fn parse_markdown (content: &str, metadata: &mut Table) -> String { metadata_str.push_str(text); } } + Event::Html(html) => { + if html.starts_with("") { + in_metadata = false; + return false; + } else if in_metadata { + metadata_str.push_str(html); + } + } Event::End(tag) => { - if let TagEnd::MetadataBlock(_) = tag { - if in_metadata { - if let Ok(parsed_metadata) = toml::de::from_str::(&metadata_str) { - println!("{:?}", parsed_metadata); - for (key, value) in parsed_metadata { - metadata.insert(key, value); - } + if !metadata_str.is_empty() { + if let Ok(parsed_metadata) = toml::de::from_str::
(&metadata_str) { + println!("{:?}", parsed_metadata); + for (key, value) in parsed_metadata { + metadata.insert(key, value); } } metadata_str.clear(); in_metadata = false; - } + return false; + } } _ => {} } - event + !in_metadata }); let mut html_output = String::new(); pulldown_cmark::html::push_html(&mut html_output, parser);