예제 #1
0
static int
rgb2xterm (uint8_t r, uint8_t g, uint8_t b)
{
	static bool tableInit = false;
	double dst, dtmp;
	int best, i;

	if (!tableInit) {
		for (i=0; i<=253; ++i)
			colourTable_G[i] = xterm2rgb (i);
		tableInit = true;
	}

	best = 0;
	dst = 10000000000.0;

	for (i=0; i<=253; ++i) {
		dtmp = pow (colourTable_G[i].r - r, 2.0) +
			pow (colourTable_G[i].g - g, 2.0) +
			pow (colourTable_G[i].b - b, 2.0);
		if (dtmp < dst) {
			dst = dtmp;
			best = i;
		}
	}

	return best;
}
예제 #2
0
int main()
{
	int i = 16;
	unsigned char c[3];
	
	puts("GIMP Palette");
	puts("Name: xterm-256color");
	puts("Columns: 12");
	puts("#");
	
	for (; i < 256; i ++)
	{
		xterm2rgb(i, c);
		printf("%3d %3d %3d #%d, ", c[0], c[1], c[2], i);
		if (i < 232)
			printf("color cube (%d, %d, %d)\n",
				   ((i - 16) / 36) % 6, ((i - 16) / 6) % 6, (i - 16) % 6);
		else
			printf("grey ramp (%d)\n", i - 232);
	}
	
	return 0;
}
예제 #3
0
    bool CodeGenerator::parseSequence(const string& line, size_t begin, size_t end)
    {
	if (end-begin>2 && line[begin]!=0x1b && line[begin+1]!=0x5b)
	{
	    return false;
	}
	int ansiCode=0;
	int colorCode=0;
	unsigned char colorValues[3]={0};
	char colorString[10]={0};

	string codes=line.substr(begin+2, end-begin-2);
	vector<string> codeVector = StringTools::splitString(codes, ';');
	if (codes.empty()){ // fix empty grep --color ending sequence
	  elementStyle.setReset(true);
	  return true;
	}
	
	std::vector<std::string>::iterator itVectorData = codeVector.begin();
	while( itVectorData != codeVector.end())
	{
	    StringTools::str2num<int>(ansiCode, *(itVectorData), std::dec);
	    elementStyle.setReset(false);

	    switch (ansiCode)
	    {
		case 0: //Reset
		elementStyle.setReset(true);
		break;
		case 1: //Bold
		elementStyle.setBold(true);
		break;
		case 2: //Faint
		break;

		case 3: //italic
		elementStyle.setItalic(true);
		break;

		case 5: //Blink
		case 6: //Blink fast
		elementStyle.setBlink(true);
		break;

		case 8: // Conceal
		elementStyle.setConceal(true);
		break;

		case 4:// Underline Single
		case 21: // Underline double
		elementStyle.setUnderline(true);
		break;

		case 7: // image negative
		elementStyle.imageMode(true);
		break;

		case 22: // not bold, not faint
		elementStyle.setBold(false);
		break;

		case 24: //no underline
		elementStyle.setUnderline(false);
		break;

		case 25: //no blink
		elementStyle.setBlink(false);
		break;

		case 27: // image positive
		elementStyle.imageMode(false);
		break;

		case 28: // Reveal
		elementStyle.setConceal(false);
		break;

		case 30:
		elementStyle.setFgColour(ColorBlack);
		break;
		case 31:
		elementStyle.setFgColour(ColorRed);
		break;
		case 32:
		elementStyle.setFgColour(ColorGreen);
		break;
		case 33:
		elementStyle.setFgColour(ColorYellow);
		break;
		case 34:
		elementStyle.setFgColour(ColorBlue);
		break;
		case 35:
		elementStyle.setFgColour(ColorMagenta);
		break;
		case 36:
		elementStyle.setFgColour(ColorCyan);
		break;
		case 37:
		elementStyle.setFgColour(ColorWhite);
		break;
		case 38: // xterm 256 foreground color mode \033[38;5;<color>

		itVectorData++;
		if (itVectorData == codeVector.end()) break;

		if(*(itVectorData)!="5") break;

		itVectorData++;
		if (itVectorData == codeVector.end()) break;

		StringTools::str2num<int>(colorCode, *(itVectorData), std::dec);
		xterm2rgb((unsigned char)colorCode, colorValues);
		sprintf(colorString, "#%02x%02x%02x",
			colorValues[0], colorValues[1], colorValues[2]);
		elementStyle.setFgColour(colorString);
		break;
		case 39:
		elementStyle.setReset(true);
		break;

		case 40:
		elementStyle.setBgColour(ColorBlack);
		break;
		case 41:
		elementStyle.setBgColour(ColorRed);
		break;
		case 42:
		elementStyle.setBgColour(ColorGreen);
		break;
		case 43:
		elementStyle.setBgColour(ColorYellow);
		break;
		case 44:
		elementStyle.setBgColour(ColorBlue);
		break;
		case 45:
		elementStyle.setBgColour(ColorMagenta);
		break;
		case 46:
		elementStyle.setBgColour(ColorCyan);
		break;
		case 47:
		elementStyle.setBgColour(ColorWhite);
		break;

		case 48:  // xterm 256 background color mode \033[48;5;<color>

		itVectorData++;
		if (itVectorData == codeVector.end()) break;

		if(*(itVectorData)!="5") break;

		itVectorData++;
		if (itVectorData == codeVector.end()) break;

		 StringTools::str2num<int>(colorCode, *(itVectorData), std::dec);

		 xterm2rgb((unsigned char)colorCode, colorValues);
		sprintf(colorString, "#%02x%02x%02x",
			colorValues[0], colorValues[1], colorValues[2]);
		elementStyle.setBgColour(colorString);
		break;

		case 49:
		
		elementStyle.setReset(true);
		break;
	    }

	    if (ansiCode>=30 and ansiCode <40)
		elementStyle.setFgColourID(ansiCode-30);
	    if (ansiCode>=40 and ansiCode <50)
		elementStyle.setBgColourID(ansiCode-40);

	    if (itVectorData != codeVector.end()) itVectorData++;
	}

	return true;
    }