From 946e2a73b780182f7002452fd2645d10b3f24064 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A9ctor=20Ram=C3=B3n=20Jim=C3=A9nez?= Date: Fri, 27 Jun 2025 18:46:25 +0200 Subject: [PATCH] Implement `Rule` support in `markdown` widget --- widget/src/markdown.rs | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/widget/src/markdown.rs b/widget/src/markdown.rs index 3fc18bc3..be88c5f9 100644 --- a/widget/src/markdown.rs +++ b/widget/src/markdown.rs @@ -51,8 +51,8 @@ use crate::core::{ self, Color, Element, Length, Padding, Pixels, Theme, color, }; use crate::{ - column, container, rich_text, row, rule, scrollable, span, text, - vertical_rule, + column, container, horizontal_rule, rich_text, row, rule, scrollable, span, + text, vertical_rule, }; use std::borrow::BorrowMut; @@ -213,6 +213,8 @@ pub enum Item { }, /// A quote. Quote(Vec), + /// A horizontal separator. + Rule, } /// A bunch of parsed Markdown text. @@ -877,6 +879,9 @@ fn parse_with<'a>( }); None } + pulldown_cmark::Event::Rule => { + produce(state.borrow_mut(), &mut stack, Item::Rule, source) + } _ => None, }) } @@ -1107,6 +1112,7 @@ where items, } => viewer.ordered_list(settings, *start, items), Item::Quote(quote) => viewer.quote(settings, quote), + Item::Rule => viewer.rule(settings), } } @@ -1296,6 +1302,17 @@ where .into() } +/// Displays a rule using the default look. +pub fn rule<'a, Message, Theme, Renderer>() +-> Element<'a, Message, Theme, Renderer> +where + Message: 'a, + Theme: Catalog + 'a, + Renderer: core::text::Renderer + 'a, +{ + horizontal_rule(2).into() +} + /// A view strategy to display a Markdown [`Item`]. pub trait Viewer<'a, Message, Theme = crate::Theme, Renderer = crate::Renderer> where @@ -1402,6 +1419,16 @@ where ) -> Element<'a, Message, Theme, Renderer> { quote(self, settings, contents) } + + /// Displays a rule. + /// + /// By default, it calls [`rule`](self::rule()). + fn rule( + &self, + _settings: Settings, + ) -> Element<'a, Message, Theme, Renderer> { + rule() + } } #[derive(Debug, Clone, Copy)]