package automatvgi;

import java.awt.Color;
import java.util.LinkedList;

/**
 * 
 * @author lombardy
 * Liste des couleurs d�finies dans LaTeX en cmyk, converties ici en rgb
 * Chaque couleur est accompagn�e de son nom
 */
public class LatexColor {
	/**
	 * Contains all the colors with their names
	 */
	static public LinkedList<LatexColor> colors=new LinkedList<LatexColor>();
	
	static{
		colors.add(new LatexColor("GreenYellow",getCmyk(0.15,0,0.69,0)));
		colors.add(new LatexColor("Yellow",getCmyk(0, 0, 1, 0)));
		colors.add(new LatexColor("Goldenrod",getCmyk(0,0.10,0.84,0)));
		colors.add(new LatexColor("Dandelion",getCmyk(0,0.29,0.84,0)));
		colors.add(new LatexColor("Apricot",getCmyk(0,0.32,0.52,0)));
		colors.add(new LatexColor("Peach",getCmyk(0,0.50,0.70,0)));
		colors.add(new LatexColor("Melon",getCmyk(0,0.46,0.50,0)));
		colors.add(new LatexColor("YellowOrange",getCmyk(0,0.42,1,0)));
		colors.add(new LatexColor("Orange",getCmyk(0,0.61,0.87,0)));
		colors.add(new LatexColor("BurntOrange",getCmyk(0,0.51,1,0)));
		colors.add(new LatexColor("Bittersweet",getCmyk(0,0.75,1,0.24)));
		colors.add(new LatexColor("RedOrange",getCmyk(0,0.77,0.87,0)));
		colors.add(new LatexColor("Mahogany",getCmyk(0,0.85,0.87,0.35)));
		colors.add(new LatexColor("Maroon",getCmyk(0,0.87,0.68,0.32)));
		colors.add(new LatexColor("BrickRed",getCmyk(0,0.89,0.94,0.28)));
		colors.add(new LatexColor("Red",getCmyk(0,1,1,0)));
		colors.add(new LatexColor("OrangeRed",getCmyk(0,1,0.50,0)));
		colors.add(new LatexColor("RubineRed",getCmyk(0,1,0.13,0)));
		colors.add(new LatexColor("WildStrawberry",getCmyk(0,0.96,0.39,0)));
		colors.add(new LatexColor("Salmon",getCmyk(0,0.53,0.38,0)));
		colors.add(new LatexColor("CarnationPink",getCmyk(0,0.63,0,0)));
		colors.add(new LatexColor("Magenta",getCmyk(0,1,0,0)));
		colors.add(new LatexColor("VioletRed",getCmyk(0,0.81,0,0)));
		colors.add(new LatexColor("Rhodamine",getCmyk(0,0.82,0,0)));
		colors.add(new LatexColor("Mulberry",getCmyk(0.34,0.90,0,0.02)));
		colors.add(new LatexColor("RedViolet",getCmyk(0.07,0.90,0,0.34)));
		colors.add(new LatexColor("Fuchsia",getCmyk(0.47,0.91,0,0.08)));
		colors.add(new LatexColor("Lavender",getCmyk(0,0.48,0,0)));
		colors.add(new LatexColor("Thistle",getCmyk(0.12,0.59,0,0)));
		colors.add(new LatexColor("Orchid",getCmyk(0.32,0.64,0,0)));
		colors.add(new LatexColor("DarkOrchid",getCmyk(0.40,0.80,0.20,0)));
		colors.add(new LatexColor("Purple",getCmyk(0.45,0.86,0,0)));
		colors.add(new LatexColor("Plum",getCmyk(0.50,1,0,0)));
		colors.add(new LatexColor("Violet",getCmyk(0.79,0.88,0,0)));
		colors.add(new LatexColor("RoyalPurple",getCmyk(0.75,0.90,0,0)));
		colors.add(new LatexColor("BlueViolet",getCmyk(0.86,0.91,0,0.04)));
		colors.add(new LatexColor("Periwinkle",getCmyk(0.57,0.55,0,0)));
		colors.add(new LatexColor("CadetBlue",getCmyk(0.62,0.57,0.23,0)));
		colors.add(new LatexColor("CornflowerBlue",getCmyk(0.65,0.13,0,0)));
		colors.add(new LatexColor("MidnightBlue",getCmyk(0.98,0.13,0,0.43)));
		colors.add(new LatexColor("NavyBlue",getCmyk(0.94,0.54,0,0)));
		colors.add(new LatexColor("RoyalBlue",getCmyk(1,0.50,0,0)));
		colors.add(new LatexColor("Blue",getCmyk(1,1,0,0)));
		colors.add(new LatexColor("Cerulean",getCmyk(0.94,0.11,0,0)));
		colors.add(new LatexColor("Cyan",getCmyk(1,0,0,0)));
		colors.add(new LatexColor("ProcessBlue",getCmyk(0.96,0,0,0)));
		colors.add(new LatexColor("SkyBlue",getCmyk(0.62,0,0.12,0)));
		colors.add(new LatexColor("Turquoise",getCmyk(0.85,0,0.20,0)));
		colors.add(new LatexColor("TealBlue",getCmyk(0.86,0,0.34,0.02)));
		colors.add(new LatexColor("Aquamarine",getCmyk(0.82,0,0.30,0)));
		colors.add(new LatexColor("BlueGreen",getCmyk(0.85,0,0.33,0)));
		colors.add(new LatexColor("Emerald",getCmyk(1,0,0.50,0)));
		colors.add(new LatexColor("JungleGreen",getCmyk(0.99,0,0.52,0)));
		colors.add(new LatexColor("SeaGreen",getCmyk(0.69,0,0.50,0)));
		colors.add(new LatexColor("Green",getCmyk(1,0,1,0)));
		colors.add(new LatexColor("ForestGreen",getCmyk(0.91,0,0.88,0.12)));
		colors.add(new LatexColor("PineGreen",getCmyk(0.92,0,0.59,0.25)));
		colors.add(new LatexColor("LimeGreen",getCmyk(0.50,0,1,0)));
		colors.add(new LatexColor("YellowGreen",getCmyk(0.44,0,0.74,0)));
		colors.add(new LatexColor("SpringGreen",getCmyk(0.26,0,0.76,0)));
		colors.add(new LatexColor("OliveGreen",getCmyk(0.64,0,0.95,0.40)));
		colors.add(new LatexColor("RawSienna",getCmyk(0,0.72,1,0.45)));
		colors.add(new LatexColor("Sepia",getCmyk(0,0.83,1,0.70)));
		colors.add(new LatexColor("Brown",getCmyk(0,0.81,1,0.60)));
		colors.add(new LatexColor("Tan",getCmyk(0.14,0.42,0.56,0)));
		colors.add(new LatexColor("Gray",getCmyk(0, 0, 0, 0.5)));
		colors.add(new LatexColor("Black",getCmyk(0, 0, 0, 1)));
		colors.add(new LatexColor("White",getCmyk(0, 0, 0, 0)));
		colors.add(new LatexColor("Défaut",null));
	}
	
	/**
	 * Conversion CMYK to RGB
	 * @param c Cyan
	 * @param m Mahogany
	 * @param y Yellow
	 * @param k Darkness
	 * @return the corresponding RGB color
	 */
	private static Color getCmyk(double c,double m,double y, double k){
		float r=(float)((1-c)*(1-k)),
		      g=(float)((1-m)*(1-k)),
		      b=(float)((1-y)*(1-k));
		return new Color(r,g,b);
	}
	
	private String name;
	private Color color;

	public LatexColor(String name, Color color) {
		this.name = name;
		this.color = color;
	}
	public Color getColor() {
		return color;
	}
	
	@Override
	public String toString() {
		return name;
	}
	
	public static LatexColor getColorByName(String s){
		for(LatexColor lc: colors)
			if(lc.name.equals(s)) return lc;
		return null;
	}
}


