Skip to content

Commit 85c9a86

Browse files
committed
feat: Support SGR 22-29 (off codes)
1 parent ac5c23b commit 85c9a86

File tree

5 files changed

+62
-36
lines changed

5 files changed

+62
-36
lines changed

crates/anstyle-svg/src/adapter.rs

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,44 @@ impl anstyle_parse::Perform for AnsiCapture {
154154
style |= anstyle::Effects::DOUBLE_UNDERLINE;
155155
break;
156156
}
157+
(CsiState::Normal, 22) => {
158+
style = style.effects(
159+
style
160+
.get_effects()
161+
.remove(anstyle::Effects::BOLD)
162+
.remove(anstyle::Effects::DIMMED),
163+
);
164+
break;
165+
}
166+
(CsiState::Normal, 23) => {
167+
style = style.effects(style.get_effects().remove(anstyle::Effects::ITALIC));
168+
break;
169+
}
170+
(CsiState::Normal, 24) => {
171+
style = style.effects(
172+
style
173+
.get_effects()
174+
.remove(anstyle::Effects::UNDERLINE)
175+
.remove(anstyle::Effects::DOUBLE_UNDERLINE)
176+
.remove(anstyle::Effects::CURLY_UNDERLINE)
177+
.remove(anstyle::Effects::DOTTED_UNDERLINE)
178+
.remove(anstyle::Effects::DASHED_UNDERLINE),
179+
);
180+
break;
181+
}
182+
(CsiState::Normal, 27) => {
183+
style = style.effects(style.get_effects().remove(anstyle::Effects::INVERT));
184+
break;
185+
}
186+
(CsiState::Normal, 28) => {
187+
style = style.effects(style.get_effects().remove(anstyle::Effects::HIDDEN));
188+
break;
189+
}
190+
(CsiState::Normal, 29) => {
191+
style = style
192+
.effects(style.get_effects().remove(anstyle::Effects::STRIKETHROUGH));
193+
break;
194+
}
157195
(CsiState::Normal, 30..=37) => {
158196
let color = to_ansi_color(value - 30).expect("within 4-bit range");
159197
style = style.fg_color(Some(color.into()));

crates/anstyle-svg/tests/sgr_off_codes.html

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -29,19 +29,15 @@
2929
<body class="bg">
3030

3131
<div class="container fg">
32-
<span class="bold">bold normal</span><br />
33-
<span class="bold dimmed">dim normal</span><br />
34-
<span class="bold italic dimmed">italic normal</span><br />
35-
<span class="underline bold italic dimmed">underline normal</span><br />
36-
<span class="bg-white">█████████████</span><br />
37-
<span class="fg-black underline bold italic dimmed">invert normal</span><br />
38-
<span class="bg-white">█████████████</span><br />
39-
<span class="fg-black underline bold italic dimmed hidden">hidden normal</span><br />
40-
<span class="bg-white">████████████████████</span><br />
41-
<span class="fg-black underline strikethrough bold italic dimmed hidden">strikethrough normal</span><br />
42-
<span class="bg-white">█████████████████████████████████</span><br />
43-
<span class="fg-black underline strikethrough bold italic dimmed hidden">all three no bold no italic plain</span><br />
44-
<br />
32+
<span class="bold">bold</span><span> normal</span><br />
33+
<span class="dimmed">dim</span><span> normal</span><br />
34+
<span class="italic">italic</span><span> normal</span><br />
35+
<span class="underline">underline</span><span> normal</span><br />
36+
<span class="bg-white">██████</span><span> </span><br />
37+
<span class="fg-black">invert</span><span> normal</span><br />
38+
<span class="hidden">hidden</span><span> normal</span><br />
39+
<span class="strikethrough">strikethrough</span><span> normal</span><br />
40+
<span class="underline bold italic">all three</span><span class="underline italic"> no bold</span><span class="underline"> no italic</span><span> plain</span><br />
4541
<br />
4642
</div>
4743

crates/anstyle-svg/tests/sgr_off_codes.svg

Lines changed: 9 additions & 17 deletions
Loading

crates/anstyle-svg/tests/underline_color_reset.html

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,9 @@
2525
<body class="bg">
2626

2727
<div class="container fg">
28-
<span class="underline-rgb-FF0000 underline">red underline default color underline normal</span><br />
29-
<span class="underline-ansi256-202 underline">orange underline default color underline normal</span><br />
30-
<span class="underline-rgb-0080FF underline">blue underline default color underline normal</span><br />
28+
<span class="underline-rgb-FF0000 underline">red underline default color underline</span><span class="underline-rgb-FF0000"> normal</span><br />
29+
<span class="underline-ansi256-202 underline">orange underline default color underline</span><span class="underline-ansi256-202"> normal</span><br />
30+
<span class="underline-rgb-0080FF underline">blue underline default color underline</span><span class="underline-rgb-0080FF"> normal</span><br />
3131
<br />
3232
</div>
3333

crates/anstyle-svg/tests/underline_color_reset.svg

Lines changed: 3 additions & 3 deletions
Loading

0 commit comments

Comments
 (0)