| Index: pkg/csslib/lib/src/css_printer.dart
|
| diff --git a/pkg/csslib/lib/src/css_printer.dart b/pkg/csslib/lib/src/css_printer.dart
|
| index b8000b70a7ea9c40fafdd677aec303d4b312e7fc..b532544ccc4e6155e1961fc559375882d18bb69a 100644
|
| --- a/pkg/csslib/lib/src/css_printer.dart
|
| +++ b/pkg/csslib/lib/src/css_printer.dart
|
| @@ -187,6 +187,34 @@ class CssPrinter extends Visitor {
|
| emit(';$_newLine');
|
| }
|
|
|
| + void visitMixinRulesetDirective(MixinRulesetDirective node) {
|
| + emit('@mixin ${node.name} {');
|
| + for (var ruleset in node.rulesets) {
|
| + ruleset.visit(this);
|
| + }
|
| + emit('}');
|
| + }
|
| +
|
| + void visitMixinDeclarationDirective(MixinDeclarationDirective node) {
|
| + emit('@mixin ${node.name} {\n');
|
| + visitDeclarationGroup(node.declarations);
|
| + emit('}');
|
| + }
|
| +
|
| + /**
|
| + * Added optional newLine for handling @include at top-level vs/ inside of
|
| + * a declaration group.
|
| + */
|
| + void visitIncludeDirective(IncludeDirective node, [bool topLevel = true]) {
|
| + if (topLevel) emit(_newLine);
|
| + emit('@include ${node.name}');
|
| + emit(';');
|
| + }
|
| +
|
| + void visitContentDirective(ContentDirective node) {
|
| + // TODO(terry): TBD
|
| + }
|
| +
|
| void visitRuleSet(RuleSet node) {
|
| emit("$_newLine");
|
| node._selectorGroup.visit(this);
|
| @@ -232,6 +260,19 @@ class CssPrinter extends Visitor {
|
| node._expression.visit(this);
|
| }
|
|
|
| + void visitIncludeMixinAtDeclaration(IncludeMixinAtDeclaration node) {
|
| + // Don't emit a new line we're inside of a declaration group.
|
| + visitIncludeDirective(node.include, false);
|
| + }
|
| +
|
| + void visitExtendDeclaration(ExtendDeclaration node) {
|
| + emit("@extend ");
|
| + for (var selector in node.selectors) {
|
| + selector.visit(this);
|
| + }
|
| + }
|
| +
|
| +
|
| void visitSelectorGroup(SelectorGroup node) {
|
| var selectors = node._selectors;
|
| var selectorsLength = selectors.length;
|
| @@ -251,31 +292,31 @@ class CssPrinter extends Visitor {
|
| }
|
|
|
| void visitNamespaceSelector(NamespaceSelector node) {
|
| - emit("${node.namespace}|${node.nameAsSimpleSelector.name}");
|
| + emit(node.toString());
|
| }
|
|
|
| void visitElementSelector(ElementSelector node) {
|
| - emit("${node.name}");
|
| + emit(node.toString());
|
| }
|
|
|
| void visitAttributeSelector(AttributeSelector node) {
|
| - emit("[${node.name}${node.matchOperator()}${node.valueToString()}]");
|
| + emit(node.toString());
|
| }
|
|
|
| void visitIdSelector(IdSelector node) {
|
| - emit("#${node.name}");
|
| + emit(node.toString());
|
| }
|
|
|
| void visitClassSelector(ClassSelector node) {
|
| - emit(".${node.name}");
|
| + emit(node.toString());
|
| }
|
|
|
| void visitPseudoClassSelector(PseudoClassSelector node) {
|
| - emit(":${node.name}");
|
| + emit(node.toString());
|
| }
|
|
|
| void visitPseudoElementSelector(PseudoElementSelector node) {
|
| - emit("::${node.name}");
|
| + emit(node.toString());
|
| }
|
|
|
| void visitPseudoClassFunctionSelector(PseudoClassFunctionSelector node) {
|
|
|