Skip to content

Commit 72dd6a5

Browse files
authored
fix: use correct colours in ansi colour pairs (#45)
* fix: use correct colours in ansi colour pairs * ci: run on examples & build.rs
1 parent 60f65ab commit 72dd6a5

File tree

3 files changed

+107
-114
lines changed

3 files changed

+107
-114
lines changed

.github/workflows/build.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,14 @@ on:
55
push:
66
paths:
77
- "src/**"
8+
- "examples/**"
9+
- "build.rs"
810
- "Cargo.toml"
911
pull_request:
1012
paths:
1113
- "src/**"
14+
- "examples/**"
15+
- "build.rs"
1216
- "Cargo.toml"
1317

1418
jobs:

build.rs

Lines changed: 82 additions & 114 deletions
Original file line numberDiff line numberDiff line change
@@ -88,37 +88,37 @@ fn main() -> Result<(), Box<dyn Error>> {
8888

8989
let flavor_tokens = [
9090
// Colors
91-
make_flavor_colors_struct(sample_flavor),
92-
make_flavor_colors_all_impl(sample_flavor),
91+
make_flavor_colors_struct_tokens(sample_flavor),
92+
make_flavor_colors_all_impl_tokens(sample_flavor),
9393
// ANSI Colors
94-
make_flavor_ansi_colors_struct(sample_flavor),
95-
make_flavor_ansi_colors_all_impl(sample_flavor),
94+
make_flavor_ansi_colors_struct_tokens(sample_flavor),
95+
make_flavor_ansi_colors_all_impl_tokens(sample_flavor),
9696
// ANSI Color Pairs
97-
make_flavor_ansi_color_pairs_struct(sample_flavor),
98-
make_flavor_ansi_color_pairs_all_impl(sample_flavor),
97+
make_flavor_ansi_color_pairs_struct_tokens(sample_flavor),
98+
make_flavor_ansi_color_pairs_all_impl_tokens(sample_flavor),
9999
];
100100
let color_tokens = [
101-
make_color_name_enum(sample_flavor),
102-
make_color_name_index_impl(sample_flavor),
103-
make_color_name_display_impl(sample_flavor),
104-
make_color_name_identifier_impl(sample_flavor),
101+
make_color_name_enum_tokens(sample_flavor),
102+
make_color_name_index_impl_tokens(sample_flavor),
103+
make_color_name_display_impl_tokens(sample_flavor),
104+
make_color_name_identifier_impl_tokens(sample_flavor),
105105
make_color_name_fromstr_impl_tokens(sample_flavor),
106106
];
107107
let ansi_color_tokens = [
108-
make_ansi_color_name_enum(sample_flavor),
109-
make_ansi_color_name_index_impl(sample_flavor),
110-
make_ansi_color_name_display_impl(sample_flavor),
111-
make_ansi_color_name_identifier_impl(sample_flavor),
108+
make_ansi_color_name_enum_tokens(sample_flavor),
109+
make_ansi_color_name_index_impl_tokens(sample_flavor),
110+
make_ansi_color_name_display_impl_tokens(sample_flavor),
111+
make_ansi_color_name_identifier_impl_tokens(sample_flavor),
112112
make_ansi_color_name_fromstr_impl_tokens(sample_flavor),
113113
];
114114
let ansi_color_pair_tokens = [
115-
make_ansi_color_pair_name_enum(sample_flavor),
116-
make_ansi_color_pair_name_index_impl(sample_flavor),
117-
make_ansi_color_pair_name_display_impl(sample_flavor),
118-
make_ansi_color_pair_name_identifier_impl(sample_flavor),
115+
make_ansi_color_pair_name_enum_tokens(sample_flavor),
116+
make_ansi_color_pair_name_index_impl_tokens(sample_flavor),
117+
make_ansi_color_pair_name_display_impl_tokens(sample_flavor),
118+
make_ansi_color_pair_name_identifier_impl_tokens(sample_flavor),
119119
make_ansi_color_pair_name_fromstr_impl_tokens(sample_flavor),
120120
];
121-
let palette_tokens = [make_palette_const(&palette)];
121+
let palette_tokens = [make_palette_const_tokens(&palette)];
122122

123123
let ast = syn::parse2(
124124
[
@@ -183,11 +183,21 @@ fn colors_in_order(flavor: &Flavor) -> std::vec::IntoIter<(&String, &Color)> {
183183
.sorted_by(|(_, a), (_, b)| a.order.cmp(&b.order))
184184
}
185185

186-
fn ansi_color_pairs_in_order(flavor: &Flavor) -> std::vec::IntoIter<(&String, &AnsiColorPair)> {
186+
fn ansi_color_pairs_in_order(
187+
flavor: &Flavor,
188+
) -> std::vec::IntoIter<(&String, &AnsiColorPair, String, String)> {
187189
flavor
188190
.ansi_colors
189191
.iter()
190-
.sorted_by(|(_, a), (_, b)| a.order.cmp(&b.order))
192+
.map(|(ident, pair)| {
193+
(
194+
ident,
195+
pair,
196+
pair.normal.name.to_lowercase().replace(' ', "_"),
197+
pair.bright.name.to_lowercase().replace(' ', "_"),
198+
)
199+
})
200+
.sorted_by(|(_, a, _, _), (_, b, _, _)| a.order.cmp(&b.order))
191201
}
192202

193203
fn ansi_colors_in_order(flavor: &Flavor) -> std::vec::IntoIter<(String, &AnsiColor)> {
@@ -199,7 +209,7 @@ fn ansi_colors_in_order(flavor: &Flavor) -> std::vec::IntoIter<(String, &AnsiCol
199209
.sorted_by(|(_, a), (_, b)| a.code.cmp(&b.code))
200210
}
201211

202-
fn make_flavor_colors_struct(sample_flavor: &Flavor) -> TokenStream {
212+
fn make_flavor_colors_struct_tokens(sample_flavor: &Flavor) -> TokenStream {
203213
let colors = colors_in_order(sample_flavor).map(|(k, _)| {
204214
let ident = format_ident!("{k}");
205215
let color_img = format!(" {}", color_palette_circles(k));
@@ -219,7 +229,7 @@ fn make_flavor_colors_struct(sample_flavor: &Flavor) -> TokenStream {
219229
}
220230
}
221231

222-
fn make_flavor_ansi_colors_struct(sample_flavor: &Flavor) -> TokenStream {
232+
fn make_flavor_ansi_colors_struct_tokens(sample_flavor: &Flavor) -> TokenStream {
223233
let colors = ansi_colors_in_order(sample_flavor).map(|(k, _)| {
224234
let ident = format_ident!("{k}");
225235
let color_img = format!(" {}", ansi_color_palette_circles(&k));
@@ -255,8 +265,8 @@ fn make_flavor_ansi_colors_struct(sample_flavor: &Flavor) -> TokenStream {
255265
}
256266
}
257267

258-
fn make_flavor_ansi_color_pairs_struct(sample_flavor: &Flavor) -> TokenStream {
259-
let color_pairs = ansi_color_pairs_in_order(sample_flavor).map(|(k, _)| {
268+
fn make_flavor_ansi_color_pairs_struct_tokens(sample_flavor: &Flavor) -> TokenStream {
269+
let color_pairs = ansi_color_pairs_in_order(sample_flavor).map(|(k, ..)| {
260270
let ident = format_ident!("{k}");
261271
let doc = format!("The normal and bright {k} ANSI color pair.");
262272
quote! {
@@ -288,7 +298,7 @@ fn make_flavor_ansi_color_pairs_struct(sample_flavor: &Flavor) -> TokenStream {
288298
}
289299
}
290300

291-
fn make_flavor_colors_all_impl(sample_flavor: &Flavor) -> TokenStream {
301+
fn make_flavor_colors_all_impl_tokens(sample_flavor: &Flavor) -> TokenStream {
292302
let items = colors_in_order(sample_flavor).map(|(identifier, _)| {
293303
let ident = format_ident!("{identifier}");
294304
quote! { &self.#ident }
@@ -306,13 +316,21 @@ fn make_flavor_colors_all_impl(sample_flavor: &Flavor) -> TokenStream {
306316
}
307317
}
308318

309-
fn make_flavor_ansi_colors_all_impl(sample_flavor: &Flavor) -> TokenStream {
319+
fn make_flavor_ansi_colors_all_impl_tokens(sample_flavor: &Flavor) -> TokenStream {
310320
let ansi_colors = ansi_colors_in_order(sample_flavor).map(|(identifier, _)| {
311321
let ident = format_ident!("{identifier}");
312322
quote! { &self.#ident }
313323
});
314-
let ansi_color_pairs = ansi_color_pairs_in_order(sample_flavor)
315-
.map(|(identifier, color_pair)| make_ansi_color_pair_entry(identifier, color_pair));
324+
let ansi_color_pairs = ansi_color_pairs_in_order(sample_flavor).map(
325+
|(identifier, color_pair, normal_identifier, bright_identifier)| {
326+
make_ansi_color_pair_entry(
327+
identifier,
328+
color_pair,
329+
&normal_identifier,
330+
&bright_identifier,
331+
)
332+
},
333+
);
316334
quote! {
317335
impl FlavorAnsiColors {
318336
/// Get an array of the ANSI colors in the flavor.
@@ -335,8 +353,8 @@ fn make_flavor_ansi_colors_all_impl(sample_flavor: &Flavor) -> TokenStream {
335353
}
336354
}
337355

338-
fn make_flavor_ansi_color_pairs_all_impl(sample_flavor: &Flavor) -> TokenStream {
339-
let items = ansi_color_pairs_in_order(sample_flavor).map(|(identifier, _)| {
356+
fn make_flavor_ansi_color_pairs_all_impl_tokens(sample_flavor: &Flavor) -> TokenStream {
357+
let items = ansi_color_pairs_in_order(sample_flavor).map(|(identifier, ..)| {
340358
let ident = format_ident!("{identifier}");
341359
quote! { &self.#ident }
342360
});
@@ -353,7 +371,7 @@ fn make_flavor_ansi_color_pairs_all_impl(sample_flavor: &Flavor) -> TokenStream
353371
}
354372
}
355373

356-
fn make_color_name_enum(sample_flavor: &Flavor) -> TokenStream {
374+
fn make_color_name_enum_tokens(sample_flavor: &Flavor) -> TokenStream {
357375
let variants = colors_in_order(sample_flavor).map(|(name, _)| {
358376
let ident = format_ident!("{}", titlecase(name));
359377
let circles = format!(" {}", color_palette_circles(name));
@@ -372,7 +390,7 @@ fn make_color_name_enum(sample_flavor: &Flavor) -> TokenStream {
372390
}
373391
}
374392

375-
fn make_ansi_color_name_enum(sample_flavor: &Flavor) -> TokenStream {
393+
fn make_ansi_color_name_enum_tokens(sample_flavor: &Flavor) -> TokenStream {
376394
let variants = ansi_colors_in_order(sample_flavor).map(|(identifier, color)| {
377395
let name = remove_whitespace(&color.name);
378396
let ident = format_ident!("{name}");
@@ -392,8 +410,8 @@ fn make_ansi_color_name_enum(sample_flavor: &Flavor) -> TokenStream {
392410
}
393411
}
394412

395-
fn make_ansi_color_pair_name_enum(sample_flavor: &Flavor) -> TokenStream {
396-
let variants = ansi_color_pairs_in_order(sample_flavor).map(|(name, _)| {
413+
fn make_ansi_color_pair_name_enum_tokens(sample_flavor: &Flavor) -> TokenStream {
414+
let variants = ansi_color_pairs_in_order(sample_flavor).map(|(name, ..)| {
397415
let ident = format_ident!("{}", titlecase(name));
398416
let circles = format!(" {}", ansi_color_palette_circles(name));
399417
quote! {
@@ -411,7 +429,7 @@ fn make_ansi_color_pair_name_enum(sample_flavor: &Flavor) -> TokenStream {
411429
}
412430
}
413431

414-
fn make_color_name_index_impl(sample_flavor: &Flavor) -> TokenStream {
432+
fn make_color_name_index_impl_tokens(sample_flavor: &Flavor) -> TokenStream {
415433
let first = colors_in_order(sample_flavor).map(|(identifier, _)| {
416434
let variant = format_ident!("{}", titlecase(identifier));
417435
let ident = format_ident!("{}", identifier);
@@ -446,7 +464,7 @@ fn make_color_name_index_impl(sample_flavor: &Flavor) -> TokenStream {
446464
}
447465
}
448466

449-
fn make_ansi_color_name_index_impl(sample_flavor: &Flavor) -> TokenStream {
467+
fn make_ansi_color_name_index_impl_tokens(sample_flavor: &Flavor) -> TokenStream {
450468
let first = ansi_colors_in_order(sample_flavor).map(|(identifier, color)| {
451469
let variant = format_ident!("{}", remove_whitespace(&color.name));
452470
let ident = format_ident!("{}", identifier);
@@ -481,8 +499,8 @@ fn make_ansi_color_name_index_impl(sample_flavor: &Flavor) -> TokenStream {
481499
}
482500
}
483501

484-
fn make_ansi_color_pair_name_index_impl(sample_flavor: &Flavor) -> TokenStream {
485-
let first = ansi_color_pairs_in_order(sample_flavor).map(|(identifier, _)| {
502+
fn make_ansi_color_pair_name_index_impl_tokens(sample_flavor: &Flavor) -> TokenStream {
503+
let first = ansi_color_pairs_in_order(sample_flavor).map(|(identifier, ..)| {
486504
let variant = format_ident!("{}", titlecase(identifier));
487505
let ident = format_ident!("{}", identifier);
488506
quote! {
@@ -516,7 +534,7 @@ fn make_ansi_color_pair_name_index_impl(sample_flavor: &Flavor) -> TokenStream {
516534
}
517535
}
518536

519-
fn make_color_name_display_impl(sample_flavor: &Flavor) -> TokenStream {
537+
fn make_color_name_display_impl_tokens(sample_flavor: &Flavor) -> TokenStream {
520538
let match_arms = colors_in_order(sample_flavor).map(|(identifier, color)| {
521539
let variant = format_ident!("{}", titlecase(identifier));
522540
let name = &color.name;
@@ -535,7 +553,7 @@ fn make_color_name_display_impl(sample_flavor: &Flavor) -> TokenStream {
535553
}
536554
}
537555

538-
fn make_ansi_color_name_display_impl(sample_flavor: &Flavor) -> TokenStream {
556+
fn make_ansi_color_name_display_impl_tokens(sample_flavor: &Flavor) -> TokenStream {
539557
let match_arms = ansi_colors_in_order(sample_flavor).map(|(_, color)| {
540558
let name = &color.name;
541559
let variant = format_ident!("{}", remove_whitespace(name));
@@ -554,8 +572,8 @@ fn make_ansi_color_name_display_impl(sample_flavor: &Flavor) -> TokenStream {
554572
}
555573
}
556574

557-
fn make_ansi_color_pair_name_display_impl(sample_flavor: &Flavor) -> TokenStream {
558-
let match_arms = ansi_color_pairs_in_order(sample_flavor).map(|(identifier, _)| {
575+
fn make_ansi_color_pair_name_display_impl_tokens(sample_flavor: &Flavor) -> TokenStream {
576+
let match_arms = ansi_color_pairs_in_order(sample_flavor).map(|(identifier, ..)| {
559577
let name = titlecase(identifier);
560578
let variant = format_ident!("{name}");
561579
quote! {
@@ -573,7 +591,7 @@ fn make_ansi_color_pair_name_display_impl(sample_flavor: &Flavor) -> TokenStream
573591
}
574592
}
575593

576-
fn make_color_name_identifier_impl(sample_flavor: &Flavor) -> TokenStream {
594+
fn make_color_name_identifier_impl_tokens(sample_flavor: &Flavor) -> TokenStream {
577595
let match_arms = colors_in_order(sample_flavor).map(|(identifier, _)| {
578596
let variant = format_ident!("{}", titlecase(identifier));
579597
quote! {
@@ -603,7 +621,7 @@ fn make_color_name_identifier_impl(sample_flavor: &Flavor) -> TokenStream {
603621
}
604622
}
605623

606-
fn make_ansi_color_name_identifier_impl(sample_flavor: &Flavor) -> TokenStream {
624+
fn make_ansi_color_name_identifier_impl_tokens(sample_flavor: &Flavor) -> TokenStream {
607625
let match_arms = ansi_colors_in_order(sample_flavor).map(|(identifier, color)| {
608626
let variant = format_ident!("{}", remove_whitespace(&color.name));
609627
quote! {
@@ -633,8 +651,8 @@ fn make_ansi_color_name_identifier_impl(sample_flavor: &Flavor) -> TokenStream {
633651
}
634652
}
635653

636-
fn make_ansi_color_pair_name_identifier_impl(sample_flavor: &Flavor) -> TokenStream {
637-
let match_arms = ansi_color_pairs_in_order(sample_flavor).map(|(identifier, _)| {
654+
fn make_ansi_color_pair_name_identifier_impl_tokens(sample_flavor: &Flavor) -> TokenStream {
655+
let match_arms = ansi_color_pairs_in_order(sample_flavor).map(|(identifier, ..)| {
638656
let variant = format_ident!("{}", titlecase(identifier));
639657
quote! {
640658
Self::#variant => #identifier
@@ -715,7 +733,7 @@ fn make_ansi_color_name_fromstr_impl_tokens(sample_flavor: &Flavor) -> TokenStre
715733

716734
fn make_ansi_color_pair_name_fromstr_impl_tokens(sample_flavor: &Flavor) -> TokenStream {
717735
let match_arms = ansi_color_pairs_in_order(sample_flavor)
718-
.map(|(identifier, _)| {
736+
.map(|(identifier, ..)| {
719737
let variant = format_ident!("{}", titlecase(identifier));
720738
quote! {
721739
#identifier => Ok(Self::#variant)
@@ -736,7 +754,7 @@ fn make_ansi_color_pair_name_fromstr_impl_tokens(sample_flavor: &Flavor) -> Toke
736754
}
737755
}
738756

739-
fn make_palette_const(palette: &Palette) -> TokenStream {
757+
fn make_palette_const_tokens(palette: &Palette) -> TokenStream {
740758
let flavors =
741759
flavors_in_order(palette).map(|(identifier, flavor)| make_flavor_entry(identifier, flavor));
742760
let tokens = quote! {
@@ -825,74 +843,24 @@ fn make_ansi_color_entry(identifier: &str, ansi_color: &AnsiColor) -> TokenStrea
825843
}
826844
}
827845

828-
fn make_ansi_color_pair_entry(identifier: &str, ansi_color_pair: &AnsiColorPair) -> TokenStream {
829-
let ident = format_ident!("{}", identifier);
830-
let AnsiColorPair {
831-
name,
832-
order,
833-
normal:
834-
AnsiColor {
835-
name: normal_name,
836-
code: normal_code,
837-
rgb:
838-
Rgb {
839-
r: normal_r,
840-
g: normal_g,
841-
b: normal_b,
842-
},
843-
hsl:
844-
Hsl {
845-
h: normal_h,
846-
s: normal_s,
847-
l: normal_l,
848-
},
849-
},
850-
bright:
851-
AnsiColor {
852-
name: bright_name,
853-
code: bright_code,
854-
rgb:
855-
Rgb {
856-
r: bright_r,
857-
g: bright_g,
858-
b: bright_b,
859-
},
860-
hsl:
861-
Hsl {
862-
h: bright_h,
863-
s: bright_s,
864-
l: bright_l,
865-
},
866-
..
867-
},
868-
} = ansi_color_pair;
869-
870-
let ansi_name_variant = format_ident!("{}", name);
871-
let normal_name_variant = format_ident!("{}", normal_name);
872-
let bright_name_variant = format_ident!("{}", remove_whitespace(bright_name));
873-
let normal_rgb = quote! { Rgb { r: #normal_r, g: #normal_g, b: #normal_b } };
874-
let normal_hsl = quote! { Hsl { h: #normal_h, s: #normal_s, l: #normal_l } };
875-
let bright_rgb = quote! { Rgb { r: #bright_r, g: #bright_g, b: #bright_b } };
876-
let bright_hsl = quote! { Hsl { h: #bright_h, s: #bright_s, l: #bright_l } };
846+
fn make_ansi_color_pair_entry(
847+
identifier: &str,
848+
ansi_color_pair: &AnsiColorPair,
849+
normal_identifier: &str,
850+
bright_identifier: &str,
851+
) -> TokenStream {
852+
let identifier = format_ident!("{}", identifier);
853+
let name_identifier = format_ident!("{}", ansi_color_pair.name);
854+
let order = ansi_color_pair.order;
855+
let normal_identifier = format_ident!("{}", normal_identifier);
856+
let bright_identifier = format_ident!("{}", bright_identifier);
877857

878858
quote! {
879-
#ident: AnsiColorPair {
880-
name: AnsiColorPairName::#ansi_name_variant,
859+
#identifier: AnsiColorPair {
860+
name: AnsiColorPairName::#name_identifier,
881861
order: #order,
882-
normal: AnsiColor {
883-
name: AnsiColorName::#normal_name_variant,
884-
hex: Hex(#normal_rgb),
885-
rgb: #normal_rgb,
886-
hsl: #normal_hsl,
887-
code: #normal_code,
888-
},
889-
bright: AnsiColor {
890-
name: AnsiColorName::#bright_name_variant,
891-
hex: Hex(#bright_rgb),
892-
rgb: #bright_rgb,
893-
hsl: #bright_hsl,
894-
code: #bright_code,
895-
}
862+
normal: self.#normal_identifier,
863+
bright: self.#bright_identifier,
896864
}
897865
}
898866
}

0 commit comments

Comments
 (0)