summaryrefslogtreecommitdiff
path: root/src/site.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/site.rs')
-rw-r--r--src/site.rs22
1 files changed, 16 insertions, 6 deletions
diff --git a/src/site.rs b/src/site.rs
index 64b9602..ebbd339 100644
--- a/src/site.rs
+++ b/src/site.rs
@@ -44,7 +44,7 @@ pub struct Site {
patterns: TokenPatterns,
shortcuts: HashMap<String, Shortcut>,
name_builder: NameBuilder,
- pages: Vec<Page>,
+ unprocessed_pages: HashMap<PathBuf, Page>,
markdown_pages: HashMap<PathBuf, MarkdownPage>,
pages_that_will_exist: PageSet,
files: Names,
@@ -60,7 +60,7 @@ impl Site {
{
Self {
name_builder: NameBuilder::new(srcdir.as_ref(), destdir.as_ref()),
- pages: vec![],
+ unprocessed_pages: HashMap::new(),
markdown_pages: HashMap::new(),
files: Names::default(),
patterns: TokenPatterns::default(),
@@ -99,7 +99,8 @@ impl Site {
page.prepare(self)?;
let page = Page::new(page.meta().clone(), page);
- self.pages.push(page);
+ self.unprocessed_pages
+ .insert(page.meta().path().into(), page);
Ok(())
}
@@ -121,7 +122,7 @@ impl Site {
}
fn process_page(&mut self) -> Result<bool, SiteError> {
- if let Some(page) = self.pages.pop() {
+ if let Some(page) = self.pick_unprocessed_page() {
debug!(
"processing unprocessed page {}",
page.meta().path().display()
@@ -135,8 +136,17 @@ impl Site {
}
}
- pub fn markdown_pages(&self) -> impl Iterator<Item=&MarkdownPage> {
- self.markdown_pages.iter().map(|(_, md)| md)
+ fn pick_unprocessed_page(&mut self) -> Option<Page> {
+ let mut keys: Vec<PathBuf> = self.unprocessed_pages.keys().map(|k| k.into()).collect();
+ if let Some(path) = keys.pop() {
+ self.unprocessed_pages.remove(&path)
+ } else {
+ None
+ }
+ }
+
+ pub fn markdown_pages(&self) -> impl Iterator<Item = &MarkdownPage> {
+ self.markdown_pages.values()
}
pub fn files_only(&self) -> impl Iterator<Item = &Name> {