mirror of https://github.com/zkat/miette.git
ignore ANSI color codes in line_visual_char_width
This commit is contained in:
parent
50bb2940b8
commit
c2b0125555
|
|
@ -860,13 +860,26 @@ impl GraphicalReportHandler {
|
||||||
/// Returns an iterator over the visual width of each character in a line.
|
/// Returns an iterator over the visual width of each character in a line.
|
||||||
fn line_visual_char_width<'a>(&self, text: &'a str) -> impl Iterator<Item = usize> + 'a {
|
fn line_visual_char_width<'a>(&self, text: &'a str) -> impl Iterator<Item = usize> + 'a {
|
||||||
let mut column = 0;
|
let mut column = 0;
|
||||||
|
let mut escaped = false;
|
||||||
let tab_width = self.tab_width;
|
let tab_width = self.tab_width;
|
||||||
text.chars().map(move |c| {
|
text.chars().map(move |c| {
|
||||||
let width = if c == '\t' {
|
let width = match (escaped, c) {
|
||||||
// Round up to the next multiple of tab_width
|
// Round up to the next multiple of tab_width
|
||||||
tab_width - column % tab_width
|
(false, '\t') => tab_width - column % tab_width,
|
||||||
} else {
|
// start of ANSI escape
|
||||||
c.width().unwrap_or(0)
|
(false, '\x1b') => {
|
||||||
|
escaped = true;
|
||||||
|
0
|
||||||
|
}
|
||||||
|
// use Unicode width for all other characters
|
||||||
|
(false, c) => c.width().unwrap_or(0),
|
||||||
|
// end of ANSI escape
|
||||||
|
(true, 'm') => {
|
||||||
|
escaped = false;
|
||||||
|
0
|
||||||
|
}
|
||||||
|
// characters are zero width within escape sequence
|
||||||
|
(true, _) => 0,
|
||||||
};
|
};
|
||||||
column += width;
|
column += width;
|
||||||
width
|
width
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue