Commit c54a6913 by Aaron Leung

Flattening blocks that contain expansion nodes in order to get them to emit correctly.

parent 9a2a2318
...@@ -22,6 +22,7 @@ namespace Sass { ...@@ -22,6 +22,7 @@ namespace Sass {
Node call(parse_mixin_call()); Node call(parse_mixin_call());
// call << root; // call << root;
root << call; root << call;
root.has_expansions = true;
lex< exactly<';'> >(); lex< exactly<';'> >();
context.pending.push_back(call); context.pending.push_back(call);
} }
...@@ -333,6 +334,7 @@ namespace Sass { ...@@ -333,6 +334,7 @@ namespace Sass {
Node call(parse_mixin_call()); Node call(parse_mixin_call());
// call << block; // call << block;
block << call; block << call;
block.has_expansions = true;
if (!definition) context.pending.push_back(call); if (!definition) context.pending.push_back(call);
} }
else if (lex< variable >()) { else if (lex< variable >()) {
......
...@@ -19,16 +19,15 @@ namespace Sass { ...@@ -19,16 +19,15 @@ namespace Sass {
Token name(expr[0].token); Token name(expr[0].token);
// cerr << "EVALUATING EXPANSION: " << string(name) << endl; // cerr << "EVALUATING EXPANSION: " << string(name) << endl;
Node args(expr[1]); Node args(expr[1]);
// Node parent(expr[2]);
Node mixin(env[name]); Node mixin(env[name]);
// Node expansion(apply(mixin, args, env)); Node expansion(apply(mixin, args, env));
// parent.has_rules_or_comments |= expansion.has_rules_or_comments;
// parent.has_rulesets |= expansion.has_rulesets;
// parent.has_propsets |= expansion.has_propsets;
expr.children->pop_back(); expr.children->pop_back();
expr.children->pop_back(); expr.children->pop_back();
// expr.children->pop_back(); expr += expansion;
expr += Node(apply(mixin, args, env)); expr.has_rules_or_comments |= expansion.has_rules_or_comments;
expr.has_rulesets |= expansion.has_rulesets;
expr.has_propsets |= expansion.has_propsets;
expr.has_expansions |= expansion.has_expansions;
return expr; return expr;
} break; } break;
......
...@@ -314,6 +314,7 @@ namespace Sass { ...@@ -314,6 +314,7 @@ namespace Sass {
} }
} }
} }
if (block.has_expansions) block.flatten();
if (block.has_rules_or_comments) { if (block.has_rules_or_comments) {
buf << string(2*depth, ' ') << new_prefixes[0]; buf << string(2*depth, ' ') << new_prefixes[0];
for (int i = 1; i < new_prefixes.size(); ++i) { for (int i = 1; i < new_prefixes.size(); ++i) {
...@@ -325,12 +326,12 @@ namespace Sass { ...@@ -325,12 +326,12 @@ namespace Sass {
if (stm_type == comment || stm_type == rule) { if (stm_type == comment || stm_type == rule) {
block[i].emit_nested_css(buf, depth+1); // NEED OVERLOADED VERSION FOR COMMENTS AND RULES block[i].emit_nested_css(buf, depth+1); // NEED OVERLOADED VERSION FOR COMMENTS AND RULES
} }
else if (stm_type == expansion) { // else if (stm_type == expansion) {
// buf << string(2*(depth+1), ' ') << block[i].to_string(""); // TEMPORARY // // buf << string(2*(depth+1), ' ') << block[i].to_string(""); // TEMPORARY
for (int j = 0; j < block[i].size(); ++j) { // for (int j = 0; j < block[i].size(); ++j) {
block[i][j].emit_nested_css(buf, depth+1); // block[i][j].emit_nested_css(buf, depth+1);
} // }
} // }
} }
buf << " }" << endl; buf << " }" << endl;
++depth; // if we printed content at this level, we need to indent any nested rulesets ++depth; // if we printed content at this level, we need to indent any nested rulesets
...@@ -433,4 +434,30 @@ namespace Sass { ...@@ -433,4 +434,30 @@ namespace Sass {
} }
void Node::flatten()
{
if (type != block && type != expansion) return;
for (int i = 0; i < size(); ++i) {
if (at(i).type == expansion) {
Node expn = at(i);
if (expn.has_expansions) expn.flatten();
at(i).type = none;
children->insert(children->begin() + i, expn.children->begin(), expn.children->end());
}
}
}
//
// void flatten_block(Node& block)
// {
//
// for (int i = 0; i < block.size(); ++i) {
//
// if (block[i].type == Node::expansion
//
// }
//
//
//
// }
} }
\ No newline at end of file
...@@ -83,6 +83,7 @@ namespace Sass { ...@@ -83,6 +83,7 @@ namespace Sass {
bool has_rules_or_comments; bool has_rules_or_comments;
bool has_rulesets; bool has_rulesets;
bool has_propsets; bool has_propsets;
bool has_expansions;
bool has_backref; bool has_backref;
bool from_variable; bool from_variable;
bool eval_me; bool eval_me;
...@@ -98,6 +99,7 @@ namespace Sass { ...@@ -98,6 +99,7 @@ namespace Sass {
has_rules_or_comments(n.has_rules_or_comments), has_rules_or_comments(n.has_rules_or_comments),
has_rulesets(n.has_rulesets), has_rulesets(n.has_rulesets),
has_propsets(n.has_propsets), has_propsets(n.has_propsets),
has_expansions(n.has_expansions),
has_backref(n.has_backref), has_backref(n.has_backref),
from_variable(n.from_variable), from_variable(n.from_variable),
eval_me(n.eval_me) eval_me(n.eval_me)
...@@ -112,6 +114,7 @@ namespace Sass { ...@@ -112,6 +114,7 @@ namespace Sass {
has_rules_or_comments(false), has_rules_or_comments(false),
has_rulesets(false), has_rulesets(false),
has_propsets(false), has_propsets(false),
has_expansions(false),
has_backref(false), has_backref(false),
from_variable(false), from_variable(false),
eval_me(false) eval_me(false)
...@@ -126,6 +129,7 @@ namespace Sass { ...@@ -126,6 +129,7 @@ namespace Sass {
has_rules_or_comments(false), has_rules_or_comments(false),
has_rulesets(false), has_rulesets(false),
has_propsets(false), has_propsets(false),
has_expansions(false),
has_backref(false), has_backref(false),
from_variable(false), from_variable(false),
eval_me(false) eval_me(false)
...@@ -140,6 +144,7 @@ namespace Sass { ...@@ -140,6 +144,7 @@ namespace Sass {
has_rules_or_comments(false), has_rules_or_comments(false),
has_rulesets(false), has_rulesets(false),
has_propsets(false), has_propsets(false),
has_expansions(false),
has_backref(false), has_backref(false),
from_variable(false), from_variable(false),
eval_me(false) eval_me(false)
...@@ -159,6 +164,7 @@ namespace Sass { ...@@ -159,6 +164,7 @@ namespace Sass {
has_rules_or_comments(false), has_rules_or_comments(false),
has_rulesets(false), has_rulesets(false),
has_propsets(false), has_propsets(false),
has_expansions(false),
has_backref(false), has_backref(false),
from_variable(false), from_variable(false),
eval_me(false) eval_me(false)
...@@ -173,6 +179,7 @@ namespace Sass { ...@@ -173,6 +179,7 @@ namespace Sass {
has_rules_or_comments(false), has_rules_or_comments(false),
has_rulesets(false), has_rulesets(false),
has_propsets(false), has_propsets(false),
has_expansions(false),
has_backref(false), has_backref(false),
from_variable(false), from_variable(false),
eval_me(false) eval_me(false)
...@@ -187,6 +194,7 @@ namespace Sass { ...@@ -187,6 +194,7 @@ namespace Sass {
has_rules_or_comments(false), has_rules_or_comments(false),
has_rulesets(false), has_rulesets(false),
has_propsets(false), has_propsets(false),
has_expansions(false),
has_backref(false), has_backref(false),
from_variable(false), from_variable(false),
eval_me(false) eval_me(false)
...@@ -201,6 +209,7 @@ namespace Sass { ...@@ -201,6 +209,7 @@ namespace Sass {
has_rules_or_comments(false), has_rules_or_comments(false),
has_rulesets(false), has_rulesets(false),
has_propsets(false), has_propsets(false),
has_expansions(false),
has_backref(false), has_backref(false),
from_variable(false), from_variable(false),
eval_me(false) eval_me(false)
...@@ -266,5 +275,7 @@ namespace Sass { ...@@ -266,5 +275,7 @@ namespace Sass {
const vector<string>& prefixes); const vector<string>& prefixes);
void emit_nested_css(stringstream& buf, size_t depth); void emit_nested_css(stringstream& buf, size_t depth);
void emit_expanded_css(stringstream& buf, const string& prefix); void emit_expanded_css(stringstream& buf, const string& prefix);
void flatten();
}; };
} }
\ 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