mod printer;
pub use self::printer::{print, Printer};
use document::{Document, DocumentClass, Element, Preamble};
use equations::{Align, Equation};
use failure::Error;
use lists::{Item, List};
use paragraph::{Paragraph, ParagraphElement};
use section::Section;
use std::ops::Deref;
#[allow(unused_variables)]
pub trait Visitor {
fn visit_document(&mut self, doc: &Document) -> Result<(), Error> {
if doc.class != DocumentClass::Part {
self.visit_preamble(&doc.preamble)?;
}
for element in doc.iter() {
self.visit_element(element)?;
}
Ok(())
}
fn visit_element(&mut self, elem: &Element) -> Result<(), Error> {
match *elem {
Element::Para(ref p) => self.visit_paragraph(p)?,
Element::Section(ref s) => self.visit_section(s)?,
Element::UserDefined(ref s) => self.visit_user_defined_line(s)?,
Element::Align(ref equations) => self.visit_align(equations)?,
Element::Environment(ref name, ref lines) => {
self.visit_custom_environment(name, lines.iter().map(Deref::deref))?
}
Element::List(ref list) => self.visit_list(list)?,
Element::Input(ref s) => self.visit_input(s)?,
_ => {}
}
Ok(())
}
fn visit_preamble(&mut self, preamble: &Preamble) -> Result<(), Error> {
Ok(())
}
fn visit_paragraph_element(&mut self, element: &ParagraphElement) -> Result<(), Error> {
Ok(())
}
fn visit_user_defined_line(&mut self, line: &str) -> Result<(), Error> {
Ok(())
}
fn visit_input(&mut self, input: &str) -> Result<(), Error> {
Ok(())
}
fn visit_paragraph(&mut self, paragraph: &Paragraph) -> Result<(), Error> {
for elem in ¶graph.elements {
self.visit_paragraph_element(elem)?;
}
Ok(())
}
fn visit_section(&mut self, section: &Section) -> Result<(), Error> {
for elem in section.iter() {
self.visit_element(elem)?;
}
Ok(())
}
fn visit_align(&mut self, align: &Align) -> Result<(), Error> {
for equation in align.iter() {
self.visit_equation(equation)?;
}
Ok(())
}
fn visit_equation(&mut self, equation: &Equation) -> Result<(), Error> {
Ok(())
}
fn visit_list(&mut self, list: &List) -> Result<(), Error> {
for item in list.iter() {
self.visit_list_item(item)?;
}
Ok(())
}
fn visit_list_item(&mut self, item: &Item) -> Result<(), Error> {
Ok(())
}
fn visit_custom_environment<'a, I>(&mut self, name: &str, lines: I) -> Result<(), Error>
where
I: Iterator<Item = &'a str>,
{
Ok(())
}
}