Commit 46fd6b34 by Aaron Leung

More inheritance functionality.

parent a63fcad4
...@@ -603,7 +603,11 @@ namespace Sass { ...@@ -603,7 +603,11 @@ namespace Sass {
Node extender(pending[i].second[2]); Node extender(pending[i].second[2]);
Node ruleset_to_extend(pending[i].first); Node ruleset_to_extend(pending[i].first);
Node selector_to_extend(ruleset_to_extend[2]); Node selector_to_extend(ruleset_to_extend[2]);
if (extender.type() == Node::simple_selector) { switch (extender.type())
{
case Node::simple_selector:
case Node::simple_selector_sequence:
case Node::selector: {
cerr << "EXTENDING " << selector_to_extend.to_string() << " WITH " << extender.to_string() << endl; cerr << "EXTENDING " << selector_to_extend.to_string() << " WITH " << extender.to_string() << endl;
if (selector_to_extend.type() == Node::selector_group) { if (selector_to_extend.type() == Node::selector_group) {
selector_to_extend << extender; selector_to_extend << extender;
...@@ -613,12 +617,61 @@ namespace Sass { ...@@ -613,12 +617,61 @@ namespace Sass {
new_group << selector_to_extend << extender; new_group << selector_to_extend << extender;
ruleset_to_extend[2] = new_group; ruleset_to_extend[2] = new_group;
} }
} } break;
else {
// case Node::selector: {
// cerr << "EXTENDING " << selector_to_extend.to_string() << " WITH " << extender.to_string() << endl;
// if (selector_to_extend.type() == Node::selector_group) {
// selector_to_extend << selector_base(extender);
// }
// else {
// Node new_group(new_Node(Node::selector_group, selector_to_extend.path(), selector_to_extend.line(), 2));
// new_group << selector_to_extend << selector_base(extender);
// ruleset_to_extend[2] = new_group;
// }
// } break;
default: {
// handle the other cases later // handle the other cases later
} }
} }
}
}
// Helper for extracting the prefix/context of a selector.
Node selector_prefix(Node sel, Node_Factory& new_Node)
{
switch (sel.type())
{
case Node::selector: {
Node pre(new_Node(Node::selector, sel.path(), sel.line(), sel.size() - 1));
for (size_t i = 0, S = sel.size() - 1; i < S; ++i) {
pre << sel[i];
}
return pre;
} break;
default: {
return new_Node(Node::selector, sel.path(), sel.line(), 0);
} break;
}
}
// Helper for extracting the base (i.e., rightmost component) of a selector.
Node selector_base(Node sel)
{
switch (sel.type())
{
case Node::selector: {
return sel.back();
} break;
default: {
return sel;
} break;
}
} }
} }
...@@ -20,4 +20,6 @@ namespace Sass { ...@@ -20,4 +20,6 @@ namespace Sass {
Node expand_selector(Node sel, Node pre, Node_Factory& new_Node); Node expand_selector(Node sel, Node pre, Node_Factory& new_Node);
Node expand_backref(Node sel, Node pre); Node expand_backref(Node sel, Node pre);
void extend_selectors(vector<pair<Node, Node> >&, Node_Factory&); void extend_selectors(vector<pair<Node, Node> >&, Node_Factory&);
Node selector_prefix(Node sel, Node_Factory& new_Node);
Node selector_base(Node sel);
} }
\ No newline at end of file
...@@ -47,10 +47,6 @@ extern "C" { ...@@ -47,10 +47,6 @@ extern "C" {
doc.context); doc.context);
extend_selectors(doc.context.pending_extensions, doc.context.new_Node); extend_selectors(doc.context.pending_extensions, doc.context.new_Node);
string output(doc.emit_css(static_cast<Document::CSS_Style>(style))); 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()
<< " WITH " << doc.context.pending_extensions[i].second[2].to_string() << endl;
}
char* c_output = (char*) malloc(output.size() + 1); char* c_output = (char*) malloc(output.size() + 1);
strcpy(c_output, output.c_str()); strcpy(c_output, output.c_str());
return c_output; return c_output;
......
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