Statement_Ptr Cssize::operator()(At_Root_Block_Ptr m) { bool tmp = false; for (size_t i = 0, L = p_stack.size(); i < L; ++i) { Statement_Ptr s = p_stack[i]; tmp |= m->exclude_node(s); } if (!tmp && m->block()) { Block_Ptr bb = operator()(m->block()); for (size_t i = 0, L = bb->length(); i < L; ++i) { // (bb->elements())[i]->tabs(m->tabs()); Statement_Obj stm = bb->at(i); if (bubblable(stm)) stm->tabs(stm->tabs() + m->tabs()); } if (bb->length() && bubblable(bb->last())) bb->last()->group_end(m->group_end()); return bb; } if (m->exclude_node(parent())) { return SASS_MEMORY_NEW(Bubble, m->pstate(), m); } return bubble(m); }
Statement* Cssize::operator()(At_Root_Block* m) { bool tmp = false; for (size_t i = 0, L = p_stack.size(); i < L; ++i) { Statement* s = p_stack[i]; tmp |= m->exclude_node(s); } if (!tmp) { Block* bb = m->block()->perform(this)->block(); for (size_t i = 0, L = bb->length(); i < L; ++i) { // (bb->elements())[i]->tabs(m->tabs()); if (bubblable((*bb)[i])) (*bb)[i]->tabs((*bb)[i]->tabs() + m->tabs()); } if (bb->length() && bubblable(bb->last())) bb->last()->group_end(m->group_end()); return bb; } if (m->exclude_node(parent())) { return SASS_MEMORY_NEW(ctx.mem, Bubble, m->pstate(), m); } return bubble(m); }
Statement* Cssize::operator()(Ruleset* r) { p_stack.push_back(r); Ruleset* rr = SASS_MEMORY_NEW(ctx.mem, Ruleset, r->pstate(), r->selector(), r->block()->perform(this)->block()); // rr->tabs(r->block()->tabs()); p_stack.pop_back(); Block* props = SASS_MEMORY_NEW(ctx.mem, Block, rr->block()->pstate()); Block* rules = SASS_MEMORY_NEW(ctx.mem, Block, rr->block()->pstate()); for (size_t i = 0, L = rr->block()->length(); i < L; i++) { Statement* s = (*rr->block())[i]; if (bubblable(s)) *rules << s; if (!bubblable(s)) *props << s; } if (props->length()) { Block* bb = SASS_MEMORY_NEW(ctx.mem, Block, rr->block()->pstate()); *bb += props; rr->block(bb); for (size_t i = 0, L = rules->length(); i < L; i++) { (*rules)[i]->tabs((*rules)[i]->tabs() + 1); } rules->unshift(rr); } rules = debubble(rules)->block(); if (!(!rules->length() || !bubblable(rules->last()) || parent()->statement_type() == Statement::RULESET)) { rules->last()->group_end(true); } return rules; }
Statement_Ptr Cssize::operator()(Ruleset_Ptr r) { p_stack.push_back(r); // this can return a string schema // string schema is not a statement! // r->block() is already a string schema // and that is comming from propset expand Block_Ptr bb = operator()(r->block()); // this should protect us (at least a bit) from our mess // fixing this properly is harder that it should be ... if (Cast<Statement>(bb) == NULL) { error("Illegal nesting: Only properties may be nested beneath properties.", r->block()->pstate(), traces); } Ruleset_Obj rr = SASS_MEMORY_NEW(Ruleset, r->pstate(), r->selector(), bb); rr->is_root(r->is_root()); // rr->tabs(r->block()->tabs()); p_stack.pop_back(); if (!rr->block()) { error("Illegal nesting: Only properties may be nested beneath properties.", r->block()->pstate(), traces); } Block_Obj props = SASS_MEMORY_NEW(Block, rr->block()->pstate()); Block_Ptr rules = SASS_MEMORY_NEW(Block, rr->block()->pstate()); for (size_t i = 0, L = rr->block()->length(); i < L; i++) { Statement_Ptr s = rr->block()->at(i); if (bubblable(s)) rules->append(s); if (!bubblable(s)) props->append(s); } if (props->length()) { Block_Obj pb = SASS_MEMORY_NEW(Block, rr->block()->pstate()); pb->concat(props); rr->block(pb); for (size_t i = 0, L = rules->length(); i < L; i++) { Statement_Ptr stm = rules->at(i); stm->tabs(stm->tabs() + 1); } rules->unshift(rr); } Block_Ptr ptr = rules; rules = debubble(rules); void* lp = ptr; void* rp = rules; if (lp != rp) { Block_Obj obj = ptr; } if (!(!rules->length() || !bubblable(rules->last()) || parent()->statement_type() == Statement::RULESET)) { rules->last()->group_end(true); } return rules; }