Commit 10eefb39 by Aaron Leung

Trying to get nested selector groups to expand properly.

parent 748532bb
......@@ -6,7 +6,6 @@ namespace Sass {
void Document::parse_scss()
{
// cerr << "parse_scss" << endl;
lex<optional_spaces>();
while(*position) {
if (lex< block_comment >()) {
......@@ -14,6 +13,7 @@ namespace Sass {
}
else if (lex< variable >()) {
parse_var_def();
lex< exactly<';'> >();
}
else {
statements.push_back(parse_ruleset());
......@@ -22,29 +22,15 @@ namespace Sass {
}
}
// Node Document::parse_statement()
// {
// if (lex<block_comment>()) {
// return Node(line_number, Node::comment, lexed);
// }
// else if (lex<variable>()) {
// parse_var_def();
// }
// else return parse_ruleset();
// }
void Document::parse_var_def()
{
// cerr << "parse_var_def" << endl;
const Token key(lexed);
lex< exactly<':'> >();
environment[key] = parse_values();
lex< exactly<';'> >();
}
Node Document::parse_ruleset()
{
// cerr << "parse_ruleset" << endl;
Node ruleset(line_number, Node::ruleset, 2);
ruleset << parse_selector_group();
ruleset << parse_block();
......@@ -53,7 +39,6 @@ namespace Sass {
Node Document::parse_selector_group()
{
// cerr << "parse_selector_group" << endl;
Node group(line_number, Node::selector_group, 1);
group << parse_selector();
while (lex< exactly<','> >()) group << parse_selector();
......@@ -62,14 +47,12 @@ namespace Sass {
Node Document::parse_selector()
{
// cerr << "parse_selector" << endl;
lex<identifier>();
return Node(line_number, Node::selector, lexed);
}
Node Document::parse_block()
{
// cerr << "parse_block" << endl;
lex< exactly<'{'> >();
bool semicolon = false;
Node block(line_number, Node::block);
......@@ -80,13 +63,13 @@ namespace Sass {
if (lex< exactly<'}'> >()) break;
}
if (lex< block_comment >()) {
// cerr << "grabbed a comment" << endl;
block << Node(line_number, Node::comment, lexed);
block.has_rules_or_comments = true;
semicolon = true;
}
else if (lex< variable >()) {
parse_var_def();
semicolon = true;
}
else if (look_for_rule(position)) {
block << parse_rule();
......@@ -100,30 +83,9 @@ namespace Sass {
else lex< exactly<';'> >();
}
return block;
// lex< identifier >();
// // Token id(lexed);
// if (peek< exactly<':'> >()) {
// Node rule(line_number, Node::rule, 2);
// rule << Node(line_number, Node::property, lexed);
// lex< exactly<':'> >();
// rule << parse_values();
// block << rule;
// block.has_rules = true;
// lex< exactly<';'> >();
// }
// else {
// Node ruleset(line_number, Node::ruleset, 2);
// ruleset << Node(line_number, Node::selector, lexed);
// ruleset << parse_block();
// block << ruleset;
// block.has_rulesets = true;
// }
// }
// return block;
}
Node Document::parse_rule() {
// cerr << "parse_rule" << endl;
Node rule(line_number, Node::rule, 2);
lex< identifier >();
rule << Node(line_number, Node::property, lexed);
......@@ -134,7 +96,6 @@ namespace Sass {
Node Document::parse_values()
{
// cerr << "parse_value" << endl;
Node values(line_number, Node::values);
while (lex< identifier >() || lex < dimension >() ||
lex< percentage >() || lex < number >() ||
......@@ -155,12 +116,7 @@ namespace Sass {
char* Document::look_for_rule(char* start)
{
// cerr << "look_for_rule" << endl;
char* p = start ? start : position;
// if (p = peek<identifier>(p)) cerr << string(Token(start, p)) << endl;
// if (p = peek<exactly<':'> >(p)) cerr << string(Token(start, p)) << endl;
// if (p = look_for_values(p)) cerr << string(Token(start, p)) << endl;
// if (p = peek< alternatives< exactly<';'>, exactly<'}'> > >(p)) cerr << string(Token(start, p)) << endl;
(p = peek< identifier >(p)) &&
(p = peek< exactly<':'> >(p)) &&
(p = look_for_values(p)) &&
......@@ -170,16 +126,13 @@ namespace Sass {
char* Document::look_for_values(char* start)
{
// cerr << "look_for_values" << endl;
char* p = start ? start : position;
char* q;
while ((q = peek< identifier >(p)) || (q = peek< dimension >(p)) ||
(q = peek< percentage >(p)) || (q = peek< number >(p)) ||
(q = peek< hex >(p)) || (q = peek< string_constant >(p)) ||
(q = peek< variable >(p)))
{ /* cerr << *q; */ p = q; }
// cerr << string(Token(start, p)) << "blah" ;
// cerr << (p == start ? "nothing" : "something") << endl;
{ p = q; }
return p == start ? 0 : p;
}
}
\ No newline at end of file
a, b {
color: red;
background: blue;
}
c, d {
color: gray;
e, f {
background: blue;
padding: 10px 5px;
}
g, h {
blah: blah;
bloo: bloo;
}
i, j {
foo: goo;
k, l {
hoo: boo;
}
}
}
\ No newline at end of file
$x: foo;
\ No newline at end of file
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