@@ -719,6 +719,59 @@ namespace Sass {
719
719
}
720
720
}
721
721
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
+
722
775
// Helpers for extracting subsets of selectors
723
776
724
777
Node selector_prefix (Node sel, Node_Factory& new_Node)
0 commit comments