pub trait TextStore {
type GraphemeIter<'a>: Cursor<Item = Grapheme<'a>> + SkipLine + Clone
where Self: 'a;
Show 23 methods
// Required methods
fn is_multi_line(&self) -> bool;
fn has_final_newline(&self) -> bool;
fn len_lines(&self) -> u32;
fn len_bytes(&self) -> usize;
fn cache_validity(&self) -> Option<usize>;
fn string(&self) -> String;
fn set_string(&mut self, t: &str);
fn byte_range_at(
&self,
pos: TextPosition,
) -> Result<Range<usize>, TextError>;
fn byte_range(&self, range: TextRange) -> Result<Range<usize>, TextError>;
fn byte_to_pos(&self, byte: usize) -> Result<TextPosition, TextError>;
fn bytes_to_range(
&self,
bytes: Range<usize>,
) -> Result<TextRange, TextError>;
fn str_slice(&self, range: TextRange) -> Result<Cow<'_, str>, TextError>;
fn str_slice_byte(
&self,
range: Range<usize>,
) -> Result<Cow<'_, str>, TextError>;
fn graphemes_byte(
&self,
range: Range<usize>,
pos: usize,
) -> Result<Self::GraphemeIter<'_>, TextError>;
fn line_at(&self, row: u32) -> Result<Cow<'_, str>, TextError>;
fn lines_at(
&self,
row: u32,
) -> Result<impl Iterator<Item = Cow<'_, str>>, TextError>;
fn line_graphemes(
&self,
row: u32,
) -> Result<Self::GraphemeIter<'_>, TextError>;
fn line_width(&self, row: u32) -> Result<u32, TextError>;
fn insert_char(
&mut self,
pos: TextPosition,
c: char,
) -> Result<(TextRange, Range<usize>), TextError>;
fn insert_str(
&mut self,
pos: TextPosition,
t: &str,
) -> Result<(TextRange, Range<usize>), TextError>;
fn remove(
&mut self,
range: TextRange,
) -> Result<(String, (TextRange, Range<usize>)), TextError>;
fn insert_b(&mut self, byte_pos: usize, t: &str) -> Result<(), TextError>;
fn remove_b(&mut self, byte_range: Range<usize>) -> Result<(), TextError>;
}Expand description
Backing store for the TextCore.
Required Associated Types§
Required Methods§
Sourcefn is_multi_line(&self) -> bool
fn is_multi_line(&self) -> bool
Can store multi-line content?
Sourcefn has_final_newline(&self) -> bool
fn has_final_newline(&self) -> bool
Is there a line-break at the end of the text?
Sourcefn len_lines(&self) -> u32
fn len_lines(&self) -> u32
Number of lines.
This counts the number of newline ‘\n’ and adds one for the first row. And it adds one more if the last line doesn’t end with a newline.
"" -> 1
"a" -> 1
"a\n" -> 2
"a\na" -> 3
"a\na\n" -> 3
Sourcefn cache_validity(&self) -> Option<usize>
fn cache_validity(&self) -> Option<usize>
Minimum byte position that has been changed since the last call of min_changed().
Sourcefn set_string(&mut self, t: &str)
fn set_string(&mut self, t: &str)
Set content from string.
Sourcefn byte_range_at(&self, pos: TextPosition) -> Result<Range<usize>, TextError>
fn byte_range_at(&self, pos: TextPosition) -> Result<Range<usize>, TextError>
Grapheme position to byte position. This is the (start,end) position of the single grapheme after pos.
- pos must be a valid position: row <= len_lines, col <= line_width of the row.
Sourcefn byte_range(&self, range: TextRange) -> Result<Range<usize>, TextError>
fn byte_range(&self, range: TextRange) -> Result<Range<usize>, TextError>
Grapheme range to byte range.
- range must be a valid range. row <= len_lines, col <= line_width of the row.
Sourcefn byte_to_pos(&self, byte: usize) -> Result<TextPosition, TextError>
fn byte_to_pos(&self, byte: usize) -> Result<TextPosition, TextError>
Byte position to grapheme position. Returns the position that contains the given byte index.
- byte must <= byte-len.
Sourcefn bytes_to_range(&self, bytes: Range<usize>) -> Result<TextRange, TextError>
fn bytes_to_range(&self, bytes: Range<usize>) -> Result<TextRange, TextError>
Byte range to grapheme range.
- byte must <= byte-len.
Sourcefn str_slice(&self, range: TextRange) -> Result<Cow<'_, str>, TextError>
fn str_slice(&self, range: TextRange) -> Result<Cow<'_, str>, TextError>
A range of the text as Cow<str>.
- range must be a valid range. row <= len_lines, col <= line_width of the row.
- pos must be inside of range.
Sourcefn str_slice_byte(&self, range: Range<usize>) -> Result<Cow<'_, str>, TextError>
fn str_slice_byte(&self, range: Range<usize>) -> Result<Cow<'_, str>, TextError>
A range of the text as Cow<str>.
- range must be valid
Sourcefn graphemes_byte(
&self,
range: Range<usize>,
pos: usize,
) -> Result<Self::GraphemeIter<'_>, TextError>
fn graphemes_byte( &self, range: Range<usize>, pos: usize, ) -> Result<Self::GraphemeIter<'_>, TextError>
Return a cursor over the graphemes of the range, start at the given position.
- range must be a valid byte-range.
- pos must be inside of range.
Sourcefn line_at(&self, row: u32) -> Result<Cow<'_, str>, TextError>
fn line_at(&self, row: u32) -> Result<Cow<'_, str>, TextError>
Line as str.
- row must be <= len_lines
Sourcefn lines_at(
&self,
row: u32,
) -> Result<impl Iterator<Item = Cow<'_, str>>, TextError>
fn lines_at( &self, row: u32, ) -> Result<impl Iterator<Item = Cow<'_, str>>, TextError>
Iterate over text-lines, starting at line-offset.
- row must be <= len_lines
Sourcefn line_graphemes(&self, row: u32) -> Result<Self::GraphemeIter<'_>, TextError>
fn line_graphemes(&self, row: u32) -> Result<Self::GraphemeIter<'_>, TextError>
Return a line as an iterator over the graphemes. This contains the ‘\n’ at the end.
- row must be <= len_lines
Sourcefn line_width(&self, row: u32) -> Result<u32, TextError>
fn line_width(&self, row: u32) -> Result<u32, TextError>
Line width of row as grapheme count. Excludes the terminating ‘\n’.
- row must be <= len_lines
Sourcefn insert_char(
&mut self,
pos: TextPosition,
c: char,
) -> Result<(TextRange, Range<usize>), TextError>
fn insert_char( &mut self, pos: TextPosition, c: char, ) -> Result<(TextRange, Range<usize>), TextError>
Insert a char at the given position.
- range must be a valid range. row <= len_lines, col <= line_width of the row.
Sourcefn insert_str(
&mut self,
pos: TextPosition,
t: &str,
) -> Result<(TextRange, Range<usize>), TextError>
fn insert_str( &mut self, pos: TextPosition, t: &str, ) -> Result<(TextRange, Range<usize>), TextError>
Insert a text str at the given position.
- range must be a valid range. row <= len_lines, col <= line_width of the row.
Sourcefn remove(
&mut self,
range: TextRange,
) -> Result<(String, (TextRange, Range<usize>)), TextError>
fn remove( &mut self, range: TextRange, ) -> Result<(String, (TextRange, Range<usize>)), TextError>
Remove the given text range.
- range must be a valid range. row <= len_lines, col <= line_width of the row.
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.