Commit 64488fd5 by Aaron Leung

Handling decimal rgb triples.

parent f5dfac98
......@@ -438,6 +438,29 @@ namespace Sass {
Node Document::parse_value()
{
if (lex< uri_prefix >())
{
lex< string_constant >();
Node result(line_number, Node::uri, lexed);
lex< exactly<')'> >();
return result;
}
if (lex< rgb_prefix >())
{
Node result(line_number, Node::hex_triple, 3);
lex< number >();
result << Node(line_number, std::atof(lexed.begin));
lex< exactly<','> >();
lex< number >();
result << Node(line_number, std::atof(lexed.begin));
lex< exactly<','> >();
lex< number >();
result << Node(line_number, std::atof(lexed.begin));
lex< exactly<')'> >();
return result;
}
if (lex< identifier >())
{ return Node(line_number, Node::identifier, lexed); }
......
......@@ -18,4 +18,6 @@ div {
p17: #f0f + #101;
p18: 10 #222 + 1;
p19: (10 / #222);
p20: rgb(10,10,10) + #010001;
p21: #010000 + rgb(255, 255, 255);
}
\ No newline at end of file
......@@ -152,19 +152,19 @@ namespace Sass {
double a = children->at(0).numeric_value;
double b = children->at(1).numeric_value;
double c = children->at(2).numeric_value;
if (a > 0xff && b > 0xff && c > 0xff)
if (a >= 0xff && b >= 0xff && c >= 0xff)
{ return "white"; }
else if (a > 0xff && b > 0xff && c == 0)
else if (a >= 0xff && b >= 0xff && c == 0)
{ return "yellow"; }
else if (a == 0 && b > 0xff && c > 0xff)
else if (a == 0 && b >= 0xff && c >= 0xff)
{ return "aqua"; }
else if (a > 0xff && b == 0 && c > 0xff)
else if (a >= 0xff && b == 0 && c >= 0xff)
{ return "fuchsia"; }
else if (a > 0xff && b == 0 && c == 0)
else if (a >= 0xff && b == 0 && c == 0)
{ return "red"; }
else if (a == 0 && b > 0xff && c == 0)
{ return "green"; }
else if (a == 0 && b == 0 && c > 0xff)
else if (a == 0 && b >= 0xff && c == 0)
{ return "lime"; }
else if (a == 0 && b == 0 && c >= 0xff)
{ return "blue"; }
else if (a <= 0 && b <= 0 && c <= 0)
{ return "black"; }
......
......@@ -166,10 +166,17 @@ namespace Sass {
int len = p - src;
return (len != 4 && len != 7) ? 0 : p;
}
extern const char rgb_kwd[] = "rgb(";
const char* rgb_prefix(const char* src) {
return exactly<rgb_kwd>(src);
}
// Match CSS uri specifiers.
extern const char url_call[] = "url(";
extern const char url_kwd[] = "url(";
const char* uri_prefix(const char* src) {
return exactly<url_kwd>(src);
}
const char* uri(const char* src) {
return sequence< exactly<url_call>,
return sequence< exactly<url_kwd>,
optional<spaces>,
string_constant,
optional<spaces>,
......
......@@ -292,7 +292,9 @@ namespace Sass {
const char* percentage(const char* src);
const char* dimension(const char* src);
const char* hex(const char* src);
const char* rgb_prefix(const char* src);
// Match CSS uri specifiers.
const char* uri_prefix(const char* src);
const char* uri(const char* src);
// Match CSS "!important" keyword.
const char* important(const char* src);
......
......@@ -18,4 +18,6 @@ div {
p17: #f0f + #101;
p18: 10 #222 + 1;
p19: (10 / #222);
p20: rgb(10,10,10) + #010001;
p21: #010000 + rgb(255, 255, 255);
}
\ No newline at end of file
......@@ -17,4 +17,6 @@ div {
p16: black;
p17: fuchsia;
p18: 10 #232323;
p19: 10/#222222; }
p19: 10/#222222;
p20: #0b0a0b;
p21: white; }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment