summaryrefslogtreecommitdiff
path: root/src/elements/line_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/line_element.rs
parent54f5e9fd883e207931baa9c87b6181ca724d6bab (diff)
downloadmarkdown-13cb719b87bcef41c4dd398f5a651ddb2b561e0d.zip
Completely rewrite the libraryv1.0.0
Diffstat (limited to 'src/elements/line_element.rs')
-rw-r--r--src/elements/line_element.rs61
1 files changed, 61 insertions, 0 deletions
diff --git a/src/elements/line_element.rs b/src/elements/line_element.rs
new file mode 100644
index 0000000..cc47b4b
--- /dev/null
+++ b/src/elements/line_element.rs
@@ -0,0 +1,61 @@
+pub enum LineElement {
+ Normal(String),
+ Bold(String),
+ Italic(String),
+ Monospace(String),
+ Math(String),
+ InternalLink(String),
+ ExternalLink(ExternalLink),
+}
+
+impl LineElement {
+ /// Return only the character content, with none of the styling information.
+ pub fn as_plain_text(&self) -> &str {
+ match self {
+ LineElement::Normal(text) => text,
+ LineElement::Bold(text) => text,
+ LineElement::Italic(text) => text,
+ LineElement::Monospace(text) => text,
+ LineElement::Math(text) => text,
+ LineElement::InternalLink(label) => label,
+ LineElement::ExternalLink(ExternalLink { label, ..}) => label,
+ }
+ }
+}
+
+pub struct ExternalLink {
+ pub label: String,
+ pub target: String,
+}
+
+impl std::fmt::Display for LineElement {
+ fn fmt(&self, f: &mut std::fmt::Formatter) -> Result<(), std::fmt::Error> {
+ let string = match self {
+ LineElement::Normal(text) => format!("{text}"),
+ LineElement::Bold(text) => format!("**{text}**"),
+ LineElement::Italic(text) => format!("_{text}_"),
+ LineElement::Monospace(text) => format!("`{text}`"),
+ LineElement::Math(text) => format!("${text}$"),
+ LineElement::InternalLink(text) => format!("[[{text}]]"),
+ LineElement::ExternalLink(ExternalLink { label, target }) => {
+ format!("[{label}]({target})") }
+ };
+ f.write_str(&string)
+ }
+}
+
+impl std::fmt::Debug for LineElement {
+ fn fmt(&self, f: &mut std::fmt::Formatter) -> Result<(), std::fmt::Error> {
+ let string = match self {
+ LineElement::Normal(text) => format!("Normal ('{text}')"),
+ LineElement::Bold(text) => format!("Bold ('{text}')"),
+ LineElement::Italic(text) => format!("Italic ('{text}')"),
+ LineElement::Monospace(text) => format!("Monospace ('{text}')"),
+ LineElement::Math(text) => format!("Math ('{text}')"),
+ LineElement::InternalLink(text) => format!("InternalLink ('{text}')"),
+ LineElement::ExternalLink(ExternalLink { label, target }) => {
+ format!("ExternalLink (label:'{label}', target:'{target}')") }
+ };
+ f.write_str(&string)
+ }
+}