aboutsummaryrefslogtreecommitdiffstats
path: root/src/parser.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/parser.c')
-rw-r--r--src/parser.c92
1 files changed, 92 insertions, 0 deletions
diff --git a/src/parser.c b/src/parser.c
index 48b7ecd..216089e 100644
--- a/src/parser.c
+++ b/src/parser.c
@@ -2726,6 +2726,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;
@@ -2733,9 +2775,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;