Skip to content
This repository was archived by the owner on Jun 14, 2019. It is now read-only.

Commit 46fd6b3

Browse files
author
Aaron Leung
committed
More inheritance functionality.
1 parent a63fcad commit 46fd6b3

File tree

4 files changed

+75
-24
lines changed

4 files changed

+75
-24
lines changed

eval_apply.cpp

Lines changed: 65 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -603,22 +603,75 @@ namespace Sass {
603603
Node extender(pending[i].second[2]);
604604
Node ruleset_to_extend(pending[i].first);
605605
Node selector_to_extend(ruleset_to_extend[2]);
606-
if (extender.type() == Node::simple_selector) {
607-
cerr << "EXTENDING " << selector_to_extend.to_string() << " WITH " << extender.to_string() << endl;
608-
if (selector_to_extend.type() == Node::selector_group) {
609-
selector_to_extend << extender;
610-
}
611-
else {
612-
Node new_group(new_Node(Node::selector_group, selector_to_extend.path(), selector_to_extend.line(), 2));
613-
new_group << selector_to_extend << extender;
614-
ruleset_to_extend[2] = new_group;
615-
}
616-
}
617-
else {
606+
switch (extender.type())
607+
{
608+
case Node::simple_selector:
609+
case Node::simple_selector_sequence:
610+
case Node::selector: {
611+
cerr << "EXTENDING " << selector_to_extend.to_string() << " WITH " << extender.to_string() << endl;
612+
if (selector_to_extend.type() == Node::selector_group) {
613+
selector_to_extend << extender;
614+
}
615+
else {
616+
Node new_group(new_Node(Node::selector_group, selector_to_extend.path(), selector_to_extend.line(), 2));
617+
new_group << selector_to_extend << extender;
618+
ruleset_to_extend[2] = new_group;
619+
}
620+
} break;
621+
622+
// case Node::selector: {
623+
// cerr << "EXTENDING " << selector_to_extend.to_string() << " WITH " << extender.to_string() << endl;
624+
// if (selector_to_extend.type() == Node::selector_group) {
625+
// selector_to_extend << selector_base(extender);
626+
// }
627+
// else {
628+
// Node new_group(new_Node(Node::selector_group, selector_to_extend.path(), selector_to_extend.line(), 2));
629+
// new_group << selector_to_extend << selector_base(extender);
630+
// ruleset_to_extend[2] = new_group;
631+
// }
632+
// } break;
633+
634+
default: {
618635
// handle the other cases later
636+
}
619637
}
620638
}
639+
}
640+
641+
// Helper for extracting the prefix/context of a selector.
621642

643+
Node selector_prefix(Node sel, Node_Factory& new_Node)
644+
{
645+
switch (sel.type())
646+
{
647+
case Node::selector: {
648+
Node pre(new_Node(Node::selector, sel.path(), sel.line(), sel.size() - 1));
649+
for (size_t i = 0, S = sel.size() - 1; i < S; ++i) {
650+
pre << sel[i];
651+
}
652+
return pre;
653+
} break;
654+
655+
default: {
656+
return new_Node(Node::selector, sel.path(), sel.line(), 0);
657+
} break;
658+
}
659+
}
660+
661+
// Helper for extracting the base (i.e., rightmost component) of a selector.
662+
663+
Node selector_base(Node sel)
664+
{
665+
switch (sel.type())
666+
{
667+
case Node::selector: {
668+
return sel.back();
669+
} break;
670+
671+
default: {
672+
return sel;
673+
} break;
674+
}
622675
}
623676

624677
}

eval_apply.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,6 @@ namespace Sass {
2020
Node expand_selector(Node sel, Node pre, Node_Factory& new_Node);
2121
Node expand_backref(Node sel, Node pre);
2222
void extend_selectors(vector<pair<Node, Node> >&, Node_Factory&);
23+
Node selector_prefix(Node sel, Node_Factory& new_Node);
24+
Node selector_base(Node sel);
2325
}

node.hpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -325,14 +325,14 @@ namespace Sass {
325325
inline bool Node::has_expansions() const { return ip_->has_expansions; }
326326
inline bool Node::has_backref() const { return ip_->has_backref; }
327327
inline bool Node::from_variable() const { return ip_->from_variable; }
328-
inline bool& Node::should_eval() const { return ip_->should_eval; }
329-
inline bool& Node::is_unquoted() const { return ip_->is_unquoted; }
328+
inline bool& Node::should_eval() const { return ip_->should_eval; }
329+
inline bool& Node::is_unquoted() const { return ip_->is_unquoted; }
330330
inline bool Node::is_numeric() const { return ip_->is_numeric(); }
331331

332-
inline string& Node::path() const { return ip_->path; }
333-
inline size_t Node::line() const { return ip_->line; }
334-
inline size_t Node::size() const { return ip_->size(); }
335-
inline bool Node::empty() const { return ip_->empty(); }
332+
inline string& Node::path() const { return ip_->path; }
333+
inline size_t Node::line() const { return ip_->line; }
334+
inline size_t Node::size() const { return ip_->size(); }
335+
inline bool Node::empty() const { return ip_->empty(); }
336336

337337
inline Node& Node::at(size_t i) const { return ip_->at(i); }
338338
inline Node& Node::back() const { return ip_->back(); }
@@ -366,7 +366,7 @@ namespace Sass {
366366

367367
inline bool Node::boolean_value() const { return ip_->boolean_value(); }
368368
inline double Node::numeric_value() const { return ip_->numeric_value(); }
369-
inline Token Node::token() const { return ip_->value.token; }
370-
inline Token Node::unit() const { return ip_->unit(); }
369+
inline Token Node::token() const { return ip_->value.token; }
370+
inline Token Node::unit() const { return ip_->unit(); }
371371

372372
}

sass_interface.cpp

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,10 +47,6 @@ extern "C" {
4747
doc.context);
4848
extend_selectors(doc.context.pending_extensions, doc.context.new_Node);
4949
string output(doc.emit_css(static_cast<Document::CSS_Style>(style)));
50-
for (size_t i = 0; i < doc.context.pending_extensions.size(); ++i) {
51-
cerr << "EXTENDING " << doc.context.pending_extensions[i].first[2].to_string()
52-
<< " WITH " << doc.context.pending_extensions[i].second[2].to_string() << endl;
53-
}
5450
char* c_output = (char*) malloc(output.size() + 1);
5551
strcpy(c_output, output.c_str());
5652
return c_output;

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy