summaryrefslogtreecommitdiff
path: root/src/page.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/page.rs')
-rw-r--r--src/page.rs23
1 files changed, 20 insertions, 3 deletions
diff --git a/src/page.rs b/src/page.rs
index 2b4bd9f..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;
@@ -24,7 +25,7 @@ impl WikitextPage {
info!("input file: {}", name);
let src = name.source_path();
- let data = std::fs::read(&src).map_err(|e| SiteError::FileRead(src.into(), e))?;
+ let data = std::fs::read(src).map_err(|e| SiteError::FileRead(src.into(), e))?;
let wikitext = String::from_utf8(data).map_err(|e| SiteError::Utf8(src.into(), e))?;
let mtime = get_mtime(src)?;
@@ -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))
}