promkit_widgets/text/
text.rs1use promkit_core::grapheme::StyledGraphemes;
2
3use crate::cursor::Cursor;
4
5#[derive(Clone)]
6pub struct Text(Cursor<Vec<StyledGraphemes>>);
7
8impl Default for Text {
9 fn default() -> Self {
10 Self(Cursor::new(vec![], 0, false))
11 }
12}
13
14impl<T: AsRef<str>> From<T> for Text {
15 fn from(text: T) -> Self {
16 let lines: Vec<StyledGraphemes> = text
17 .as_ref()
18 .split('\n')
19 .map(|line| if line.is_empty() { "\0" } else { line })
22 .map(StyledGraphemes::from)
23 .collect();
24 Self(Cursor::new(lines, 0, false))
25 }
26}
27
28impl Text {
29 pub fn from_styled_graphemes(lines: Vec<StyledGraphemes>) -> Self {
32 Self(Cursor::new(lines, 0, false))
33 }
34
35 pub fn replace_contents(&mut self, text: Vec<StyledGraphemes>) {
37 self.0.replace_contents(text);
38 }
39
40 pub fn items(&self) -> &Vec<StyledGraphemes> {
42 self.0.contents()
43 }
44
45 pub fn position(&self) -> usize {
47 self.0.position()
48 }
49
50 pub fn backward(&mut self) -> bool {
53 self.0.backward()
54 }
55
56 pub fn forward(&mut self) -> bool {
59 self.0.forward()
60 }
61}