Add parse CSS

This commit is contained in:
Adrian Woźniak 2020-04-27 20:32:16 +02:00
parent 28e013b186
commit b706da069e
4 changed files with 765 additions and 3 deletions

View File

@ -12,6 +12,7 @@ const INPUT: &str = "./jirs-client/js/styles.css";
type Css = Arc<RwLock<CssFile>>;
mod predefined;
mod prop;
#[derive(Debug)]

View File

628
jirs-css/src/predefined.rs Normal file
View File

@ -0,0 +1,628 @@
use std::str::FromStr;
pub enum Color {
AliceBlue,
AntiqueWhite,
Aqua,
Aquamarine,
Azure,
Beige,
Bisque,
Black,
BlanchedAlmond,
Blue,
BlueViolet,
Brown,
BurlyWood,
CadetBlue,
Chartreuse,
Chocolate,
Coral,
CornflowerBlue,
Cornsilk,
Crimson,
Cyan,
DarkBlue,
DarkCyan,
DarkGoldenRod,
DarkGray,
DarkGrey,
DarkGreen,
DarkKhaki,
DarkMagenta,
DarkOliveGreen,
DarkOrange,
DarkOrchid,
DarkRed,
DarkSalmon,
DarkSeaGreen,
DarkSlateBlue,
DarkSlateGray,
DarkSlateGrey,
DarkTurquoise,
DarkViolet,
DeepPink,
DeepSkyBlue,
DimGray,
DimGrey,
DodgerBlue,
FireBrick,
FloralWhite,
ForestGreen,
Fuchsia,
Gainsboro,
GhostWhite,
Gold,
GoldenRod,
Gray,
Grey,
Green,
GreenYellow,
HoneyDew,
HotPink,
IndianRed,
Indigo,
Ivory,
Khaki,
Lavender,
LavenderBlush,
LawnGreen,
LemonChiffon,
LightBlue,
LightCoral,
LightCyan,
LightGoldenRodYellow,
LightGray,
LightGrey,
LightGreen,
LightPink,
LightSalmon,
LightSeaGreen,
LightSkyBlue,
LightSlateGray,
LightSlateGrey,
LightSteelBlue,
LightYellow,
Lime,
LimeGreen,
Linen,
Magenta,
Maroon,
MediumAquaMarine,
MediumBlue,
MediumOrchid,
MediumPurple,
MediumSeaGreen,
MediumSlateBlue,
MediumSpringGreen,
MediumTurquoise,
MediumVioletRed,
MidnightBlue,
MintCream,
MistyRose,
Moccasin,
NavajoWhite,
Navy,
OldLace,
Olive,
OliveDrab,
Orange,
OrangeRed,
Orchid,
PaleGoldenRod,
PaleGreen,
PaleTurquoise,
PaleVioletRed,
PapayaWhip,
PeachPuff,
Peru,
Pink,
Plum,
PowderBlue,
Purple,
RebeccaPurple,
Red,
RosyBrown,
RoyalBlue,
SaddleBrown,
Salmon,
SandyBrown,
SeaGreen,
SeaShell,
Sienna,
Silver,
SkyBlue,
SlateBlue,
SlateGray,
SlateGrey,
Snow,
SpringGreen,
SteelBlue,
Tan,
Teal,
Thistle,
Tomato,
Turquoise,
Violet,
Wheat,
White,
WhiteSmoke,
Yellow,
YellowGreen,
}
impl ToString for Color {
fn to_string(&self) -> String {
match self {
Color::AliceBlue => "AliceBlue",
Color::AntiqueWhite => "AntiqueWhite",
Color::Aqua => "Aqua",
Color::Aquamarine => "Aquamarine",
Color::Azure => "Azure",
Color::Beige => "Beige",
Color::Bisque => "Bisque",
Color::Black => "Black",
Color::BlanchedAlmond => "BlanchedAlmond",
Color::Blue => "Blue",
Color::BlueViolet => "BlueViolet",
Color::Brown => "Brown",
Color::BurlyWood => "BurlyWood",
Color::CadetBlue => "CadetBlue",
Color::Chartreuse => "Chartreuse",
Color::Chocolate => "Chocolate",
Color::Coral => "Coral",
Color::CornflowerBlue => "CornflowerBlue",
Color::Cornsilk => "Cornsilk",
Color::Crimson => "Crimson",
Color::Cyan => "Cyan",
Color::DarkBlue => "DarkBlue",
Color::DarkCyan => "DarkCyan",
Color::DarkGoldenRod => "DarkGoldenRod",
Color::DarkGray => "DarkGray",
Color::DarkGrey => "DarkGrey",
Color::DarkGreen => "DarkGreen",
Color::DarkKhaki => "DarkKhaki",
Color::DarkMagenta => "DarkMagenta",
Color::DarkOliveGreen => "DarkOliveGreen",
Color::DarkOrange => "DarkOrange",
Color::DarkOrchid => "DarkOrchid",
Color::DarkRed => "DarkRed",
Color::DarkSalmon => "DarkSalmon",
Color::DarkSeaGreen => "DarkSeaGreen",
Color::DarkSlateBlue => "DarkSlateBlue",
Color::DarkSlateGray => "DarkSlateGray",
Color::DarkSlateGrey => "DarkSlateGrey",
Color::DarkTurquoise => "DarkTurquoise",
Color::DarkViolet => "DarkViolet",
Color::DeepPink => "DeepPink",
Color::DeepSkyBlue => "DeepSkyBlue",
Color::DimGray => "DimGray",
Color::DimGrey => "DimGrey",
Color::DodgerBlue => "DodgerBlue",
Color::FireBrick => "FireBrick",
Color::FloralWhite => "FloralWhite",
Color::ForestGreen => "ForestGreen",
Color::Fuchsia => "Fuchsia",
Color::Gainsboro => "Gainsboro",
Color::GhostWhite => "GhostWhite",
Color::Gold => "Gold",
Color::GoldenRod => "GoldenRod",
Color::Gray => "Gray",
Color::Grey => "Grey",
Color::Green => "Green",
Color::GreenYellow => "GreenYellow",
Color::HoneyDew => "HoneyDew",
Color::HotPink => "HotPink",
Color::IndianRed => "IndianRed",
Color::Indigo => "Indigo",
Color::Ivory => "Ivory",
Color::Khaki => "Khaki",
Color::Lavender => "Lavender",
Color::LavenderBlush => "LavenderBlush",
Color::LawnGreen => "LawnGreen",
Color::LemonChiffon => "LemonChiffon",
Color::LightBlue => "LightBlue",
Color::LightCoral => "LightCoral",
Color::LightCyan => "LightCyan",
Color::LightGoldenRodYellow => "LightGoldenRodYellow",
Color::LightGray => "LightGray",
Color::LightGrey => "LightGrey",
Color::LightGreen => "LightGreen",
Color::LightPink => "LightPink",
Color::LightSalmon => "LightSalmon",
Color::LightSeaGreen => "LightSeaGreen",
Color::LightSkyBlue => "LightSkyBlue",
Color::LightSlateGray => "LightSlateGray",
Color::LightSlateGrey => "LightSlateGrey",
Color::LightSteelBlue => "LightSteelBlue",
Color::LightYellow => "LightYellow",
Color::Lime => "Lime",
Color::LimeGreen => "LimeGreen",
Color::Linen => "Linen",
Color::Magenta => "Magenta",
Color::Maroon => "Maroon",
Color::MediumAquaMarine => "MediumAquaMarine",
Color::MediumBlue => "MediumBlue",
Color::MediumOrchid => "MediumOrchid",
Color::MediumPurple => "MediumPurple",
Color::MediumSeaGreen => "MediumSeaGreen",
Color::MediumSlateBlue => "MediumSlateBlue",
Color::MediumSpringGreen => "MediumSpringGreen",
Color::MediumTurquoise => "MediumTurquoise",
Color::MediumVioletRed => "MediumVioletRed",
Color::MidnightBlue => "MidnightBlue",
Color::MintCream => "MintCream",
Color::MistyRose => "MistyRose",
Color::Moccasin => "Moccasin",
Color::NavajoWhite => "NavajoWhite",
Color::Navy => "Navy",
Color::OldLace => "OldLace",
Color::Olive => "Olive",
Color::OliveDrab => "OliveDrab",
Color::Orange => "Orange",
Color::OrangeRed => "OrangeRed",
Color::Orchid => "Orchid",
Color::PaleGoldenRod => "PaleGoldenRod",
Color::PaleGreen => "PaleGreen",
Color::PaleTurquoise => "PaleTurquoise",
Color::PaleVioletRed => "PaleVioletRed",
Color::PapayaWhip => "PapayaWhip",
Color::PeachPuff => "PeachPuff",
Color::Peru => "Peru",
Color::Pink => "Pink",
Color::Plum => "Plum",
Color::PowderBlue => "PowderBlue",
Color::Purple => "Purple",
Color::RebeccaPurple => "RebeccaPurple",
Color::Red => "Red",
Color::RosyBrown => "RosyBrown",
Color::RoyalBlue => "RoyalBlue",
Color::SaddleBrown => "SaddleBrown",
Color::Salmon => "Salmon",
Color::SandyBrown => "SandyBrown",
Color::SeaGreen => "SeaGreen",
Color::SeaShell => "SeaShell",
Color::Sienna => "Sienna",
Color::Silver => "Silver",
Color::SkyBlue => "SkyBlue",
Color::SlateBlue => "SlateBlue",
Color::SlateGray => "SlateGray",
Color::SlateGrey => "SlateGrey",
Color::Snow => "Snow",
Color::SpringGreen => "SpringGreen",
Color::SteelBlue => "SteelBlue",
Color::Tan => "Tan",
Color::Teal => "Teal",
Color::Thistle => "Thistle",
Color::Tomato => "Tomato",
Color::Turquoise => "Turquoise",
Color::Violet => "Violet",
Color::Wheat => "Wheat",
Color::White => "White",
Color::WhiteSmoke => "WhiteSmoke",
Color::Yellow => "Yellow",
Color::YellowGreen => "YellowGreen",
}
.to_string()
}
}
impl Color {
pub fn to_hex(&self) -> String {
match self {
Color::AliceBlue => "#f0f8ff",
Color::AntiqueWhite => "#faebd7",
Color::Aqua => "#00ffff",
Color::Aquamarine => "#7fffd4",
Color::Azure => "#f0ffff",
Color::Beige => "#f5f5dc",
Color::Bisque => "#ffe4c4",
Color::Black => "#000000",
Color::BlanchedAlmond => "#ffebcd",
Color::Blue => "#0000ff",
Color::BlueViolet => "#8a2be2",
Color::Brown => "#a52a2a",
Color::BurlyWood => "#deb887",
Color::CadetBlue => "#5f9ea0",
Color::Chartreuse => "#7fff00",
Color::Chocolate => "#d2691e",
Color::Coral => "#ff7f50",
Color::CornflowerBlue => "#6495ed",
Color::Cornsilk => "#fff8dc",
Color::Crimson => "#dc143c",
Color::Cyan => "#00ffff",
Color::DarkBlue => "#00008b",
Color::DarkCyan => "#008b8b",
Color::DarkGoldenRod => "#b8860b",
Color::DarkGray => "#a9a9a9",
Color::DarkGrey => "#a9a9a9",
Color::DarkGreen => "#006400",
Color::DarkKhaki => "#bdb76b",
Color::DarkMagenta => "#8b008b",
Color::DarkOliveGreen => "#556b2f",
Color::DarkOrange => "#ff8c00",
Color::DarkOrchid => "#9932cc",
Color::DarkRed => "#8b0000",
Color::DarkSalmon => "#e9967a",
Color::DarkSeaGreen => "#8fbc8f",
Color::DarkSlateBlue => "#483d8b",
Color::DarkSlateGray => "#2f4f4f",
Color::DarkSlateGrey => "#2f4f4f",
Color::DarkTurquoise => "#00ced1",
Color::DarkViolet => "#9400d3",
Color::DeepPink => "#ff1493",
Color::DeepSkyBlue => "#00bfff",
Color::DimGray => "#696969",
Color::DimGrey => "#696969",
Color::DodgerBlue => "#1e90ff",
Color::FireBrick => "#b22222",
Color::FloralWhite => "#fffaf0",
Color::ForestGreen => "#228b22",
Color::Fuchsia => "#ff00ff",
Color::Gainsboro => "#dcdcdc",
Color::GhostWhite => "#f8f8ff",
Color::Gold => "#ffd700",
Color::GoldenRod => "#daa520",
Color::Gray => "#808080",
Color::Grey => "#808080",
Color::Green => "#008000",
Color::GreenYellow => "#adff2f",
Color::HoneyDew => "#f0fff0",
Color::HotPink => "#ff69b4",
Color::IndianRed => "#cd5c5c",
Color::Indigo => "#4b0082",
Color::Ivory => "#fffff0",
Color::Khaki => "#f0e68c",
Color::Lavender => "#e6e6fa",
Color::LavenderBlush => "#fff0f5",
Color::LawnGreen => "#7cfc00",
Color::LemonChiffon => "#fffacd",
Color::LightBlue => "#add8e6",
Color::LightCoral => "#f08080",
Color::LightCyan => "#e0ffff",
Color::LightGoldenRodYellow => "#fafad2",
Color::LightGray => "#d3d3d3",
Color::LightGrey => "#d3d3d3",
Color::LightGreen => "#90ee90",
Color::LightPink => "#ffb6c1",
Color::LightSalmon => "#ffa07a",
Color::LightSeaGreen => "#20b2aa",
Color::LightSkyBlue => "#87cefa",
Color::LightSlateGray => "#778899",
Color::LightSlateGrey => "#778899",
Color::LightSteelBlue => "#b0c4de",
Color::LightYellow => "#ffffe0",
Color::Lime => "#00ff00",
Color::LimeGreen => "#32cd32",
Color::Linen => "#faf0e6",
Color::Magenta => "#ff00ff",
Color::Maroon => "#800000",
Color::MediumAquaMarine => "#66cdaa",
Color::MediumBlue => "#0000cd",
Color::MediumOrchid => "#ba55d3",
Color::MediumPurple => "#9370db",
Color::MediumSeaGreen => "#3cb371",
Color::MediumSlateBlue => "#7b68ee",
Color::MediumSpringGreen => "#00fa9a",
Color::MediumTurquoise => "#48d1cc",
Color::MediumVioletRed => "#c71585",
Color::MidnightBlue => "#191970",
Color::MintCream => "#f5fffa",
Color::MistyRose => "#ffe4e1",
Color::Moccasin => "#ffe4b5",
Color::NavajoWhite => "#ffdead",
Color::Navy => "#000080",
Color::OldLace => "#fdf5e6",
Color::Olive => "#808000",
Color::OliveDrab => "#6b8e23",
Color::Orange => "#ffa500",
Color::OrangeRed => "#ff4500",
Color::Orchid => "#da70d6",
Color::PaleGoldenRod => "#eee8aa",
Color::PaleGreen => "#98fb98",
Color::PaleTurquoise => "#afeeee",
Color::PaleVioletRed => "#db7093",
Color::PapayaWhip => "#ffefd5",
Color::PeachPuff => "#ffdab9",
Color::Peru => "#cd853f",
Color::Pink => "#ffc0cb",
Color::Plum => "#dda0dd",
Color::PowderBlue => "#b0e0e6",
Color::Purple => "#800080",
Color::RebeccaPurple => "#663399",
Color::Red => "#ff0000",
Color::RosyBrown => "#bc8f8f",
Color::RoyalBlue => "#4169e1",
Color::SaddleBrown => "#8b4513",
Color::Salmon => "#fa8072",
Color::SandyBrown => "#f4a460",
Color::SeaGreen => "#2e8b57",
Color::SeaShell => "#fff5ee",
Color::Sienna => "#a0522d",
Color::Silver => "#c0c0c0",
Color::SkyBlue => "#87ceeb",
Color::SlateBlue => "#6a5acd",
Color::SlateGray => "#708090",
Color::SlateGrey => "#708090",
Color::Snow => "#fffafa",
Color::SpringGreen => "#00ff7f",
Color::SteelBlue => "#4682b4",
Color::Tan => "#d2b48c",
Color::Teal => "#008080",
Color::Thistle => "#d8bfd8",
Color::Tomato => "#ff6347",
Color::Turquoise => "#40e0d0",
Color::Violet => "#ee82ee",
Color::Wheat => "#f5deb3",
Color::White => "#ffffff",
Color::WhiteSmoke => "#f5f5f5",
Color::Yellow => "#ffff00",
Color::YellowGreen => "#9acd32",
}
.to_string()
}
}
impl FromStr for Color {
type Err = String;
fn from_str(s: &str) -> Result<Self, Self::Err> {
let m = if s.starts_with('#') {
s.to_lowercase()
} else {
s.to_string()
};
let c = match m.as_str() {
"AliceBlue" | "#f0f8ff" => Color::AliceBlue,
"AntiqueWhite" | "#faebd7" => Color::AntiqueWhite,
"Aqua" | "#00ffff" => Color::Aqua,
"Aquamarine" | "#7fffd4" => Color::Aquamarine,
"Azure" | "#f0ffff" => Color::Azure,
"Beige" | "#f5f5dc" => Color::Beige,
"Bisque" | "#ffe4c4" => Color::Bisque,
"Black" | "#000000" => Color::Black,
"BlanchedAlmond" | "#ffebcd" => Color::BlanchedAlmond,
"Blue" | "#0000ff" => Color::Blue,
"BlueViolet" | "#8a2be2" => Color::BlueViolet,
"Brown" | "#a52a2a" => Color::Brown,
"BurlyWood" | "#deb887" => Color::BurlyWood,
"CadetBlue" | "#5f9ea0" => Color::CadetBlue,
"Chartreuse" | "#7fff00" => Color::Chartreuse,
"Chocolate" | "#d2691e" => Color::Chocolate,
"Coral" | "#ff7f50" => Color::Coral,
"CornflowerBlue" | "#6495ed" => Color::CornflowerBlue,
"Cornsilk" | "#fff8dc" => Color::Cornsilk,
"Crimson" | "#dc143c" => Color::Crimson,
"Cyan" | "#00ffff" => Color::Cyan,
"DarkBlue" | "#00008b" => Color::DarkBlue,
"DarkCyan" | "#008b8b" => Color::DarkCyan,
"DarkGoldenRod" | "#b8860b" => Color::DarkGoldenRod,
"DarkGray" | "#a9a9a9" => Color::DarkGray,
"DarkGrey" | "#a9a9a9" => Color::DarkGrey,
"DarkGreen" | "#006400" => Color::DarkGreen,
"DarkKhaki" | "#bdb76b" => Color::DarkKhaki,
"DarkMagenta" | "#8b008b" => Color::DarkMagenta,
"DarkOliveGreen" | "#556b2f" => Color::DarkOliveGreen,
"DarkOrange" | "#ff8c00" => Color::DarkOrange,
"DarkOrchid" | "#9932cc" => Color::DarkOrchid,
"DarkRed" | "#8b0000" => Color::DarkRed,
"DarkSalmon" | "#e9967a" => Color::DarkSalmon,
"DarkSeaGreen" | "#8fbc8f" => Color::DarkSeaGreen,
"DarkSlateBlue" | "#483d8b" => Color::DarkSlateBlue,
"DarkSlateGray" | "#2f4f4f" => Color::DarkSlateGray,
"DarkSlateGrey" | "#2f4f4f" => Color::DarkSlateGrey,
"DarkTurquoise" | "#00ced1" => Color::DarkTurquoise,
"DarkViolet" | "#9400d3" => Color::DarkViolet,
"DeepPink" | "#ff1493" => Color::DeepPink,
"DeepSkyBlue" | "#00bfff" => Color::DeepSkyBlue,
"DimGray" | "#696969" => Color::DimGray,
"DimGrey" | "#696969" => Color::DimGrey,
"DodgerBlue" | "#1e90ff" => Color::DodgerBlue,
"FireBrick" | "#b22222" => Color::FireBrick,
"FloralWhite" | "#fffaf0" => Color::FloralWhite,
"ForestGreen" | "#228b22" => Color::ForestGreen,
"Fuchsia" | "#ff00ff" => Color::Fuchsia,
"Gainsboro" | "#dcdcdc" => Color::Gainsboro,
"GhostWhite" | "#f8f8ff" => Color::GhostWhite,
"Gold" | "#ffd700" => Color::Gold,
"GoldenRod" | "#daa520" => Color::GoldenRod,
"Gray" | "#808080" => Color::Gray,
"Grey" | "#808080" => Color::Grey,
"Green" | "#008000" => Color::Green,
"GreenYellow" | "#adff2f" => Color::GreenYellow,
"HoneyDew" | "#f0fff0" => Color::HoneyDew,
"HotPink" | "#ff69b4" => Color::HotPink,
"IndianRed" | "#cd5c5c" => Color::IndianRed,
"Indigo" | "#4b0082" => Color::Indigo,
"Ivory" | "#fffff0" => Color::Ivory,
"Khaki" | "#f0e68c" => Color::Khaki,
"Lavender" | "#e6e6fa" => Color::Lavender,
"LavenderBlush" | "#fff0f5" => Color::LavenderBlush,
"LawnGreen" | "#7cfc00" => Color::LawnGreen,
"LemonChiffon" | "#fffacd" => Color::LemonChiffon,
"LightBlue" | "#add8e6" => Color::LightBlue,
"LightCoral" | "#f08080" => Color::LightCoral,
"LightCyan" | "#e0ffff" => Color::LightCyan,
"LightGoldenRodYellow" | "#fafad2" => Color::LightGoldenRodYellow,
"LightGray" | "#d3d3d3" => Color::LightGray,
"LightGrey" | "#d3d3d3" => Color::LightGrey,
"LightGreen" | "#90ee90" => Color::LightGreen,
"LightPink" | "#ffb6c1" => Color::LightPink,
"LightSalmon" | "#ffa07a" => Color::LightSalmon,
"LightSeaGreen" | "#20b2aa" => Color::LightSeaGreen,
"LightSkyBlue" | "#87cefa" => Color::LightSkyBlue,
"LightSlateGray" | "#778899" => Color::LightSlateGray,
"LightSlateGrey" | "#778899" => Color::LightSlateGrey,
"LightSteelBlue" | "#b0c4de" => Color::LightSteelBlue,
"LightYellow" | "#ffffe0" => Color::LightYellow,
"Lime" | "#00ff00" => Color::Lime,
"LimeGreen" | "#32cd32" => Color::LimeGreen,
"Linen" | "#faf0e6" => Color::Linen,
"Magenta" | "#ff00ff" => Color::Magenta,
"Maroon" | "#800000" => Color::Maroon,
"MediumAquaMarine" | "#66cdaa" => Color::MediumAquaMarine,
"MediumBlue" | "#0000cd" => Color::MediumBlue,
"MediumOrchid" | "#ba55d3" => Color::MediumOrchid,
"MediumPurple" | "#9370db" => Color::MediumPurple,
"MediumSeaGreen" | "#3cb371" => Color::MediumSeaGreen,
"MediumSlateBlue" | "#7b68ee" => Color::MediumSlateBlue,
"MediumSpringGreen" | "#00fa9a" => Color::MediumSpringGreen,
"MediumTurquoise" | "#48d1cc" => Color::MediumTurquoise,
"MediumVioletRed" | "#c71585" => Color::MediumVioletRed,
"MidnightBlue" | "#191970" => Color::MidnightBlue,
"MintCream" | "#f5fffa" => Color::MintCream,
"MistyRose" | "#ffe4e1" => Color::MistyRose,
"Moccasin" | "#ffe4b5" => Color::Moccasin,
"NavajoWhite" | "#ffdead" => Color::NavajoWhite,
"Navy" | "#000080" => Color::Navy,
"OldLace" | "#fdf5e6" => Color::OldLace,
"Olive" | "#808000" => Color::Olive,
"OliveDrab" | "#6b8e23" => Color::OliveDrab,
"Orange" | "#ffa500" => Color::Orange,
"OrangeRed" | "#ff4500" => Color::OrangeRed,
"Orchid" | "#da70d6" => Color::Orchid,
"PaleGoldenRod" | "#eee8aa" => Color::PaleGoldenRod,
"PaleGreen" | "#98fb98" => Color::PaleGreen,
"PaleTurquoise" | "#afeeee" => Color::PaleTurquoise,
"PaleVioletRed" | "#db7093" => Color::PaleVioletRed,
"PapayaWhip" | "#ffefd5" => Color::PapayaWhip,
"PeachPuff" | "#ffdab9" => Color::PeachPuff,
"Peru" | "#cd853f" => Color::Peru,
"Pink" | "#ffc0cb" => Color::Pink,
"Plum" | "#dda0dd" => Color::Plum,
"PowderBlue" | "#b0e0e6" => Color::PowderBlue,
"Purple" | "#800080" => Color::Purple,
"RebeccaPurple" | "#663399" => Color::RebeccaPurple,
"Red" | "#ff0000" => Color::Red,
"RosyBrown" | "#bc8f8f" => Color::RosyBrown,
"RoyalBlue" | "#4169e1" => Color::RoyalBlue,
"SaddleBrown" | "#8b4513" => Color::SaddleBrown,
"Salmon" | "#fa8072" => Color::Salmon,
"SandyBrown" | "#f4a460" => Color::SandyBrown,
"SeaGreen" | "#2e8b57" => Color::SeaGreen,
"SeaShell" | "#fff5ee" => Color::SeaShell,
"Sienna" | "#a0522d" => Color::Sienna,
"Silver" | "#c0c0c0" => Color::Silver,
"SkyBlue" | "#87ceeb" => Color::SkyBlue,
"SlateBlue" | "#6a5acd" => Color::SlateBlue,
"SlateGray" | "#708090" => Color::SlateGray,
"SlateGrey" | "#708090" => Color::SlateGrey,
"Snow" | "#fffafa" => Color::Snow,
"SpringGreen" | "#00ff7f" => Color::SpringGreen,
"SteelBlue" | "#4682b4" => Color::SteelBlue,
"Tan" | "#d2b48c" => Color::Tan,
"Teal" | "#008080" => Color::Teal,
"Thistle" | "#d8bfd8" => Color::Thistle,
"Tomato" | "#ff6347" => Color::Tomato,
"Turquoise" | "#40e0d0" => Color::Turquoise,
"Violet" | "#ee82ee" => Color::Violet,
"Wheat" | "#f5deb3" => Color::Wheat,
"White" | "#ffffff" => Color::White,
"WhiteSmoke" | "#f5f5f5" => Color::WhiteSmoke,
"Yellow" | "#ffff00" => Color::Yellow,
"YellowGreen" | "#9acd32" => Color::YellowGreen,
_ => return Err(format!("invalid predefined color {:?}", s)),
};
Ok(c)
}
}

View File

@ -139,9 +139,30 @@ impl CssParser {
self.consume_expected(";")?;
Property::AlignContent(p)
}
// "align-items" => Property::AlignItems,
// "align-self" => Property::AlignSelf,
// "all" => Property::All,
"align-items" => {
self.skip_white();
self.consume_expected(":")?;
self.skip_white();
let p = self.parse_expected::<AlignItemsProperty>()?;
self.consume_expected(";")?;
Property::AlignItems(p)
}
"align-self" => {
self.skip_white();
self.consume_expected(":")?;
self.skip_white();
let p = self.parse_expected::<AlignSelfProperty>()?;
self.consume_expected(";")?;
Property::AlignSelf(p)
}
"all" => {
self.skip_white();
self.consume_expected(":")?;
self.skip_white();
let p = self.parse_expected::<AllProperty>()?;
self.consume_expected(";")?;
Property::All(p)
}
"animation" => {
self.skip_white();
self.consume_expected(":")?;
@ -1087,6 +1108,117 @@ impl FromStr for ZIndexProperty {
}
}
#[derive(Debug, PartialEq)]
pub enum ColorProperty {
Name(String),
Rgba(u16, u16, u16, u16),
Hsla(u16, u16, u16, u16),
Current,
}
impl FromStr for ColorProperty {
type Err = String;
fn from_str(s: &str) -> Result<Self, Self::Err> {
let p = match s.trim().to_lowercase().as_str() {
"currentcolor" => ColorProperty::Current,
_ if s.len() == 7 && s.starts_with('#') => {
let (r, g, b) = (
u16::from_str_radix(&s[1..2], 16)
.map_err(|_| format!("invalid color {:?}", s))?,
u16::from_str_radix(&s[3..4], 16)
.map_err(|_| format!("invalid color {:?}", s))?,
u16::from_str_radix(&s[5..6], 16)
.map_err(|_| format!("invalid color {:?}", s))?,
);
ColorProperty::Rgba(r, g, b, 255)
}
_ if s.len() == 9 && s.starts_with('#') => {
let (r, g, b, a) = (
u16::from_str_radix(&s[1..2], 16)
.map_err(|_| format!("invalid color {:?}", s))?,
u16::from_str_radix(&s[3..4], 16)
.map_err(|_| format!("invalid color {:?}", s))?,
u16::from_str_radix(&s[5..6], 16)
.map_err(|_| format!("invalid color {:?}", s))?,
u16::from_str_radix(&s[7..8], 16)
.map_err(|_| format!("invalid color {:?}", s))?,
);
ColorProperty::Rgba(r, g, b, a)
}
_ if s.starts_with("rgba(") => {
let v: Vec<String> = s[5..(s.len() - 1)]
.split(',')
.map(|s| s.to_string())
.collect();
let r = v
.get(0)
.ok_or_else(|| format!("invalid color {:?}", s))
.and_then(|s| {
s.parse::<u16>()
.map_err(|_| format!("invalid color {:?}", s))
})?;
let g = v
.get(1)
.ok_or_else(|| format!("invalid color {:?}", s))
.and_then(|s| {
s.parse::<u16>()
.map_err(|_| format!("invalid color {:?}", s))
})?;
let b = v
.get(2)
.ok_or_else(|| format!("invalid color {:?}", s))
.and_then(|s| {
s.parse::<u16>()
.map_err(|_| format!("invalid color {:?}", s))
})?;
let a = (v
.get(3)
.ok_or_else(|| format!("invalid color {:?}", s))
.and_then(|s| {
s.parse::<f64>()
.map_err(|_| format!("invalid color {:?}", s))
})?
* 255f64) as u16;
ColorProperty::Rgba(r, g, b, a)
}
_ if s.starts_with("rgb(") => {
let v: Vec<String> = s[5..(s.len() - 1)]
.split(',')
.map(|s| s.to_string())
.collect();
let r = v
.get(0)
.ok_or_else(|| format!("invalid color {:?}", s))
.and_then(|s| {
s.parse::<u16>()
.map_err(|_| format!("invalid color {:?}", s))
})?;
let g = v
.get(1)
.ok_or_else(|| format!("invalid color {:?}", s))
.and_then(|s| {
s.parse::<u16>()
.map_err(|_| format!("invalid color {:?}", s))
})?;
let b = v
.get(2)
.ok_or_else(|| format!("invalid color {:?}", s))
.and_then(|s| {
s.parse::<u16>()
.map_err(|_| format!("invalid color {:?}", s))
})?;
let a = 255;
ColorProperty::Rgba(r, g, b, a)
}
// _ if s.starts_with("hsla(") => {}
// _ if s.starts_with("hsl(") => {}
_ => return Err(format!("invalid color {:?}", s)),
};
Ok(p)
}
}
#[derive(Debug, PartialEq)]
pub enum Property {
AlignContent(AlignContentProperty),
@ -1302,6 +1434,7 @@ pub enum Property {
WordWrap(String),
WritingMode(String),
ZIndex(ZIndexProperty),
Variable(String, String),
}
#[cfg(test)]