only run through lines that have colors

pull/15/head
chris west 4 years ago
parent 575ebdbd01
commit 384cbe0939

@ -917,29 +917,36 @@ pub fn parse_line(start: usize, raw: &str) -> Option<Line> {
}; };
let typ = Type::from(line.chars().nth(0)?)?; let typ = Type::from(line.chars().nth(0)?)?;
// calculate the visible length of this line as well as where to let mut truncated_len = text_end;
// truncate it when abiding by `MAX_COLS` let mut visible_len = text_end - start;
let mut is_color = false;
let mut truncated_len = 0; // if this line contains colors, calculate the visible length and
let mut visible_len = 0; // where to truncate when abidibg by `MAX_COLS`
let mut iter = raw[start..text_end].char_indices().peekable(); if *&raw[start..text_end].contains("\x1b[") {
let mut is_color = false;
while let Some((i, c)) = iter.next() { let mut iter = raw[start..text_end].char_indices().peekable();
if is_color { visible_len = 0;
if c == 'm' {
is_color = false; while let Some((i, c)) = iter.next() {
} if is_color {
} else { if c == 'm' {
if c == '\x1b' { is_color = false;
if let Some((_, '[')) = iter.peek() {
iter.next(); // skip [
is_color = true;
} }
} else { } else {
if visible_len < MAX_COLS { if c == '\x1b' {
truncated_len = i; if let Some((_, '[')) = iter.peek() {
iter.next(); // skip [
is_color = true;
}
} else {
if visible_len < MAX_COLS {
truncated_len = i;
visible_len += 1;
} else {
visible_len = MAX_COLS + 1;
break;
}
} }
visible_len += 1;
} }
} }
} }

Loading…
Cancel
Save