Skip to main content

binocular/preview/rich_text/
edit.rs

1use crate::preview::rich_text::{RichTextDocument, TextEdit};
2
3pub fn apply_text_edit(text_file: &mut RichTextDocument, edit: &TextEdit) -> bool {
4    let applied = text_file.buffer.apply_edit(edit);
5    if applied {
6        text_file.invalidate_caches();
7    }
8    applied
9}
10
11pub fn edit_content_insert_char(
12    text_file: &mut RichTextDocument,
13    byte_idx: usize,
14    c: char,
15) -> Option<TextEdit> {
16    let edit = text_file.buffer.insert_char(byte_idx, c)?;
17    text_file.invalidate_caches();
18    Some(edit)
19}
20
21pub fn edit_content_insert_text(
22    text_file: &mut RichTextDocument,
23    byte_idx: usize,
24    text: String,
25) -> Option<TextEdit> {
26    let edit = text_file.buffer.insert_text(byte_idx, text)?;
27    text_file.invalidate_caches();
28    Some(edit)
29}
30
31pub fn edit_content_delete_char(
32    text_file: &mut RichTextDocument,
33    byte_idx: usize,
34) -> Option<TextEdit> {
35    let edit = text_file.buffer.delete_char_before(byte_idx)?;
36    text_file.invalidate_caches();
37    Some(edit)
38}
39
40pub fn edit_content_delete_char_at(
41    text_file: &mut RichTextDocument,
42    byte_idx: usize,
43) -> Option<TextEdit> {
44    let edit = text_file.buffer.delete_char_at(byte_idx)?;
45    text_file.invalidate_caches();
46    Some(edit)
47}
48
49pub fn edit_content_delete_range(
50    text_file: &mut RichTextDocument,
51    start: usize,
52    end: usize,
53) -> Option<TextEdit> {
54    let deleted = text_file.buffer.delete_range(start..end)?;
55    text_file.invalidate_caches();
56    Some(TextEdit::delete(start, deleted))
57}