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/line_element.rs | |
parent | 54f5e9fd883e207931baa9c87b6181ca724d6bab (diff) | |
download | markdown-8e6a62e9da1ce71481c4059470e7c59ba7df9b55.zip |
Completely rewrite the libraryv1.0.0
Diffstat (limited to 'src/elements/line_element.rs')
-rw-r--r-- | src/elements/line_element.rs | 61 |
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) + } +} |