From ca8ebb16a67095260e4e94109f82d3ac1603e927 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Sun, 28 Jul 2024 17:45:11 +0200 Subject: Implement `strikethrough` support for `rich_text` spans --- widget/src/markdown.rs | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) (limited to 'widget/src/markdown.rs') 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, 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 => { -- cgit