summaryrefslogtreecommitdiff
path: root/src/elements/block_element.rs
diff options
context:
space:
mode:
authorBen Bridle <bridle.benjamin@gmail.com>2024-04-21 13:57:03 +1200
committerBen Bridle <bridle.benjamin@gmail.com>2024-04-21 13:57:36 +1200
commit13cb719b87bcef41c4dd398f5a651ddb2b561e0d (patch)
treee9e52ed33d5ed5a4d68a1161c3db5c2d8c38dd42 /src/elements/block_element.rs
parent54f5e9fd883e207931baa9c87b6181ca724d6bab (diff)
downloadmarkdown-8e6a62e9da1ce71481c4059470e7c59ba7df9b55.zip
Completely rewrite the libraryv1.0.0
Diffstat (limited to 'src/elements/block_element.rs')
-rw-r--r--src/elements/block_element.rs53
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)
+ }
+}