binocular/preview/rich_text/
edit.rs1use 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}