-
Notifications
You must be signed in to change notification settings - Fork 61
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Auto merge of #34 - Ogeon:named, r=Ogeon
Add color constants This adds the SVG1.1/CSS3 keyword colors as constants, and a function which maps name strings to them. They are accessible through the `named` module and the documentation shows colored preview rectangles as descriptions. There are even more named colors out there (https://en.wikipedia.org/wiki/List_of_colors:_A%E2%80%93F, for example), but this is a good start. The whole `named` module can be toggled with the `"named"` feature, and the `named::from_str` function can be toggled with `"named_from_str"`. This closes #5.
- Loading branch information
Showing
9 changed files
with
316 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
#[cfg(feature = "phf_codegen")] | ||
extern crate phf_codegen; | ||
|
||
mod named; | ||
|
||
fn main() { | ||
named::build(); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,54 @@ | ||
use std::fs::File; | ||
|
||
#[cfg(feature = "named")] | ||
pub fn build() { | ||
use std::path::Path; | ||
use std::io::{Write, BufRead, BufReader}; | ||
|
||
let out_dir = ::std::env::var("OUT_DIR").unwrap(); | ||
let dest_path = Path::new(&out_dir).join("named.rs"); | ||
|
||
let reader = BufReader::new(File::open("build/svg_colors.txt").expect("could not open svg_colors.txt")); | ||
let mut writer = File::create(dest_path).expect("couldn't create named.rs"); | ||
let mut entries = vec![]; | ||
|
||
for line in reader.lines() { | ||
let line = line.unwrap(); | ||
let mut parts = line.split('\t'); | ||
let name = parts.next().expect("couldn't get the color name"); | ||
let mut rgb = parts.next().expect(&format!("couldn't get color for {}", name)).split(", "); | ||
let red: u8 = rgb.next().and_then(|r| r.trim().parse().ok()).expect(&format!("couldn't get red for {}", name)); | ||
let green: u8 = rgb.next().and_then(|r| r.trim().parse().ok()).expect(&format!("couldn't get green for {}", name)); | ||
let blue: u8 = rgb.next().and_then(|r| r.trim().parse().ok()).expect(&format!("couldn't get blue for {}", name)); | ||
|
||
writeln!(writer, "\n///<div style=\"display: inline-block; width: 3em; height: 1em; border: 1px solid black; background: {0};\"></div>", name).unwrap(); | ||
writeln!(writer, "pub const {}: (u8, u8, u8) = ({}, {}, {});", name.to_uppercase(), red, green, blue).unwrap(); | ||
|
||
entries.push((name.to_owned(), name.to_uppercase())); | ||
} | ||
|
||
gen_from_str(&mut writer, &entries) | ||
} | ||
|
||
#[cfg(feature = "named_from_str")] | ||
fn gen_from_str(writer: &mut File, entries: &[(String, String)]) { | ||
use std::io::Write; | ||
|
||
write!(writer, "static COLORS: ::phf::Map<&'static str, (u8, u8, u8)> = ").unwrap(); | ||
let mut map = ::phf_codegen::Map::new(); | ||
for &(ref key, ref value) in entries { | ||
map.entry(&**key, value); | ||
} | ||
map.build(writer).unwrap(); | ||
writeln!(writer, ";").unwrap(); | ||
} | ||
|
||
|
||
|
||
|
||
#[cfg(not(feature = "named"))] | ||
pub fn build() {} | ||
|
||
#[allow(unused)] | ||
#[cfg(not(feature = "named_from_str"))] | ||
fn gen_from_str(_writer: &mut File, _entries: &[(String, String)]) {} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,147 @@ | ||
aliceblue 240, 248, 255 | ||
antiquewhite 250, 235, 215 | ||
aqua 0, 255, 255 | ||
aquamarine 127, 255, 212 | ||
azure 240, 255, 255 | ||
beige 245, 245, 220 | ||
bisque 255, 228, 196 | ||
black 0, 0, 0 | ||
blanchedalmond 255, 235, 205 | ||
blue 0, 0, 255 | ||
blueviolet 138, 43, 226 | ||
brown 165, 42, 42 | ||
burlywood 222, 184, 135 | ||
cadetblue 95, 158, 160 | ||
chartreuse 127, 255, 0 | ||
chocolate 210, 105, 30 | ||
coral 255, 127, 80 | ||
cornflowerblue 100, 149, 237 | ||
cornsilk 255, 248, 220 | ||
crimson 220, 20, 60 | ||
cyan 0, 255, 255 | ||
darkblue 0, 0, 139 | ||
darkcyan 0, 139, 139 | ||
darkgoldenrod 184, 134, 11 | ||
darkgray 169, 169, 169 | ||
darkgreen 0, 100, 0 | ||
darkgrey 169, 169, 169 | ||
darkkhaki 189, 183, 107 | ||
darkmagenta 139, 0, 139 | ||
darkolivegreen 85, 107, 47 | ||
darkorange 255, 140, 0 | ||
darkorchid 153, 50, 204 | ||
darkred 139, 0, 0 | ||
darksalmon 233, 150, 122 | ||
darkseagreen 143, 188, 143 | ||
darkslateblue 72, 61, 139 | ||
darkslategray 47, 79, 79 | ||
darkslategrey 47, 79, 79 | ||
darkturquoise 0, 206, 209 | ||
darkviolet 148, 0, 211 | ||
deeppink 255, 20, 147 | ||
deepskyblue 0, 191, 255 | ||
dimgray 105, 105, 105 | ||
dimgrey 105, 105, 105 | ||
dodgerblue 30, 144, 255 | ||
firebrick 178, 34, 34 | ||
floralwhite 255, 250, 240 | ||
forestgreen 34, 139, 34 | ||
fuchsia 255, 0, 255 | ||
gainsboro 220, 220, 220 | ||
ghostwhite 248, 248, 255 | ||
gold 255, 215, 0 | ||
goldenrod 218, 165, 32 | ||
gray 128, 128, 128 | ||
grey 128, 128, 128 | ||
green 0, 128, 0 | ||
greenyellow 173, 255, 47 | ||
honeydew 240, 255, 240 | ||
hotpink 255, 105, 180 | ||
indianred 205, 92, 92 | ||
indigo 75, 0, 130 | ||
ivory 255, 255, 240 | ||
khaki 240, 230, 140 | ||
lavender 230, 230, 250 | ||
lavenderblush 255, 240, 245 | ||
lawngreen 124, 252, 0 | ||
lemonchiffon 255, 250, 205 | ||
lightblue 173, 216, 230 | ||
lightcoral 240, 128, 128 | ||
lightcyan 224, 255, 255 | ||
lightgoldenrodyellow 250, 250, 210 | ||
lightgray 211, 211, 211 | ||
lightgreen 144, 238, 144 | ||
lightgrey 211, 211, 211 | ||
lightpink 255, 182, 193 | ||
lightsalmon 255, 160, 122 | ||
lightseagreen 32, 178, 170 | ||
lightskyblue 135, 206, 250 | ||
lightslategray 119, 136, 153 | ||
lightslategrey 119, 136, 153 | ||
lightsteelblue 176, 196, 222 | ||
lightyellow 255, 255, 224 | ||
lime 0, 255, 0 | ||
limegreen 50, 205, 50 | ||
linen 250, 240, 230 | ||
magenta 255, 0, 255 | ||
maroon 128, 0, 0 | ||
mediumaquamarine 102, 205, 170 | ||
mediumblue 0, 0, 205 | ||
mediumorchid 186, 85, 211 | ||
mediumpurple 147, 112, 219 | ||
mediumseagreen 60, 179, 113 | ||
mediumslateblue 123, 104, 238 | ||
mediumspringgreen 0, 250, 154 | ||
mediumturquoise 72, 209, 204 | ||
mediumvioletred 199, 21, 133 | ||
midnightblue 25, 25, 112 | ||
mintcream 245, 255, 250 | ||
mistyrose 255, 228, 225 | ||
moccasin 255, 228, 181 | ||
navajowhite 255, 222, 173 | ||
navy 0, 0, 128 | ||
oldlace 253, 245, 230 | ||
olive 128, 128, 0 | ||
olivedrab 107, 142, 35 | ||
orange 255, 165, 0 | ||
orangered 255, 69, 0 | ||
orchid 218, 112, 214 | ||
palegoldenrod 238, 232, 170 | ||
palegreen 152, 251, 152 | ||
paleturquoise 175, 238, 238 | ||
palevioletred 219, 112, 147 | ||
papayawhip 255, 239, 213 | ||
peachpuff 255, 218, 185 | ||
peru 205, 133, 63 | ||
pink 255, 192, 203 | ||
plum 221, 160, 221 | ||
powderblue 176, 224, 230 | ||
purple 128, 0, 128 | ||
red 255, 0, 0 | ||
rosybrown 188, 143, 143 | ||
royalblue 65, 105, 225 | ||
saddlebrown 139, 69, 19 | ||
salmon 250, 128, 114 | ||
sandybrown 244, 164, 96 | ||
seagreen 46, 139, 87 | ||
seashell 255, 245, 238 | ||
sienna 160, 82, 45 | ||
silver 192, 192, 192 | ||
skyblue 135, 206, 235 | ||
slateblue 106, 90, 205 | ||
slategray 112, 128, 144 | ||
slategrey 112, 128, 144 | ||
snow 255, 250, 250 | ||
springgreen 0, 255, 127 | ||
steelblue 70, 130, 180 | ||
tan 210, 180, 140 | ||
teal 0, 128, 128 | ||
thistle 216, 191, 216 | ||
tomato 255, 99, 71 | ||
turquoise 64, 224, 208 | ||
violet 238, 130, 238 | ||
wheat 245, 222, 179 | ||
white 255, 255, 255 | ||
whitesmoke 245, 245, 245 | ||
yellow 255, 255, 0 | ||
yellowgreen 154, 205, 50 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
set -e | ||
|
||
#List of features to test | ||
features="" | ||
|
||
#Features that will always be activated | ||
required_features="strict" | ||
|
||
|
||
#Find features | ||
walking_features=false | ||
current_dependency="" | ||
|
||
while read -r line || [[ -n "$line" ]]; do | ||
if [[ "$line" == "[features]" ]]; then | ||
walking_features=true | ||
elif [[ $walking_features == true ]] && [[ "$line" == "#internal" ]]; then | ||
walking_features=false | ||
elif [[ $walking_features == true ]] && echo "$line" | grep -E "^\[.*\]" > /dev/null; then | ||
walking_features=false | ||
elif [[ $walking_features == true ]] && echo "$line" | grep -E ".*=.*" > /dev/null; then | ||
feature="$(echo "$line" | cut -f1 -d"=")" | ||
feature="$(echo -e "${feature}" | tr -d '[[:space:]]')" | ||
if [[ "$feature" != "default" ]]; then | ||
features="$features $feature" | ||
fi | ||
elif echo "$line" | grep -E "^\[dependencies\..*\]" > /dev/null; then | ||
current_dependency="$(echo "$line" | sed 's/.*\[dependencies\.\([^]]*\)\].*/\1/g')" | ||
elif [[ "$line" == "#feature" ]] && [[ "$current_dependency" != "" ]]; then | ||
echo "found dependency feature '$current_dependency'" | ||
features="$features $current_dependency" | ||
fi | ||
done < "Cargo.toml" | ||
|
||
echo -e "features: $features\n" | ||
|
||
#Test without any optional feature | ||
echo compiling with --no-default-features --features "$required_features" | ||
cargo build --no-default-features --features "$required_features" | ||
|
||
#Isolated test of each optional feature | ||
for feature in $features; do | ||
echo compiling with --no-default-features --features "\"$feature $required_features\"" | ||
cargo build --no-default-features --features "$feature $required_features" | ||
done |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
//!A collection of named color constants. Can be toggled with the `"named"` | ||
//!Cargo feature. | ||
//! | ||
//!They are taken from the [SVG keyword | ||
//!colors](https://www.w3.org/TR/SVG/types.html#ColorKeywords) (same as in | ||
//!CSS3) and they can be used as if they were pixel values: | ||
//! | ||
//!``` | ||
//!use palette::Rgb; | ||
//!use palette::pixel::Srgb; | ||
//!use palette::named; | ||
//! | ||
//!//From constant | ||
//!let from_const: Rgb = Srgb::from_pixel(&named::OLIVE).into(); | ||
//! | ||
//!//From name string | ||
//!let olive = named::from_str("olive").expect("unknown color"); | ||
//!let from_str: Rgb = Srgb::from_pixel(&olive).into(); | ||
//! | ||
//!assert_eq!(from_const, from_str); | ||
//!``` | ||
include!(concat!(env!("OUT_DIR"), "/named.rs")); | ||
|
||
///Get a SVG/CSS3 color by name. Can be toggled with the `"named_from_str"` | ||
///Cargo feature. | ||
/// | ||
///The names are the same as the constants, but lower case. | ||
#[cfg(feature = "named_from_str")] | ||
pub fn from_str(name: &str) -> Option<(u8, u8, u8)> { | ||
COLORS.get(name).cloned() | ||
} |