ext/libsass/src/output.cpp in sassc-1.10.1 vs ext/libsass/src/output.cpp in sassc-1.11.0

- old
+ new

@@ -109,81 +109,69 @@ void Output::operator()(Ruleset* r) { Selector* s = r->selector(); Block* b = r->block(); - bool decls = false; // Filter out rulesets that aren't printable (process its children though) if (!Util::isPrintable(r, output_style())) { for (size_t i = 0, L = b->length(); i < L; ++i) { Statement* stm = (*b)[i]; if (dynamic_cast<Has_Block*>(stm)) { - stm->perform(this); + if (typeid(*stm) != typeid(Declaration)) { + stm->perform(this); + } } } return; } - if (b->has_non_hoistable()) { - decls = true; - if (output_style() == NESTED) indentation += r->tabs(); - if (opt.source_comments) { - std::stringstream ss; - append_indentation(); - ss << "/* line " << r->pstate().line + 1 << ", " << r->pstate().path << " */"; - append_string(ss.str()); - append_optional_linefeed(); - } - s->perform(this); - append_scope_opener(b); - for (size_t i = 0, L = b->length(); i < L; ++i) { - Statement* stm = (*b)[i]; - bool bPrintExpression = true; - // Check print conditions - if (typeid(*stm) == typeid(Declaration)) { - Declaration* dec = static_cast<Declaration*>(stm); - if (dec->value()->concrete_type() == Expression::STRING) { - String_Constant* valConst = static_cast<String_Constant*>(dec->value()); - std::string val(valConst->value()); - if (auto qstr = dynamic_cast<String_Quoted*>(valConst)) { - if (!qstr->quote_mark() && val.empty()) { - bPrintExpression = false; - } + if (output_style() == NESTED) indentation += r->tabs(); + if (opt.source_comments) { + std::stringstream ss; + append_indentation(); + std::string path(File::abs2rel(r->pstate().path)); + ss << "/* line " << r->pstate().line + 1 << ", " << path << " */"; + append_string(ss.str()); + append_optional_linefeed(); + } + s->perform(this); + append_scope_opener(b); + for (size_t i = 0, L = b->length(); i < L; ++i) { + Statement* stm = (*b)[i]; + bool bPrintExpression = true; + // Check print conditions + if (typeid(*stm) == typeid(Declaration)) { + Declaration* dec = static_cast<Declaration*>(stm); + if (dec->value()->concrete_type() == Expression::STRING) { + String_Constant* valConst = static_cast<String_Constant*>(dec->value()); + std::string val(valConst->value()); + if (auto qstr = dynamic_cast<String_Quoted*>(valConst)) { + if (!qstr->quote_mark() && val.empty()) { + bPrintExpression = false; } } - else if (dec->value()->concrete_type() == Expression::LIST) { - List* list = static_cast<List*>(dec->value()); - bool all_invisible = true; - for (size_t list_i = 0, list_L = list->length(); list_i < list_L; ++list_i) { - Expression* item = (*list)[list_i]; - if (!item->is_invisible()) all_invisible = false; - } - if (all_invisible) bPrintExpression = false; + } + else if (dec->value()->concrete_type() == Expression::LIST) { + List* list = static_cast<List*>(dec->value()); + bool all_invisible = true; + for (size_t list_i = 0, list_L = list->length(); list_i < list_L; ++list_i) { + Expression* item = (*list)[list_i]; + if (!item->is_invisible()) all_invisible = false; } + if (all_invisible) bPrintExpression = false; } - // Print if OK - if (!stm->is_hoistable() && bPrintExpression) { - stm->perform(this); - } } - if (output_style() == NESTED) indentation -= r->tabs(); - append_scope_closer(b); - } - - if (b->has_hoistable()) { - if (decls) ++indentation; - for (size_t i = 0, L = b->length(); i < L; ++i) { - Statement* stm = (*b)[i]; - if (stm->is_hoistable()) { - stm->perform(this); - } + // Print if OK + if (bPrintExpression) { + stm->perform(this); } - if (decls) --indentation; } - } + if (output_style() == NESTED) indentation -= r->tabs(); + append_scope_closer(b); + } void Output::operator()(Keyframe_Rule* r) { Block* b = r->block(); Selector* v = r->selector(); @@ -197,23 +185,13 @@ } append_scope_opener(); for (size_t i = 0, L = b->length(); i < L; ++i) { Statement* stm = (*b)[i]; - if (!stm->is_hoistable()) { - stm->perform(this); - if (i < L - 1) append_special_linefeed(); - } + stm->perform(this); + if (i < L - 1) append_special_linefeed(); } - - for (size_t i = 0, L = b->length(); i < L; ++i) { - Statement* stm = (*b)[i]; - if (stm->is_hoistable()) { - stm->perform(this); - } - } - append_scope_closer(); } void Output::operator()(Supports_Block* f) { @@ -238,38 +216,15 @@ append_token("@supports", f); append_mandatory_space(); c->perform(this); append_scope_opener(); - if (b->has_non_hoistable()) { - // JMA - hoisted, output the non-hoistable in a nested block, followed by the hoistable - append_scope_opener(); - - for (size_t i = 0, L = b->length(); i < L; ++i) { - Statement* stm = (*b)[i]; - if (!stm->is_hoistable()) { - stm->perform(this); - } - } - - append_scope_closer(); - - for (size_t i = 0, L = b->length(); i < L; ++i) { - Statement* stm = (*b)[i]; - if (stm->is_hoistable()) { - stm->perform(this); - } - } + for (size_t i = 0, L = b->length(); i < L; ++i) { + Statement* stm = (*b)[i]; + stm->perform(this); + if (i < L - 1) append_special_linefeed(); } - else { - // JMA - not hoisted, just output in order - for (size_t i = 0, L = b->length(); i < L; ++i) { - Statement* stm = (*b)[i]; - stm->perform(this); - if (i < L - 1) append_special_linefeed(); - } - } if (output_style() == NESTED) indentation -= f->tabs(); append_scope_closer(); @@ -344,21 +299,11 @@ bool format = kwd != "@font-face";; for (size_t i = 0, L = b->length(); i < L; ++i) { Statement* stm = (*b)[i]; - if (!stm->is_hoistable()) { - stm->perform(this); - if (i < L - 1 && format) append_special_linefeed(); - } - } - - for (size_t i = 0, L = b->length(); i < L; ++i) { - Statement* stm = (*b)[i]; - if (stm->is_hoistable()) { - stm->perform(this); - if (i < L - 1 && format) append_special_linefeed(); - } + stm->perform(this); + if (i < L - 1 && format) append_special_linefeed(); } append_scope_closer(); }