diff options
Diffstat (limited to 'src/page.rs')
-rw-r--r-- | src/page.rs | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/src/page.rs b/src/page.rs index fb2159d..832e71e 100644 --- a/src/page.rs +++ b/src/page.rs @@ -1,3 +1,4 @@ +use crate::directive::{Processed, Toc}; use crate::error::SiteError; use crate::html::{parse, Content, Element, ElementTag, HtmlPage}; use crate::name::Name; @@ -84,10 +85,26 @@ impl UnprocessedPage { pub fn process(&self, site: &mut Site) -> Result<MarkdownPage, SiteError> { let mut meta = self.meta.clone(); - let mut m = String::new(); + let mut processed = vec![]; trace!("UnprocessedPage: processing snippets"); for snippet in self.snippets.iter() { - m.push_str(&snippet.process(site, &mut meta)?); + processed.push(snippet.process(site, &mut meta)?); + } + let page_text = processed + .iter() + .filter_map(|p| match p { + Processed::Markdown(s) => Some(s.as_str()), + _ => None, + }) + .collect::<Vec<&str>>() + .join(""); + let body = parse(&page_text)?; + let mut m = String::new(); + for p in processed { + match p { + Processed::Markdown(s) => m.push_str(&s), + Processed::Toc(levels) => m.push_str(&Toc::post_process(&body, levels)), + } } Ok(MarkdownPage::new(m, meta)) } |