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

Commit a065782

Browse files
author
Aaron Leung
committed
Refining the selector extension stuff to eventually handle selector groups.
1 parent e9e5096 commit a065782

File tree

2 files changed

+54
-0
lines changed

2 files changed

+54
-0
lines changed

eval_apply.cpp

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -719,6 +719,59 @@ namespace Sass {
719719
}
720720
}
721721

722+
// Helper for generating selector extensions; called for each extendee in a
723+
// selector group.
724+
725+
pair<Node, Node> generate_extension(Node extendee, Node extender, Node_Factory& new_Node)
726+
{
727+
if (extendee.type() != Node::selector) {
728+
switch (extender.type())
729+
{
730+
case Node::simple_selector:
731+
case Node::attribute_selector:
732+
case Node::simple_selector_sequence:
733+
case Node::selector: {
734+
cerr << "EXTENDING " << extendee.to_string() << " WITH " << extender.to_string() << endl;
735+
return pair<Node, Node>(extender, Node());
736+
} break;
737+
default: {
738+
// handle the other cases later
739+
}
740+
}
741+
}
742+
else {
743+
switch (extender.type())
744+
{
745+
case Node::simple_selector:
746+
case Node::attribute_selector:
747+
case Node::simple_selector_sequence: {
748+
Node new_ext(new_Node(Node::selector, extendee.path(), extendee.line(), extendee.size()));
749+
for (size_t i = 0, S = extendee.size() - 1; i < S; ++i) {
750+
new_ext << extendee[i];
751+
}
752+
new_ext << extender;
753+
return pair<Node, Node>(new_ext, Node());
754+
} break;
755+
756+
case Node::selector: {
757+
Node new_ext1(new_Node(Node::selector, extendee.path(), extendee.line(), extendee.size() + extender.size() - 1));
758+
Node new_ext2(new_Node(Node::selector, extendee.path(), extendee.line(), extendee.size() + extender.size() - 1));
759+
new_ext1 += selector_prefix(extendee, new_Node);
760+
new_ext1 += extender;
761+
new_ext2 += selector_prefix(extender, new_Node);
762+
new_ext2 += selector_prefix(extendee, new_Node);
763+
new_ext2 << extender.back();
764+
return pair<Node, Node>(new_ext1, new_ext2);
765+
} break;
766+
767+
default: {
768+
// something
769+
} break;
770+
}
771+
}
772+
return pair<Node, Node>(Node(), Node());
773+
}
774+
722775
// Helpers for extracting subsets of selectors
723776

724777
Node selector_prefix(Node sel, Node_Factory& new_Node)

eval_apply.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ 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+
pair<Node, Node> generate_extension(Node extendee, Node extender, Node_Factory& new_Node);
2324

2425
Node selector_prefix(Node sel, Node_Factory& new_Node);
2526
Node selector_base(Node sel);

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