binocular/preview/rich_text/
types.rs1use crate::preview::rich_text::TextBuffer;
2use ratatui::text::Line;
3
4pub struct RichTextDocument {
5 pub buffer: TextBuffer,
6 pub lines: Vec<Line<'static>>,
7 pub tree: Option<tree_sitter::Tree>,
8 pub dirty: bool,
11}
12
13impl RichTextDocument {
14 pub fn content(&self) -> &str {
15 self.buffer.as_str()
16 }
17
18 pub fn raw_lines(&self) -> &[(usize, usize)] {
19 self.buffer.line_ranges()
20 }
21
22 pub fn line_range(&self, line_idx: usize) -> Option<(usize, usize)> {
23 self.buffer.line_range(line_idx)
24 }
25
26 pub fn line_slice(&self, line_idx: usize) -> Option<&str> {
27 self.buffer.line_slice(line_idx)
28 }
29
30 pub fn line_count(&self) -> usize {
31 self.buffer.line_count()
32 }
33
34 pub fn len_bytes(&self) -> usize {
35 self.buffer.len_bytes()
36 }
37
38 pub fn invalidate_caches(&mut self) {
39 self.dirty = true;
40 self.tree = None;
41 }
42}