use core::ops::Range;
#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord)]
pub struct Element {
pos: (usize, usize),
kind: ElementKind,
}
impl Element {
pub fn new(start: usize, end: usize, kind: ElementKind) -> Self {
Self {
pos: (start, end),
kind,
}
}
pub fn sgr(start: usize, end: usize) -> Element {
Element::new(start, end, ElementKind::Sgr)
}
pub fn csi(start: usize, end: usize) -> Element {
Element::new(start, end, ElementKind::Csi)
}
pub fn osc(start: usize, end: usize) -> Element {
Element::new(start, end, ElementKind::Osc)
}
pub fn esc(start: usize, end: usize) -> Element {
Element::new(start, end, ElementKind::Esc)
}
pub fn text(start: usize, end: usize) -> Element {
Element::new(start, end, ElementKind::Text)
}
pub fn kind(&self) -> ElementKind {
self.kind
}
pub fn start(&self) -> usize {
self.pos.0
}
pub fn end(&self) -> usize {
self.pos.1
}
pub fn range(&self) -> Range<usize> {
Range {
start: self.pos.0,
end: self.pos.1,
}
}
}
#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord)]
pub enum ElementKind {
Esc,
Sgr,
Csi,
Osc,
Text,
}