Allow parsing toml metadata out of specially delimited comments.
This commit is contained in:
19
src/lib.rs
19
src/lib.rs
@@ -373,7 +373,7 @@ pub struct PageRenderer {
|
|||||||
fn parse_markdown (content: &str, metadata: &mut Table) -> String {
|
fn parse_markdown (content: &str, metadata: &mut Table) -> String {
|
||||||
let mut metadata_str = String::new();
|
let mut metadata_str = String::new();
|
||||||
let mut in_metadata = false;
|
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 {
|
match &event {
|
||||||
Event::Start(tag) => {
|
Event::Start(tag) => {
|
||||||
if let Tag::MetadataBlock(_) = tag {
|
if let Tag::MetadataBlock(_) = tag {
|
||||||
@@ -385,24 +385,33 @@ fn parse_markdown (content: &str, metadata: &mut Table) -> String {
|
|||||||
metadata_str.push_str(text);
|
metadata_str.push_str(text);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Event::Html(html) => {
|
||||||
|
if html.starts_with("<!---") {
|
||||||
|
in_metadata = true;
|
||||||
|
} else if html.starts_with("--->") {
|
||||||
|
in_metadata = false;
|
||||||
|
return false;
|
||||||
|
} else if in_metadata {
|
||||||
|
metadata_str.push_str(html);
|
||||||
|
}
|
||||||
|
}
|
||||||
Event::End(tag) => {
|
Event::End(tag) => {
|
||||||
if let TagEnd::MetadataBlock(_) = tag {
|
if !metadata_str.is_empty() {
|
||||||
if in_metadata {
|
|
||||||
if let Ok(parsed_metadata) = toml::de::from_str::<Table>(&metadata_str) {
|
if let Ok(parsed_metadata) = toml::de::from_str::<Table>(&metadata_str) {
|
||||||
println!("{:?}", parsed_metadata);
|
println!("{:?}", parsed_metadata);
|
||||||
for (key, value) in parsed_metadata {
|
for (key, value) in parsed_metadata {
|
||||||
metadata.insert(key, value);
|
metadata.insert(key, value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
metadata_str.clear();
|
metadata_str.clear();
|
||||||
in_metadata = false;
|
in_metadata = false;
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_ => {}
|
_ => {}
|
||||||
}
|
}
|
||||||
event
|
!in_metadata
|
||||||
});
|
});
|
||||||
let mut html_output = String::new();
|
let mut html_output = String::new();
|
||||||
pulldown_cmark::html::push_html(&mut html_output, parser);
|
pulldown_cmark::html::push_html(&mut html_output, parser);
|
||||||
|
|||||||
Reference in New Issue
Block a user