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