Skip to content

Commit 3c82010

Browse files
authored
Merge pull request #267 from Muscraft/fix-background
fix(anstyle-svg): Use proper rect background CSS property
2 parents 5e29539 + 61715db commit 3c82010

File tree

8 files changed

+345
-4
lines changed

8 files changed

+345
-4
lines changed

crates/anstyle-svg/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ impl Term {
122122
.unwrap();
123123
writeln!(&mut buffer, r#" <style>"#).unwrap();
124124
writeln!(&mut buffer, r#" .{FG} {{ fill: {fg_color} }}"#).unwrap();
125-
writeln!(&mut buffer, r#" .{BG} {{ background: {bg_color} }}"#).unwrap();
125+
writeln!(&mut buffer, r#" .{BG} {{ fill: {bg_color} }}"#).unwrap();
126126
for (name, rgb) in color_styles(&elements, self.palette) {
127127
if name.starts_with(FG_PREFIX) {
128128
writeln!(&mut buffer, r#" .{name} {{ fill: {rgb} }}"#).unwrap();

crates/anstyle-svg/tests/custom_background_color.html

Lines changed: 97 additions & 0 deletions
Large diffs are not rendered by default.

crates/anstyle-svg/tests/custom_background_color.svg

Lines changed: 153 additions & 0 deletions
Loading
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
[38:2:131:148:150m 1 + [38:2:131:148:150m│ [38:2:249:38:114muse[38:2:248:248:242m anstyle::RgbColor;
2+
[38:2:131:148:150m 2 + [38:2:131:148:150m│
3+
[38:2:131:148:150m 3 [38:2:131:148:150m│ [38:2:248:248:242m#[test]
4+
[38:2:131:148:150m 4 [38:2:131:148:150m│ [38:2:102:217:239mfn[38:2:248:248:242m [38:2:166:226:46mrainbow[38:2:248:248:242m() {
5+
[38:2:131:148:150m 5 [38:2:131:148:150m│ [38:2:248:248:242m [38:2:102:217:239mlet[38:2:248:248:242m input [38:2:249:38:114m=[38:2:248:248:242m std::fs::read_to_string([38:2:230:219:116m"tests/rainbow.vte"[38:2:248:248:242m).[38:2:102:217:239munwrap[38:2:248:248:242m();
6+
[38:2:131:148:150m 6 [38:2:131:148:150m│ [38:2:248:248:242m [38:2:102:217:239mlet[38:2:248:248:242m actual [38:2:249:38:114m=[38:2:248:248:242m anstyle_svg::Term::new().[38:2:102:217:239mrender_svg[38:2:248:248:242m([38:2:249:38:114m&[38:2:248:248:242minput);
7+
[38:2:131:148:150m 7 [38:2:131:148:150m│ [38:2:248:248:242m snapbox::assert_data_eq[38:2:249:38:114m![38:2:248:248:242m(actual, snapbox::file[38:2:249:38:114m![38:2:248:248:242m[[38:2:230:219:116m"rainbow.svg"[38:2:248:248:242m: Text].[38:2:102:217:239mraw[38:2:248:248:242m());
8+
[38:2:131:148:150m 8 [38:2:131:148:150m│ [38:2:248:248:242m}
9+
[38:2:131:148:150m 9 [38:2:131:148:150m│
10+
[38:2:131:148:150m 10 [38:2:131:148:150m│ [38:2:248:248:242m#[test]
11+
[38:2:131:148:150m 11 [38:2:131:148:150m│ [38:2:102:217:239mfn[38:2:248:248:242m [38:2:166:226:46mrg_linus[38:2:248:248:242m() {
12+
[38:2:131:148:150m 12 [38:2:131:148:150m│ [38:2:248:248:242m [38:2:102:217:239mlet[38:2:248:248:242m input [38:2:249:38:114m=[38:2:248:248:242m std::fs::read_to_string([38:2:230:219:116m"tests/rg_linus.vte"[38:2:248:248:242m).[38:2:102:217:239munwrap[38:2:248:248:242m();
13+
[38:2:131:148:150m 13 [38:2:131:148:150m│ [38:2:248:248:242m [38:2:102:217:239mlet[38:2:248:248:242m actual [38:2:249:38:114m=[38:2:248:248:242m anstyle_svg::Term::new().[38:2:102:217:239mrender_svg[38:2:248:248:242m([38:2:249:38:114m&[38:2:248:248:242minput);
14+
[38:2:131:148:150m 14 [38:2:131:148:150m│ [38:2:248:248:242m snapbox::assert_data_eq[38:2:249:38:114m![38:2:248:248:242m(actual, snapbox::file[38:2:249:38:114m![38:2:248:248:242m[[38:2:230:219:116m"rg_linus.svg"[38:2:248:248:242m: Text].[38:2:102:217:239mraw[38:2:248:248:242m());
15+
[38:2:131:148:150m 15 [38:2:131:148:150m│ [38:2:248:248:242m}
16+
[38:2:131:148:150m 16 [38:2:131:148:150m│
17+
[38:2:131:148:150m 17 [38:2:131:148:150m│ [38:2:248:248:242m#[test]
18+
[38:2:131:148:150m 18 [38:2:131:148:150m│ [38:2:102:217:239mfn[38:2:248:248:242m [38:2:166:226:46mhyperlink_demo[38:2:248:248:242m() {
19+
[38:2:131:148:150m 19 [38:2:131:148:150m│ [38:2:248:248:242m [38:2:102:217:239mlet[38:2:248:248:242m bytes [38:2:249:38:114m=[38:2:248:248:242m std::fs::read([38:2:230:219:116m"tests/hyperlink-demo.vte"[38:2:248:248:242m).[38:2:102:217:239munwrap[38:2:248:248:242m();
20+
[38:2:131:148:150m 20 [38:2:131:148:150m│ [38:2:248:248:242m [38:2:166:226:46mString[38:2:248:248:242m::from_utf8(bytes).[38:2:102:217:239munwrap[38:2:248:248:242m();
21+
[38:2:131:148:150m 21 [38:2:131:148:150m│ [38:2:248:248:242m [38:2:102:217:239mlet[38:2:248:248:242m input [38:2:249:38:114m=[38:2:248:248:242m std::fs::read_to_string([38:2:230:219:116m"tests/hyperlink-demo.vte"[38:2:248:248:242m).[38:2:102:217:239munwrap[38:2:248:248:242m();
22+
[38:2:131:148:150m 22 [38:2:131:148:150m│ [38:2:248:248:242m [38:2:102:217:239mlet[38:2:248:248:242m actual [38:2:249:38:114m=[38:2:248:248:242m anstyle_svg::Term::new().[38:2:102:217:239mrender_svg[38:2:248:248:242m([38:2:249:38:114m&[38:2:248:248:242minput);
23+
[38:2:131:148:150m 23 [38:2:131:148:150m│ [38:2:248:248:242m snapbox::assert_data_eq[38:2:249:38:114m![38:2:248:248:242m(actual, snapbox::file[38:2:249:38:114m![38:2:248:248:242m[[38:2:230:219:116m"hyperlink-demo.svg"[38:2:248:248:242m: Text].[38:2:102:217:239mraw[38:2:248:248:242m());
24+
[38:2:131:148:150m 24 [38:2:131:148:150m│ [38:2:248:248:242m}
25+
[38:2:131:148:150m 25 [38:2:131:148:150m│
26+
[38:2:131:148:150m 26 [38:2:131:148:150m│ [38:2:248:248:242m#[test]
27+
[38:2:131:148:150m 27 + [38:2:131:148:150m│ [38:2:102:217:239mfn[38:2:248:248:242m [38:2:166:226:46mcustom_background_color[38:2:248:248:242m() {
28+
[38:2:131:148:150m 28 + [38:2:131:148:150m│ [38:2:248:248:242m [38:2:102:217:239mlet[38:2:248:248:242m bytes [38:2:249:38:114m=[38:2:248:248:242m std::fs::read([38:2:230:219:116m"tests/custom_background_color.vte"[38:2:248:248:242m).[38:2:102:217:239munwrap[38:2:248:248:242m();
29+
[38:2:131:148:150m 29 + [38:2:131:148:150m│ [38:2:248:248:242m [38:2:166:226:46mString[38:2:248:248:242m::from_utf8(bytes).[38:2:102:217:239munwrap[38:2:248:248:242m();
30+
[38:2:131:148:150m 30 + [38:2:131:148:150m│ [38:2:248:248:242m [38:2:102:217:239mlet[38:2:248:248:242m input [38:2:249:38:114m=[38:2:248:248:242m std::fs::read_to_string([38:2:230:219:116m"tests/custom_background_color.vte"[38:2:248:248:242m).[38:2:102:217:239munwrap[38:2:248:248:242m();
31+
[38:2:131:148:150m 31 + [38:2:131:148:150m│ [38:2:248:248:242m [38:2:102:217:239mlet[38:2:248:248:242m actual [38:2:249:38:114m=[38:2:248:248:242m anstyle_svg::Term::new()
32+
[38:2:131:148:150m 32 + [38:2:131:148:150m│ [38:2:248:248:242m .[38:2:102:217:239mbg_color[38:2:248:248:242m(anstyle::Color::Rgb(RgbColor([38:2:190:132:255m0x18[38:2:248:248:242m, [38:2:190:132:255m0x18[38:2:248:248:242m, [38:2:190:132:255m0x18[38:2:248:248:242m)))
33+
[38:2:131:148:150m 33 + [38:2:131:148:150m│ [38:2:248:248:242m .[38:2:102:217:239mrender_svg[38:2:248:248:242m([38:2:249:38:114m&[38:2:248:248:242minput);
34+
[38:2:131:148:150m 34 + [38:2:131:148:150m│ [38:2:248:248:242m snapbox::assert_data_eq[38:2:249:38:114m![38:2:248:248:242m(
35+
[38:2:131:148:150m 35 + [38:2:131:148:150m│ [38:2:248:248:242m actual,
36+
[38:2:131:148:150m 36 + [38:2:131:148:150m│ [38:2:248:248:242m snapbox::file[38:2:249:38:114m![38:2:248:248:242m[[38:2:230:219:116m"custom_background_color.svg"[38:2:248:248:242m: Text].[38:2:102:217:239mraw[38:2:248:248:242m()
37+
[38:2:131:148:150m 37 + [38:2:131:148:150m│ [38:2:248:248:242m );
38+
[38:2:131:148:150m 38 + [38:2:131:148:150m│ [38:2:248:248:242m}
39+
[38:2:131:148:150m 39 + [38:2:131:148:150m│
40+
[38:2:131:148:150m 40 + [38:2:131:148:150m│ [38:2:248:248:242m#[test]
41+
[38:2:131:148:150m 41 [38:2:131:148:150m│ [38:2:102:217:239mfn[38:2:248:248:242m [38:2:166:226:46mrainbow_html[38:2:248:248:242m() {
42+
[38:2:131:148:150m 42 [38:2:131:148:150m│ [38:2:248:248:242m [38:2:102:217:239mlet[38:2:248:248:242m input [38:2:249:38:114m=[38:2:248:248:242m std::fs::read_to_string([38:2:230:219:116m"tests/rainbow.vte"[38:2:248:248:242m).[38:2:102:217:239munwrap[38:2:248:248:242m();
43+
[38:2:131:148:150m 43 [38:2:131:148:150m│ [38:2:248:248:242m [38:2:102:217:239mlet[38:2:248:248:242m actual [38:2:249:38:114m=[38:2:248:248:242m anstyle_svg::Term::new().[38:2:102:217:239mrender_html[38:2:248:248:242m([38:2:249:38:114m&[38:2:248:248:242minput);
44+
[38:2:131:148:150m 44 [38:2:131:148:150m│ [38:2:248:248:242m snapbox::assert_data_eq[38:2:249:38:114m![38:2:248:248:242m(actual, snapbox::file[38:2:249:38:114m![38:2:248:248:242m[[38:2:230:219:116m"rainbow.html"[38:2:248:248:242m: Text].[38:2:102:217:239mraw[38:2:248:248:242m());
45+
[38:2:131:148:150m 45 [38:2:131:148:150m│ [38:2:248:248:242m}
46+
[38:2:131:148:150m 46 [38:2:131:148:150m│
47+
[38:2:131:148:150m 47 [38:2:131:148:150m│ [38:2:248:248:242m#[test]
48+
[38:2:131:148:150m 48 [38:2:131:148:150m│ [38:2:102:217:239mfn[38:2:248:248:242m [38:2:166:226:46mrg_linus_html[38:2:248:248:242m() {
49+
[38:2:131:148:150m 49 [38:2:131:148:150m│ [38:2:248:248:242m [38:2:102:217:239mlet[38:2:248:248:242m input [38:2:249:38:114m=[38:2:248:248:242m std::fs::read_to_string([38:2:230:219:116m"tests/rg_linus.vte"[38:2:248:248:242m).[38:2:102:217:239munwrap[38:2:248:248:242m();
50+
[38:2:131:148:150m 50 [38:2:131:148:150m│ [38:2:248:248:242m [38:2:102:217:239mlet[38:2:248:248:242m actual [38:2:249:38:114m=[38:2:248:248:242m anstyle_svg::Term::new().[38:2:102:217:239mrender_html[38:2:248:248:242m([38:2:249:38:114m&[38:2:248:248:242minput);
51+
[38:2:131:148:150m 51 [38:2:131:148:150m│ [38:2:248:248:242m snapbox::assert_data_eq[38:2:249:38:114m![38:2:248:248:242m(actual, snapbox::file[38:2:249:38:114m![38:2:248:248:242m[[38:2:230:219:116m"rg_linus.html"[38:2:248:248:242m: Text].[38:2:102:217:239mraw[38:2:248:248:242m());
52+
[38:2:131:148:150m 52 [38:2:131:148:150m│ [38:2:248:248:242m}
53+
[38:2:131:148:150m 53 [38:2:131:148:150m│
54+
[38:2:131:148:150m 54 [38:2:131:148:150m│ [38:2:248:248:242m#[test]
55+
[38:2:131:148:150m 55 [38:2:131:148:150m│ [38:2:102:217:239mfn[38:2:248:248:242m [38:2:166:226:46mhyperlink_demo_html[38:2:248:248:242m() {
56+
[38:2:131:148:150m 56 [38:2:131:148:150m│ [38:2:248:248:242m [38:2:102:217:239mlet[38:2:248:248:242m bytes [38:2:249:38:114m=[38:2:248:248:242m std::fs::read([38:2:230:219:116m"tests/hyperlink-demo.vte"[38:2:248:248:242m).[38:2:102:217:239munwrap[38:2:248:248:242m();
57+
[38:2:131:148:150m 57 [38:2:131:148:150m│ [38:2:248:248:242m [38:2:166:226:46mString[38:2:248:248:242m::from_utf8(bytes).[38:2:102:217:239munwrap[38:2:248:248:242m();
58+
[38:2:131:148:150m 58 [38:2:131:148:150m│ [38:2:248:248:242m [38:2:102:217:239mlet[38:2:248:248:242m input [38:2:249:38:114m=[38:2:248:248:242m std::fs::read_to_string([38:2:230:219:116m"tests/hyperlink-demo.vte"[38:2:248:248:242m).[38:2:102:217:239munwrap[38:2:248:248:242m();
59+
[38:2:131:148:150m 59 [38:2:131:148:150m│ [38:2:248:248:242m [38:2:102:217:239mlet[38:2:248:248:242m actual [38:2:249:38:114m=[38:2:248:248:242m anstyle_svg::Term::new().[38:2:102:217:239mrender_html[38:2:248:248:242m([38:2:249:38:114m&[38:2:248:248:242minput);
60+
[38:2:131:148:150m 60 [38:2:131:148:150m│ [38:2:248:248:242m snapbox::assert_data_eq[38:2:249:38:114m![38:2:248:248:242m(actual, snapbox::file[38:2:249:38:114m![38:2:248:248:242m[[38:2:230:219:116m"hyperlink-demo.html"[38:2:248:248:242m: Text].[38:2:102:217:239mraw[38:2:248:248:242m());
61+
[38:2:131:148:150m 61 [38:2:131:148:150m│ [38:2:248:248:242m}

crates/anstyle-svg/tests/hyperlink-demo.svg

Lines changed: 1 addition & 1 deletion
Loading

crates/anstyle-svg/tests/rainbow.svg

Lines changed: 1 addition & 1 deletion
Loading

crates/anstyle-svg/tests/rg_linus.svg

Lines changed: 1 addition & 1 deletion
Loading

crates/anstyle-svg/tests/term.rs

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
use anstyle::RgbColor;
2+
13
#[test]
24
fn rainbow() {
35
let input = std::fs::read_to_string("tests/rainbow.vte").unwrap();
@@ -21,6 +23,20 @@ fn hyperlink_demo() {
2123
snapbox::assert_data_eq!(actual, snapbox::file!["hyperlink-demo.svg": Text].raw());
2224
}
2325

26+
#[test]
27+
fn custom_background_color() {
28+
let bytes = std::fs::read("tests/custom_background_color.vte").unwrap();
29+
String::from_utf8(bytes).unwrap();
30+
let input = std::fs::read_to_string("tests/custom_background_color.vte").unwrap();
31+
let actual = anstyle_svg::Term::new()
32+
.bg_color(anstyle::Color::Rgb(RgbColor(0x18, 0x18, 0x18)))
33+
.render_svg(&input);
34+
snapbox::assert_data_eq!(
35+
actual,
36+
snapbox::file!["custom_background_color.svg": Text].raw()
37+
);
38+
}
39+
2440
#[test]
2541
fn rainbow_html() {
2642
let input = std::fs::read_to_string("tests/rainbow.vte").unwrap();
@@ -43,3 +59,17 @@ fn hyperlink_demo_html() {
4359
let actual = anstyle_svg::Term::new().render_html(&input);
4460
snapbox::assert_data_eq!(actual, snapbox::file!["hyperlink-demo.html": Text].raw());
4561
}
62+
63+
#[test]
64+
fn custom_background_color_html() {
65+
let bytes = std::fs::read("tests/custom_background_color.vte").unwrap();
66+
String::from_utf8(bytes).unwrap();
67+
let input = std::fs::read_to_string("tests/custom_background_color.vte").unwrap();
68+
let actual = anstyle_svg::Term::new()
69+
.bg_color(anstyle::Color::Rgb(RgbColor(0x18, 0x18, 0x18)))
70+
.render_html(&input);
71+
snapbox::assert_data_eq!(
72+
actual,
73+
snapbox::file!["custom_background_color.html": Text].raw()
74+
);
75+
}

0 commit comments

Comments
 (0)