From 47827683e802212a4ea61ecbf8cf5a734ec998d3 Mon Sep 17 00:00:00 2001 From: "J. Neugebauer" Date: Tue, 29 Nov 2022 10:11:43 +0100 Subject: [PATCH] Farbnamen werden nun in Colo-Objekte geparsed `Color.parseString(String)` liest nun eine Datei mit Farbnamen und Hexcode Kombinationen ein. Wird der String in der Liste der Farbnamen gefunden, wird aus dem entsprechenden Hexcode ein `Color`-Objekt erzeugt. --- src/main/java/schule/ngb/zm/Color.java | 46 ++- .../resources/schule/ngb/zm/colornames.csv | 342 ++++++++++++++++++ src/test/java/schule/ngb/zm/ColorTest.java | 34 +- 3 files changed, 406 insertions(+), 16 deletions(-) create mode 100644 src/main/resources/schule/ngb/zm/colornames.csv diff --git a/src/main/java/schule/ngb/zm/Color.java b/src/main/java/schule/ngb/zm/Color.java index c5b817b..429ef25 100644 --- a/src/main/java/schule/ngb/zm/Color.java +++ b/src/main/java/schule/ngb/zm/Color.java @@ -4,6 +4,10 @@ import java.awt.*; import java.awt.geom.AffineTransform; import java.awt.geom.Rectangle2D; import java.awt.image.ColorModel; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; /** * Repräsentiert eine Farbe in der Zeichenmaschine. @@ -221,19 +225,37 @@ public class Color implements Paint { return Color.getRGBColor(rgb); } - public static Color parseString( String pColor ) { - pColor = pColor.toLowerCase().strip(); - if( pColor.contains("red") || pColor.contains("rot") ) { - return Color.RED.copy(); - } else if( pColor.contains("blue") || pColor.contains("blau") ) { - return Color.BLUE.copy(); - } else if( pColor.contains("green") || pColor.contains("grün") || pColor.contains("gruen") ) { - return Color.GREEN.copy(); - } else if( pColor.contains("yellow") || pColor.contains("gelb") ) { - return Color.YELLOW.copy(); - } else { - return new Color(); + /** + * Erstellt aus einem Farbnamen ein Farbobjekt. + *

+ * Die gültigen Farbnamen können unter https://htmlcolors.com/color-names + * nachgeschlagen werden. + * + * @param color Der Name einer Farbe. + * @return Ein Farbobjekt. + */ + public static Color parseString( String color ) { + color = color.toLowerCase().strip(); + + // Parse colornames file and return first match + try( + InputStream in = Color.class.getResourceAsStream("colornames.csv"); + BufferedReader reader = new BufferedReader(new InputStreamReader(in)) + ) { + String line; + while( (line = reader.readLine()) != null ) { + String[] parts = line.split(","); + if( parts.length == 2 ) { + if( parts[0].equals(color) ) { + return Color.parseHexcode(parts[1]); + } + } + } + } catch( IOException ex ) { + // LOG? } + return new Color(); } /** diff --git a/src/main/resources/schule/ngb/zm/colornames.csv b/src/main/resources/schule/ngb/zm/colornames.csv new file mode 100644 index 0000000..a2edfc1 --- /dev/null +++ b/src/main/resources/schule/ngb/zm/colornames.csv @@ -0,0 +1,342 @@ +algae green,#64e986 +aliceblue,#f0f8ff +alien green,#6cc417 +antiquewhite,#faebd7 +aquamarine,#7fffd4 +army brown,#827b60 +ash gray,#666362 +avocado green,#b2c248 +aztech purple,#893bff +azure,#f0ffff +baby blue,#95b9c7 +bashful pink,#c25283 +basket ball orange,#f88158 +battleship gray,#848482 +bean red,#f75d59 +bee yellow,#e9ab17 +beer,#fbb117 +beetle green,#4c787e +beige,#f5f5dc +black cat,#413839 +black cow,#4c4646 +black eel,#463e3f +black,#000000 +blanchedalmond,#ffebcd +blonde,#fbf6d9 +blood red,#7e3517 +blossom pink,#f9b7ff +blue angel,#b7ceec +blue diamond,#4ee2ec +blue dress,#157dec +blue eyes,#1569c7 +blue gray,#98afc7 +blue green,#7bccb5 +blue hosta,#77bfc7 +blue ivy,#3090c7 +blue jay,#2b547e +blue koi,#659ec7 +blue lagoon,#8eebec +blue lotus,#6960ec +blue orchid,#1f45fc +blue ribbon,#306eff +blue whale,#342d7e +blue zircon,#57feff +blueberry blue,#0041c2 +blush pink,#e6a9ec +blush red,#e56e94 +brass,#b5a642 +bright gold,#fdd017 +bright neon pink,#f433ff +bronze,#cd7f32 +brown bear,#835c3b +brown sugar,#e2a76f +bullet shell,#af9b60 +burgundy,#8c001a +burlywood,#deb887 +burnt pink,#c12267 +butterfly blue,#38acec +cadillac pink,#e38aae +camel brown,#c19a6b +camouflage green,#78866b +cantaloupe,#ffa62f +caramel,#c68e17 +carbon gray,#625d5d +carnation pink,#f778a1 +celeste,#50ebec +champagne,#f7e7ce +charcoal,#34282c +chartreuse,#8afb17 +cherry red,#c24641 +chestnut red,#c34a2c +chestnut,#954535 +chilli pepper,#c11b17 +chocolate,#c85a17 +cinnamon,#c58917 +cloudy gray,#6d6968 +clover green,#3ea055 +cobalt blue,#0020c2 +coffee,#6f4e37 +columbia blue,#87afc7 +construction cone orange,#f87431 +cookie brown,#c7a317 +copper,#b87333 +coral blue,#afdcec +coral,#ff7f50 +corn yellow,#fff380 +cornflower blue,#6495ed +cornsilk,#fff8dc +cotton candy,#fcdfff +cranberry,#9f000f +cream,#ffffcc +crimson,#e238ec +crocus purple,#9172ec +crystal blue,#5cb3ff +cyan opaque,#92c7c7 +cyan or aqua,#00ffff +dark carnation pink,#c12283 +dark forest green,#254117 +dark goldenrod,#af7817 +dark orange,#f88017 +dark orchid,#7d1b7e +dark salmon,#e18b6b +dark sea green,#8bb381 +dark slate blue,#2b3856 +dark slate grey,#25383c +dark turquoise,#3b9c9c +dark violet,#842dce +day sky blue,#82caff +deep peach,#ffcba4 +deep pink,#f52887 +deep sky blue,#3bb9ff +denim blue,#79baec +denim dark blue,#151b8d +desert sand,#edc9af +dimorphotheca magenta,#e3319d +dodger blue,#1589ff +dollar bill green,#85bb65 +dragon green,#6afb92 +dull purple,#7f525d +earth blue,#0000a0 +eggplant,#614051 +electric blue,#9afeff +emerald green,#5ffb17 +fall leaf brown,#c8b560 +fern green,#667c26 +ferrari red,#f70d1a +fire engine red,#f62817 +firebrick,#800517 +flamingo pink,#f9a7b0 +forest green,#4e9258 +frog green,#99c68e +ginger brown,#c9be62 +glacial blue ice,#368bc1 +golden brown,#eac117 +goldenrod,#edda74 +granite,#837e7c +grape,#5e5a80 +grapefruit,#dc381f +gray cloud,#b6b6b4 +gray dolphin,#5c5858 +gray goose,#d1d0ce +gray wolf,#504a4b +gray,#736f6e +grayish turquoise,#5e7d7e +green apple,#4cc417 +green onion,#6aa121 +green peas,#89c35c +green snake,#6cbb3c +green thumb,#b5eaaa +green yellow,#b1fb17 +green,#00ff00 +greenish blue,#307d7e +gunmetal,#2c3539 +halloween orange,#e66c2c +harvest gold,#ede275 +hazel green,#617c58 +heliotrope purple,#d462ff +hot pink,#f660ab +hummingbird green,#7fe817 +iceberg,#56a5ec +iguana green,#9cb071 +indigo,#4b0082 +iridium,#3d3c3a +jade green,#5efb6e +jasmine purple,#a23bec +jeans blue,#a0cfec +jellyfish,#46c7c7 +jet gray,#616d7e +jungle green,#347c2c +kelly green,#4cc552 +khaki rose,#c5908e +khaki,#ada96e +lapis blue,#15317e +lava red,#e42217 +lavender blue,#e3e4fa +lavender pinocchio,#ebdde2 +lawn green,#87f717 +lemon chiffon,#fff8c6 +light aquamarine,#93ffe8 +light blue,#addfff +light coral,#e77471 +light cyan,#e0ffff +light jade,#c3fdb8 +light pink,#faafba +light salmon,#f9966b +light sea green,#3ea99f +light sky blue,#82cafa +light slate blue,#736aff +light slate gray,#6d7b8d +light slate,#ccffff +light steel blue,#728fce +lilac,#c8a2c8 +lime green,#41a317 +lipstick pink,#c48793 +love red,#e41b17 +lovely purple,#7f38ec +macaroni and cheese,#f2bb66 +macaw blue green,#43bfc7 +magenta,#ff00ff +mahogany,#c04000 +mango orange,#ff8040 +marble blue,#566d7e +maroon,#810541 +mauve,#e0b0ff +medium aquamarine,#348781 +medium forest green,#347235 +medium orchid,#b048b5 +medium purple,#8467d7 +medium sea green,#306754 +medium spring green,#348017 +medium turquoise,#48cccd +medium violet red,#ca226b +metallic silver,#bcc6cc +midnight blue,#151b54 +midnight,#2b1b17 +milk white,#fefcff +mint green,#98ff98 +mist blue,#646d7e +misty rose,#fbbbb9 +moccasin,#827839 +mocha,#493d26 +mustard,#ffdb58 +navy blue,#000080 +nebula green,#59e817 +neon pink,#f535aa +night,#0c090a +northern lights blue,#78c7c7 +oak brown,#806517 +ocean blue,#2b65ec +oil,#3b3131 +orange gold,#d4a017 +orange salmon,#c47451 +pale blue lily,#cfecec +pale violet red,#d16587 +papaya orange,#e56717 +parchment,#ffffc2 +pastel blue,#b4cfec +peach,#ffe5b4 +pearl,#fdeef4 +periwinkle,#e9cfec +pig pink,#fdd7e4 +pine green,#387c44 +pink bow,#c48189 +pink bubblegum,#ffdfdd +pink cupcake,#e45e9d +pink daisy,#e799a3 +pink lemonade,#e4287c +pink rose,#e7a1b0 +pink,#faafbe +pistachio green,#9dc209 +platinum,#e5e4e2 +plum pie,#7d0541 +plum purple,#583759 +plum velvet,#7d0552 +plum,#b93b8f +powder blue,#c6deff +puce,#7f5a58 +pumpkin orange,#f87217 +purple amethyst,#6c2dc7 +purple daffodil,#b041ff +purple dragon,#c38ec7 +purple flower,#a74ac7 +purple haze,#4e387e +purple iris,#571b7e +purple jam,#6a287e +purple mimosa,#9e7bff +purple monster,#461b7e +purple sage bush,#7a5dc7 +purple,#8e35ef +red dirt,#7f5217 +red fox,#c35817 +red wine,#990012 +red,#ff0000 +robin egg blue,#bdedff +rogue pink,#c12869 +rose gold,#ecc5c0 +rose,#e8adaa +rosy brown,#b38481 +rosy finch,#7f4e52 +royal blue,#2b60de +rubber ducky yellow,#ffd801 +ruby red,#f62217 +rust,#c36241 +saffron,#fbb917 +sage green,#848b79 +salad green,#a1c935 +sand,#c2b280 +sandstone,#786d5f +sandy brown,#ee9a4d +sangria,#7e3817 +sapphire blue,#2554c7 +scarlet,#ff2400 +school bus yellow,#e8a317 +sea blue,#c2dfff +sea green,#4e8975 +sea turtle green,#438d80 +seashell,#fff5ee +seaweed green,#437c17 +sedona,#cc6600 +sepia,#7f462c +shamrock green,#347c17 +shocking orange,#e55b3c +sienna,#8a4117 +silk blue,#488ac7 +sky blue,#6698ff +slate blue,#737ca1 +slate gray,#657383 +slime green,#bce954 +smokey gray,#726e6d +spring green,#4aa02c +steel blue,#4863a0 +stoplight go green,#57e964 +sun yellow,#ffe87c +sunrise orange,#e67451 +tan brown,#ece5b6 +tangerine,#e78a61 +taupe,#483c32 +tea green,#ccfb5d +teal,#008080 +thistle,#d2b9d3 +tiffany blue,#81d8d0 +tiger orange,#c88141 +tron blue,#7dfdfe +tulip pink,#c25a7c +turquoise,#43c6db +tyrian purple,#c45aec +valentine red,#e55451 +vampire gray,#565051 +vanilla,#f3e5ab +velvet maroon,#7e354d +venom green,#728c00 +viola purple,#7e587e +violet red,#f6358a +violet,#8d38c9 +water,#ebf4fa +watermelon pink,#fc6c85 +white,#ffffff +windows blue,#357ec7 +wisteria purple,#c6aec7 +wood,#966f33 +yellow green,#52d017 +yellow,#ffff00 +zombie green,#54c571 \ No newline at end of file diff --git a/src/test/java/schule/ngb/zm/ColorTest.java b/src/test/java/schule/ngb/zm/ColorTest.java index 1d72b52..a5c2642 100644 --- a/src/test/java/schule/ngb/zm/ColorTest.java +++ b/src/test/java/schule/ngb/zm/ColorTest.java @@ -147,6 +147,36 @@ class ColorTest { @Test void parseHexcode() { + Color c; + + c = Color.parseHexcode("#f05025"); + assertEquals(Color.RED, c); + + c = Color.parseHexcode("#F8EF22"); + assertEquals(Color.YELLOW, c); + + c = Color.parseHexcode("#FF40ff"); + assertEquals(new Color(255, 64, 255), c); + + // TODO: Test hexcodes of length 3, 6 and 9 + // TODO: Test malformed hexcodes + } + + @Test + void parseString() { + Color c; + + c = Color.parseString("red"); + assertEquals(new Color(255, 0, 0), c); + + c = Color.parseString("zombie green"); + assertEquals(Color.parseHexcode("#54c571"), c); + + c = Color.parseString("algae green"); + assertEquals(new Color(100, 233, 134), c); + + c = Color.parseString("light slate gray"); + assertEquals(Color.parseHexcode("#6d7b8d"), c); } @Test @@ -173,10 +203,6 @@ class ColorTest { void HSLtoRGB() { } - @Test - void testHSLtoRGB() { - } - @Test void copy() { }