Skip to content

Commit d821bd7

Browse files
Named color support (using Color instead of an anonymous string literal)
1 parent 4c4ab98 commit d821bd7

File tree

2 files changed

+154
-2
lines changed

2 files changed

+154
-2
lines changed

lib/Sabberworm/CSS/Parser.php

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -393,7 +393,17 @@ private function parsePrimitiveValue() {
393393
} else if ($this->comes("'") || $this->comes('"')) {
394394
$oValue = $this->parseStringValue();
395395
} else {
396-
$oValue = $this->parseIdentifier(true, false);
396+
foreach (Color::$names as $sColorName => $aValues) {
397+
if ($this->comes($sColorName)) {
398+
$this->consume($sColorName);
399+
$aColor = array('r' => new Size(intval($aValues['red'], 16), null, true), 'g' => new Size(intval($aValues['green'], 16), null, true), 'b' => new Size(intval($aValues['blue'], 16), null, true));
400+
$oValue = new Color($aColor);
401+
}
402+
}
403+
404+
if (!$oValue) {
405+
$oValue = $this->parseIdentifier(true, false);
406+
}
397407
}
398408
$this->consumeWhiteSpace();
399409
return $oValue;

lib/Sabberworm/CSS/Value/Color.php

Lines changed: 143 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,149 @@
44

55
class Color extends CSSFunction {
66

7-
public function __construct($aColor) {
7+
static $names = ARRAY(
8+
// Colors as they are defined in HTML 3.2
9+
"black" => array("red" => 0x00, "green" => 0x00, "blue" => 0x00),
10+
"maroon" => array("red" => 0x80, "green" => 0x00, "blue" => 0x00),
11+
"green" => array("red" => 0x00, "green" => 0x80, "blue" => 0x00),
12+
"olive" => array("red" => 0x80, "green" => 0x80, "blue" => 0x00),
13+
"navy" => array("red" => 0x00, "green" => 0x00, "blue" => 0x80),
14+
"purple" => array("red" => 0x80, "green" => 0x00, "blue" => 0x80),
15+
"teal" => array("red" => 0x00, "green" => 0x80, "blue" => 0x80),
16+
"gray" => array("red" => 0x80, "green" => 0x80, "blue" => 0x80),
17+
"silver" => array("red" => 0xC0, "green" => 0xC0, "blue" => 0xC0),
18+
"red" => array("red" => 0xFF, "green" => 0x00, "blue" => 0x00),
19+
"lime" => array("red" => 0x00, "green" => 0xFF, "blue" => 0x00),
20+
"yellow" => array("red" => 0xFF, "green" => 0xFF, "blue" => 0x00),
21+
"blue" => array("red" => 0x00, "green" => 0x00, "blue" => 0xFF),
22+
"fuchsia" => array("red" => 0xFF, "green" => 0x00, "blue" => 0xFF),
23+
"aqua" => array("red" => 0x00, "green" => 0xFF, "blue" => 0xFF),
24+
"white" => array("red" => 0xFF, "green" => 0xFF, "blue" => 0xFF),
25+
26+
// Additional colors as they are used by Netscape and IE
27+
"aliceblue" => array("red" => 0xF0, "green" => 0xF8, "blue" => 0xFF),
28+
"antiquewhite" => array("red" => 0xFA, "green" => 0xEB, "blue" => 0xD7),
29+
"aquamarine" => array("red" => 0x7F, "green" => 0xFF, "blue" => 0xD4),
30+
"azure" => array("red" => 0xF0, "green" => 0xFF, "blue" => 0xFF),
31+
"beige" => array("red" => 0xF5, "green" => 0xF5, "blue" => 0xDC),
32+
"blueviolet" => array("red" => 0x8A, "green" => 0x2B, "blue" => 0xE2),
33+
"brown" => array("red" => 0xA5, "green" => 0x2A, "blue" => 0x2A),
34+
"burlywood" => array("red" => 0xDE, "green" => 0xB8, "blue" => 0x87),
35+
"cadetblue" => array("red" => 0x5F, "green" => 0x9E, "blue" => 0xA0),
36+
"chartreuse" => array("red" => 0x7F, "green" => 0xFF, "blue" => 0x00),
37+
"chocolate" => array("red" => 0xD2, "green" => 0x69, "blue" => 0x1E),
38+
"coral" => array("red" => 0xFF, "green" => 0x7F, "blue" => 0x50),
39+
"cornflowerblue" => array("red" => 0x64, "green" => 0x95, "blue" => 0xED),
40+
"cornsilk" => array("red" => 0xFF, "green" => 0xF8, "blue" => 0xDC),
41+
"crimson" => array("red" => 0xDC, "green" => 0x14, "blue" => 0x3C),
42+
"darkblue" => array("red" => 0x00, "green" => 0x00, "blue" => 0x8B),
43+
"darkcyan" => array("red" => 0x00, "green" => 0x8B, "blue" => 0x8B),
44+
"darkgoldenrod" => array("red" => 0xB8, "green" => 0x86, "blue" => 0x0B),
45+
"darkgray" => array("red" => 0xA9, "green" => 0xA9, "blue" => 0xA9),
46+
"darkgreen" => array("red" => 0x00, "green" => 0x64, "blue" => 0x00),
47+
"darkkhaki" => array("red" => 0xBD, "green" => 0xB7, "blue" => 0x6B),
48+
"darkmagenta" => array("red" => 0x8B, "green" => 0x00, "blue" => 0x8B),
49+
"darkolivegreen" => array("red" => 0x55, "green" => 0x6B, "blue" => 0x2F),
50+
"darkorange" => array("red" => 0xFF, "green" => 0x8C, "blue" => 0x00),
51+
"darkorchid" => array("red" => 0x99, "green" => 0x32, "blue" => 0xCC),
52+
"darkred" => array("red" => 0x8B, "green" => 0x00, "blue" => 0x00),
53+
"darksalmon" => array("red" => 0xE9, "green" => 0x96, "blue" => 0x7A),
54+
"darkseagreen" => array("red" => 0x8F, "green" => 0xBC, "blue" => 0x8F),
55+
"darkslateblue" => array("red" => 0x48, "green" => 0x3D, "blue" => 0x8B),
56+
"darkslategray" => array("red" => 0x2F, "green" => 0x4F, "blue" => 0x4F),
57+
"darkturquoise" => array("red" => 0x00, "green" => 0xCE, "blue" => 0xD1),
58+
"darkviolet" => array("red" => 0x94, "green" => 0x00, "blue" => 0xD3),
59+
"deeppink" => array("red" => 0xFF, "green" => 0x14, "blue" => 0x93),
60+
"deepskyblue" => array("red" => 0x00, "green" => 0xBF, "blue" => 0xFF),
61+
"dimgray" => array("red" => 0x69, "green" => 0x69, "blue" => 0x69),
62+
"dodgerblue" => array("red" => 0x1E, "green" => 0x90, "blue" => 0xFF),
63+
"firebrick" => array("red" => 0xB2, "green" => 0x22, "blue" => 0x22),
64+
"floralwhite" => array("red" => 0xFF, "green" => 0xFA, "blue" => 0xF0),
65+
"forestgreen" => array("red" => 0x22, "green" => 0x8B, "blue" => 0x22),
66+
"gainsboro" => array("red" => 0xDC, "green" => 0xDC, "blue" => 0xDC),
67+
"ghostwhite" => array("red" => 0xF8, "green" => 0xF8, "blue" => 0xFF),
68+
"gold" => array("red" => 0xFF, "green" => 0xD7, "blue" => 0x00),
69+
"goldenrod" => array("red" => 0xDA, "green" => 0xA5, "blue" => 0x20),
70+
"greenyellow" => array("red" => 0xAD, "green" => 0xFF, "blue" => 0x2F),
71+
"honeydew" => array("red" => 0xF0, "green" => 0xFF, "blue" => 0xF0),
72+
"hotpink" => array("red" => 0xFF, "green" => 0x69, "blue" => 0xB4),
73+
"indianred" => array("red" => 0xCD, "green" => 0x5C, "blue" => 0x5C),
74+
"indigo" => array("red" => 0x4B, "green" => 0x00, "blue" => 0x82),
75+
"ivory" => array("red" => 0xFF, "green" => 0xFF, "blue" => 0xF0),
76+
"khaki" => array("red" => 0xF0, "green" => 0xE6, "blue" => 0x8C),
77+
"lavender" => array("red" => 0xE6, "green" => 0xE6, "blue" => 0xFA),
78+
"lavenderblush" => array("red" => 0xFF, "green" => 0xF0, "blue" => 0xF5),
79+
"lawngreen" => array("red" => 0x7C, "green" => 0xFC, "blue" => 0x00),
80+
"lemonchiffon" => array("red" => 0xFF, "green" => 0xFA, "blue" => 0xCD),
81+
"lightblue" => array("red" => 0xAD, "green" => 0xD8, "blue" => 0xE6),
82+
"lightcoral" => array("red" => 0xF0, "green" => 0x80, "blue" => 0x80),
83+
"lightcyan" => array("red" => 0xE0, "green" => 0xFF, "blue" => 0xFF),
84+
"lightgoldenrodyellow" => array("red" => 0xFA, "green" => 0xFA, "blue" => 0xD2),
85+
"lightgreen" => array("red" => 0x90, "green" => 0xEE, "blue" => 0x90),
86+
"lightgrey" => array("red" => 0xD3, "green" => 0xD3, "blue" => 0xD3),
87+
"lightpink" => array("red" => 0xFF, "green" => 0xB6, "blue" => 0xC1),
88+
"lightsalmon" => array("red" => 0xFF, "green" => 0xA0, "blue" => 0x7A),
89+
"lightseagreen" => array("red" => 0x20, "green" => 0xB2, "blue" => 0xAA),
90+
"lightskyblue" => array("red" => 0x87, "green" => 0xCE, "blue" => 0xFA),
91+
"lightslategray" => array("red" => 0x77, "green" => 0x88, "blue" => 0x99),
92+
"lightsteelblue" => array("red" => 0xB0, "green" => 0xC4, "blue" => 0xDE),
93+
"lightyellow" => array("red" => 0xFF, "green" => 0xFF, "blue" => 0xE0),
94+
"limegreen" => array("red" => 0x32, "green" => 0xCD, "blue" => 0x32),
95+
"linen" => array("red" => 0xFA, "green" => 0xF0, "blue" => 0xE6),
96+
"mediumaquamarine" => array("red" => 0x66, "green" => 0xCD, "blue" => 0xAA),
97+
"mediumblue" => array("red" => 0x00, "green" => 0x00, "blue" => 0xCD),
98+
"mediumorchid" => array("red" => 0xBA, "green" => 0x55, "blue" => 0xD3),
99+
"mediumpurple" => array("red" => 0x93, "green" => 0x70, "blue" => 0xD0),
100+
"mediumseagreen" => array("red" => 0x3C, "green" => 0xB3, "blue" => 0x71),
101+
"mediumslateblue" => array("red" => 0x7B, "green" => 0x68, "blue" => 0xEE),
102+
"mediumspringgreen" => array("red" => 0x00, "green" => 0xFA, "blue" => 0x9A),
103+
"mediumturquoise" => array("red" => 0x48, "green" => 0xD1, "blue" => 0xCC),
104+
"mediumvioletred" => array("red" => 0xC7, "green" => 0x15, "blue" => 0x85),
105+
"midnightblue" => array("red" => 0x19, "green" => 0x19, "blue" => 0x70),
106+
"mintcream" => array("red" => 0xF5, "green" => 0xFF, "blue" => 0xFA),
107+
"mistyrose" => array("red" => 0xFF, "green" => 0xE4, "blue" => 0xE1),
108+
"moccasin" => array("red" => 0xFF, "green" => 0xE4, "blue" => 0xB5),
109+
"navajowhite" => array("red" => 0xFF, "green" => 0xDE, "blue" => 0xAD),
110+
"oldlace" => array("red" => 0xFD, "green" => 0xF5, "blue" => 0xE6),
111+
"olivedrab" => array("red" => 0x6B, "green" => 0x8E, "blue" => 0x23),
112+
"orange" => array("red" => 0xFF, "green" => 0xA5, "blue" => 0x00),
113+
"orangered" => array("red" => 0xFF, "green" => 0x45, "blue" => 0x00),
114+
"orchid" => array("red" => 0xDA, "green" => 0x70, "blue" => 0xD6),
115+
"palegoldenrod" => array("red" => 0xEE, "green" => 0xE8, "blue" => 0xAA),
116+
"palegreen" => array("red" => 0x98, "green" => 0xFB, "blue" => 0x98),
117+
"paleturquoise" => array("red" => 0xAF, "green" => 0xEE, "blue" => 0xEE),
118+
"palevioletred" => array("red" => 0xDB, "green" => 0x70, "blue" => 0x93),
119+
"papayawhip" => array("red" => 0xFF, "green" => 0xEF, "blue" => 0xD5),
120+
"peachpuff" => array("red" => 0xFF, "green" => 0xDA, "blue" => 0xB9),
121+
"peru" => array("red" => 0xCD, "green" => 0x85, "blue" => 0x3F),
122+
"pink" => array("red" => 0xFF, "green" => 0xC0, "blue" => 0xCB),
123+
"plum" => array("red" => 0xDD, "green" => 0xA0, "blue" => 0xDD),
124+
"powderblue" => array("red" => 0xB0, "green" => 0xE0, "blue" => 0xE6),
125+
"rosybrown" => array("red" => 0xBC, "green" => 0x8F, "blue" => 0x8F),
126+
"royalblue" => array("red" => 0x41, "green" => 0x69, "blue" => 0xE1),
127+
"saddlebrown" => array("red" => 0x8B, "green" => 0x45, "blue" => 0x13),
128+
"salmon" => array("red" => 0xFA, "green" => 0x80, "blue" => 0x72),
129+
"sandybrown" => array("red" => 0xF4, "green" => 0xA4, "blue" => 0x60),
130+
"seagreen" => array("red" => 0x2E, "green" => 0x8B, "blue" => 0x57),
131+
"seashell" => array("red" => 0xFF, "green" => 0xF5, "blue" => 0xEE),
132+
"sienna" => array("red" => 0xA0, "green" => 0x52, "blue" => 0x2D),
133+
"skyblue" => array("red" => 0x87, "green" => 0xCE, "blue" => 0xEB),
134+
"slateblue" => array("red" => 0x6A, "green" => 0x5A, "blue" => 0xCD),
135+
"slategray" => array("red" => 0x70, "green" => 0x80, "blue" => 0x90),
136+
"snow" => array("red" => 0xFF, "green" => 0xFA, "blue" => 0xFA),
137+
"springgreen" => array("red" => 0x00, "green" => 0xFF, "blue" => 0x7F),
138+
"steelblue" => array("red" => 0x46, "green" => 0x82, "blue" => 0xB4),
139+
"tan" => array("red" => 0xD2, "green" => 0xB4, "blue" => 0x8C),
140+
"thistle" => array("red" => 0xD8, "green" => 0xBF, "blue" => 0xD8),
141+
"tomato" => array("red" => 0xFF, "green" => 0x63, "blue" => 0x47),
142+
"turquoise" => array("red" => 0x40, "green" => 0xE0, "blue" => 0xD0),
143+
"violet" => array("red" => 0xEE, "green" => 0x82, "blue" => 0xEE),
144+
"wheat" => array("red" => 0xF5, "green" => 0xDE, "blue" => 0xB3),
145+
"whitesmoke" => array("red" => 0xF5, "green" => 0xF5, "blue" => 0xF5),
146+
"yellowgreen" => array("red" => 0x9A, "green" => 0xCD, "blue" => 0x32)
147+
);
148+
149+
public function __construct($aColor) {
8150
parent::__construct(implode('', array_keys($aColor)), $aColor);
9151
}
10152

0 commit comments

Comments
 (0)