jmud-0.11/
jmud-0.11/bin/
jmud-0.11/doc/
jmud-0.11/rec/
jmud-0.11/rec/mun/
jmud-0.11/rec/mun/grecia/
jmud-0.11/rec/mun/gunnar/
jmud-0.11/rec/qua/
jmud-0.11/src/bool/
jmud-0.11/src/clone/
jmud-0.11/src/integer/
jmud-0.11/src/misc/
jmud-0.11/src/string/
jmud-0.11/src/util/bit/
jmud-0.11/src/util/color/
jmud-0.11/src/util/file/
jmud-0.11/src/util/jgp/adaptor/
jmud-0.11/src/util/jgp/algorithm/
jmud-0.11/src/util/jgp/container/
jmud-0.11/src/util/jgp/functor/
jmud-0.11/src/util/jgp/interfaces/
jmud-0.11/src/util/jgp/predicate/
jmud-0.11/src/util/log/
jmud-0.11/src/util/state/
jmud-0.11/trash/
package util.color;

import util.bit.Bit;

public class Color {

    // VT100 colors

    public static final int BIT_DEFAULT        = Bit.BIT0;
    public static final int BIT_BOLD           = Bit.BIT1;
    public static final int BIT_UNDERLINED     = Bit.BIT2;
    public static final int BIT_BLINK          = Bit.BIT3;
    public static final int BIT_INVERSE        = Bit.BIT4;
    public static final int BIT_INVISIBLE      = Bit.BIT5;
    public static final int BIT_NORMAL         = Bit.BIT6;
    public static final int BIT_NOT_UNDERLINED = Bit.BIT7;
    public static final int BIT_STEADY         = Bit.BIT8;
    public static final int BIT_POSITIVE       = Bit.BIT9;
    public static final int BIT_VISIBLE        = Bit.BIT10;
    public static final int BIT_FG_BLACK       = Bit.BIT11;
    public static final int BIT_FG_RED         = Bit.BIT12;
    public static final int BIT_FG_GREEN       = Bit.BIT13;
    public static final int BIT_FG_YELLOW      = Bit.BIT14;
    public static final int BIT_FG_BLUE        = Bit.BIT15;
    public static final int BIT_FG_MAGENTA     = Bit.BIT16;
    public static final int BIT_FG_CYAN        = Bit.BIT17;
    public static final int BIT_FG_WHITE       = Bit.BIT18;
    public static final int BIT_FG_DEFAULT     = Bit.BIT19;
    public static final int BIT_BG_BLACK       = Bit.BIT20;
    public static final int BIT_BG_RED         = Bit.BIT21;
    public static final int BIT_BG_GREEN       = Bit.BIT22;
    public static final int BIT_BG_YELLOW      = Bit.BIT23;
    public static final int BIT_BG_BLUE        = Bit.BIT24;
    public static final int BIT_BG_MAGENTA     = Bit.BIT25;
    public static final int BIT_BG_CYAN        = Bit.BIT26;
    public static final int BIT_BG_WHITE       = Bit.BIT27;
    public static final int BIT_BG_DEFAULT     = Bit.BIT28;

    public static final int DEFAULT        = 0;
    public static final int BOLD           = 1;
    public static final int UNDERLINED     = 2;
    public static final int BLINK          = 3;
    public static final int INVERSE        = 4;
    public static final int INVISIBLE      = 5;
    public static final int NORMAL         = 6;
    public static final int NOT_UNDERLINED = 7;
    public static final int STEADY         = 8;
    public static final int POSITIVE       = 9;
    public static final int VISIBLE        = 10;
    public static final int FG_BLACK       = 11;
    public static final int FG_RED         = 12;
    public static final int FG_GREEN       = 13;
    public static final int FG_YELLOW      = 14;
    public static final int FG_BLUE        = 15;
    public static final int FG_MAGENTA     = 16;
    public static final int FG_CYAN        = 17;
    public static final int FG_WHITE       = 18;
    public static final int FG_DEFAULT     = 19;
    public static final int BG_BLACK       = 20;
    public static final int BG_RED         = 21;
    public static final int BG_GREEN       = 22;
    public static final int BG_YELLOW      = 23;
    public static final int BG_BLUE        = 24;
    public static final int BG_MAGENTA     = 25;
    public static final int BG_CYAN        = 26;
    public static final int BG_WHITE       = 27;
    public static final int BG_DEFAULT     = 28;

    public static final String vt100[] = {
	"0",   // 00  normal (default)
	"1",   // 01  bold
	"4",   // 02  underlined
	"5",   // 03  blink (appears as bold)
	"7",   // 04  inverse
	"8",   // 05  invisible (hidden)
	"22",  // 06  normal (neither bold nor faint)
	"24",  // 07  not underlined
	"25",  // 08  steady (not blinking)
	"27",  // 09  positive (not inverse)
	"28",  // 10  visible (not hidden)
	"30",  // 11  FG to black
	"31",  // 12  FG to red
	"32",  // 13  FG to green
	"33",  // 14  FG to yellow
	"34",  // 15  FG to blue
	"35",  // 16  FG to magenta
	"36",  // 17  FG to cyan
	"37",  // 18  FG to white
	"39",  // 19  FG to default (original)
	"40",  // 20  BG to black
	"41",  // 21  BG to red
	"42",  // 22  BG to green
	"43",  // 23  BG to yellow
	"44",  // 24  BG to blue
	"45",  // 25  BG to magenta
	"46",  // 26  BG to cyan
	"47",  // 27  BG to white
	"49"   // 28  BG to default (original)
    };

    public static final String WHITE_ON_BLACK = "\033[37;40;0m";
    public static final String BLACK_ON_WHITE = "\033[30;47;0m";
    public static final String FORCE_NORMAL   = WHITE_ON_BLACK;

    // XTERM colors

    public static final int XT_BLACK   = 0;
    public static final int XT_RED     = 1;
    public static final int XT_GREEN   = 2;
    public static final int XT_YELLOW  = 3;
    public static final int XT_BLUE    = 4;
    public static final int XT_MAGENTA = 5;
    public static final int XT_CYAN    = 6;
    public static final int XT_WHITE   = 7;
    
    public static final String xterm[] = {
	"\033[200m",  // 00  FG to black
	"\033[201m",  // 01  FG to red
	"\033[202m",  // 02  FG to green
	"\033[203m",  // 03  FG to yellow
	"\033[204m",  // 04  FG to blue
	"\033[205m",  // 05  FG to magenta
	"\033[206m",  // 06  FG to cyan
	"\033[207m",  // 07  FG to white
	"\033[208m",  // 08  FG to ?
	"\033[209m",  // 09  FG to ?
	"\033[210m",  // 10  FG to ?
	"\033[211m",  // 11  FG to ?
	"\033[212m",  // 12  FG to ?
	"\033[213m",  // 13  FG to ?
	"\033[214m",  // 14  FG to ?
	"\033[215m"   // 15  FG to ?
    };


    public static String getVT100(int color) {
	return "\033[" + vt100[color] + "m";
    }

    public static String buildVT100(int colorVector) {
	String str = "\033[";
	if (Bit.isSet(colorVector, 1))
	    str += vt100[0];
	int mask = 2;
	for (int i = 1; i < vt100.length; ++i) {
	    if (Bit.isSet(colorVector, mask))
		str += ";" + vt100[i];
	    mask <<= 1;
	}
	return str + "m";
    }

    public static String getXterm(int color) {
	return xterm[color];
    }

    public static String getNormal() {
	return FORCE_NORMAL;
    }
}