summaryrefslogtreecommitdiff
path: root/src/page.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/page.rs')
-rw-r--r--src/page.rs46
1 files changed, 35 insertions, 11 deletions
diff --git a/src/page.rs b/src/page.rs
index 94b74bd..db0dc96 100644
--- a/src/page.rs
+++ b/src/page.rs
@@ -1,11 +1,11 @@
use crate::directive::{Processed, Toc};
-use crate::error::RikiError;
+use crate::html::HtmlError;
use crate::html::{parse, Content, Element, ElementTag, HtmlPage};
use crate::name::Name;
use crate::parser::WikitextParser;
use crate::site::Site;
use crate::util::get_mtime;
-use crate::wikitext::Snippet;
+use crate::wikitext::{Snippet, WikitextError};
use log::{info, trace};
use std::path::{Path, PathBuf};
use std::time::SystemTime;
@@ -17,6 +17,30 @@ pub enum PageError {
#[error("could not convert input text from {0} to UTF-8")]
Utf8(PathBuf, #[source] std::string::FromUtf8Error),
+
+ #[error(transparent)]
+ Util(#[from] crate::util::UtilError),
+
+ #[error(transparent)]
+ Wikitext(#[from] Box<crate::wikitext::WikitextError>),
+
+ #[error(transparent)]
+ Html(#[from] Box<HtmlError>),
+
+ #[error(transparent)]
+ Riki(#[from] Box<crate::error::RikiError>),
+}
+
+impl From<WikitextError> for PageError {
+ fn from(e: WikitextError) -> Self {
+ Self::Wikitext(Box::new(e))
+ }
+}
+
+impl From<HtmlError> for PageError {
+ fn from(e: HtmlError) -> Self {
+ Self::Html(Box::new(e))
+ }
}
pub struct Page {
@@ -33,7 +57,7 @@ impl Page {
&self.meta
}
- pub fn markdown(&self, site: &mut Site) -> Result<MarkdownPage, RikiError> {
+ pub fn markdown(&self, site: &mut Site) -> Result<MarkdownPage, PageError> {
self.unprocessed.process(site)
}
}
@@ -49,7 +73,7 @@ impl WikitextPage {
Self { meta, wikitext }
}
- pub fn read(name: &Name) -> Result<Self, RikiError> {
+ pub fn read(name: &Name) -> Result<Self, PageError> {
info!("input file: {}", name);
let src = name.source_path();
@@ -84,7 +108,7 @@ pub struct UnprocessedPage {
}
impl UnprocessedPage {
- pub fn new(meta: PageMeta, parser: &mut WikitextParser) -> Result<Self, RikiError> {
+ pub fn new(meta: PageMeta, parser: &mut WikitextParser) -> Result<Self, PageError> {
Ok(Self {
meta,
snippets: Self::snippets(parser)?,
@@ -95,15 +119,15 @@ impl UnprocessedPage {
&self.meta
}
- fn snippets(parser: &mut WikitextParser) -> Result<Vec<Snippet>, RikiError> {
+ fn snippets(parser: &mut WikitextParser) -> Result<Vec<Snippet>, PageError> {
let mut snippets = vec![];
- while let Some(snippet) = parser.parse()? {
+ while let Some(snippet) = parser.parse().map_err(|e| PageError::Riki(Box::new(e)))? {
snippets.push(snippet);
}
Ok(snippets)
}
- pub fn prepare(&self, site: &mut Site) -> Result<(), RikiError> {
+ pub fn prepare(&self, site: &mut Site) -> Result<(), PageError> {
trace!("UnprocessedPage: preparing snippets");
for snippet in self.snippets.iter() {
snippet.prepare(site)?;
@@ -111,7 +135,7 @@ impl UnprocessedPage {
Ok(())
}
- pub fn process(&self, site: &mut Site) -> Result<MarkdownPage, RikiError> {
+ pub fn process(&self, site: &mut Site) -> Result<MarkdownPage, PageError> {
let mut meta = self.meta.clone();
let mut processed = vec![];
trace!("UnprocessedPage: processing snippets");
@@ -157,13 +181,13 @@ impl MarkdownPage {
&self.meta
}
- pub fn body_to_html(&self) -> Result<HtmlPage, RikiError> {
+ pub fn body_to_html(&self) -> Result<HtmlPage, PageError> {
let head = Element::new(ElementTag::Head);
let body = parse(self.markdown())?;
Ok(HtmlPage::new(head, body))
}
- pub fn to_html(&self) -> Result<HtmlPage, RikiError> {
+ pub fn to_html(&self) -> Result<HtmlPage, PageError> {
let mut title = Element::new(ElementTag::Title);
title.push_child(Content::Text(self.meta.title().into()));