TextStore

Trait TextStore 

Source
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§

Source

type GraphemeIter<'a>: Cursor<Item = Grapheme<'a>> + SkipLine + Clone where Self: 'a

Required Methods§

Source

fn is_multi_line(&self) -> bool

Can store multi-line content?

Source

fn has_final_newline(&self) -> bool

Is there a line-break at the end of the text?

Source

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

Source

fn len_bytes(&self) -> usize

Length in bytes

Source

fn cache_validity(&self) -> Option<usize>

Minimum byte position that has been changed since the last call of min_changed().

Source

fn string(&self) -> String

Get content as string.

Source

fn set_string(&mut self, t: &str)

Set content from string.

Source

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.
Source

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.
Source

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.
Source

fn bytes_to_range(&self, bytes: Range<usize>) -> Result<TextRange, TextError>

Byte range to grapheme range.

  • byte must <= byte-len.
Source

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.
Source

fn str_slice_byte(&self, range: Range<usize>) -> Result<Cow<'_, str>, TextError>

A range of the text as Cow<str>.

  • range must be valid
Source

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.
Source

fn line_at(&self, row: u32) -> Result<Cow<'_, str>, TextError>

Line as str.

  • row must be <= len_lines
Source

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
Source

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
Source

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
Source

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.
Source

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.
Source

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.
Source

fn insert_b(&mut self, byte_pos: usize, t: &str) -> Result<(), TextError>

Insert a string at the given byte index. Call this only for undo.

byte_pos must be <= len bytes.

Source

fn remove_b(&mut self, byte_range: Range<usize>) -> Result<(), TextError>

Remove the given byte-range. Call this only for undo.

byte_pos must be <= len bytes.

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.

Implementors§

Source§

impl TextStore for TextRope

Source§

type GraphemeIter<'a> = RopeGraphemes<'a>

Source§

impl TextStore for TextString

Source§

type GraphemeIter<'a> = StrGraphemes<'a>