| /// Element indicates a slice position in the string and its type. |
| #[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord)] |
| pub struct Element { |
| pos: (usize, usize), |
| kind: ElementKind, |
| } |
| |
| impl Element { |
| /// Creates new [Element] object. |
| pub fn new(start: usize, end: usize, kind: ElementKind) -> Self { |
| Self { |
| pos: (start, end), |
| kind, |
| } |
| } |
| |
| /// Creates [Element] with [ElementKind::Sgr] type. |
| pub fn sgr(start: usize, end: usize) -> Element { |
| Element::new(start, end, ElementKind::Sgr) |
| } |
| |
| /// Creates [Element] with [ElementKind::Csi] type. |
| pub fn csi(start: usize, end: usize) -> Element { |
| Element::new(start, end, ElementKind::Csi) |
| } |
| |
| /// Creates [Element] with [ElementKind::Osc] type. |
| pub fn osc(start: usize, end: usize) -> Element { |
| Element::new(start, end, ElementKind::Osc) |
| } |
| |
| /// Creates [Element] with [ElementKind::Esc] type. |
| pub fn esc(start: usize, end: usize) -> Element { |
| Element::new(start, end, ElementKind::Esc) |
| } |
| |
| /// Creates [Element] with [ElementKind::Text] type. |
| pub fn text(start: usize, end: usize) -> Element { |
| Element::new(start, end, ElementKind::Text) |
| } |
| |
| /// Returns an element type. |
| pub fn kind(&self) -> ElementKind { |
| self.kind |
| } |
| |
| /// Returns a start position of a slice. |
| pub fn start(&self) -> usize { |
| self.pos.0 |
| } |
| |
| /// Returns an end position of a slice. |
| pub fn end(&self) -> usize { |
| self.pos.1 |
| } |
| } |
| |
| /// A type of a section in a text with ANSI sequences. |
| #[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord)] |
| pub enum ElementKind { |
| /// ESC starts all the escape sequences <^[> '0x1B'. |
| Esc, |
| /// SGR (Select Graphic Rendition) parameters. |
| Sgr, |
| /// CSI (Control Sequence Introducer) sequences. |
| Csi, |
| /// OSC (Operating System Command) sequences. |
| Osc, |
| /// Text section. |
| Text, |
| } |