aboutsummaryrefslogtreecommitdiffstats
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
parenta2a10300342a4d10fd584494f603becabdf45100 (diff)
downloadrunes-05736777e42403b6605284d9bd6954be3616583a.tar.gz
runes-05736777e42403b6605284d9bd6954be3616583a.zip
support 16 colors, 256 colors, and arbitrary rgb colors
-rw-r--r--src/config.c294
-rw-r--r--src/display.c41
-rw-r--r--src/display.h2
-rw-r--r--src/parser.c92
-rw-r--r--src/parser.l92
-rw-r--r--src/term.h5
6 files changed, 491 insertions, 35 deletions
diff --git a/src/config.c b/src/config.c
index 7353ce7..7e51b05 100644
--- a/src/config.c
+++ b/src/config.c
@@ -35,23 +35,262 @@ static void runes_config_set_defaults(RunesTerm *t)
t->fgdefault = cairo_pattern_create_rgb(0.827, 0.827, 0.827);
t->bgdefault = cairo_pattern_create_rgb(0.0, 0.0, 0.0);
- t->colors[0] = cairo_pattern_create_rgb(0.0, 0.0, 0.0);
- t->colors[1] = cairo_pattern_create_rgb(0.804, 0.0, 0.0);
- t->colors[2] = cairo_pattern_create_rgb(0.0, 0.804, 0.0);
- t->colors[3] = cairo_pattern_create_rgb(0.804, 0.804, 0.0);
- t->colors[4] = cairo_pattern_create_rgb(0.0, 0.0, 0.804);
- t->colors[5] = cairo_pattern_create_rgb(0.804, 0.0, 0.804);
- t->colors[6] = cairo_pattern_create_rgb(0.0, 0.804, 0.804);
- t->colors[7] = cairo_pattern_create_rgb(0.898, 0.898, 0.898);
-
- t->brightcolors[0] = cairo_pattern_create_rgb(0.302, 0.302, 0.302);
- t->brightcolors[1] = cairo_pattern_create_rgb(1.0, 0.0, 0.0);
- t->brightcolors[2] = cairo_pattern_create_rgb(0.0, 1.0, 0.0);
- t->brightcolors[3] = cairo_pattern_create_rgb(1.0, 1.0, 0.0);
- t->brightcolors[4] = cairo_pattern_create_rgb(0.0, 0.0, 1.0);
- t->brightcolors[5] = cairo_pattern_create_rgb(1.0, 0.0, 1.0);
- t->brightcolors[6] = cairo_pattern_create_rgb(0.0, 1.0, 1.0);
- t->brightcolors[7] = cairo_pattern_create_rgb(1.0, 1.0, 1.0);
+ t->colors[0] = cairo_pattern_create_rgb(0.000, 0.000, 0.000);
+ t->colors[1] = cairo_pattern_create_rgb(0.804, 0.000, 0.000);
+ t->colors[2] = cairo_pattern_create_rgb(0.000, 0.804, 0.000);
+ t->colors[3] = cairo_pattern_create_rgb(0.804, 0.804, 0.000);
+ t->colors[4] = cairo_pattern_create_rgb(0.000, 0.000, 0.804);
+ t->colors[5] = cairo_pattern_create_rgb(0.804, 0.000, 0.804);
+ t->colors[6] = cairo_pattern_create_rgb(0.000, 0.804, 0.804);
+ t->colors[7] = cairo_pattern_create_rgb(0.898, 0.898, 0.898);
+ t->colors[8] = cairo_pattern_create_rgb(0.302, 0.302, 0.302);
+ t->colors[9] = cairo_pattern_create_rgb(1.000, 0.000, 0.000);
+ t->colors[10] = cairo_pattern_create_rgb(0.000, 1.000, 0.000);
+ t->colors[11] = cairo_pattern_create_rgb(1.000, 1.000, 0.000);
+ t->colors[12] = cairo_pattern_create_rgb(0.000, 0.000, 1.000);
+ t->colors[13] = cairo_pattern_create_rgb(1.000, 0.000, 1.000);
+ t->colors[14] = cairo_pattern_create_rgb(0.000, 1.000, 1.000);
+ t->colors[15] = cairo_pattern_create_rgb(1.000, 1.000, 1.000);
+ t->colors[16] = cairo_pattern_create_rgb(0.000, 0.000, 0.000);
+ t->colors[17] = cairo_pattern_create_rgb(0.000, 0.000, 0.373);
+ t->colors[18] = cairo_pattern_create_rgb(0.000, 0.000, 0.529);
+ t->colors[19] = cairo_pattern_create_rgb(0.000, 0.000, 0.686);
+ t->colors[20] = cairo_pattern_create_rgb(0.000, 0.000, 0.843);
+ t->colors[21] = cairo_pattern_create_rgb(0.000, 0.000, 1.000);
+ t->colors[22] = cairo_pattern_create_rgb(0.000, 0.373, 0.000);
+ t->colors[23] = cairo_pattern_create_rgb(0.000, 0.373, 0.373);
+ t->colors[24] = cairo_pattern_create_rgb(0.000, 0.373, 0.529);
+ t->colors[25] = cairo_pattern_create_rgb(0.000, 0.373, 0.686);
+ t->colors[26] = cairo_pattern_create_rgb(0.000, 0.373, 0.843);
+ t->colors[27] = cairo_pattern_create_rgb(0.000, 0.373, 1.000);
+ t->colors[28] = cairo_pattern_create_rgb(0.000, 0.529, 0.000);
+ t->colors[29] = cairo_pattern_create_rgb(0.000, 0.529, 0.373);
+ t->colors[30] = cairo_pattern_create_rgb(0.000, 0.529, 0.529);
+ t->colors[31] = cairo_pattern_create_rgb(0.000, 0.529, 0.686);
+ t->colors[32] = cairo_pattern_create_rgb(0.000, 0.529, 0.843);
+ t->colors[33] = cairo_pattern_create_rgb(0.000, 0.529, 1.000);
+ t->colors[34] = cairo_pattern_create_rgb(0.000, 0.686, 0.000);
+ t->colors[35] = cairo_pattern_create_rgb(0.000, 0.686, 0.373);
+ t->colors[36] = cairo_pattern_create_rgb(0.000, 0.686, 0.529);
+ t->colors[37] = cairo_pattern_create_rgb(0.000, 0.686, 0.686);
+ t->colors[38] = cairo_pattern_create_rgb(0.000, 0.686, 0.843);
+ t->colors[39] = cairo_pattern_create_rgb(0.000, 0.686, 1.000);
+ t->colors[40] = cairo_pattern_create_rgb(0.000, 0.843, 0.000);
+ t->colors[41] = cairo_pattern_create_rgb(0.000, 0.843, 0.373);
+ t->colors[42] = cairo_pattern_create_rgb(0.000, 0.843, 0.529);
+ t->colors[43] = cairo_pattern_create_rgb(0.000, 0.843, 0.686);
+ t->colors[44] = cairo_pattern_create_rgb(0.000, 0.843, 0.843);
+ t->colors[45] = cairo_pattern_create_rgb(0.000, 0.843, 1.000);
+ t->colors[46] = cairo_pattern_create_rgb(0.000, 1.000, 0.000);
+ t->colors[47] = cairo_pattern_create_rgb(0.000, 1.000, 0.373);
+ t->colors[48] = cairo_pattern_create_rgb(0.000, 1.000, 0.529);
+ t->colors[49] = cairo_pattern_create_rgb(0.000, 1.000, 0.686);
+ t->colors[50] = cairo_pattern_create_rgb(0.000, 1.000, 0.843);
+ t->colors[51] = cairo_pattern_create_rgb(0.000, 1.000, 1.000);
+ t->colors[52] = cairo_pattern_create_rgb(0.373, 0.000, 0.000);
+ t->colors[53] = cairo_pattern_create_rgb(0.373, 0.000, 0.373);
+ t->colors[54] = cairo_pattern_create_rgb(0.373, 0.000, 0.529);
+ t->colors[55] = cairo_pattern_create_rgb(0.373, 0.000, 0.686);
+ t->colors[56] = cairo_pattern_create_rgb(0.373, 0.000, 0.843);
+ t->colors[57] = cairo_pattern_create_rgb(0.373, 0.000, 1.000);
+ t->colors[58] = cairo_pattern_create_rgb(0.373, 0.373, 0.000);
+ t->colors[59] = cairo_pattern_create_rgb(0.373, 0.373, 0.373);
+ t->colors[60] = cairo_pattern_create_rgb(0.373, 0.373, 0.529);
+ t->colors[61] = cairo_pattern_create_rgb(0.373, 0.373, 0.686);
+ t->colors[62] = cairo_pattern_create_rgb(0.373, 0.373, 0.843);
+ t->colors[63] = cairo_pattern_create_rgb(0.373, 0.373, 1.000);
+ t->colors[64] = cairo_pattern_create_rgb(0.373, 0.529, 0.000);
+ t->colors[65] = cairo_pattern_create_rgb(0.373, 0.529, 0.373);
+ t->colors[66] = cairo_pattern_create_rgb(0.373, 0.529, 0.529);
+ t->colors[67] = cairo_pattern_create_rgb(0.373, 0.529, 0.686);
+ t->colors[68] = cairo_pattern_create_rgb(0.373, 0.529, 0.843);
+ t->colors[69] = cairo_pattern_create_rgb(0.373, 0.529, 1.000);
+ t->colors[70] = cairo_pattern_create_rgb(0.373, 0.686, 0.000);
+ t->colors[71] = cairo_pattern_create_rgb(0.373, 0.686, 0.373);
+ t->colors[72] = cairo_pattern_create_rgb(0.373, 0.686, 0.529);
+ t->colors[73] = cairo_pattern_create_rgb(0.373, 0.686, 0.686);
+ t->colors[74] = cairo_pattern_create_rgb(0.373, 0.686, 0.843);
+ t->colors[75] = cairo_pattern_create_rgb(0.373, 0.686, 1.000);
+ t->colors[76] = cairo_pattern_create_rgb(0.373, 0.843, 0.000);
+ t->colors[77] = cairo_pattern_create_rgb(0.373, 0.843, 0.373);
+ t->colors[78] = cairo_pattern_create_rgb(0.373, 0.843, 0.529);
+ t->colors[79] = cairo_pattern_create_rgb(0.373, 0.843, 0.686);
+ t->colors[80] = cairo_pattern_create_rgb(0.373, 0.843, 0.843);
+ t->colors[81] = cairo_pattern_create_rgb(0.373, 0.843, 1.000);
+ t->colors[82] = cairo_pattern_create_rgb(0.373, 1.000, 0.000);
+ t->colors[83] = cairo_pattern_create_rgb(0.373, 1.000, 0.373);
+ t->colors[84] = cairo_pattern_create_rgb(0.373, 1.000, 0.529);
+ t->colors[85] = cairo_pattern_create_rgb(0.373, 1.000, 0.686);
+ t->colors[86] = cairo_pattern_create_rgb(0.373, 1.000, 0.843);
+ t->colors[87] = cairo_pattern_create_rgb(0.373, 1.000, 1.000);
+ t->colors[88] = cairo_pattern_create_rgb(0.529, 0.000, 0.000);
+ t->colors[89] = cairo_pattern_create_rgb(0.529, 0.000, 0.373);
+ t->colors[90] = cairo_pattern_create_rgb(0.529, 0.000, 0.529);
+ t->colors[91] = cairo_pattern_create_rgb(0.529, 0.000, 0.686);
+ t->colors[92] = cairo_pattern_create_rgb(0.529, 0.000, 0.843);
+ t->colors[93] = cairo_pattern_create_rgb(0.529, 0.000, 1.000);
+ t->colors[94] = cairo_pattern_create_rgb(0.529, 0.373, 0.000);
+ t->colors[95] = cairo_pattern_create_rgb(0.529, 0.373, 0.373);
+ t->colors[96] = cairo_pattern_create_rgb(0.529, 0.373, 0.529);
+ t->colors[97] = cairo_pattern_create_rgb(0.529, 0.373, 0.686);
+ t->colors[98] = cairo_pattern_create_rgb(0.529, 0.373, 0.843);
+ t->colors[99] = cairo_pattern_create_rgb(0.529, 0.373, 1.000);
+ t->colors[100] = cairo_pattern_create_rgb(0.529, 0.529, 0.000);
+ t->colors[101] = cairo_pattern_create_rgb(0.529, 0.529, 0.373);
+ t->colors[102] = cairo_pattern_create_rgb(0.529, 0.529, 0.529);
+ t->colors[103] = cairo_pattern_create_rgb(0.529, 0.529, 0.686);
+ t->colors[104] = cairo_pattern_create_rgb(0.529, 0.529, 0.843);
+ t->colors[105] = cairo_pattern_create_rgb(0.529, 0.529, 1.000);
+ t->colors[106] = cairo_pattern_create_rgb(0.529, 0.686, 0.000);
+ t->colors[107] = cairo_pattern_create_rgb(0.529, 0.686, 0.373);
+ t->colors[108] = cairo_pattern_create_rgb(0.529, 0.686, 0.529);
+ t->colors[109] = cairo_pattern_create_rgb(0.529, 0.686, 0.686);
+ t->colors[110] = cairo_pattern_create_rgb(0.529, 0.686, 0.843);
+ t->colors[111] = cairo_pattern_create_rgb(0.529, 0.686, 1.000);
+ t->colors[112] = cairo_pattern_create_rgb(0.529, 0.843, 0.000);
+ t->colors[113] = cairo_pattern_create_rgb(0.529, 0.843, 0.373);
+ t->colors[114] = cairo_pattern_create_rgb(0.529, 0.843, 0.529);
+ t->colors[115] = cairo_pattern_create_rgb(0.529, 0.843, 0.686);
+ t->colors[116] = cairo_pattern_create_rgb(0.529, 0.843, 0.843);
+ t->colors[117] = cairo_pattern_create_rgb(0.529, 0.843, 1.000);
+ t->colors[118] = cairo_pattern_create_rgb(0.529, 1.000, 0.000);
+ t->colors[119] = cairo_pattern_create_rgb(0.529, 1.000, 0.373);
+ t->colors[120] = cairo_pattern_create_rgb(0.529, 1.000, 0.529);
+ t->colors[121] = cairo_pattern_create_rgb(0.529, 1.000, 0.686);
+ t->colors[122] = cairo_pattern_create_rgb(0.529, 1.000, 0.843);
+ t->colors[123] = cairo_pattern_create_rgb(0.529, 1.000, 1.000);
+ t->colors[124] = cairo_pattern_create_rgb(0.686, 0.000, 0.000);
+ t->colors[125] = cairo_pattern_create_rgb(0.686, 0.000, 0.373);
+ t->colors[126] = cairo_pattern_create_rgb(0.686, 0.000, 0.529);
+ t->colors[127] = cairo_pattern_create_rgb(0.686, 0.000, 0.686);
+ t->colors[128] = cairo_pattern_create_rgb(0.686, 0.000, 0.843);
+ t->colors[129] = cairo_pattern_create_rgb(0.686, 0.000, 1.000);
+ t->colors[130] = cairo_pattern_create_rgb(0.686, 0.373, 0.000);
+ t->colors[131] = cairo_pattern_create_rgb(0.686, 0.373, 0.373);
+ t->colors[132] = cairo_pattern_create_rgb(0.686, 0.373, 0.529);
+ t->colors[133] = cairo_pattern_create_rgb(0.686, 0.373, 0.686);
+ t->colors[134] = cairo_pattern_create_rgb(0.686, 0.373, 0.843);
+ t->colors[135] = cairo_pattern_create_rgb(0.686, 0.373, 1.000);
+ t->colors[136] = cairo_pattern_create_rgb(0.686, 0.529, 0.000);
+ t->colors[137] = cairo_pattern_create_rgb(0.686, 0.529, 0.373);
+ t->colors[138] = cairo_pattern_create_rgb(0.686, 0.529, 0.529);
+ t->colors[139] = cairo_pattern_create_rgb(0.686, 0.529, 0.686);
+ t->colors[140] = cairo_pattern_create_rgb(0.686, 0.529, 0.843);
+ t->colors[141] = cairo_pattern_create_rgb(0.686, 0.529, 1.000);
+ t->colors[142] = cairo_pattern_create_rgb(0.686, 0.686, 0.000);
+ t->colors[143] = cairo_pattern_create_rgb(0.686, 0.686, 0.373);
+ t->colors[144] = cairo_pattern_create_rgb(0.686, 0.686, 0.529);
+ t->colors[145] = cairo_pattern_create_rgb(0.686, 0.686, 0.686);
+ t->colors[146] = cairo_pattern_create_rgb(0.686, 0.686, 0.843);
+ t->colors[147] = cairo_pattern_create_rgb(0.686, 0.686, 1.000);
+ t->colors[148] = cairo_pattern_create_rgb(0.686, 0.843, 0.000);
+ t->colors[149] = cairo_pattern_create_rgb(0.686, 0.843, 0.373);
+ t->colors[150] = cairo_pattern_create_rgb(0.686, 0.843, 0.529);
+ t->colors[151] = cairo_pattern_create_rgb(0.686, 0.843, 0.686);
+ t->colors[152] = cairo_pattern_create_rgb(0.686, 0.843, 0.843);
+ t->colors[153] = cairo_pattern_create_rgb(0.686, 0.843, 1.000);
+ t->colors[154] = cairo_pattern_create_rgb(0.686, 1.000, 0.000);
+ t->colors[155] = cairo_pattern_create_rgb(0.686, 1.000, 0.373);
+ t->colors[156] = cairo_pattern_create_rgb(0.686, 1.000, 0.529);
+ t->colors[157] = cairo_pattern_create_rgb(0.686, 1.000, 0.686);
+ t->colors[158] = cairo_pattern_create_rgb(0.686, 1.000, 0.843);
+ t->colors[159] = cairo_pattern_create_rgb(0.686, 1.000, 1.000);
+ t->colors[160] = cairo_pattern_create_rgb(0.843, 0.000, 0.000);
+ t->colors[161] = cairo_pattern_create_rgb(0.843, 0.000, 0.373);
+ t->colors[162] = cairo_pattern_create_rgb(0.843, 0.000, 0.529);
+ t->colors[163] = cairo_pattern_create_rgb(0.843, 0.000, 0.686);
+ t->colors[164] = cairo_pattern_create_rgb(0.843, 0.000, 0.843);
+ t->colors[165] = cairo_pattern_create_rgb(0.843, 0.000, 1.000);
+ t->colors[166] = cairo_pattern_create_rgb(0.843, 0.373, 0.000);
+ t->colors[167] = cairo_pattern_create_rgb(0.843, 0.373, 0.373);
+ t->colors[168] = cairo_pattern_create_rgb(0.843, 0.373, 0.529);
+ t->colors[169] = cairo_pattern_create_rgb(0.843, 0.373, 0.686);
+ t->colors[170] = cairo_pattern_create_rgb(0.843, 0.373, 0.843);
+ t->colors[171] = cairo_pattern_create_rgb(0.843, 0.373, 1.000);
+ t->colors[172] = cairo_pattern_create_rgb(0.843, 0.529, 0.000);
+ t->colors[173] = cairo_pattern_create_rgb(0.843, 0.529, 0.373);
+ t->colors[174] = cairo_pattern_create_rgb(0.843, 0.529, 0.529);
+ t->colors[175] = cairo_pattern_create_rgb(0.843, 0.529, 0.686);
+ t->colors[176] = cairo_pattern_create_rgb(0.843, 0.529, 0.843);
+ t->colors[177] = cairo_pattern_create_rgb(0.843, 0.529, 1.000);
+ t->colors[178] = cairo_pattern_create_rgb(0.843, 0.686, 0.000);
+ t->colors[179] = cairo_pattern_create_rgb(0.843, 0.686, 0.373);
+ t->colors[180] = cairo_pattern_create_rgb(0.843, 0.686, 0.529);
+ t->colors[181] = cairo_pattern_create_rgb(0.843, 0.686, 0.686);
+ t->colors[182] = cairo_pattern_create_rgb(0.843, 0.686, 0.843);
+ t->colors[183] = cairo_pattern_create_rgb(0.843, 0.686, 1.000);
+ t->colors[184] = cairo_pattern_create_rgb(0.843, 0.843, 0.000);
+ t->colors[185] = cairo_pattern_create_rgb(0.843, 0.843, 0.373);
+ t->colors[186] = cairo_pattern_create_rgb(0.843, 0.843, 0.529);
+ t->colors[187] = cairo_pattern_create_rgb(0.843, 0.843, 0.686);
+ t->colors[188] = cairo_pattern_create_rgb(0.843, 0.843, 0.843);
+ t->colors[189] = cairo_pattern_create_rgb(0.843, 0.843, 1.000);
+ t->colors[190] = cairo_pattern_create_rgb(0.843, 1.000, 0.000);
+ t->colors[191] = cairo_pattern_create_rgb(0.843, 1.000, 0.373);
+ t->colors[192] = cairo_pattern_create_rgb(0.843, 1.000, 0.529);
+ t->colors[193] = cairo_pattern_create_rgb(0.843, 1.000, 0.686);
+ t->colors[194] = cairo_pattern_create_rgb(0.843, 1.000, 0.843);
+ t->colors[195] = cairo_pattern_create_rgb(0.843, 1.000, 1.000);
+ t->colors[196] = cairo_pattern_create_rgb(1.000, 0.000, 0.000);
+ t->colors[197] = cairo_pattern_create_rgb(1.000, 0.000, 0.373);
+ t->colors[198] = cairo_pattern_create_rgb(1.000, 0.000, 0.529);
+ t->colors[199] = cairo_pattern_create_rgb(1.000, 0.000, 0.686);
+ t->colors[200] = cairo_pattern_create_rgb(1.000, 0.000, 0.843);
+ t->colors[201] = cairo_pattern_create_rgb(1.000, 0.000, 1.000);
+ t->colors[202] = cairo_pattern_create_rgb(1.000, 0.373, 0.000);
+ t->colors[203] = cairo_pattern_create_rgb(1.000, 0.373, 0.373);
+ t->colors[204] = cairo_pattern_create_rgb(1.000, 0.373, 0.529);
+ t->colors[205] = cairo_pattern_create_rgb(1.000, 0.373, 0.686);
+ t->colors[206] = cairo_pattern_create_rgb(1.000, 0.373, 0.843);
+ t->colors[207] = cairo_pattern_create_rgb(1.000, 0.373, 1.000);
+ t->colors[208] = cairo_pattern_create_rgb(1.000, 0.529, 0.000);
+ t->colors[209] = cairo_pattern_create_rgb(1.000, 0.529, 0.373);
+ t->colors[210] = cairo_pattern_create_rgb(1.000, 0.529, 0.529);
+ t->colors[211] = cairo_pattern_create_rgb(1.000, 0.529, 0.686);
+ t->colors[212] = cairo_pattern_create_rgb(1.000, 0.529, 0.843);
+ t->colors[213] = cairo_pattern_create_rgb(1.000, 0.529, 1.000);
+ t->colors[214] = cairo_pattern_create_rgb(1.000, 0.686, 0.000);
+ t->colors[215] = cairo_pattern_create_rgb(1.000, 0.686, 0.373);
+ t->colors[216] = cairo_pattern_create_rgb(1.000, 0.686, 0.529);
+ t->colors[217] = cairo_pattern_create_rgb(1.000, 0.686, 0.686);
+ t->colors[218] = cairo_pattern_create_rgb(1.000, 0.686, 0.843);
+ t->colors[219] = cairo_pattern_create_rgb(1.000, 0.686, 1.000);
+ t->colors[220] = cairo_pattern_create_rgb(1.000, 0.843, 0.000);
+ t->colors[221] = cairo_pattern_create_rgb(1.000, 0.843, 0.373);
+ t->colors[222] = cairo_pattern_create_rgb(1.000, 0.843, 0.529);
+ t->colors[223] = cairo_pattern_create_rgb(1.000, 0.843, 0.686);
+ t->colors[224] = cairo_pattern_create_rgb(1.000, 0.843, 0.843);
+ t->colors[225] = cairo_pattern_create_rgb(1.000, 0.843, 1.000);
+ t->colors[226] = cairo_pattern_create_rgb(1.000, 1.000, 0.000);
+ t->colors[227] = cairo_pattern_create_rgb(1.000, 1.000, 0.373);
+ t->colors[228] = cairo_pattern_create_rgb(1.000, 1.000, 0.529);
+ t->colors[229] = cairo_pattern_create_rgb(1.000, 1.000, 0.686);
+ t->colors[230] = cairo_pattern_create_rgb(1.000, 1.000, 0.843);
+ t->colors[231] = cairo_pattern_create_rgb(1.000, 1.000, 1.000);
+ t->colors[232] = cairo_pattern_create_rgb(0.031, 0.031, 0.031);
+ t->colors[233] = cairo_pattern_create_rgb(0.071, 0.071, 0.071);
+ t->colors[234] = cairo_pattern_create_rgb(0.110, 0.110, 0.110);
+ t->colors[235] = cairo_pattern_create_rgb(0.149, 0.149, 0.149);
+ t->colors[236] = cairo_pattern_create_rgb(0.188, 0.188, 0.188);
+ t->colors[237] = cairo_pattern_create_rgb(0.227, 0.227, 0.227);
+ t->colors[238] = cairo_pattern_create_rgb(0.267, 0.267, 0.267);
+ t->colors[239] = cairo_pattern_create_rgb(0.306, 0.306, 0.306);
+ t->colors[240] = cairo_pattern_create_rgb(0.345, 0.345, 0.345);
+ t->colors[241] = cairo_pattern_create_rgb(0.376, 0.376, 0.376);
+ t->colors[242] = cairo_pattern_create_rgb(0.400, 0.400, 0.400);
+ t->colors[243] = cairo_pattern_create_rgb(0.463, 0.463, 0.463);
+ t->colors[244] = cairo_pattern_create_rgb(0.502, 0.502, 0.502);
+ t->colors[245] = cairo_pattern_create_rgb(0.541, 0.541, 0.541);
+ t->colors[246] = cairo_pattern_create_rgb(0.580, 0.580, 0.580);
+ t->colors[247] = cairo_pattern_create_rgb(0.620, 0.620, 0.620);
+ t->colors[248] = cairo_pattern_create_rgb(0.659, 0.659, 0.659);
+ t->colors[249] = cairo_pattern_create_rgb(0.698, 0.698, 0.698);
+ t->colors[250] = cairo_pattern_create_rgb(0.737, 0.737, 0.737);
+ t->colors[251] = cairo_pattern_create_rgb(0.776, 0.776, 0.776);
+ t->colors[252] = cairo_pattern_create_rgb(0.816, 0.816, 0.816);
+ t->colors[253] = cairo_pattern_create_rgb(0.855, 0.855, 0.855);
+ t->colors[254] = cairo_pattern_create_rgb(0.894, 0.894, 0.894);
+ t->colors[255] = cairo_pattern_create_rgb(0.933, 0.933, 0.933);
t->default_rows = 24;
t->default_cols = 80;
@@ -205,22 +444,19 @@ static void runes_config_set(RunesTerm *t, char *key, char *val)
t->mousecursorcolor = newcolor;
}
}
- else if (!strncmp(key, "color", 5)
- && strlen(key) == 6 && key[5] >= '0' && key[5] <= '7') {
+ else if (!strncmp(key, "color", 5)) {
cairo_pattern_t *newcolor;
- newcolor = runes_config_parse_color(val);
- if (newcolor) {
- cairo_pattern_destroy(t->colors[key[5] - '0']);
- t->colors[key[5] - '0'] = newcolor;
+ int i;
+
+ i = atoi(&key[5]);
+ if (key[5] < '0' || key[5] > '9' || i < 0 || i > 255) {
+ fprintf(stderr, "unknown option: '%s'\n", key);
+ return;
}
- }
- else if (!strncmp(key, "brightcolor", 5)
- && strlen(key) == 6 && key[5] >= '0' && key[5] <= '7') {
- cairo_pattern_t *newcolor;
newcolor = runes_config_parse_color(val);
if (newcolor) {
- cairo_pattern_destroy(t->brightcolors[key[5] - '0']);
- t->brightcolors[key[5] - '0'] = newcolor;
+ cairo_pattern_destroy(t->colors[i]);
+ t->colors[i] = newcolor;
}
}
else if (!strcmp(key, "rows")) {
diff --git a/src/display.c b/src/display.c
index 8a62f42..40a87db 100644
--- a/src/display.c
+++ b/src/display.c
@@ -332,6 +332,17 @@ void runes_display_set_fg_color(RunesTerm *t, int color)
cairo_set_source(t->cr, runes_display_get_fgcolor(t));
}
+void runes_display_set_fg_color_rgb(RunesTerm *t, int r, int g, int b)
+{
+ t->fgcolor = -2;
+ if (t->fgcustom) {
+ cairo_pattern_destroy(t->fgcustom);
+ }
+ t->fgcustom = cairo_pattern_create_rgb(
+ (double)r / 255.0, (double)g / 255.0, (double)b / 255.0);
+ cairo_set_source(t->cr, runes_display_get_fgcolor(t));
+}
+
void runes_display_reset_fg_color(RunesTerm *t)
{
runes_display_set_fg_color(t, -1);
@@ -343,6 +354,17 @@ void runes_display_set_bg_color(RunesTerm *t, int color)
cairo_set_source(t->cr, runes_display_get_fgcolor(t));
}
+void runes_display_set_bg_color_rgb(RunesTerm *t, int r, int g, int b)
+{
+ t->bgcolor = -2;
+ if (t->bgcustom) {
+ cairo_pattern_destroy(t->bgcustom);
+ }
+ t->bgcustom = cairo_pattern_create_rgb(
+ (double)r / 255.0, (double)g / 255.0, (double)b / 255.0);
+ cairo_set_source(t->cr, runes_display_get_fgcolor(t));
+}
+
void runes_display_reset_bg_color(RunesTerm *t)
{
runes_display_set_bg_color(t, -1);
@@ -450,12 +472,17 @@ void runes_display_cleanup(RunesTerm *t)
int i;
g_object_unref(t->layout);
- for (i = 0; i < 8; ++i) {
+ for (i = 0; i < 256; ++i) {
cairo_pattern_destroy(t->colors[i]);
- cairo_pattern_destroy(t->brightcolors[i]);
}
cairo_pattern_destroy(t->fgdefault);
cairo_pattern_destroy(t->bgdefault);
+ if (t->fgcustom) {
+ cairo_pattern_destroy(t->fgcustom);
+ }
+ if (t->bgcustom) {
+ cairo_pattern_destroy(t->bgcustom);
+ }
cairo_pattern_destroy(t->cursorcolor);
cairo_pattern_destroy(t->mousecursorcolor);
cairo_destroy(t->cr);
@@ -468,11 +495,14 @@ static cairo_pattern_t *runes_display_get_fgcolor(RunesTerm *t)
if (t->inverse && t->bgcolor == t->fgcolor) {
return t->bgdefault;
}
+ else if (color == -2) {
+ return t->inverse ? t->bgcustom : t->fgcustom;
+ }
else if (color == -1) {
return t->inverse ? t->bgdefault : t->fgdefault;
}
- else if (t->bold_is_bright && t->bold) {
- return t->brightcolors[color];
+ else if (t->bold_is_bright && t->bold && color < 8) {
+ return t->colors[color + 8];
}
else {
return t->colors[color];
@@ -486,6 +516,9 @@ static cairo_pattern_t *runes_display_get_bgcolor(RunesTerm *t)
if (t->inverse && t->bgcolor == t->fgcolor) {
return t->fgdefault;
}
+ else if (color == -2) {
+ return t->inverse ? t->bgcustom : t->fgcustom;
+ }
else if (color == -1) {
return t->inverse ? t->fgdefault : t->bgdefault;
}
diff --git a/src/display.h b/src/display.h
index cb0b16c..7b1952c 100644
--- a/src/display.h
+++ b/src/display.h
@@ -22,8 +22,10 @@ void runes_display_reset_underline(RunesTerm *t);
void runes_display_set_inverse(RunesTerm *t);
void runes_display_reset_inverse(RunesTerm *t);
void runes_display_set_fg_color(RunesTerm *t, int color);
+void runes_display_set_fg_color_rgb(RunesTerm *t, int r, int g, int b);
void runes_display_reset_fg_color(RunesTerm *t);
void runes_display_set_bg_color(RunesTerm *t, int color);
+void runes_display_set_bg_color_rgb(RunesTerm *t, int r, int g, int b);
void runes_display_reset_bg_color(RunesTerm *t);
void runes_display_show_cursor(RunesTerm *t);
void runes_display_hide_cursor(RunesTerm *t);
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;
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;
diff --git a/src/term.h b/src/term.h
index 89a0c54..c1d49ac 100644
--- a/src/term.h
+++ b/src/term.h
@@ -15,8 +15,9 @@ struct runes_term {
cairo_pattern_t *fgdefault;
cairo_pattern_t *bgdefault;
- cairo_pattern_t *colors[8];
- cairo_pattern_t *brightcolors[8];
+ cairo_pattern_t *colors[256];
+ cairo_pattern_t *fgcustom;
+ cairo_pattern_t *bgcustom;
int fgcolor;
int bgcolor;