diff options
author | Ben Bridle <bridle.benjamin@gmail.com> | 2024-04-21 13:57:03 +1200 |
---|---|---|
committer | Ben Bridle <bridle.benjamin@gmail.com> | 2024-04-21 13:57:36 +1200 |
commit | 13cb719b87bcef41c4dd398f5a651ddb2b561e0d (patch) | |
tree | e9e52ed33d5ed5a4d68a1161c3db5c2d8c38dd42 /src/elements/block_element.rs | |
parent | 54f5e9fd883e207931baa9c87b6181ca724d6bab (diff) | |
download | markdown-8e6a62e9da1ce71481c4059470e7c59ba7df9b55.zip |
Completely rewrite the libraryv1.0.0
Diffstat (limited to 'src/elements/block_element.rs')
-rw-r--r-- | src/elements/block_element.rs | 53 |
1 files changed, 53 insertions, 0 deletions
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<Line>), + /// A paragraph separate from the main text. + Aside(Vec<Line>), + 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) + } +} |