%{ #include #include int reset = 0, bright = 0, underscore = 0, blink = 0, reverse = 0, hidden = 0; int fgcolor = 7, bgcolor = 0, colored = 0; char pagebgcolor[] = "black", text[] = "white"; char *color[8][3] = { {"black", "black", "black"}, {"red", "red", "darkred"}, {"green", "lightgreen", "darkgreen"}, {"yellow", "lightyellow", "yellow"}, {"blue", "lightblue", "darkblue"}, {"magenta", "magenta", "darkmagenta"}, {"cyan", "lightcyan", "darkcyan"}, {"white", "white", "white"} }; void attribute(char *s) { int tmp_bright = bright, tmp_fgcolor = fgcolor, tmp_bgcolor = bgcolor, tmp_underscore = underscore, tmp_blink = blink, tmp_reverse = reverse, tmp_hidden = hidden; int length = strlen(s) - 3; char *p = s + 2; char *n; *(p + length) = 0; if(length == 0) { reset = 1;} for(n = strtok(p, ";"); n; n = strtok(0, ";")) { switch(atoi(n)) { case 0: reset = 1; break; case 1: tmp_bright = 1; break; case 2: tmp_bright = 2; break; case 4: tmp_underscore = 1; break; case 5: tmp_blink = 1; break; case 7: tmp_reverse = 1; break; case 8: tmp_hidden = 1; break; }; if(atoi(n) >= 30 && atoi(n) <= 37) { tmp_fgcolor = atoi(n) - 30; } if(atoi(n) >= 40 && atoi(n) <= 47) { tmp_bgcolor = atoi(n) - 40; } } if (reset) { if (colored) { printf(""); tmp_bright = bright = 0; tmp_fgcolor = fgcolor = 7; tmp_bgcolor = bgcolor = 0; colored = 0; } if (underscore) { printf(""); tmp_underscore = underscore = 0; } if (blink) { printf(""); tmp_blink = blink = 0; } if (reverse) { tmp_reverse = reverse = 0; } if (hidden) { tmp_hidden = hidden = 0; } reset = 0; } if (tmp_bright != bright || tmp_fgcolor != fgcolor || tmp_bgcolor != bgcolor) { bright = tmp_bright; fgcolor = tmp_fgcolor; bgcolor = tmp_bgcolor; printf("%s", colored ? "" : "", color[fgcolor][bright], color[bgcolor][bright]); colored = 1; } if (tmp_underscore != underscore) { underscore = tmp_underscore; printf(""); } if (tmp_blink != blink) { blink = tmp_blink; printf(""); } if (tmp_reverse != reverse) { reverse = tmp_reverse; } if (tmp_hidden != hidden) { hidden = tmp_hidden; } } %} %% " " printf("  "); \n printf("
\n"); \[[0-9;]*m attribute(yytext); %% void header() { printf("\n"); printf("\t\n"); printf("\t\n", pagebgcolor, text); } void footer() { printf("\t\n"); printf("\n"); } main() { header(); yylex(); footer(); }