pub struct TextLine { /* private fields */ }Expand description
The text line represents editable text lines.
Implementations§
Source§impl TextLine
impl TextLine
Sourcepub fn cursor_movement(
movement: Direction,
skip: bool,
) -> fn(&Self, &mut usize) -> bool
pub fn cursor_movement( movement: Direction, skip: bool, ) -> fn(&Self, &mut usize) -> bool
Returns the appropriate movement function based on parameters movement and skip.
§Arguments
movement- The direction of movement (ForwardorBackward).skip- Whether to skip over whitespace characters.
§Returns
A function pointer to the appropriate movement function.
§Examples
use text_editing::{TextLine, Direction};
let line = TextLine::from_string("Hello, world!".into());
let mut text_cursor = 7;
let movement_fn = TextLine::cursor_movement(Direction::Forward, false);
movement_fn(&line, &mut text_cursor);
assert_eq!(text_cursor, 8);Sourcepub fn forward(&self, text_cursor: &mut usize) -> bool
pub fn forward(&self, text_cursor: &mut usize) -> bool
Moves the text cursor forward by one.
§Arguments
text_cursor- A mutable reference to the current text cursor position.
§Returns
true if the cursor was successfully moved forward, false otherwise.
§Examples
use text_editing::TextLine;
let line = TextLine::from_string("Hello, world!".into());
let mut text_cursor = 6;
assert!(line.forward(&mut text_cursor));
assert_eq!(text_cursor, 7);Sourcepub fn backward(&self, text_cursor: &mut usize) -> bool
pub fn backward(&self, text_cursor: &mut usize) -> bool
Moves the text cursor backward by one.
§Arguments
text_cursor- A mutable reference to the current text cursor position.
§Returns
true if the cursor was successfully moved backward, false otherwise.
§Examples
use text_editing::TextLine;
let line = TextLine::from_string("Hello, world!".into());
let mut text_cursor = 7;
assert!(line.backward(&mut text_cursor));
assert_eq!(text_cursor, 6);Sourcepub fn skip_forward(&self, text_cursor: &mut usize) -> bool
pub fn skip_forward(&self, text_cursor: &mut usize) -> bool
Moves the text cursor forward until the end of the current word.
§Arguments
text_cursor- A mutable reference to the current text cursor position.
§Returns
true if the cursor was successfully moved to the end of the word, false otherwise.
§Examples
use text_editing::TextLine;
let line = TextLine::from_string("Hello, world!".into());
let mut text_cursor = 6;
assert!(line.skip_forward(&mut text_cursor));
assert_eq!(text_cursor, 12);Sourcepub fn skip_backward(&self, text_cursor: &mut usize) -> bool
pub fn skip_backward(&self, text_cursor: &mut usize) -> bool
Moves the text cursor back until the start of the current word.
§Arguments
text_cursor- A mutable reference to the current text cursor position.
§Returns
true if the cursor was successfully moved to the start of the word, false otherwise.
§Examples
use text_editing::TextLine;
let line = TextLine::from_string("Hello, world!".into());
let mut text_cursor = 10;
assert!(line.skip_backward(&mut text_cursor));
assert_eq!(text_cursor, 7);Source§impl TextLine
impl TextLine
Sourcepub fn add_char(&mut self, text_cursor: &mut usize, c: char)
pub fn add_char(&mut self, text_cursor: &mut usize, c: char)
Adds a char at the current text cursor position.
§Arguments
text_cursor- A mutable reference to the current text cursor position.c- The char to add.
§Examples
use text_editing::TextLine;
let mut line = TextLine::from_string("Hello, ".into());
let mut text_cursor = 7;
line.add_char(&mut text_cursor, 'w');
assert_eq!(line.as_str(), "Hello, w");
assert_eq!(text_cursor, 8);Sourcepub fn remove_forward(&mut self, text_cursor: usize) -> bool
pub fn remove_forward(&mut self, text_cursor: usize) -> bool
Removes the next char at the current text cursor position, if it exists.
§Arguments
text_cursor- The current text cursor position.
§Returns
true if a char was removed, false otherwise.
§Examples
use text_editing::TextLine;
let mut line = TextLine::from_string("Hello, world!".into());
let text_cursor = 7;
assert!(line.remove_forward(text_cursor));
assert_eq!(line.as_str(), "Hello, orld!");Sourcepub fn remove_forward_skip(&mut self, text_cursor: usize) -> bool
pub fn remove_forward_skip(&mut self, text_cursor: usize) -> bool
Removes the next word at the current text cursor position, if it exists.
§Arguments
text_cursor- The current text cursor position.
§Returns
true if a word was removed, false otherwise.
§Examples
use text_editing::TextLine;
let mut line = TextLine::from_string("Hello, world!".into());
let text_cursor = 7;
assert!(line.remove_forward_skip(text_cursor));
assert_eq!(line.as_str(), "Hello, !");Sourcepub fn remove_backward(&mut self, text_cursor: &mut usize) -> bool
pub fn remove_backward(&mut self, text_cursor: &mut usize) -> bool
Removes the previous char at the current text cursor position, if it exists, and updates the text cursor.
§Arguments
text_cursor- A mutable reference to the current text cursor position.
§Returns
true if a char was removed, false otherwise.
§Examples
use text_editing::TextLine;
let mut line = TextLine::from_string("Hello, world!".into());
let mut text_cursor = 7;
assert!(line.remove_backward(&mut text_cursor));
assert_eq!(line.as_str(), "Hello,world!");
assert_eq!(text_cursor, 6);Sourcepub fn remove_backward_skip(&mut self, text_cursor: &mut usize) -> bool
pub fn remove_backward_skip(&mut self, text_cursor: &mut usize) -> bool
Removes the previous word at the current text cursor position, if it exists, and updates the text cursor.
§Arguments
text_cursor- A mutable reference to the current text cursor position.
§Returns
true if a word was removed, false otherwise.
§Examples
use text_editing::TextLine;
let mut line = TextLine::from_string("Hello, world!".into());
let mut text_cursor = 12;
assert!(line.remove_backward_skip(&mut text_cursor));
assert_eq!(line.as_str(), "Hello, !");
assert_eq!(text_cursor, 7);Sourcepub fn cursor_to_start(&self, text_cursor: &mut usize)
pub fn cursor_to_start(&self, text_cursor: &mut usize)
Moves the text cursor to the start of the line.
§Arguments
text_cursor- A mutable reference to the current text cursor position.
§Examples
use text_editing::TextLine;
let line = TextLine::from_string("Hello, world!".into());
let mut text_cursor = 7;
line.cursor_to_start(&mut text_cursor);
assert_eq!(text_cursor, 0);Sourcepub fn cursor_to_end(&self, text_cursor: &mut usize)
pub fn cursor_to_end(&self, text_cursor: &mut usize)
Moves the text cursor to the end of the line.
§Arguments
text_cursor- A mutable reference to the current text cursor position.
§Examples
use text_editing::TextLine;
let line = TextLine::from_string("Hello, world!".into());
let mut text_cursor = 7;
line.cursor_to_end(&mut text_cursor);
assert_eq!(text_cursor, 13);Sourcepub fn insert_str(&mut self, text_cursor: &mut usize, text: &str)
pub fn insert_str(&mut self, text_cursor: &mut usize, text: &str)
Inserts a string at the current text cursor position and advances the cursor.
§Arguments
text_cursor- A mutable reference to the current text cursor position.text- The string to insert.
§Examples
use text_editing::TextLine;
let mut line = TextLine::from_string("Hello, !".into());
let mut text_cursor = 7;
line.insert_str(&mut text_cursor, "world");
assert_eq!(line.as_str(), "Hello, world!");
assert_eq!(text_cursor, 12);Source§impl TextLine
impl TextLine
Sourcepub fn selection_range(
cursor: usize,
anchor: Option<usize>,
) -> Option<Range<usize>>
pub fn selection_range( cursor: usize, anchor: Option<usize>, ) -> Option<Range<usize>>
Returns the ordered selection range from an anchor and cursor position.
Returns None if no anchor is set.
§Arguments
cursor- The current text cursor position.anchor- The optional selection anchor position.
§Examples
use text_editing::TextLine;
assert_eq!(TextLine::selection_range(10, Some(5)), Some(5..10));
assert_eq!(TextLine::selection_range(3, Some(8)), Some(3..8));
assert_eq!(TextLine::selection_range(5, None), None);Sourcepub fn selected_text(
&self,
cursor: usize,
anchor: Option<usize>,
) -> Option<&str>
pub fn selected_text( &self, cursor: usize, anchor: Option<usize>, ) -> Option<&str>
Returns the selected text, if a selection is active.
§Arguments
cursor- The current text cursor position.anchor- The optional selection anchor position.
§Examples
use text_editing::TextLine;
let line = TextLine::from_string("Hello, world!".into());
assert_eq!(line.selected_text(12, Some(7)), Some("world"));
assert_eq!(line.selected_text(5, None), None);Sourcepub fn delete_selection(
&mut self,
cursor: &mut usize,
anchor: &mut Option<usize>,
) -> bool
pub fn delete_selection( &mut self, cursor: &mut usize, anchor: &mut Option<usize>, ) -> bool
Deletes the currently selected text and updates cursor and anchor.
Returns true if text was deleted, false if no selection was active
or the selection was empty.
§Arguments
cursor- A mutable reference to the current text cursor position.anchor- A mutable reference to the optional selection anchor.
§Examples
use text_editing::TextLine;
let mut line = TextLine::from_string("Hello, world!".into());
let mut cursor = 12;
let mut anchor = Some(7);
assert!(line.delete_selection(&mut cursor, &mut anchor));
assert_eq!(line.as_str(), "Hello, !");
assert_eq!(cursor, 7);
assert_eq!(anchor, None);Sourcepub fn replace_selection(
&mut self,
cursor: &mut usize,
anchor: &mut Option<usize>,
text: &str,
)
pub fn replace_selection( &mut self, cursor: &mut usize, anchor: &mut Option<usize>, text: &str, )
Replaces the current selection with the given text.
If no selection is active, inserts the text at the cursor position.
§Arguments
cursor- A mutable reference to the current text cursor position.anchor- A mutable reference to the optional selection anchor.text- The replacement text.
§Examples
use text_editing::TextLine;
let mut line = TextLine::from_string("Hello, world!".into());
let mut cursor = 12;
let mut anchor = Some(7);
line.replace_selection(&mut cursor, &mut anchor, "Rust");
assert_eq!(line.as_str(), "Hello, Rust!");
assert_eq!(cursor, 11);
assert_eq!(anchor, None);Sourcepub fn select_all(&self, cursor: &mut usize, anchor: &mut Option<usize>)
pub fn select_all(&self, cursor: &mut usize, anchor: &mut Option<usize>)
Selects all text in the line.
Sets the anchor to the beginning and the cursor to the end.
§Arguments
cursor- A mutable reference to the current text cursor position.anchor- A mutable reference to the optional selection anchor.
§Examples
use text_editing::TextLine;
let line = TextLine::from_string("Hello, world!".into());
let mut cursor = 5;
let mut anchor = None;
line.select_all(&mut cursor, &mut anchor);
assert_eq!(cursor, 13);
assert_eq!(anchor, Some(0));Sourcepub fn select_forward(
&self,
cursor: &mut usize,
anchor: &mut Option<usize>,
) -> bool
pub fn select_forward( &self, cursor: &mut usize, anchor: &mut Option<usize>, ) -> bool
Extends the selection forward by one character.
Sets the anchor to the current cursor position if no selection is active, then moves the cursor forward.
§Examples
use text_editing::TextLine;
let line = TextLine::from_string("Hello, world!".into());
let mut cursor = 7;
let mut anchor = None;
assert!(line.select_forward(&mut cursor, &mut anchor));
assert_eq!(cursor, 8);
assert_eq!(anchor, Some(7));Sourcepub fn select_backward(
&self,
cursor: &mut usize,
anchor: &mut Option<usize>,
) -> bool
pub fn select_backward( &self, cursor: &mut usize, anchor: &mut Option<usize>, ) -> bool
Extends the selection backward by one character.
Sets the anchor to the current cursor position if no selection is active, then moves the cursor backward.
§Examples
use text_editing::TextLine;
let line = TextLine::from_string("Hello, world!".into());
let mut cursor = 7;
let mut anchor = None;
assert!(line.select_backward(&mut cursor, &mut anchor));
assert_eq!(cursor, 6);
assert_eq!(anchor, Some(7));Sourcepub fn select_forward_skip(
&self,
cursor: &mut usize,
anchor: &mut Option<usize>,
) -> bool
pub fn select_forward_skip( &self, cursor: &mut usize, anchor: &mut Option<usize>, ) -> bool
Extends the selection forward by one word.
Sets the anchor to the current cursor position if no selection is active, then moves the cursor to the end of the next word.
§Examples
use text_editing::TextLine;
let line = TextLine::from_string("Hello, world!".into());
let mut cursor = 7;
let mut anchor = None;
assert!(line.select_forward_skip(&mut cursor, &mut anchor));
assert_eq!(cursor, 12);
assert_eq!(anchor, Some(7));Sourcepub fn select_backward_skip(
&self,
cursor: &mut usize,
anchor: &mut Option<usize>,
) -> bool
pub fn select_backward_skip( &self, cursor: &mut usize, anchor: &mut Option<usize>, ) -> bool
Extends the selection backward by one word.
Sets the anchor to the current cursor position if no selection is active, then moves the cursor to the start of the previous word.
§Examples
use text_editing::TextLine;
let line = TextLine::from_string("Hello, world!".into());
let mut cursor = 12;
let mut anchor = None;
assert!(line.select_backward_skip(&mut cursor, &mut anchor));
assert_eq!(cursor, 7);
assert_eq!(anchor, Some(12));Sourcepub fn clear_selection(anchor: &mut Option<usize>)
pub fn clear_selection(anchor: &mut Option<usize>)
Clears the current selection without modifying the text.
§Examples
use text_editing::TextLine;
let mut anchor = Some(5);
TextLine::clear_selection(&mut anchor);
assert_eq!(anchor, None);Source§impl TextLine
impl TextLine
Sourcepub fn new() -> Self
pub fn new() -> Self
Creates a new empty text line.
§Examples
use text_editing::TextLine;
let line = TextLine::new();
assert!(line.is_empty());Sourcepub fn from_string(text: String) -> Self
pub fn from_string(text: String) -> Self
Creates a text line from a String.
§Examples
use text_editing::TextLine;
let line = TextLine::from_string("Hello, world!".into());
assert_eq!(line.as_str(), "Hello, world!");Sourcepub fn clear(&mut self)
pub fn clear(&mut self)
Clears the text line, removing all content.
§Examples
use text_editing::TextLine;
let mut line = TextLine::from_string("Hello, world!".into());
line.clear();
assert!(line.is_empty());Sourcepub fn is_empty(&self) -> bool
pub fn is_empty(&self) -> bool
Checks if the line is empty.
§Examples
use text_editing::TextLine;
let line = TextLine::new();
assert!(line.is_empty());Sourcepub fn len(&self) -> usize
pub fn len(&self) -> usize
Returns the length of the text line.
§Examples
use text_editing::TextLine;
let line = TextLine::from_string("Hello, world!".into());
assert_eq!(line.len(), 13);Sourcepub fn as_str(&self) -> &str
pub fn as_str(&self) -> &str
Returns the text of the text line as a str reference.
§Examples
use text_editing::TextLine;
let line = TextLine::from_string("Hello, world!".into());
assert_eq!(line.as_str(), "Hello, world!");Sourcepub fn string_index(&self, index: usize) -> usize
pub fn string_index(&self, index: usize) -> usize
Converts the character index to the string index.
§Examples
use text_editing::TextLine;
let line = TextLine::from_string("Hello, world!".into());
assert_eq!(line.string_index(7), 7);Sourcepub fn insert(&mut self, index: usize, c: char)
pub fn insert(&mut self, index: usize, c: char)
Inserts a new char into the text line.
§Examples
use text_editing::TextLine;
let mut line = TextLine::from_string("Hello, orld!".into());
line.insert(7, 'w');
assert_eq!(line.as_str(), "Hello, world!");Sourcepub fn remove(&mut self, index: usize) -> char
pub fn remove(&mut self, index: usize) -> char
Removes a char from the text line and returns it.
§Examples
use text_editing::TextLine;
let mut line = TextLine::from_string("Hello, world!".into());
assert_eq!(line.remove(7), 'w');
assert_eq!(line.as_str(), "Hello, orld!");Sourcepub fn remove_range(&mut self, range: Range<usize>)
pub fn remove_range(&mut self, range: Range<usize>)
Removes the specified range from the text line.
§Examples
use text_editing::TextLine;
let mut line = TextLine::from_string("Hello, world!".into());
line.remove_range(7..12);
assert_eq!(line.as_str(), "Hello, !");