summaryrefslogtreecommitdiffstats
path: root/widget/src/markdown.rs
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector@hecrj.dev>2024-07-28 17:45:11 +0200
committerLibravatar Héctor Ramón Jiménez <hector@hecrj.dev>2024-07-28 17:45:11 +0200
commitca8ebb16a67095260e4e94109f82d3ac1603e927 (patch)
tree0abbc20c913a1c002dbcb6af4e9291ead567a17c /widget/src/markdown.rs
parentebc6c0eba86608dbd9912ab180f48ca603f20c19 (diff)
downloadiced-ca8ebb16a67095260e4e94109f82d3ac1603e927.tar.gz
iced-ca8ebb16a67095260e4e94109f82d3ac1603e927.tar.bz2
iced-ca8ebb16a67095260e4e94109f82d3ac1603e927.zip
Implement `strikethrough` support for `rich_text` spans
Diffstat (limited to 'widget/src/markdown.rs')
-rw-r--r--widget/src/markdown.rs23
1 files changed, 17 insertions, 6 deletions
diff --git a/widget/src/markdown.rs b/widget/src/markdown.rs
index 9cd4a62f..23e36435 100644
--- a/widget/src/markdown.rs
+++ b/widget/src/markdown.rs
@@ -47,6 +47,7 @@ pub fn parse(
let mut spans = Vec::new();
let mut strong = false;
let mut emphasis = false;
+ let mut strikethrough = false;
let mut metadata = false;
let mut table = false;
let mut link = None;
@@ -59,7 +60,8 @@ pub fn parse(
markdown,
pulldown_cmark::Options::ENABLE_YAML_STYLE_METADATA_BLOCKS
| pulldown_cmark::Options::ENABLE_PLUSES_DELIMITED_METADATA_BLOCKS
- | pulldown_cmark::Options::ENABLE_TABLES,
+ | pulldown_cmark::Options::ENABLE_TABLES
+ | pulldown_cmark::Options::ENABLE_STRIKETHROUGH,
);
let produce = |lists: &mut Vec<List>, item| {
@@ -90,6 +92,10 @@ pub fn parse(
emphasis = true;
None
}
+ pulldown_cmark::Tag::Strikethrough if !metadata && !table => {
+ strikethrough = true;
+ None
+ }
pulldown_cmark::Tag::Link { dest_url, .. }
if !metadata && !table =>
{
@@ -155,12 +161,16 @@ pub fn parse(
Item::Heading(level, spans.drain(..).collect()),
)
}
+ pulldown_cmark::TagEnd::Strong if !metadata && !table => {
+ strong = false;
+ None
+ }
pulldown_cmark::TagEnd::Emphasis if !metadata && !table => {
emphasis = false;
None
}
- pulldown_cmark::TagEnd::Strong if !metadata && !table => {
- strong = false;
+ pulldown_cmark::TagEnd::Strikethrough if !metadata && !table => {
+ strikethrough = false;
None
}
pulldown_cmark::TagEnd::Link if !metadata && !table => {
@@ -227,7 +237,7 @@ pub fn parse(
return None;
}
- let span = span(text.into_string());
+ let span = span(text.into_string()).strikethrough(strikethrough);
let span = if strong || emphasis {
span.font(Font {
@@ -263,7 +273,8 @@ pub fn parse(
.color(Color::WHITE)
.background(color!(0x111111))
.border(border::rounded(2))
- .padding(padding::left(2).right(2));
+ .padding(padding::left(2).right(2))
+ .strikethrough(strikethrough);
let span = if let Some(link) = link.as_ref() {
span.color(palette.primary).link(link.clone())
@@ -275,7 +286,7 @@ pub fn parse(
None
}
pulldown_cmark::Event::SoftBreak if !metadata && !table => {
- spans.push(span(" "));
+ spans.push(span(" ").strikethrough(strikethrough));
None
}
pulldown_cmark::Event::HardBreak if !metadata && !table => {