From 13cb719b87bcef41c4dd398f5a651ddb2b561e0d Mon Sep 17 00:00:00 2001 From: Ben Bridle Date: Sun, 21 Apr 2024 13:57:03 +1200 Subject: Completely rewrite the library --- src/elements/block_element.rs | 53 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 src/elements/block_element.rs (limited to 'src/elements/block_element.rs') diff --git a/src/elements/block_element.rs b/src/elements/block_element.rs new file mode 100644 index 0000000..cdb7a71 --- /dev/null +++ b/src/elements/block_element.rs @@ -0,0 +1,53 @@ +use crate::*; + +pub enum BlockElement { + /// A first-level heading. + DocumentHeading(Line), + /// A second-level heading. + SectionHeading(Line), + /// A third-level heading. + ArticleHeading(Line), + Paragraph(Line), + /// A bullet-list. + List(Vec), + /// A paragraph separate from the main text. + Aside(Vec), + Table(Table), + EmbeddedFile(EmbeddedFile), + /// A non-markdown sub-document within this document. + Subdocument(Subdocument), + /// A KaTeX block + Math(String), + Break, +} + +pub struct EmbeddedFile { + pub label: String, + pub target: String, +} + +pub struct Subdocument { + pub language: String, + pub content: String, +} + +impl std::fmt::Debug for BlockElement { + fn fmt(&self, f: &mut std::fmt::Formatter) -> Result<(), std::fmt::Error> { + let string = match self { + BlockElement::DocumentHeading(line) => format!("DocumentHeading ('{line}')"), + BlockElement::SectionHeading(line) => format!("SectionHeading ('{line}')"), + BlockElement::ArticleHeading(line) => format!("ArticleHeading ('{line}')"), + BlockElement::Paragraph(line) => format!("Paragraph ('{line}')"), + BlockElement::List(lines) => format!("List (len: {})", lines.len()), + BlockElement::Aside(_) => format!("Aside"), + BlockElement::Table(_) => format!("Table"), + BlockElement::EmbeddedFile(EmbeddedFile {label, target}) => + format!("EmbeddedFile (label:'{label}', target:'{target}')"), + BlockElement::Subdocument(Subdocument {language, ..}) => + format!("Subdocument ('{language}')"), + BlockElement::Math(string) => format!("Math ('{string}')"), + BlockElement::Break => format!("Break"), + }; + f.write_str(&string) + } +} -- cgit v1.2.3-70-g09d2