diff options
author | 2024-07-28 23:59:51 +0200 | |
---|---|---|
committer | 2024-07-28 23:59:51 +0200 | |
commit | 16212eaf52657ea47bba7add7deac378d0bf4b4a (patch) | |
tree | 27feb673ab07016a48ee1ae491fa7331a349cabb | |
parent | 1aa0a8fa0d8e5dfe9ab09a11ea7c69f71e19795b (diff) | |
download | iced-16212eaf52657ea47bba7add7deac378d0bf4b4a.tar.gz iced-16212eaf52657ea47bba7add7deac378d0bf4b4a.tar.bz2 iced-16212eaf52657ea47bba7add7deac378d0bf4b4a.zip |
Simplify `highlight` method for `text_editor` widget
-rw-r--r-- | examples/editor/src/main.rs | 21 | ||||
-rw-r--r-- | examples/markdown/src/main.rs | 10 | ||||
-rw-r--r-- | widget/src/text_editor.rs | 23 |
3 files changed, 31 insertions, 23 deletions
diff --git a/examples/editor/src/main.rs b/examples/editor/src/main.rs index 9ffb4d1a..155e74a1 100644 --- a/examples/editor/src/main.rs +++ b/examples/editor/src/main.rs @@ -1,4 +1,4 @@ -use iced::highlighter::{self, Highlighter}; +use iced::highlighter; use iced::keyboard; use iced::widget::{ button, column, container, horizontal_space, pick_list, row, text, @@ -186,18 +186,13 @@ impl Editor { text_editor(&self.content) .height(Fill) .on_action(Message::ActionPerformed) - .highlight::<Highlighter>( - highlighter::Settings { - theme: self.theme, - token: self - .file - .as_deref() - .and_then(Path::extension) - .and_then(ffi::OsStr::to_str) - .map(str::to_string) - .unwrap_or(String::from("rs")), - }, - |highlight, _theme| highlight.to_format() + .highlight( + self.file + .as_deref() + .and_then(Path::extension) + .and_then(ffi::OsStr::to_str) + .unwrap_or("rs"), + self.theme, ), status, ] diff --git a/examples/markdown/src/main.rs b/examples/markdown/src/main.rs index ade6e453..eb51f985 100644 --- a/examples/markdown/src/main.rs +++ b/examples/markdown/src/main.rs @@ -1,4 +1,4 @@ -use iced::highlighter::{self, Highlighter}; +use iced::highlighter; use iced::widget::{self, markdown, row, scrollable, text_editor}; use iced::{Element, Fill, Font, Task, Theme}; @@ -65,13 +65,7 @@ impl Markdown { .height(Fill) .padding(10) .font(Font::MONOSPACE) - .highlight::<Highlighter>( - highlighter::Settings { - theme: highlighter::Theme::Base16Ocean, - token: "markdown".to_owned(), - }, - |highlight, _theme| highlight.to_format(), - ); + .highlight("markdown", highlighter::Theme::Base16Ocean); let preview = markdown(&self.items, markdown::Settings::default()) .map(Message::LinkClicked); diff --git a/widget/src/text_editor.rs b/widget/src/text_editor.rs index 56fb7578..b5092012 100644 --- a/widget/src/text_editor.rs +++ b/widget/src/text_editor.rs @@ -13,7 +13,7 @@ use crate::core::text::{self, LineHeight, Text}; use crate::core::widget::operation; use crate::core::widget::{self, Widget}; use crate::core::{ - Background, Border, Color, Element, Length, Padding, Pixels, Point, + self, Background, Border, Color, Element, Length, Padding, Pixels, Point, Rectangle, Shell, Size, SmolStr, Theme, Vector, }; @@ -146,9 +146,28 @@ where self } + /// Highlights the [`TextEditor`] using the given syntax and theme. + #[cfg(feature = "highlighter")] + pub fn highlight( + self, + syntax: &str, + theme: iced_highlighter::Theme, + ) -> TextEditor<'a, iced_highlighter::Highlighter, Message, Theme, Renderer> + where + Renderer: text::Renderer<Font = core::Font>, + { + self.highlight_with::<iced_highlighter::Highlighter>( + iced_highlighter::Settings { + theme, + token: syntax.to_owned(), + }, + |highlight, _theme| highlight.to_format(), + ) + } + /// Highlights the [`TextEditor`] with the given [`Highlighter`] and /// a strategy to turn its highlights into some text format. - pub fn highlight<H: text::Highlighter>( + pub fn highlight_with<H: text::Highlighter>( self, settings: H::Settings, to_format: fn( |