2 #include "remove_placeholders.hpp"
9 Remove_Placeholders::Remove_Placeholders()
12 void Remove_Placeholders::operator()(Block_Ptr b) {
13 for (size_t i = 0, L = b->length(); i < L; ++i) {
14 Statement_Ptr st = b->at(i);
19 Selector_List_Ptr Remove_Placeholders::remove_placeholders(Selector_List_Ptr sl)
21 Selector_List_Ptr new_sl = SASS_MEMORY_NEW(Selector_List, sl->pstate());
23 for (size_t i = 0, L = sl->length(); i < L; ++i) {
24 if (!sl->at(i)->contains_placeholder()) {
25 new_sl->append(sl->at(i));
34 void Remove_Placeholders::operator()(Ruleset_Ptr r) {
35 // Create a new selector group without placeholders
36 Selector_List_Obj sl = Cast<Selector_List>(r->selector());
39 // Set the new placeholder selector list
40 r->selector(remove_placeholders(sl));
41 // Remove placeholders in wrapped selectors
42 for (Complex_Selector_Obj cs : sl->elements()) {
45 for (Simple_Selector_Obj& ss : cs->head()->elements()) {
46 if (Wrapped_Selector_Ptr ws = Cast<Wrapped_Selector>(ss)) {
47 if (Selector_List_Ptr sl = Cast<Selector_List>(ws->selector())) {
48 Selector_List_Ptr clean = remove_placeholders(sl);
49 // also clean superflous parent selectors
50 // probably not really the correct place
51 clean->remove_parent_selectors();
62 // Iterate into child blocks
63 Block_Obj b = r->block();
65 for (size_t i = 0, L = b->length(); i < L; ++i) {
67 Statement_Obj st = b->at(i);
73 void Remove_Placeholders::operator()(Media_Block_Ptr m) {
74 operator()(m->block());
76 void Remove_Placeholders::operator()(Supports_Block_Ptr m) {
77 operator()(m->block());
80 void Remove_Placeholders::operator()(Directive_Ptr a) {
81 if (a->block()) a->block()->perform(this);