mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-10-06 03:50:02 +02:00
Merge remote-tracking branch 'origin/GP-773_ghidravore_graph_visualization_options--SQUASHED'
This commit is contained in:
commit
69e8119211
84 changed files with 4102 additions and 1822 deletions
|
@ -852,15 +852,8 @@ public class HTMLUtilities {
|
|||
* @return a string of the format #RRGGBB.
|
||||
*/
|
||||
public static String toHexString(Color color) {
|
||||
int r = color.getRed();
|
||||
int g = color.getGreen();
|
||||
int b = color.getBlue();
|
||||
|
||||
StringBuilder buffy = new StringBuilder("#");
|
||||
buffy.append(StringUtilities.pad(Integer.toHexString(r), '0', 2));
|
||||
buffy.append(StringUtilities.pad(Integer.toHexString(g), '0', 2));
|
||||
buffy.append(StringUtilities.pad(Integer.toHexString(b), '0', 2));
|
||||
return buffy.toString().toUpperCase();
|
||||
// this will format a color value as a 6 digit hex string (e.g. #rrggbb)
|
||||
return String.format("#%06X", color.getRGB() & 0xffffff);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,249 @@
|
|||
/* ###
|
||||
* IP: GHIDRA
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package ghidra.util;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
/**
|
||||
* Class for web color support. This class defines many of the colors used by html. This class
|
||||
* includes methods for converting a color to a string (name or hex value) and for converting
|
||||
* those strings back to a color.
|
||||
*/
|
||||
public abstract class WebColors {
|
||||
private static final Pattern HEX_PATTERN = Pattern.compile("(0x|#)[0-9A-Fa-f]{6}");
|
||||
private static final Map<String, Color> nameToColorMap = new HashMap<>();
|
||||
private static final Map<Color, String> colorToNameMap = new HashMap<>();
|
||||
|
||||
//@formatter:off
|
||||
public static final Color BLACK = registerColor("Black", Color.black);
|
||||
public static final Color NAVY = registerColor("Navy", Color.decode("0x000080"));
|
||||
public static final Color DARK_BLUE = registerColor("DarkBlue", Color.decode("0x00008B"));
|
||||
public static final Color MEDIUM_BLUE = registerColor("MediumBlue", Color.decode("0x0000CD"));
|
||||
public static final Color BLUE = registerColor("Blue", Color.decode("0x0000FF"));
|
||||
public static final Color DARK_GREEN = registerColor("DarkGreen", Color.decode("0x006400"));
|
||||
public static final Color GREEN = registerColor("Green", Color.decode("0x008000"));
|
||||
public static final Color TEAL = registerColor("Teal", Color.decode("0x008080"));
|
||||
public static final Color DARK_CYAN = registerColor("DarkCyan", Color.decode("0x008B8B"));
|
||||
public static final Color DEEP_SKY_BLUE = registerColor("DeepSkyBlue", Color.decode("0x00BFFF"));
|
||||
public static final Color DARK_TURQUOSE = registerColor("DarkTurquoise", Color.decode("0x00CED1"));
|
||||
public static final Color LIME = registerColor("Lime", Color.decode("0x00FF00"));
|
||||
public static final Color SPRING_GREEN = registerColor("SpringGreen", Color.decode("0x00FF7F"));
|
||||
public static final Color AQUA = registerColor("Aqua", Color.decode("0x00FFFF"));
|
||||
public static final Color CYAN = registerColor("Cyan", Color.decode("0x00FFFF"));
|
||||
public static final Color MIDNIGHT_BLUE = registerColor("MidnightBlue", Color.decode("0x191970"));
|
||||
public static final Color DOGER_BLUE = registerColor("DodgerBlue", Color.decode("0x1E90FF"));
|
||||
public static final Color LIGHT_SEA_GREEN = registerColor("LightSeaGreen", Color.decode("0x20B2AA"));
|
||||
public static final Color FOREST_GREEN = registerColor("ForestGreen", Color.decode("0x228B22"));
|
||||
public static final Color SEA_GREEN = registerColor("SeaGreen", Color.decode("0x2E8B57"));
|
||||
public static final Color DARK_SLATE_GRAY = registerColor("DarkSlateGray", Color.decode("0x2F4F4F"));
|
||||
public static final Color LIME_GREEN = registerColor("LimeGreen", Color.decode("0x32CD32"));
|
||||
public static final Color TURQUOISE = registerColor("Turquoise", Color.decode("0x40E0D0"));
|
||||
public static final Color ROYAL_BLUE = registerColor("RoyalBlue", Color.decode("0x4169E1"));
|
||||
public static final Color STEEL_BLUE = registerColor("SteelBlue", Color.decode("0x4682B4"));
|
||||
public static final Color DARK_SLATE_BLUE = registerColor("DarkSlateBlue", Color.decode("0x483D8B"));
|
||||
public static final Color INDIGO = registerColor("Indigo", Color.decode("0x4B0082"));
|
||||
public static final Color CADET_BLUE = registerColor("CadetBlue", Color.decode("0x5F9EA0"));
|
||||
public static final Color REBECCA_PURPLE = registerColor("RebeccaPurple", Color.decode("0x663399"));
|
||||
public static final Color DIM_GRAY = registerColor("DimGray", Color.decode("0x696969"));
|
||||
public static final Color SLATE_BLUE = registerColor("SlateBlue", Color.decode("0x6A5ACD"));
|
||||
public static final Color OLIVE_DRAB = registerColor("OliveDrab", Color.decode("0x6B8E23"));
|
||||
public static final Color SLATE_GRAY = registerColor("SlateGray", Color.decode("0x708090"));
|
||||
public static final Color LAWN_GREEN = registerColor("LawnGreen", Color.decode("0x7CFC00"));
|
||||
public static final Color CHARTREUSE = registerColor("Chartreuse", Color.decode("0x7FFF00"));
|
||||
public static final Color AQUAMARINE = registerColor("Aquamarine", Color.decode("0x7FFFD4"));
|
||||
public static final Color MAROON = registerColor("Maroon", Color.decode("0x800000"));
|
||||
public static final Color PURPLE = registerColor("Purple", Color.decode("0x800080"));
|
||||
public static final Color OLIVE = registerColor("Olive", Color.decode("0x808000"));
|
||||
public static final Color GRAY = registerColor("Gray", Color.decode("0x808080"));
|
||||
public static final Color SYY_BLUE = registerColor("SkyBlue", Color.decode("0x87CEEB"));
|
||||
public static final Color LIGHT_SKY_BLUE = registerColor("LightSkyBlue", Color.decode("0x87CEFA"));
|
||||
public static final Color BLUE_VIOLET = registerColor("BlueViolet", Color.decode("0x8A2BE2"));
|
||||
public static final Color DARK_RED = registerColor("DarkRed", Color.decode("0x8B0000"));
|
||||
public static final Color DARK_MAGENTA = registerColor("DarkMagenta", Color.decode("0x8B008B"));
|
||||
public static final Color SADDLE_BROWN = registerColor("SaddleBrown", Color.decode("0x8B4513"));
|
||||
public static final Color DARK_SEA_GREEN = registerColor("DarkSeaGreen", Color.decode("0x8FBC8F"));
|
||||
public static final Color LIGHT_GREEN = registerColor("LightGreen", Color.decode("0x90EE90"));
|
||||
public static final Color MEDIUM_PURPLE = registerColor("MediumPurple", Color.decode("0x9370DB"));
|
||||
public static final Color DARK_VIOLET = registerColor("DarkViolet", Color.decode("0x9400D3"));
|
||||
public static final Color PALE_GREEN = registerColor("PaleGreen", Color.decode("0x98FB98"));
|
||||
public static final Color DARK_ORCHID = registerColor("DarkOrchid", Color.decode("0x9932CC"));
|
||||
public static final Color YELLOW_GREEN = registerColor("YellowGreen", Color.decode("0x9ACD32"));
|
||||
public static final Color SIENNA = registerColor("Sienna", Color.decode("0xA0522D"));
|
||||
public static final Color BROWN = registerColor("Brown", Color.decode("0xA52A2A"));
|
||||
public static final Color DARK_GRAY = registerColor("DarkGray", Color.decode("0xA9A9A9"));
|
||||
public static final Color LIGHT_BLUE = registerColor("LightBlue", Color.decode("0xADD8E6"));
|
||||
public static final Color GREEN_YELLOW = registerColor("GreenYellow", Color.decode("0xADFF2F"));
|
||||
public static final Color PALE_TURQUOISE = registerColor("PaleTurquoise", Color.decode("0xAFEEEE"));
|
||||
public static final Color POWDER_BLUE = registerColor("PowderBlue", Color.decode("0xB0E0E6"));
|
||||
public static final Color FIRE_BRICK = registerColor("FireBrick", Color.decode("0xB22222"));
|
||||
public static final Color DARK_GOLDENROD = registerColor("DarkGoldenRod", Color.decode("0xB8860B"));
|
||||
public static final Color MEDIUM_ORCHID = registerColor("MediumOrchid", Color.decode("0xBA55D3"));
|
||||
public static final Color ROSY_BROWN = registerColor("RosyBrown", Color.decode("0xBC8F8F"));
|
||||
public static final Color DARK_KHAKI = registerColor("DarkKhaki", Color.decode("0xBDB76B"));
|
||||
public static final Color SILVER = registerColor("Silver", Color.decode("0xC0C0C0"));
|
||||
public static final Color INDIAN_RED = registerColor("IndianRed", Color.decode("0xCD5C5C"));
|
||||
public static final Color PERU = registerColor("Peru", Color.decode("0xCD853F"));
|
||||
public static final Color CHOCOLATE = registerColor("Chocolate", Color.decode("0xD2691E"));
|
||||
public static final Color TAN = registerColor("Tan", Color.decode("0xD2B48C"));
|
||||
public static final Color LIGHT_GRAY = registerColor("LightGray", Color.decode("0xD3D3D3"));
|
||||
public static final Color THISTLE = registerColor("Thistle", Color.decode("0xD8BFD8"));
|
||||
public static final Color ORCHID = registerColor("Orchid", Color.decode("0xDA70D6"));
|
||||
public static final Color GOLDEN_ROD = registerColor("GoldenRod", Color.decode("0xDAA520"));
|
||||
public static final Color PALE_VIOLET_RED = registerColor("PaleVioletRed", Color.decode("0xDB7093"));
|
||||
public static final Color CRIMSON = registerColor("Crimson", Color.decode("0xDC143C"));
|
||||
public static final Color GAINSBORO = registerColor("Gainsboro", Color.decode("0xDCDCDC"));
|
||||
public static final Color PLUM = registerColor("Plum", Color.decode("0xDDA0DD"));
|
||||
public static final Color BURLYWOOD = registerColor("BurlyWood", Color.decode("0xDEB887"));
|
||||
public static final Color LIGHT_CYAN = registerColor("LightCyan", Color.decode("0xE0FFFF"));
|
||||
public static final Color LAVENDER = registerColor("Lavender", Color.decode("0xE6E6FA"));
|
||||
public static final Color DARK_SALMON = registerColor("DarkSalmon", Color.decode("0xE9967A"));
|
||||
public static final Color VIOLET = registerColor("Violet", Color.decode("0xEE82EE"));
|
||||
public static final Color PALE_GOLDENROD = registerColor("PaleGoldenRod", Color.decode("0xEEE8AA"));
|
||||
public static final Color LIGHT_CORAL = registerColor("LightCoral", Color.decode("0xF08080"));
|
||||
public static final Color KHAKE = registerColor("Khaki", Color.decode("0xF0E68C"));
|
||||
public static final Color ALICE_BLUE = registerColor("AliceBlue", Color.decode("0xF0F8FF"));
|
||||
public static final Color HONEY_DEW = registerColor("HoneyDew", Color.decode("0xF0FFF0"));
|
||||
public static final Color AZURE = registerColor("Azure", Color.decode("0xF0FFFF"));
|
||||
public static final Color SANDY_BROWN = registerColor("SandyBrown", Color.decode("0xF4A460"));
|
||||
public static final Color WHEAT = registerColor("Wheat", Color.decode("0xF5DEB3"));
|
||||
public static final Color BEIGE = registerColor("Beige", Color.decode("0xF5F5DC"));
|
||||
public static final Color WHITE_SMOKE = registerColor("WhiteSmoke", Color.decode("0xF5F5F5"));
|
||||
public static final Color MINT_CREAM = registerColor("MintCream", Color.decode("0xF5FFFA"));
|
||||
public static final Color GHOST_WHITE = registerColor("GhostWhite", Color.decode("0xF8F8FF"));
|
||||
public static final Color SALMON = registerColor("Salmon", Color.decode("0xFA8072"));
|
||||
public static final Color ANTIQUE_WHITE = registerColor("AntiqueWhite", Color.decode("0xFAEBD7"));
|
||||
public static final Color LINEN = registerColor("Linen", Color.decode("0xFAF0E6"));
|
||||
public static final Color OLDLACE = registerColor("OldLace", Color.decode("0xFDF5E6"));
|
||||
public static final Color RED = registerColor("Red", Color.decode("0xFF0000"));
|
||||
public static final Color FUCHSIA = registerColor("Fuchsia", Color.decode("0xFF00FF"));
|
||||
public static final Color MAGENTA = registerColor("Magenta", Color.decode("0xFF00FF"));
|
||||
public static final Color DEEP_PINK = registerColor("DeepPink", Color.decode("0xFF1493"));
|
||||
public static final Color ORANGE_RED = registerColor("OrangeRed", Color.decode("0xFF4500"));
|
||||
public static final Color TOMATO = registerColor("Tomato", Color.decode("0xFF6347"));
|
||||
public static final Color HOT_PINK = registerColor("HotPink", Color.decode("0xFF69B4"));
|
||||
public static final Color CORAL = registerColor("Coral", Color.decode("0xFF7F50"));
|
||||
public static final Color DARK_ORANGE = registerColor("DarkOrange", Color.decode("0xFF8C00"));
|
||||
public static final Color LIGHT_SALMON = registerColor("LightSalmon", Color.decode("0xFFA07A"));
|
||||
public static final Color ORANGE = registerColor("Orange", Color.decode("0xFFA500"));
|
||||
public static final Color LIGHT_PINK = registerColor("LightPink", Color.decode("0xFFB6C1"));
|
||||
public static final Color PINK = registerColor("Pink", Color.decode("0xFFC0CB"));
|
||||
public static final Color GOLD = registerColor("Gold", Color.decode("0xFFD700"));
|
||||
public static final Color PEACH_PUFF = registerColor("PeachPuff", Color.decode("0xFFDAB9"));
|
||||
public static final Color NAVAJO_WHITE = registerColor("NavajoWhite", Color.decode("0xFFDEAD"));
|
||||
public static final Color MOCCASIN = registerColor("Moccasin", Color.decode("0xFFE4B5"));
|
||||
public static final Color BISQUE = registerColor("Bisque", Color.decode("0xFFE4C4"));
|
||||
public static final Color MISTY_ROSE = registerColor("MistyRose", Color.decode("0xFFE4E1"));
|
||||
public static final Color BLANCHED_ALMOND = registerColor("BlanchedAlmond", Color.decode("0xFFEBCD"));
|
||||
public static final Color PAPAYA_WHIP = registerColor("PapayaWhip", Color.decode("0xFFEFD5"));
|
||||
public static final Color LAVENDAR_BLUSH = registerColor("LavenderBlush", Color.decode("0xFFF0F5"));
|
||||
public static final Color SEASHELL = registerColor("SeaShell", Color.decode("0xFFF5EE"));
|
||||
public static final Color CORNSILK = registerColor("Cornsilk", Color.decode("0xFFF8DC"));
|
||||
public static final Color LEMON_CHIFFON = registerColor("LemonChiffon", Color.decode("0xFFFACD"));
|
||||
public static final Color FLORAL_WHITE = registerColor("FloralWhite", Color.decode("0xFFFAF0"));
|
||||
public static final Color SNOW = registerColor("Snow", Color.decode("0xFFFAFA"));
|
||||
public static final Color YELLOW = registerColor("Yellow", Color.decode("0xFFFF00"));
|
||||
public static final Color LIGHT_YELLOW = registerColor("LightYellow", Color.decode("0xFFFFE0"));
|
||||
public static final Color IVORY = registerColor("Ivory", Color.decode("0xFFFFF0"));
|
||||
public static final Color WHITE = registerColor("White", Color.decode("0xFFFFFF"));
|
||||
public static final Color MEDIUM_SPRING_GREEN = registerColor("MediumSpringGreen", Color.decode("0x00FA9A"));
|
||||
public static final Color LIGHT_GOLDENROD = registerColor("LightGoldenRodYellow", Color.decode("0xFAFAD2"));
|
||||
public static final Color MEDIUM_VIOLET_RED = registerColor("MediumVioletRed", Color.decode("0xC71585"));
|
||||
public static final Color LIGHT_STEEL_BLUE = registerColor("LightSteelBlue", Color.decode("0xB0C4DE"));
|
||||
public static final Color LIGHT_SLATE_GRAY = registerColor("LightSlateGray", Color.decode("0x778899"));
|
||||
public static final Color MEDIUM_SLATE_BLUE = registerColor("MediumSlateBlue", Color.decode("0x7B68EE"));
|
||||
public static final Color MEDIUM_SEA_GREEN = registerColor("MediumSeaGreen", Color.decode("0x3CB371"));
|
||||
public static final Color MEDUM_AQUA_MARINE = registerColor("MediumAquaMarine", Color.decode("0x66CDAA"));
|
||||
public static final Color MEDIUM_TURQOISE = registerColor("MediumTurquoise", Color.decode("0x48D1CC"));
|
||||
public static final Color DARK_OLIVE_GREEN = registerColor("DarkOliveGreen", Color.decode("0x556B2F"));
|
||||
public static final Color CORN_FLOWER_BLUE = registerColor("CornflowerBlue", Color.decode("0x6495ED"));
|
||||
//@formatter:on
|
||||
|
||||
// cannot instantiate nor extend
|
||||
private WebColors() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Tries to find a color for the given String value. The String value can either be
|
||||
* a hex string (see {@link Color#decode(String)}) or a web color name as defined
|
||||
* above
|
||||
*
|
||||
* @param value the string value to interpret as a color
|
||||
* @param defaultColor a default color to return if the string can't be converted to a color
|
||||
* @return a color for the given string value or the default color if the string can't be translated
|
||||
*/
|
||||
public static Color getColorOrDefault(String value, Color defaultColor) {
|
||||
Color color = getColor(value);
|
||||
return color != null ? color : defaultColor;
|
||||
}
|
||||
|
||||
/**
|
||||
* Tries to find a color for the given String value. The String value can either be
|
||||
* a hex string (see {@link Color#decode(String)}) or a web color name as defined
|
||||
* in {@link WebColors}
|
||||
*
|
||||
* @param value the string value to interpret as a color
|
||||
* @return a color for the given string value or null if the string can't be translated
|
||||
*/
|
||||
public static Color getColor(String value) {
|
||||
Color color = nameToColorMap.get(value);
|
||||
if (color != null) {
|
||||
return color;
|
||||
}
|
||||
// if the value matches an RGB hex string, turn that into a color
|
||||
color = getHexColor(value);
|
||||
if (color != null) {
|
||||
return color;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts a color to a string value. If there is a defined color for the given color value,
|
||||
* the color name will be returned. Otherwise, it will return a hex string for the color as
|
||||
* defined by {@link Color#toString()}. The result of this call can be passed to
|
||||
* {@link #getColor(String)} and be guaranteed that a color will be returned
|
||||
*
|
||||
* @param color the color to convert to a string.
|
||||
* @return the string representation for the given color.
|
||||
*/
|
||||
public static String toString(Color color) {
|
||||
String name = colorToNameMap.get(color);
|
||||
if (name != null) {
|
||||
return name;
|
||||
}
|
||||
// this will format a color value as a 6 digit hex (e.g. #rrggbb)
|
||||
return String.format("#%06X", color.getRGB() & 0xffffff);
|
||||
}
|
||||
|
||||
private static Color getHexColor(String hexString) {
|
||||
Matcher matcher = HEX_PATTERN.matcher(hexString);
|
||||
if (matcher.matches()) {
|
||||
return Color.decode(hexString);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private static Color registerColor(String name, Color color) {
|
||||
nameToColorMap.put(name, color);
|
||||
colorToNameMap.put(color, name);
|
||||
return color;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,65 @@
|
|||
/* ###
|
||||
* IP: GHIDRA
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package ghidra.util;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
import java.awt.Color;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
public class WebColorsTest {
|
||||
|
||||
@Test
|
||||
public void testColorToStringFromDefinedValue() {
|
||||
assertEquals("Navy", WebColors.toString(WebColors.NAVY));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testColorToStringNewColor() {
|
||||
assertEquals("Navy", WebColors.toString(new Color(0, 0, 0x80)));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testColorToStringFromColorWithNoDefinedEntry() {
|
||||
assertEquals("#0123EF", WebColors.toString(new Color(0x01, 0x23, 0xEF)));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetColorFromName() {
|
||||
assertEquals(WebColors.NAVY, WebColors.getColor("Navy"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetColorFromHexString() {
|
||||
assertEquals(WebColors.NAVY, WebColors.getColor("0x000080"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetColorFromHexString2() {
|
||||
assertEquals(WebColors.NAVY, WebColors.getColor("#000080"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetColorWithNoDefinedValue() {
|
||||
assertEquals(new Color(0x12, 0x34, 0x56), WebColors.getColor("0x123456"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetColorByBadName() {
|
||||
assertNull(WebColors.getColor("ABCDEFG"));
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue