Skip to content

Instantly share code, notes, and snippets.

@KillerGoldFisch
Last active July 14, 2020 17:13
Show Gist options
  • Save KillerGoldFisch/6e6fcacd7b2f2124aa78fc14ff568200 to your computer and use it in GitHub Desktop.
Save KillerGoldFisch/6e6fcacd7b2f2124aa78fc14ff568200 to your computer and use it in GitHub Desktop.
#include "cfprintf.h"
#ifdef _WIN32
#include <windows.h>
static HANDLE hConsole = 0;
#define BACK_TO_DEFAULT (15)
#else
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>
#define BACK_TO_DEFAULT "\33[0m"
// black blue lgtgrn green red purple olive gray silver blue lgtgrn blue red purple yellow white
const char *FGs[] = { "1m" , "34m", "32m", "32m", "31m", "35m", "36m" , "37m", "37m", "34m", "32m", "34m", "31m", "35m", "33m", "m" };
// black blue lgtgrn green red purple olive gray silver blue lgtgrn blue red purple yellow white
const char *BGs[] = { "40m", "44m", "42m", "46m", "41m", "45m", "46m" , "47m", "47m", "44m", "46m", "44m", "41m", "45m", "43m", "m" };
#endif
void cfprintf_init() {
#ifdef _WIN32
if (hConsole)
return;
hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
#else
#endif
}
int qsort_positions(const void *x, const void *y) {
// Returns -1 if x < y
// 0 if x == y
// +1 if x > y
size_t *xx = (size_t*)x;
size_t *yy = (size_t*)y;
if (*xx < *yy) return -1;
else if (*xx > *yy) return 1;
else return 0;
}
int cfprintf(FILE *fout, const char *fmt, ...) {
struct POS {
size_t start, finish;
int color;
};
size_t pos_counter;
struct POS pos[128];
char *pos_0, *pos_1, *pos_2;
char *sptr;
va_list argp;
int c;
size_t cc;
const char *clrs[] = {
// 16 Colors for each of the following Backgrounds:
// BLACK BLUE GREEN DEEP GREEN DARK RED PURPLE OLIVE GRAY GRAY BLUE LIGHT GREEN LGT BLUE RED PURPLE YELLOW WHITE
"blackblack" ,"navyblack" ,"greenblack" ,"tealblack" ,"maroonblack" ,"purpleblack" ,"oliveblack" ,"silverblack" ,"grayblack" ,"blueblack" ,"limeblack" ,"aquablack","redblack","fuchsiablack","yellowblack","whiteblack",
"blacknavy" ,"navynavy" ,"greennavy" ,"tealnavy" ,"maroonnavy" ,"purplenavy" ,"olivenavy" ,"silvernavy" ,"graynavy" ,"bluenavy" ,"limenavy" ,"aquanavy","rednavy","fuchsianavy","yellownavy","whitenavy",
"blackgreen" ,"navygreen" ,"greengreen" ,"tealgreen" ,"maroongreen" ,"purplegreen" ,"olivegreen" ,"silvergreen" ,"graygreen" ,"bluegreen" ,"limegreen" ,"aquagreen","redgreen","fuchsiagreen","yellowgreen","whitegreen",
"blackteal" ,"navyteal" ,"greenteal" ,"tealteal" ,"maroonteal" ,"purpleteal" ,"oliveteal" ,"silverteal" ,"grayteal" ,"blueteal" ,"limeteal" ,"aquateal","redteal","fuchsiateal","yellowteal","whiteteal",
"blackmaroon" ,"navymaroon" ,"greenmaroon" ,"tealmaroon" ,"maroonmaroon" ,"purplemaroon" ,"olivemaroon" ,"silvermaroon" ,"graymaroon" ,"bluemaroon" ,"limemaroon" ,"aquamaroon","redmaroon","fuchsiamaroon","yellowmaroon","whitemaroon",
"blackpurple" ,"navypurple" ,"greenpurple" ,"tealpurple" ,"maroonpurple" ,"purplepurple" ,"olivepurple" ,"silverpurple" ,"graypurple" ,"bluepurple" ,"limepurple" ,"aquapurple","redpurple","fuchsiapurple","yellowpurple","whitepurple",
"blackolive" ,"navyolive" ,"greenolive" ,"tealolive" ,"maroonolive" ,"purpleolive" ,"oliveolive" ,"silverolive" ,"grayolive" ,"blueolive" ,"limeolive" ,"aquaolive","redolive","fuchsiaolive","yellowolive","whiteolive",
"blacksilver" ,"navysilver" ,"greensilver" ,"tealsilver" ,"maroonsilver" ,"purplesilver" ,"olivesilver" ,"silversilver" ,"graysilver" ,"bluesilver" ,"limesilver" ,"aquasilver","redsilver","fuchsiasilver","yellowsilver","whitesilver",
"blackgray" ,"navygray" ,"greengray" ,"tealgray" ,"maroongray" ,"purplegray" ,"olivegray" ,"silvergray" ,"graygray" ,"bluegray" ,"limegray" ,"aquagray","redgray","fuchsiagray","yellowgray","whitegray",
"blackblue" ,"navyblue" ,"greenblue" ,"tealblue" ,"maroonblue" ,"purpleblue" ,"oliveblue" ,"silverblue" ,"grayblue" ,"blueblue" ,"limeblue" ,"aquablue","redblue","fuchsiablue","yellowblue","whiteblue",
"blacklime" ,"navylime" ,"greenlime" ,"teallime" ,"maroonlime" ,"purplelime" ,"olivelime" ,"silverlime" ,"graylime" ,"bluelime" ,"limelime" ,"aqualime","redlime","fuchsialime","yellowlime","whitelime",
"blackaqua" ,"navyaqua" ,"greenaqua" ,"tealaqua" ,"maroonaqua" ,"purpleaqua" ,"oliveaqua" ,"silveraqua" ,"grayaqua" ,"blueaqua" ,"limeaqua" ,"aquaaqua","redaqua","fuchsiaaqua","yellowaqua","whiteaqua",
"blackred" ,"navyred" ,"greenred" ,"tealred" ,"maroonred" ,"purplered" ,"olivered" ,"silverred" ,"grayred" ,"bluered" ,"limered" ,"aquared","redred","fuchsiared","yellowred","whitered",
"blackfuchsia" ,"navyfuchsia" ,"greenfuchsia" ,"tealfuchsia" ,"maroonfuchsia","purplefuchsia","olivefuchsia" ,"silverfuchsia","grayfuchsia" ,"bluefuchsia" ,"limefuchsia" ,"aquafuchsia","redfuchsia","fuchsiafuchsia","yellowfuchsia","whitefuchsia",
"blackyellow" ,"navyyellow" ,"greenyellow" ,"tealyellow" ,"maroonyellow" ,"purpleyellow" ,"oliveyellow" ,"silveryellow" ,"grayyellow" ,"blueyellow" ,"limeyellow" ,"aquayellow","redyellow","fuchsiayellow","yellowyellow","whiteyellow",
"blackwhite" ,"navywhite" ,"greenwhite" ,"tealwhite" ,"maroonwhite" ,"purplewhite" ,"olivewhite" ,"silverwhite" ,"graywhite" ,"bluewhite" ,"limewhite" ,"aquawhite","redwhite","fuchsiawhite","yellowwhite","whitewhite"
};
char fmt_copy[CFPRINTF_MAX_BUFFER_SIZE];
size_t pc;
size_t remove_start, remove_finish;
cfprintf_init();
va_start(argp, fmt);
vsnprintf(fmt_copy, CFPRINTF_MAX_BUFFER_SIZE, fmt, argp);
va_end(argp);
pos_counter = 0;
sptr = fmt_copy;
pos_0 = (char*)sptr;
while (pos_0) {
for (c = 0; c < 256; ++c) {
pos_0 = strstr(sptr, clrs[c]);
if (pos_0) {
pos_1 = strstr(pos_0, "{");
if (pos_1 && (pos_1 - pos_0) == strlen(clrs[c])) {
pos_2 = strstr(pos_1, "}");
if (pos_2) {
pos[pos_counter].color = c;
pos[pos_counter].start = pos_1 + 1 - fmt_copy;
pos[pos_counter].finish = pos_2 - 1 - fmt_copy;
++pos_counter;
// clear string meta-color directive
for (cc = 0; cc < strlen(clrs[c]) + 1; ++cc)
pos_0[cc] = '#';
*pos_2 = ' ';
break;
}
else {
cfprintf(fout, "Warning: cfprintf identified a starting color label named yellowblack{%s} with no closing } bracket."
"\nformat text:%s"
"\nfull text:%s"
"\nposition in full text:redblack{%d}"
"\n",
clrs[c], fmt, fmt_copy, pos_0 - fmt_copy);
}
}
}
}
}
qsort(pos, pos_counter, sizeof(struct POS), &qsort_positions);
if (0 == pos_counter) {
fprintf(fout, "%s", fmt_copy);
}
else {
sptr = fmt_copy;
remove_start = 0;
#ifdef _WIN32
SetConsoleTextAttribute(hConsole, BACK_TO_DEFAULT);
#else
fprintf(fout, "%s", BACK_TO_DEFAULT);
#endif
for (pc = 0; pc < pos_counter; ++pc) {
remove_start = pos[pc].start - 1 - strlen(clrs[pos[pc].color]);// inclusive
if (pc > 0)
remove_start -= (pos[pc - 1].finish + 1 + 1);
remove_finish = remove_start + strlen(clrs[pos[pc].color]); // inclusive
// print from last pos until remove_start (not inclusive)
sptr[remove_start] = 0x0;
fprintf(fout, "%s", sptr);
sptr[remove_start] = '#';
#ifdef _WIN32
SetConsoleTextAttribute(hConsole, pos[pc].color);
#else
int bg = pos[pc].color / 16;
int fg = pos[pc].color % 16;
//fprintf(fout, "\033[5m"); // blink
//fprintf(fout, "\033[25m"); // remove blink
fprintf(fout, "\033[1m"); // dim intensity. 1=bold
fprintf(fout, "\033[%s", BGs[bg]);
fprintf(fout, "\033[%s", FGs[fg]);
#endif
sptr = fmt_copy + pos[pc].start;
sptr[pos[pc].finish - pos[pc].start + 1] = 0x0;
fprintf(fout, "%s", sptr);
sptr[pos[pc].finish - pos[pc].start + 1] = '#';
#ifdef _WIN32
SetConsoleTextAttribute(hConsole, BACK_TO_DEFAULT);
#else
fprintf(fout, "%s", BACK_TO_DEFAULT);
#endif
sptr = fmt_copy + pos[pc].finish + 1 + 1; // jump over ending '}'
}
if (sptr)
fprintf(fout, "%s", sptr);
}
return 0;
}
#ifndef CFPRINTF_H
#define CFPRINTF_H
#include <stdio.h>
/* supports 16 foreground and background colors:
[0-15]=[black,navy,green,teal,maroon,purple,olive,silver,gray,blue,lime,aqua,red,fuchsia,yellow,white]
using the <color>{your text here} syntax. for example:
red{text printed in red-on-black color}
redwhite{text printed in red-on-white color}
*/
#define CFPRINTF_MAX_BUFFER_SIZE (8192)
int cfprintf(FILE *f, const char *fmt, ...); // exactly as fprintf but with color support
#endif
cfprintf(stdout, "blackblack{blackblack}");
cfprintf(stdout, "navyblack{navyblack}");
cfprintf(stdout, "greenblack{greenblack}");
cfprintf(stdout, "tealblack{tealblack}");
cfprintf(stdout, "maroonblack{maroonblack}");
cfprintf(stdout, "purpleblack{purpleblack}");
cfprintf(stdout, "oliveblack{oliveblack}");
cfprintf(stdout, "silverblack{silverblack}");
cfprintf(stdout, "grayblack{grayblack}");
cfprintf(stdout, "blueblack{blueblack}");
cfprintf(stdout, "limeblack{limeblack}");
cfprintf(stdout, "aquablack{aquablack}");
cfprintf(stdout, "redblack{redblack}");
cfprintf(stdout, "fuchsiablack{fuchsiablack}");
cfprintf(stdout, "yellowblack{yellowblack}");
cfprintf(stdout, "whiteblack{whiteblack}");
cfprintf(stdout, "blacknavy{blacknavy}");
cfprintf(stdout, "navynavy{navynavy}");
cfprintf(stdout, "greennavy{greennavy}");
cfprintf(stdout, "tealnavy{tealnavy}");
cfprintf(stdout, "maroonnavy{maroonnavy}");
cfprintf(stdout, "purplenavy{purplenavy}");
cfprintf(stdout, "olivenavy{olivenavy}");
cfprintf(stdout, "silvernavy{silvernavy}");
cfprintf(stdout, "graynavy{graynavy}");
cfprintf(stdout, "bluenavy{bluenavy}");
cfprintf(stdout, "limenavy{limenavy}");
cfprintf(stdout, "aquanavy{aquanavy}");
cfprintf(stdout, "rednavy{rednavy}");
cfprintf(stdout, "fuchsianavy{fuchsianavy}");
cfprintf(stdout, "yellownavy{yellownavy}");
cfprintf(stdout, "whitenavy{whitenavy}");
cfprintf(stdout, "blackgreen{blackgreen}");
cfprintf(stdout, "navygreen{navygreen}");
cfprintf(stdout, "greengreen{greengreen}");
cfprintf(stdout, "tealgreen{tealgreen}");
cfprintf(stdout, "maroongreen{maroongreen}");
cfprintf(stdout, "purplegreen{purplegreen}");
cfprintf(stdout, "olivegreen{olivegreen}");
cfprintf(stdout, "silvergreen{silvergreen}");
cfprintf(stdout, "graygreen{graygreen}");
cfprintf(stdout, "bluegreen{bluegreen}");
cfprintf(stdout, "limegreen{limegreen}");
cfprintf(stdout, "aquagreen{aquagreen}");
cfprintf(stdout, "redgreen{redgreen}");
cfprintf(stdout, "fuchsiagreen{fuchsiagreen}");
cfprintf(stdout, "yellowgreen{yellowgreen}");
cfprintf(stdout, "whitegreen{whitegreen}");
cfprintf(stdout, "blackteal{blackteal}");
cfprintf(stdout, "navyteal{navyteal}");
cfprintf(stdout, "greenteal{greenteal}");
cfprintf(stdout, "tealteal{tealteal}");
cfprintf(stdout, "maroonteal{maroonteal}");
cfprintf(stdout, "purpleteal{purpleteal}");
cfprintf(stdout, "oliveteal{oliveteal}");
cfprintf(stdout, "silverteal{silverteal}");
cfprintf(stdout, "grayteal{grayteal}");
cfprintf(stdout, "blueteal{blueteal}");
cfprintf(stdout, "limeteal{limeteal}");
cfprintf(stdout, "aquateal{aquateal}");
cfprintf(stdout, "redteal{redteal}");
cfprintf(stdout, "fuchsiateal{fuchsiateal}");
cfprintf(stdout, "yellowteal{yellowteal}");
cfprintf(stdout, "whiteteal{whiteteal}");
cfprintf(stdout, "blackmaroon{blackmaroon}");
cfprintf(stdout, "navymaroon{navymaroon}");
cfprintf(stdout, "greenmaroon{greenmaroon}");
cfprintf(stdout, "tealmaroon{tealmaroon}");
cfprintf(stdout, "maroonmaroon{maroonmaroon}");
cfprintf(stdout, "purplemaroon{purplemaroon}");
cfprintf(stdout, "olivemaroon{olivemaroon}");
cfprintf(stdout, "silvermaroon{silvermaroon}");
cfprintf(stdout, "graymaroon{graymaroon}");
cfprintf(stdout, "bluemaroon{bluemaroon}");
cfprintf(stdout, "limemaroon{limemaroon}");
cfprintf(stdout, "aquamaroon{aquamaroon}");
cfprintf(stdout, "redmaroon{redmaroon}");
cfprintf(stdout, "fuchsiamaroon{fuchsiamaroon}");
cfprintf(stdout, "yellowmaroon{yellowmaroon}");
cfprintf(stdout, "whitemaroon{whitemaroon}");
cfprintf(stdout, "blackpurple{blackpurple}");
cfprintf(stdout, "navypurple{navypurple}");
cfprintf(stdout, "greenpurple{greenpurple}");
cfprintf(stdout, "tealpurple{tealpurple}");
cfprintf(stdout, "maroonpurple{maroonpurple}");
cfprintf(stdout, "purplepurple{purplepurple}");
cfprintf(stdout, "olivepurple{olivepurple}");
cfprintf(stdout, "silverpurple{silverpurple}");
cfprintf(stdout, "graypurple{graypurple}");
cfprintf(stdout, "bluepurple{bluepurple}");
cfprintf(stdout, "limepurple{limepurple}");
cfprintf(stdout, "aquapurple{aquapurple}");
cfprintf(stdout, "redpurple{redpurple}");
cfprintf(stdout, "fuchsiapurple{fuchsiapurple}");
cfprintf(stdout, "yellowpurple{yellowpurple}");
cfprintf(stdout, "whitepurple{whitepurple}");
cfprintf(stdout, "blackolive{blackolive}");
cfprintf(stdout, "navyolive{navyolive}");
cfprintf(stdout, "greenolive{greenolive}");
cfprintf(stdout, "tealolive{tealolive}");
cfprintf(stdout, "maroonolive{maroonolive}");
cfprintf(stdout, "purpleolive{purpleolive}");
cfprintf(stdout, "oliveolive{oliveolive}");
cfprintf(stdout, "silverolive{silverolive}");
cfprintf(stdout, "grayolive{grayolive}");
cfprintf(stdout, "blueolive{blueolive}");
cfprintf(stdout, "limeolive{limeolive}");
cfprintf(stdout, "aquaolive{aquaolive}");
cfprintf(stdout, "redolive{redolive}");
cfprintf(stdout, "fuchsiaolive{fuchsiaolive}");
cfprintf(stdout, "yellowolive{yellowolive}");
cfprintf(stdout, "whiteolive{whiteolive}");
cfprintf(stdout, "blacksilver{blacksilver}");
cfprintf(stdout, "navysilver{navysilver}");
cfprintf(stdout, "greensilver{greensilver}");
cfprintf(stdout, "tealsilver{tealsilver}");
cfprintf(stdout, "maroonsilver{maroonsilver}");
cfprintf(stdout, "purplesilver{purplesilver}");
cfprintf(stdout, "olivesilver{olivesilver}");
cfprintf(stdout, "silversilver{silversilver}");
cfprintf(stdout, "graysilver{graysilver}");
cfprintf(stdout, "bluesilver{bluesilver}");
cfprintf(stdout, "limesilver{limesilver}");
cfprintf(stdout, "aquasilver{aquasilver}");
cfprintf(stdout, "redsilver{redsilver}");
cfprintf(stdout, "fuchsiasilver{fuchsiasilver}");
cfprintf(stdout, "yellowsilver{yellowsilver}");
cfprintf(stdout, "whitesilver{whitesilver}");
cfprintf(stdout, "blackgray{blackgray}");
cfprintf(stdout, "navygray{navygray}");
cfprintf(stdout, "greengray{greengray}");
cfprintf(stdout, "tealgray{tealgray}");
cfprintf(stdout, "maroongray{maroongray}");
cfprintf(stdout, "purplegray{purplegray}");
cfprintf(stdout, "olivegray{olivegray}");
cfprintf(stdout, "silvergray{silvergray}");
cfprintf(stdout, "graygray{graygray}");
cfprintf(stdout, "bluegray{bluegray}");
cfprintf(stdout, "limegray{limegray}");
cfprintf(stdout, "aquagray{aquagray}");
cfprintf(stdout, "redgray{redgray}");
cfprintf(stdout, "fuchsiagray{fuchsiagray}");
cfprintf(stdout, "yellowgray{yellowgray}");
cfprintf(stdout, "whitegray{whitegray}");
cfprintf(stdout, "blackblue{blackblue}");
cfprintf(stdout, "navyblue{navyblue}");
cfprintf(stdout, "greenblue{greenblue}");
cfprintf(stdout, "tealblue{tealblue}");
cfprintf(stdout, "maroonblue{maroonblue}");
cfprintf(stdout, "purpleblue{purpleblue}");
cfprintf(stdout, "oliveblue{oliveblue}");
cfprintf(stdout, "silverblue{silverblue}");
cfprintf(stdout, "grayblue{grayblue}");
cfprintf(stdout, "blueblue{blueblue}");
cfprintf(stdout, "limeblue{limeblue}");
cfprintf(stdout, "aquablue{aquablue}");
cfprintf(stdout, "redblue{redblue}");
cfprintf(stdout, "fuchsiablue{fuchsiablue}");
cfprintf(stdout, "yellowblue{yellowblue}");
cfprintf(stdout, "whiteblue{whiteblue}");
cfprintf(stdout, "blacklime{blacklime}");
cfprintf(stdout, "navylime{navylime}");
cfprintf(stdout, "greenlime{greenlime}");
cfprintf(stdout, "teallime{teallime}");
cfprintf(stdout, "maroonlime{maroonlime}");
cfprintf(stdout, "purplelime{purplelime}");
cfprintf(stdout, "olivelime{olivelime}");
cfprintf(stdout, "silverlime{silverlime}");
cfprintf(stdout, "graylime{graylime}");
cfprintf(stdout, "bluelime{bluelime}");
cfprintf(stdout, "limelime{limelime}");
cfprintf(stdout, "aqualime{aqualime}");
cfprintf(stdout, "redlime{redlime}");
cfprintf(stdout, "fuchsialime{fuchsialime}");
cfprintf(stdout, "yellowlime{yellowlime}");
cfprintf(stdout, "whitelime{whitelime}");
cfprintf(stdout, "blackaqua{blackaqua}");
cfprintf(stdout, "navyaqua{navyaqua}");
cfprintf(stdout, "greenaqua{greenaqua}");
cfprintf(stdout, "tealaqua{tealaqua}");
cfprintf(stdout, "maroonaqua{maroonaqua}");
cfprintf(stdout, "purpleaqua{purpleaqua}");
cfprintf(stdout, "oliveaqua{oliveaqua}");
cfprintf(stdout, "silveraqua{silveraqua}");
cfprintf(stdout, "grayaqua{grayaqua}");
cfprintf(stdout, "blueaqua{blueaqua}");
cfprintf(stdout, "limeaqua{limeaqua}");
cfprintf(stdout, "aquaaqua{aquaaqua}");
cfprintf(stdout, "redaqua{redaqua}");
cfprintf(stdout, "fuchsiaaqua{fuchsiaaqua}");
cfprintf(stdout, "yellowaqua{yellowaqua}");
cfprintf(stdout, "whiteaqua{whiteaqua}");
cfprintf(stdout, "blackred{blackred}");
cfprintf(stdout, "navyred{navyred}");
cfprintf(stdout, "greenred{greenred}");
cfprintf(stdout, "tealred{tealred}");
cfprintf(stdout, "maroonred{maroonred}");
cfprintf(stdout, "purplered{purplered}");
cfprintf(stdout, "olivered{olivered}");
cfprintf(stdout, "silverred{silverred}");
cfprintf(stdout, "grayred{grayred}");
cfprintf(stdout, "bluered{bluered}");
cfprintf(stdout, "limered{limered}");
cfprintf(stdout, "aquared{aquared}");
cfprintf(stdout, "redred{redred}");
cfprintf(stdout, "fuchsiared{fuchsiared}");
cfprintf(stdout, "yellowred{yellowred}");
cfprintf(stdout, "whitered{whitered}");
cfprintf(stdout, "blackfuchsia{blackfuchsia}");
cfprintf(stdout, "navyfuchsia{navyfuchsia}");
cfprintf(stdout, "greenfuchsia{greenfuchsia}");
cfprintf(stdout, "tealfuchsia{tealfuchsia}");
cfprintf(stdout, "maroonfuchsia{maroonfuchsia}");
cfprintf(stdout, "purplefuchsia{purplefuchsia}");
cfprintf(stdout, "olivefuchsia{olivefuchsia}");
cfprintf(stdout, "silverfuchsia{silverfuchsia}");
cfprintf(stdout, "grayfuchsia{grayfuchsia}");
cfprintf(stdout, "bluefuchsia{bluefuchsia}");
cfprintf(stdout, "limefuchsia{limefuchsia}");
cfprintf(stdout, "aquafuchsia{aquafuchsia}");
cfprintf(stdout, "redfuchsia{redfuchsia}");
cfprintf(stdout, "fuchsiafuchsia{fuchsiafuchsia}");
cfprintf(stdout, "yellowfuchsia{yellowfuchsia}");
cfprintf(stdout, "whitefuchsia{whitefuchsia}");
cfprintf(stdout, "blackyellow{blackyellow}");
cfprintf(stdout, "navyyellow{navyyellow}");
cfprintf(stdout, "greenyellow{greenyellow}");
cfprintf(stdout, "tealyellow{tealyellow}");
cfprintf(stdout, "maroonyellow{maroonyellow}");
cfprintf(stdout, "purpleyellow{purpleyellow}");
cfprintf(stdout, "oliveyellow{oliveyellow}");
cfprintf(stdout, "silveryellow{silveryellow}");
cfprintf(stdout, "grayyellow{grayyellow}");
cfprintf(stdout, "blueyellow{blueyellow}");
cfprintf(stdout, "limeyellow{limeyellow}");
cfprintf(stdout, "aquayellow{aquayellow}");
cfprintf(stdout, "redyellow{redyellow}");
cfprintf(stdout, "fuchsiayellow{fuchsiayellow}");
cfprintf(stdout, "yellowyellow{yellowyellow}");
cfprintf(stdout, "whiteyellow{whiteyellow}");
cfprintf(stdout, "blackwhite{blackwhite}");
cfprintf(stdout, "navywhite{navywhite}");
cfprintf(stdout, "greenwhite{greenwhite}");
cfprintf(stdout, "tealwhite{tealwhite}");
cfprintf(stdout, "maroonwhite{maroonwhite}");
cfprintf(stdout, "purplewhite{purplewhite}");
cfprintf(stdout, "olivewhite{olivewhite}");
cfprintf(stdout, "silverwhite{silverwhite}");
cfprintf(stdout, "graywhite{graywhite}");
cfprintf(stdout, "bluewhite{bluewhite}");
cfprintf(stdout, "limewhite{limewhite}");
cfprintf(stdout, "aquawhite{aquawhite}");
cfprintf(stdout, "redwhite{redwhite}");
cfprintf(stdout, "fuchsiawhite{fuchsiawhite}");
cfprintf(stdout, "yellowwhite{yellowwhite}");
cfprintf(stdout, "whitewhite{whitewhite}");
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment