blob: a8c5fbb69222166dc0663de26c95b8794980f293 [file] [log] [blame] [edit]
/// 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,
}