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();
}