Skip to content

Commit 3b386fa

Browse files
committed
cat: unify handling of ANSI color spaces
1 parent 3fd2bba commit 3b386fa

File tree

1 file changed

+13
-29
lines changed

1 file changed

+13
-29
lines changed

src/uu/cat/src/colors.rs

Lines changed: 13 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -18,37 +18,21 @@ pub enum ColorMode {
1818
impl ColorMode {
1919
fn conv_color(&self, color: [f64; 3]) -> Color {
2020
let fit_linear_curve = |x: f64| (127. * x + 128.) as u8;
21-
21+
let retrofit_ansi = |color: [f64; 3]| {
22+
let ratio = [36, 6, 1];
23+
let ascii_color_offset = 16u16;
24+
color
25+
.into_iter()
26+
.map(fit_linear_curve)
27+
.zip(ratio)
28+
.fold(ascii_color_offset, |acc, (c, m)| {
29+
acc + ((6. * (c as f64 / 256.)).floor() as u16) * m
30+
})
31+
};
2232
match self {
2333
ColorMode::TrueColor => Color::Color24b(color.map(fit_linear_curve)),
24-
ColorMode::ANSI256 => {
25-
let ratio = [36, 6, 1];
26-
let ascii_color_offset = 16u16;
27-
28-
Color::ANSI256(
29-
color
30-
.into_iter()
31-
.map(fit_linear_curve)
32-
.zip(ratio)
33-
.fold(ascii_color_offset, |acc, (c, m)| {
34-
acc + ((6. * (c as f64 / 256.)).floor() as u16) * m
35-
}),
36-
)
37-
}
38-
ColorMode::ANSI => {
39-
let ratio = [32, 16, 14];
40-
let ascii_color_offset = 91u8;
41-
42-
Color::ANSI(
43-
color
44-
.into_iter()
45-
.map(fit_linear_curve)
46-
.zip(ratio)
47-
.fold(ascii_color_offset, |acc, (c, m)| {
48-
acc + ((4. * (c as f64 / 256.)).floor() as u8) * m
49-
}),
50-
)
51-
}
34+
ColorMode::ANSI256 => Color::ANSI256(retrofit_ansi(color)),
35+
ColorMode::ANSI => Color::ANSI(retrofit_ansi(color) as u8),
5236
}
5337
}
5438
}

0 commit comments

Comments
 (0)