summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector@hecrj.dev>2024-07-28 23:59:51 +0200
committerLibravatar Héctor Ramón Jiménez <hector@hecrj.dev>2024-07-28 23:59:51 +0200
commit16212eaf52657ea47bba7add7deac378d0bf4b4a (patch)
tree27feb673ab07016a48ee1ae491fa7331a349cabb
parent1aa0a8fa0d8e5dfe9ab09a11ea7c69f71e19795b (diff)
downloadiced-16212eaf52657ea47bba7add7deac378d0bf4b4a.tar.gz
iced-16212eaf52657ea47bba7add7deac378d0bf4b4a.tar.bz2
iced-16212eaf52657ea47bba7add7deac378d0bf4b4a.zip
Simplify `highlight` method for `text_editor` widget
-rw-r--r--examples/editor/src/main.rs21
-rw-r--r--examples/markdown/src/main.rs10
-rw-r--r--widget/src/text_editor.rs23
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(