Skip to content

Instantly share code, notes, and snippets.

@KillerGoldFisch
Last active July 14, 2020 17:13
Show Gist options
  • Select an option

  • Save KillerGoldFisch/6e6fcacd7b2f2124aa78fc14ff568200 to your computer and use it in GitHub Desktop.

Select an option

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