summaryrefslogtreecommitdiff
path: root/src/page.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/page.rs')
-rw-r--r--src/page.rs21
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))
}