use rich::text::Text;
use rich::{Highlighter, Style};
pub struct NumberHighlighter {
style: Style,
}
impl NumberHighlighter {
pub fn new() -> Self {
let style = Style::parse("bold cyan").expect("valid built-in style");
NumberHighlighter { style }
}
}
impl Default for NumberHighlighter {
fn default() -> Self {
NumberHighlighter::new()
}
}
impl Highlighter for NumberHighlighter {
fn highlight(&self, text: &mut Text) {
let plain = text.plain().to_string();
let bytes = plain.as_bytes();
let mut i = 0;
while i < bytes.len() {
if bytes[i].is_ascii_digit() {
let start = i;
while i < bytes.len() && bytes[i].is_ascii_digit() {
i += 1;
}
text.stylize(self.style.clone(), start, i);
} else {
i += 1;
}
}
}
}