aboutsummaryrefslogtreecommitdiffstats
path: root/src/parser.l
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2014-04-21 20:35:44 -0400
committerJesse Luehrs <doy@tozt.net>2014-04-21 20:35:44 -0400
commit05736777e42403b6605284d9bd6954be3616583a (patch)
tree7599c91ee56ca0f0c902e9eee28553dfd0432dc0 /src/parser.l
parenta2a10300342a4d10fd584494f603becabdf45100 (diff)
downloadrunes-05736777e42403b6605284d9bd6954be3616583a.tar.gz
runes-05736777e42403b6605284d9bd6954be3616583a.zip
support 16 colors, 256 colors, and arbitrary rgb colors
Diffstat (limited to 'src/parser.l')
-rw-r--r--src/parser.l92
1 files changed, 92 insertions, 0 deletions
diff --git a/src/parser.l b/src/parser.l
index 7ad27dc..544c623 100644
--- a/src/parser.l
+++ b/src/parser.l
@@ -597,6 +597,48 @@ static void runes_parser_handle_sgr(RunesTerm *t, char *buf, size_t len)
case 34: case 35: case 36: case 37:
runes_display_set_fg_color(t, params[i] - 30);
break;
+ case 38: {
+ i++;
+ if (i >= nparams) {
+ fprintf(
+ stderr, "unknown SGR parameter: %d (too few parameters)\n",
+ params[i - 1]);
+ break;
+ }
+
+ switch (params[i]) {
+ case 2:
+ i += 3;
+ if (i >= nparams) {
+ fprintf(
+ stderr,
+ "unknown SGR parameter: %d;%d (too few parameters)\n",
+ params[i - 4], params[i - 3]);
+ break;
+ }
+ runes_display_set_fg_color_rgb(
+ t, params[i - 2], params[i - 1], params[i]);
+ break;
+ case 5:
+ i++;
+ if (i >= nparams) {
+ fprintf(
+ stderr,
+ "unknown SGR parameter: %d;%d (too few parameters)\n",
+ params[i - 2], params[i - 1]);
+ break;
+ }
+ runes_display_set_fg_color(t, params[i]);
+ break;
+ default:
+ i++;
+ fprintf(
+ stderr, "unknown SGR parameter: %d;%d\n",
+ params[i - 2], params[i - 1]);
+ break;
+ }
+ break;
+ }
case 39:
runes_display_reset_fg_color(t);
break;
@@ -604,9 +646,59 @@ static void runes_parser_handle_sgr(RunesTerm *t, char *buf, size_t len)
case 44: case 45: case 46: case 47:
runes_display_set_bg_color(t, params[i] - 40);
break;
+ case 48: {
+ i++;
+ if (i >= nparams) {
+ fprintf(
+ stderr, "unknown SGR parameter: %d (too few parameters)\n",
+ params[i - 1]);
+ break;
+ }
+
+ switch (params[i]) {
+ case 2:
+ i += 3;
+ if (i >= nparams) {
+ fprintf(
+ stderr,
+ "unknown SGR parameter: %d;%d (too few parameters)\n",
+ params[i - 4], params[i - 3]);
+ break;
+ }
+ runes_display_set_bg_color_rgb(
+ t, params[i - 2], params[i - 1], params[i]);
+ break;
+ case 5:
+ i++;
+ if (i >= nparams) {
+ fprintf(
+ stderr,
+ "unknown SGR parameter: %d;%d (too few parameters)\n",
+ params[i - 2], params[i - 1]);
+ break;
+ }
+ runes_display_set_bg_color(t, params[i]);
+ break;
+ default:
+ i++;
+ fprintf(
+ stderr, "unknown SGR parameter: %d;%d\n",
+ params[i - 2], params[i - 1]);
+ break;
+ }
+ break;
+ }
case 49:
runes_display_reset_bg_color(t);
break;
+ case 90: case 91: case 92: case 93:
+ case 94: case 95: case 96: case 97:
+ runes_display_set_fg_color(t, params[i] - 82);
+ break;
+ case 100: case 101: case 102: case 103:
+ case 104: case 105: case 106: case 107:
+ runes_display_set_bg_color(t, params[i] - 92);
+ break;
default:
fprintf(stderr, "unknown SGR parameter: %d\n", params[i]);
break;