| Index: packages/csslib/lib/src/css_printer.dart
|
| diff --git a/packages/csslib/lib/src/css_printer.dart b/packages/csslib/lib/src/css_printer.dart
|
| index a62ca47755562f04dae48ea7d665568efafe5de1..ac26acb2bf851780b6313e2706b1122ab648e879 100644
|
| --- a/packages/csslib/lib/src/css_printer.dart
|
| +++ b/packages/csslib/lib/src/css_printer.dart
|
| @@ -54,8 +54,11 @@ class CssPrinter extends Visitor {
|
|
|
| void visitMediaExpression(MediaExpression node) {
|
| emit(node.andOperator ? ' AND ' : ' ');
|
| - emit('(${node.mediaFeature}:');
|
| - visitExpressions(node.exprs);
|
| + emit('(${node.mediaFeature}');
|
| + if (node.exprs.expressions.isNotEmpty) {
|
| + emit(':');
|
| + visitExpressions(node.exprs);
|
| + }
|
| emit(')');
|
| }
|
|
|
| @@ -68,31 +71,88 @@ class CssPrinter extends Visitor {
|
| }
|
| }
|
|
|
| - void emitMediaQueries(queries) {
|
| + void emitMediaQueries(List<MediaQuery> queries) {
|
| var queriesLen = queries.length;
|
| for (var i = 0; i < queriesLen; i++) {
|
| var query = queries[i];
|
| - if (query.hasMediaType && i > 0) emit(',');
|
| + if (i > 0) emit(',');
|
| visitMediaQuery(query);
|
| }
|
| }
|
|
|
| + void visitDocumentDirective(DocumentDirective node) {
|
| + emit('$_newLine@-moz-document ');
|
| + node.functions.first.visit(this);
|
| + for (var function in node.functions.skip(1)) {
|
| + emit(',$_sp');
|
| + function.visit(this);
|
| + }
|
| + emit('$_sp{');
|
| + for (var ruleSet in node.groupRuleBody) {
|
| + ruleSet.visit(this);
|
| + }
|
| + emit('$_newLine}');
|
| + }
|
| +
|
| + void visitSupportsDirective(SupportsDirective node) {
|
| + emit('$_newLine@supports ');
|
| + node.condition.visit(this);
|
| + emit('$_sp{');
|
| + for (var rule in node.groupRuleBody) {
|
| + rule.visit(this);
|
| + }
|
| + emit('$_newLine}');
|
| + }
|
| +
|
| + void visitSupportsConditionInParens(SupportsConditionInParens node) {
|
| + emit('(');
|
| + node.condition.visit(this);
|
| + emit(')');
|
| + }
|
| +
|
| + void visitSupportsNegation(SupportsNegation node) {
|
| + emit('not$_sp');
|
| + node.condition.visit(this);
|
| + }
|
| +
|
| + void visitSupportsConjunction(SupportsConjunction node) {
|
| + node.conditions.first.visit(this);
|
| + for (var condition in node.conditions.skip(1)) {
|
| + emit('${_sp}and$_sp');
|
| + condition.visit(this);
|
| + }
|
| + }
|
| +
|
| + void visitSupportsDisjunction(SupportsDisjunction node) {
|
| + node.conditions.first.visit(this);
|
| + for (var condition in node.conditions.skip(1)) {
|
| + emit('${_sp}or$_sp');
|
| + condition.visit(this);
|
| + }
|
| + }
|
| +
|
| + void visitViewportDirective(ViewportDirective node) {
|
| + emit('@${node.name}$_sp{$_newLine');
|
| + node.declarations.visit(this);
|
| + emit('}');
|
| + }
|
| +
|
| void visitMediaDirective(MediaDirective node) {
|
| - emit(' @media');
|
| + emit('$_newLine@media');
|
| emitMediaQueries(node.mediaQueries);
|
| - emit(' {');
|
| + emit('$_sp{');
|
| for (var ruleset in node.rulesets) {
|
| ruleset.visit(this);
|
| }
|
| - emit('$_newLine\}');
|
| + emit('$_newLine}');
|
| }
|
|
|
| void visitHostDirective(HostDirective node) {
|
| - emit('\n@host {');
|
| + emit('$_newLine@host$_sp{');
|
| for (var ruleset in node.rulesets) {
|
| ruleset.visit(this);
|
| }
|
| - emit('$_newLine\}');
|
| + emit('$_newLine}');
|
| }
|
|
|
| /**
|
| @@ -107,16 +167,14 @@ class CssPrinter extends Visitor {
|
| emit(node._ident);
|
| emit(node.hasPseudoPage ? ':${node._pseudoPage}' : '');
|
| }
|
| - emit(' ');
|
|
|
| var declsMargin = node._declsMargin;
|
| var declsMarginLength = declsMargin.length;
|
| + emit(' {$_newLine');
|
| for (var i = 0; i < declsMarginLength; i++) {
|
| - if (i > 0) emit(_newLine);
|
| - emit('{$_newLine');
|
| declsMargin[i].visit(this);
|
| - emit('}');
|
| }
|
| + emit('}');
|
| }
|
|
|
| /** @charset "charset encoding" */
|
| @@ -253,12 +311,11 @@ class CssPrinter extends Visitor {
|
| }
|
|
|
| void visitDeclaration(Declaration node) {
|
| - String importantAsString() => node.important ? '$_sp!important' : '';
|
| -
|
| - emit("${node.property}: ");
|
| + emit('${node.property}:$_sp');
|
| node._expression.visit(this);
|
| -
|
| - emit("${importantAsString()}");
|
| + if (node.important) {
|
| + emit('$_sp!important');
|
| + }
|
| }
|
|
|
| void visitVarDefinition(VarDefinition node) {
|
| @@ -326,7 +383,7 @@ class CssPrinter extends Visitor {
|
|
|
| void visitPseudoClassFunctionSelector(PseudoClassFunctionSelector node) {
|
| emit(":${node.name}(");
|
| - node.expression.visit(this);
|
| + node.argument.visit(this);
|
| emit(')');
|
| }
|
|
|
|
|