Commit a63fcad4 by Aaron Leung

Rudimentary selector inheritance.

parent b5a6523b
......@@ -595,4 +595,30 @@ namespace Sass {
return Node();
}
// Resolve selector extensions.
void extend_selectors(vector<pair<Node, Node> >& pending, Node_Factory& new_Node)
{
for (size_t i = 0, S = pending.size(); i < S; ++i) {
Node extender(pending[i].second[2]);
Node ruleset_to_extend(pending[i].first);
Node selector_to_extend(ruleset_to_extend[2]);
if (extender.type() == Node::simple_selector) {
cerr << "EXTENDING " << selector_to_extend.to_string() << " WITH " << extender.to_string() << endl;
if (selector_to_extend.type() == Node::selector_group) {
selector_to_extend << extender;
}
else {
Node new_group(new_Node(Node::selector_group, selector_to_extend.path(), selector_to_extend.line(), 2));
new_group << selector_to_extend << extender;
ruleset_to_extend[2] = new_group;
}
}
else {
// handle the other cases later
}
}
}
}
......@@ -19,4 +19,5 @@ namespace Sass {
Node apply_function(const Function& f, const Node args, Node prefix, Environment& env, map<pair<string, size_t>, Function>& f_env, Node_Factory& new_Node, Context& src_refs);
Node expand_selector(Node sel, Node pre, Node_Factory& new_Node);
Node expand_backref(Node sel, Node pre);
void extend_selectors(vector<pair<Node, Node> >&, Node_Factory&);
}
\ No newline at end of file
......@@ -45,6 +45,7 @@ extern "C" {
doc.context.function_env,
doc.context.new_Node,
doc.context);
extend_selectors(doc.context.pending_extensions, doc.context.new_Node);
string output(doc.emit_css(static_cast<Document::CSS_Style>(style)));
for (size_t i = 0; i < doc.context.pending_extensions.size(); ++i) {
cerr << "EXTENDING " << doc.context.pending_extensions[i].first[2].to_string()
......
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