| 1 | macro_rules! xterm_colors { |
| 2 | ($( |
| 3 | $xterm_num:literal $name:ident ($r:literal, $g:literal, $b:literal) |
| 4 | )*) => { |
| 5 | |
| 6 | pub(crate) mod dynamic { |
| 7 | use core::fmt; |
| 8 | |
| 9 | #[allow(unused_imports)] |
| 10 | use crate::OwoColorize; |
| 11 | |
| 12 | /// Available Xterm colors for use with [`OwoColorize::color`](OwoColorize::color) |
| 13 | /// or [`OwoColorize::on_color`](OwoColorize::on_color) |
| 14 | #[derive(Copy, Clone, Debug, PartialEq, Eq)] |
| 15 | pub enum XtermColors { |
| 16 | $( |
| 17 | #[allow(missing_docs)] |
| 18 | $name, |
| 19 | )* |
| 20 | } |
| 21 | |
| 22 | impl crate::DynColor for XtermColors { |
| 23 | fn fmt_ansi_fg(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { |
| 24 | let color = match self { |
| 25 | $( |
| 26 | XtermColors::$name => concat!(" \x1b[38;5;" , stringify!($xterm_num), "m" ), |
| 27 | )* |
| 28 | }; |
| 29 | |
| 30 | f.write_str(color) |
| 31 | } |
| 32 | |
| 33 | fn fmt_ansi_bg(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { |
| 34 | let color = match self { |
| 35 | $( |
| 36 | XtermColors::$name => concat!(" \x1b[48;5;" , stringify!($xterm_num), "m" ), |
| 37 | )* |
| 38 | }; |
| 39 | |
| 40 | f.write_str(color) |
| 41 | } |
| 42 | |
| 43 | fn fmt_raw_ansi_fg(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { |
| 44 | let color = match self { |
| 45 | $( |
| 46 | XtermColors::$name => concat!("38;5;" , stringify!($xterm_num)), |
| 47 | )* |
| 48 | }; |
| 49 | |
| 50 | f.write_str(color) |
| 51 | } |
| 52 | |
| 53 | fn fmt_raw_ansi_bg(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { |
| 54 | let color = match self { |
| 55 | $( |
| 56 | XtermColors::$name => concat!("48;5;" , stringify!($xterm_num)), |
| 57 | )* |
| 58 | }; |
| 59 | |
| 60 | f.write_str(color) |
| 61 | } |
| 62 | |
| 63 | #[doc(hidden)] |
| 64 | fn get_dyncolors_fg(&self) -> crate::DynColors { |
| 65 | crate::DynColors::Xterm(*self) |
| 66 | } |
| 67 | |
| 68 | #[doc(hidden)] |
| 69 | fn get_dyncolors_bg(&self) -> crate::DynColors { |
| 70 | crate::DynColors::Xterm(*self) |
| 71 | } |
| 72 | } |
| 73 | |
| 74 | impl From<u8> for XtermColors { |
| 75 | fn from(x: u8) -> Self { |
| 76 | match x { |
| 77 | $( |
| 78 | $xterm_num => XtermColors::$name, |
| 79 | )* |
| 80 | } |
| 81 | } |
| 82 | } |
| 83 | |
| 84 | impl From<XtermColors> for u8 { |
| 85 | fn from(color: XtermColors) -> Self { |
| 86 | match color { |
| 87 | $( |
| 88 | XtermColors::$name => $xterm_num, |
| 89 | )* |
| 90 | } |
| 91 | } |
| 92 | } |
| 93 | } |
| 94 | |
| 95 | $( |
| 96 | #[allow(missing_docs)] |
| 97 | pub struct $name; |
| 98 | |
| 99 | impl crate::Color for $name { |
| 100 | const ANSI_FG: &'static str = concat!(" \x1b[38;5;" , stringify!($xterm_num), "m" ); |
| 101 | const ANSI_BG: &'static str = concat!(" \x1b[48;5;" , stringify!($xterm_num), "m" ); |
| 102 | |
| 103 | const RAW_ANSI_BG: &'static str = concat!("48;5;" , stringify!($xterm_num)); |
| 104 | const RAW_ANSI_FG: &'static str = concat!("48;5;" , stringify!($xterm_num)); |
| 105 | |
| 106 | #[doc(hidden)] |
| 107 | type DynEquivelant = dynamic::XtermColors; |
| 108 | |
| 109 | #[doc(hidden)] |
| 110 | const DYN_EQUIVELANT: Self::DynEquivelant = dynamic::XtermColors::$name; |
| 111 | |
| 112 | #[doc(hidden)] |
| 113 | fn into_dyncolors() -> crate::DynColors { |
| 114 | crate::DynColors::Xterm(dynamic::XtermColors::$name) |
| 115 | } |
| 116 | } |
| 117 | )* |
| 118 | }; |
| 119 | } |
| 120 | |
| 121 | xterm_colors! { |
| 122 | 0 UserBlack (0,0,0) |
| 123 | 1 UserRed (128,0,0) |
| 124 | 2 UserGreen (0,128,0) |
| 125 | 3 UserYellow (128,128,0) |
| 126 | 4 UserBlue (0,0,128) |
| 127 | 5 UserMagenta (128,0,128) |
| 128 | 6 UserCyan (0,128,128) |
| 129 | 7 UserWhite (192,192,192) |
| 130 | 8 UserBrightBlack (128,128,128) |
| 131 | 9 UserBrightRed (255,0,0) |
| 132 | 10 UserBrightGreen (0,255,0) |
| 133 | 11 UserBrightYellow (255,255,0) |
| 134 | 12 UserBrightBlue (0,0,255) |
| 135 | 13 UserBrightMagenta (255,0,255) |
| 136 | 14 UserBrightCyan (0,255,255) |
| 137 | 15 UserBrightWhite (255,255,255) |
| 138 | 16 Black (0,0,0) |
| 139 | 17 StratosBlue (0,0,95) |
| 140 | 18 NavyBlue (0,0,135) |
| 141 | 19 MidnightBlue (0,0,175) |
| 142 | 20 DarkBlue (0,0,215) |
| 143 | 21 Blue (0,0,255) |
| 144 | 22 CamaroneGreen (0,95,0) |
| 145 | 23 BlueStone (0,95,95) |
| 146 | 24 OrientBlue (0,95,135) |
| 147 | 25 EndeavourBlue (0,95,175) |
| 148 | 26 ScienceBlue (0,95,215) |
| 149 | 27 BlueRibbon (0,95,255) |
| 150 | 28 JapaneseLaurel (0,135,0) |
| 151 | 29 DeepSeaGreen (0,135,95) |
| 152 | 30 Teal (0,135,135) |
| 153 | 31 DeepCerulean (0,135,175) |
| 154 | 32 LochmaraBlue (0,135,215) |
| 155 | 33 AzureRadiance (0,135,255) |
| 156 | 34 LightJapaneseLaurel (0,175,0) |
| 157 | 35 Jade (0,175,95) |
| 158 | 36 PersianGreen (0,175,135) |
| 159 | 37 BondiBlue (0,175,175) |
| 160 | 38 Cerulean (0,175,215) |
| 161 | 39 LightAzureRadiance (0,175,255) |
| 162 | 40 DarkGreen (0,215,0) |
| 163 | 41 Malachite (0,215,95) |
| 164 | 42 CaribbeanGreen (0,215,135) |
| 165 | 43 LightCaribbeanGreen (0,215,175) |
| 166 | 44 RobinEggBlue (0,215,215) |
| 167 | 45 Aqua (0,215,255) |
| 168 | 46 Green (0,255,0) |
| 169 | 47 DarkSpringGreen (0,255,95) |
| 170 | 48 SpringGreen (0,255,135) |
| 171 | 49 LightSpringGreen (0,255,175) |
| 172 | 50 BrightTurquoise (0,255,215) |
| 173 | 51 Cyan (0,255,255) |
| 174 | 52 Rosewood (95,0,0) |
| 175 | 53 PompadourMagenta (95,0,95) |
| 176 | 54 PigmentIndigo (95,0,135) |
| 177 | 55 DarkPurple (95,0,175) |
| 178 | 56 ElectricIndigo (95,0,215) |
| 179 | 57 ElectricPurple (95,0,255) |
| 180 | 58 VerdunGreen (95,95,0) |
| 181 | 59 ScorpionOlive (95,95,95) |
| 182 | 60 Lilac (95,95,135) |
| 183 | 61 ScampiIndigo (95,95,175) |
| 184 | 62 Indigo (95,95,215) |
| 185 | 63 DarkCornflowerBlue (95,95,255) |
| 186 | 64 DarkLimeade (95,135,0) |
| 187 | 65 GladeGreen (95,135,95) |
| 188 | 66 JuniperGreen (95,135,135) |
| 189 | 67 HippieBlue (95,135,175) |
| 190 | 68 HavelockBlue (95,135,215) |
| 191 | 69 CornflowerBlue (95,135,255) |
| 192 | 70 Limeade (95,175,0) |
| 193 | 71 FernGreen (95,175,95) |
| 194 | 72 SilverTree (95,175,135) |
| 195 | 73 Tradewind (95,175,175) |
| 196 | 74 ShakespeareBlue (95,175,215) |
| 197 | 75 DarkMalibuBlue (95,175,255) |
| 198 | 76 DarkBrightGreen (95,215,0) |
| 199 | 77 DarkPastelGreen (95,215,95) |
| 200 | 78 PastelGreen (95,215,135) |
| 201 | 79 DownyTeal (95,215,175) |
| 202 | 80 Viking (95,215,215) |
| 203 | 81 MalibuBlue (95,215,255) |
| 204 | 82 BrightGreen (95,255,0) |
| 205 | 83 DarkScreaminGreen (95,255,95) |
| 206 | 84 ScreaminGreen (95,255,135) |
| 207 | 85 DarkAquamarine (95,255,175) |
| 208 | 86 Aquamarine (95,255,215) |
| 209 | 87 LightAquamarine (95,255,255) |
| 210 | 88 Maroon (135,0,0) |
| 211 | 89 DarkFreshEggplant (135,0,95) |
| 212 | 90 LightFreshEggplant (135,0,135) |
| 213 | 91 Purple (135,0,175) |
| 214 | 92 ElectricViolet (135,0,215) |
| 215 | 93 LightElectricViolet (135,0,255) |
| 216 | 94 Brown (135,95,0) |
| 217 | 95 CopperRose (135,95,95) |
| 218 | 96 StrikemasterPurple (135,95,135) |
| 219 | 97 DelugePurple (135,95,175) |
| 220 | 98 DarkMediumPurple (135,95,215) |
| 221 | 99 DarkHeliotropePurple (135,95,255) |
| 222 | 100 Olive (135,135,0) |
| 223 | 101 ClayCreekOlive (135,135,95) |
| 224 | 102 DarkGray (135,135,135) |
| 225 | 103 WildBlueYonder (135,135,175) |
| 226 | 104 ChetwodeBlue (135,135,215) |
| 227 | 105 SlateBlue (135,135,255) |
| 228 | 106 LightLimeade (135,175,0) |
| 229 | 107 ChelseaCucumber (135,175,95) |
| 230 | 108 BayLeaf (135,175,135) |
| 231 | 109 GulfStream (135,175,175) |
| 232 | 110 PoloBlue (135,175,215) |
| 233 | 111 LightMalibuBlue (135,175,255) |
| 234 | 112 Pistachio (135,215,0) |
| 235 | 113 LightPastelGreen (135,215,95) |
| 236 | 114 DarkFeijoaGreen (135,215,135) |
| 237 | 115 VistaBlue (135,215,175) |
| 238 | 116 Bermuda (135,215,215) |
| 239 | 117 DarkAnakiwaBlue (135,215,255) |
| 240 | 118 ChartreuseGreen (135,255,0) |
| 241 | 119 LightScreaminGreen (135,255,95) |
| 242 | 120 DarkMintGreen (135,255,135) |
| 243 | 121 MintGreen (135,255,175) |
| 244 | 122 LighterAquamarine (135,255,215) |
| 245 | 123 AnakiwaBlue (135,255,255) |
| 246 | 124 BrightRed (175,0,0) |
| 247 | 125 DarkFlirt (175,0,95) |
| 248 | 126 Flirt (175,0,135) |
| 249 | 127 LightFlirt (175,0,175) |
| 250 | 128 DarkViolet (175,0,215) |
| 251 | 129 BrightElectricViolet (175,0,255) |
| 252 | 130 RoseofSharonOrange (175,95,0) |
| 253 | 131 MatrixPink (175,95,95) |
| 254 | 132 TapestryPink (175,95,135) |
| 255 | 133 FuchsiaPink (175,95,175) |
| 256 | 134 MediumPurple (175,95,215) |
| 257 | 135 Heliotrope (175,95,255) |
| 258 | 136 PirateGold (175,135,0) |
| 259 | 137 MuesliOrange (175,135,95) |
| 260 | 138 PharlapPink (175,135,135) |
| 261 | 139 Bouquet (175,135,175) |
| 262 | 140 Lavender (175,135,215) |
| 263 | 141 LightHeliotrope (175,135,255) |
| 264 | 142 BuddhaGold (175,175,0) |
| 265 | 143 OliveGreen (175,175,95) |
| 266 | 144 HillaryOlive (175,175,135) |
| 267 | 145 SilverChalice (175,175,175) |
| 268 | 146 WistfulLilac (175,175,215) |
| 269 | 147 MelroseLilac (175,175,255) |
| 270 | 148 RioGrandeGreen (175,215,0) |
| 271 | 149 ConiferGreen (175,215,95) |
| 272 | 150 Feijoa (175,215,135) |
| 273 | 151 PixieGreen (175,215,175) |
| 274 | 152 JungleMist (175,215,215) |
| 275 | 153 LightAnakiwaBlue (175,215,255) |
| 276 | 154 Lime (175,255,0) |
| 277 | 155 GreenYellow (175,255,95) |
| 278 | 156 LightMintGreen (175,255,135) |
| 279 | 157 Celadon (175,255,175) |
| 280 | 158 AeroBlue (175,255,215) |
| 281 | 159 FrenchPassLightBlue (175,255,255) |
| 282 | 160 GuardsmanRed (215,0,0) |
| 283 | 161 RazzmatazzCerise (215,0,95) |
| 284 | 162 MediumVioletRed (215,0,135) |
| 285 | 163 HollywoodCerise (215,0,175) |
| 286 | 164 DarkPurplePizzazz (215,0,215) |
| 287 | 165 BrighterElectricViolet (215,0,255) |
| 288 | 166 TennOrange (215,95,0) |
| 289 | 167 RomanOrange (215,95,95) |
| 290 | 168 CranberryPink (215,95,135) |
| 291 | 169 HopbushPink (215,95,175) |
| 292 | 170 Orchid (215,95,215) |
| 293 | 171 LighterHeliotrope (215,95,255) |
| 294 | 172 MangoTango (215,135,0) |
| 295 | 173 Copperfield (215,135,95) |
| 296 | 174 SeaPink (215,135,135) |
| 297 | 175 CanCanPink (215,135,175) |
| 298 | 176 LightOrchid (215,135,215) |
| 299 | 177 BrightHeliotrope (215,135,255) |
| 300 | 178 DarkCorn (215,175,0) |
| 301 | 179 DarkTachaOrange (215,175,95) |
| 302 | 180 TanBeige (215,175,135) |
| 303 | 181 ClamShell (215,175,175) |
| 304 | 182 ThistlePink (215,175,215) |
| 305 | 183 Mauve (215,175,255) |
| 306 | 184 Corn (215,215,0) |
| 307 | 185 TachaOrange (215,215,95) |
| 308 | 186 DecoOrange (215,215,135) |
| 309 | 187 PaleGoldenrod (215,215,175) |
| 310 | 188 AltoBeige (215,215,215) |
| 311 | 189 FogPink (215,215,255) |
| 312 | 190 ChartreuseYellow (215,255,0) |
| 313 | 191 Canary (215,255,95) |
| 314 | 192 Honeysuckle (215,255,135) |
| 315 | 193 ReefPaleYellow (215,255,175) |
| 316 | 194 SnowyMint (215,255,215) |
| 317 | 195 OysterBay (215,255,255) |
| 318 | 196 Red (255,0,0) |
| 319 | 197 DarkRose (255,0,95) |
| 320 | 198 Rose (255,0,135) |
| 321 | 199 LightHollywoodCerise (255,0,175) |
| 322 | 200 PurplePizzazz (255,0,215) |
| 323 | 201 Fuchsia (255,0,255) |
| 324 | 202 BlazeOrange (255,95,0) |
| 325 | 203 BittersweetOrange (255,95,95) |
| 326 | 204 WildWatermelon (255,95,135) |
| 327 | 205 DarkHotPink (255,95,175) |
| 328 | 206 HotPink (255,95,215) |
| 329 | 207 PinkFlamingo (255,95,255) |
| 330 | 208 FlushOrange (255,135,0) |
| 331 | 209 Salmon (255,135,95) |
| 332 | 210 VividTangerine (255,135,135) |
| 333 | 211 PinkSalmon (255,135,175) |
| 334 | 212 DarkLavenderRose (255,135,215) |
| 335 | 213 BlushPink (255,135,255) |
| 336 | 214 YellowSea (255,175,0) |
| 337 | 215 TexasRose (255,175,95) |
| 338 | 216 Tacao (255,175,135) |
| 339 | 217 Sundown (255,175,175) |
| 340 | 218 CottonCandy (255,175,215) |
| 341 | 219 LavenderRose (255,175,255) |
| 342 | 220 Gold (255,215,0) |
| 343 | 221 Dandelion (255,215,95) |
| 344 | 222 GrandisCaramel (255,215,135) |
| 345 | 223 Caramel (255,215,175) |
| 346 | 224 CosmosSalmon (255,215,215) |
| 347 | 225 PinkLace (255,215,255) |
| 348 | 226 Yellow (255,255,0) |
| 349 | 227 LaserLemon (255,255,95) |
| 350 | 228 DollyYellow (255,255,135) |
| 351 | 229 PortafinoYellow (255,255,175) |
| 352 | 230 Cumulus (255,255,215) |
| 353 | 231 White (255,255,255) |
| 354 | 232 DarkCodGray (8,8,8) |
| 355 | 233 CodGray (18,18,18) |
| 356 | 234 LightCodGray (28,28,28) |
| 357 | 235 DarkMineShaft (38,38,38) |
| 358 | 236 MineShaft (48,48,48) |
| 359 | 237 LightMineShaft (58,58,58) |
| 360 | 238 DarkTundora (68,68,68) |
| 361 | 239 Tundora (78,78,78) |
| 362 | 240 ScorpionGray (88,88,88) |
| 363 | 241 DarkDoveGray (98,98,98) |
| 364 | 242 DoveGray (108,108,108) |
| 365 | 243 Boulder (118,118,118) |
| 366 | 244 Gray (128,128,128) |
| 367 | 245 LightGray (138,138,138) |
| 368 | 246 DustyGray (148,148,148) |
| 369 | 247 NobelGray (158,158,158) |
| 370 | 248 DarkSilverChalice (168,168,168) |
| 371 | 249 LightSilverChalice (178,178,178) |
| 372 | 250 DarkSilver (188,188,188) |
| 373 | 251 Silver (198,198,198) |
| 374 | 252 DarkAlto (208,208,208) |
| 375 | 253 Alto (218,218,218) |
| 376 | 254 Mercury (228,228,228) |
| 377 | 255 GalleryGray (238,238,238) |
| 378 | } |
| 379 | |