ColorTrieNode.java
/* ========================================================================
* PlantUML : a free UML diagram generator
* ========================================================================
*
* (C) Copyright 2009-2024, Arnaud Roques
*
* Project Info: https://plantuml.com
*
* If you like this project or if you find it useful, you can support us at:
*
* https://plantuml.com/patreon (only 1$ per month!)
* https://plantuml.com/paypal
*
* This file is part of PlantUML.
*
* PlantUML is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* PlantUML distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
* License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
* USA.
*
*
* Original Author: Arnaud Roques
*
*
*/
package net.sourceforge.plantuml.klimt.color;
import java.awt.Color;
import java.util.Collection;
import java.util.TreeSet;
public class ColorTrieNode {
private final ColorTrieNode[] children = new ColorTrieNode[26];
private Color value;
public final static ColorTrieNode INSTANCE = new ColorTrieNode();
public final static Collection<String> NAMES = new TreeSet<>();
static {
// Taken from http://perl.wikipedia.com/wiki/Named_colors ?
// http://www.w3schools.com/HTML/html_colornames.asp
register("AliceBlue", new Color(0xF0F8FF));
register("AntiqueWhite", new Color(0xFAEBD7));
register("Aqua", new Color(0x00FFFF));
register("Aquamarine", new Color(0x7FFFD4));
register("Azure", new Color(0xF0FFFF));
register("Beige", new Color(0xF5F5DC));
register("Bisque", new Color(0xFFE4C4));
register("Black", new Color(0x000000));
register("BlanchedAlmond", new Color(0xFFEBCD));
register("Blue", new Color(0x0000FF));
register("BlueViolet", new Color(0x8A2BE2));
register("Brown", new Color(0xA52A2A));
register("BurlyWood", new Color(0xDEB887));
register("CadetBlue", new Color(0x5F9EA0));
register("Chartreuse", new Color(0x7FFF00));
register("Chocolate", new Color(0xD2691E));
register("Coral", new Color(0xFF7F50));
register("CornflowerBlue", new Color(0x6495ED));
register("Cornsilk", new Color(0xFFF8DC));
register("Crimson", new Color(0xDC143C));
register("Cyan", new Color(0x00FFFF));
register("DarkBlue", new Color(0x00008B));
register("DarkCyan", new Color(0x008B8B));
register("DarkGoldenRod", new Color(0xB8860B));
register("DarkGray", new Color(0xA9A9A9));
register("DarkGrey", new Color(0xA9A9A9));
register("DarkGreen", new Color(0x006400));
register("DarkKhaki", new Color(0xBDB76B));
register("DarkMagenta", new Color(0x8B008B));
register("DarkOliveGreen", new Color(0x556B2F));
register("Darkorange", new Color(0xFF8C00));
register("DarkOrchid", new Color(0x9932CC));
register("DarkRed", new Color(0x8B0000));
register("DarkSalmon", new Color(0xE9967A));
register("DarkSeaGreen", new Color(0x8FBC8F));
register("DarkSlateBlue", new Color(0x483D8B));
register("DarkSlateGray", new Color(0x2F4F4F));
register("DarkSlateGrey", new Color(0x2F4F4F));
register("DarkTurquoise", new Color(0x00CED1));
register("DarkViolet", new Color(0x9400D3));
register("DeepPink", new Color(0xFF1493));
register("DeepSkyBlue", new Color(0x00BFFF));
register("DimGray", new Color(0x696969));
register("DimGrey", new Color(0x696969));
register("DodgerBlue", new Color(0x1E90FF));
register("FireBrick", new Color(0xB22222));
register("FloralWhite", new Color(0xFFFAF0));
register("ForestGreen", new Color(0x228B22));
register("Fuchsia", new Color(0xFF00FF));
register("Gainsboro", new Color(0xDCDCDC));
register("GhostWhite", new Color(0xF8F8FF));
register("Gold", new Color(0xFFD700));
register("GoldenRod", new Color(0xDAA520));
register("Gray", new Color(0x808080));
register("Grey", new Color(0x808080));
register("Green", new Color(0x008000));
register("GreenYellow", new Color(0xADFF2F));
register("HoneyDew", new Color(0xF0FFF0));
register("HotPink", new Color(0xFF69B4));
register("IndianRed", new Color(0xCD5C5C));
register("Indigo", new Color(0x4B0082));
register("Ivory", new Color(0xFFFFF0));
register("Khaki", new Color(0xF0E68C));
register("Lavender", new Color(0xE6E6FA));
register("LavenderBlush", new Color(0xFFF0F5));
register("LawnGreen", new Color(0x7CFC00));
register("LemonChiffon", new Color(0xFFFACD));
register("LightBlue", new Color(0xADD8E6));
register("LightCoral", new Color(0xF08080));
register("LightCyan", new Color(0xE0FFFF));
register("LightGoldenRodYellow", new Color(0xFAFAD2));
register("LightGray", new Color(0xD3D3D3));
register("LightGrey", new Color(0xD3D3D3));
register("LightGreen", new Color(0x90EE90));
register("LightPink", new Color(0xFFB6C1));
register("LightSalmon", new Color(0xFFA07A));
register("LightSeaGreen", new Color(0x20B2AA));
register("LightSkyBlue", new Color(0x87CEFA));
register("LightSlateGray", new Color(0x778899));
register("LightSlateGrey", new Color(0x778899));
register("LightSteelBlue", new Color(0xB0C4DE));
register("LightYellow", new Color(0xFFFFE0));
register("Lime", new Color(0x00FF00));
register("LimeGreen", new Color(0x32CD32));
register("Linen", new Color(0xFAF0E6));
register("Magenta", new Color(0xFF00FF));
register("Maroon", new Color(0x800000));
register("MediumAquaMarine", new Color(0x66CDAA));
register("MediumBlue", new Color(0x0000CD));
register("MediumOrchid", new Color(0xBA55D3));
register("MediumPurple", new Color(0x9370D8));
register("MediumSeaGreen", new Color(0x3CB371));
register("MediumSlateBlue", new Color(0x7B68EE));
register("MediumSpringGreen", new Color(0x00FA9A));
register("MediumTurquoise", new Color(0x48D1CC));
register("MediumVioletRed", new Color(0xC71585));
register("MidnightBlue", new Color(0x191970));
register("MintCream", new Color(0xF5FFFA));
register("MistyRose", new Color(0xFFE4E1));
register("Moccasin", new Color(0xFFE4B5));
register("NavajoWhite", new Color(0xFFDEAD));
register("Navy", new Color(0x000080));
register("OldLace", new Color(0xFDF5E6));
register("Olive", new Color(0x808000));
register("OliveDrab", new Color(0x6B8E23));
register("Orange", new Color(0xFFA500));
register("OrangeRed", new Color(0xFF4500));
register("Orchid", new Color(0xDA70D6));
register("PaleGoldenRod", new Color(0xEEE8AA));
register("PaleGreen", new Color(0x98FB98));
register("PaleTurquoise", new Color(0xAFEEEE));
register("PaleVioletRed", new Color(0xD87093));
register("PapayaWhip", new Color(0xFFEFD5));
register("PeachPuff", new Color(0xFFDAB9));
register("Peru", new Color(0xCD853F));
register("Pink", new Color(0xFFC0CB));
register("Plum", new Color(0xDDA0DD));
register("PowderBlue", new Color(0xB0E0E6));
register("Purple", new Color(0x800080));
register("Red", new Color(0xFF0000));
register("RosyBrown", new Color(0xBC8F8F));
register("RoyalBlue", new Color(0x4169E1));
register("SaddleBrown", new Color(0x8B4513));
register("Salmon", new Color(0xFA8072));
register("SandyBrown", new Color(0xF4A460));
register("SeaGreen", new Color(0x2E8B57));
register("SeaShell", new Color(0xFFF5EE));
register("Sienna", new Color(0xA0522D));
register("Silver", new Color(0xC0C0C0));
register("SkyBlue", new Color(0x87CEEB));
register("SlateBlue", new Color(0x6A5ACD));
register("SlateGray", new Color(0x708090));
register("SlateGrey", new Color(0x708090));
register("Snow", new Color(0xFFFAFA));
register("SpringGreen", new Color(0x00FF7F));
register("SteelBlue", new Color(0x4682B4));
register("Tan", new Color(0xD2B48C));
register("Teal", new Color(0x008080));
register("Thistle", new Color(0xD8BFD8));
register("Tomato", new Color(0xFF6347));
register("Turquoise", new Color(0x40E0D0));
register("Violet", new Color(0xEE82EE));
register("Wheat", new Color(0xF5DEB3));
register("White", new Color(0xFFFFFF));
register("WhiteSmoke", new Color(0xF5F5F5));
register("Yellow", new Color(0xFFFF00));
register("YellowGreen", new Color(0x9ACD32));
// Archimate
register("BUSINESS", new Color(0xFFFFCC));
register("APPLICATION", new Color(0xC2F0FF));
register("MOTIVATION", new Color(0xEFEFFF));
register("STRATEGY", new Color(0xF8E7C0));
register("TECHNOLOGY", new Color(0xC9FFC9));
register("PHYSICAL", new Color(0x97FF97));
register("IMPLEMENTATION", new Color(0xFFE0E0));
}
private ColorTrieNode child(char k, boolean create) {
final int idx = ((k | 0x20) - 'a');
if (idx < 0 || idx >= 26)
return null;
ColorTrieNode c = children[idx];
if (c == null && create) {
c = new ColorTrieNode();
children[idx] = c;
}
return c;
}
private static void register(String name, Color color) {
NAMES.add(name);
INSTANCE.putColor(name, color);
}
public void putColor(CharSequence name, Color color) {
ColorTrieNode n = this;
for (int i = 0, len = name.length(); i < len; i++) {
n = n.child(name.charAt(i), true);
if (n == null)
return;
}
n.value = color;
}
public Color getColor(CharSequence name) {
ColorTrieNode n = this;
for (int i = 0, len = name.length(); i < len; i++) {
n = n.child(name.charAt(i), false);
if (n == null)
return null;
}
return n.value;
}
}