Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 part of csslib.visitor; | 5 part of csslib.visitor; |
| 6 | 6 |
| 7 /** | 7 /** |
| 8 * Visitor that produces a formatted string representation of the CSS tree. | 8 * Visitor that produces a formatted string representation of the CSS tree. |
| 9 */ | 9 */ |
| 10 class CssPrinter extends Visitor { | 10 class CssPrinter extends Visitor { |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 97 void visitPageDirective(PageDirective node) { | 97 void visitPageDirective(PageDirective node) { |
| 98 emit('$_newLine@page'); | 98 emit('$_newLine@page'); |
| 99 if (node.hasIdent || node.hasPseudoPage) { | 99 if (node.hasIdent || node.hasPseudoPage) { |
| 100 if (node.hasIdent) emit(' '); | 100 if (node.hasIdent) emit(' '); |
| 101 emit(node._ident); | 101 emit(node._ident); |
| 102 emit(node.hasPseudoPage ? ':${node._pseudoPage}' : ''); | 102 emit(node.hasPseudoPage ? ':${node._pseudoPage}' : ''); |
| 103 } | 103 } |
| 104 emit(' '); | 104 emit(' '); |
| 105 | 105 |
| 106 var declsMargin = node._declsMargin; | 106 var declsMargin = node._declsMargin; |
| 107 int declsMarginLength = declsMargin.length; | 107 int declsMarginLength = declsMargin.length; |
|
terry
2013/11/20 14:07:25
var
| |
| 108 for (var i = 0; i < declsMarginLength; i++) { | 108 for (var i = 0; i < declsMarginLength; i++) { |
| 109 if (i > 0) emit(_newLine); | 109 if (i > 0) emit(_newLine); |
| 110 emit('{$_newLine'); | 110 emit('{$_newLine'); |
| 111 declsMargin[i].visit(this); | 111 declsMargin[i].visit(this); |
| 112 emit('}'); | 112 emit('}'); |
| 113 } | 113 } |
| 114 } | 114 } |
| 115 | 115 |
| 116 /** @charset "charset encoding" */ | 116 /** @charset "charset encoding" */ |
| 117 void visitCharsetDirective(CharsetDirective node) { | 117 void visitCharsetDirective(CharsetDirective node) { |
| 118 emit('$_newLine@charset "${node.charEncoding}";'); | 118 emit('$_newLine@charset "${node.charEncoding}";'); |
| 119 } | 119 } |
| 120 | 120 |
| 121 void visitImportDirective(ImportDirective node) { | 121 void visitImportDirective(ImportDirective node) { |
| 122 bool isStartingQuote(String ch) => ('\'"'.indexOf(ch[0]) >= 0); | 122 bool isStartingQuote(String ch) => ('\'"'.indexOf(ch[0]) >= 0); |
|
terry
2013/11/20 14:07:25
var
| |
| 123 | 123 |
| 124 if (_isTesting) { | 124 if (_isTesting) { |
| 125 // Emit assuming url() was parsed; most suite tests use url function. | 125 // Emit assuming url() was parsed; most suite tests use url function. |
| 126 emit(' @import url(${node.import})'); | 126 emit(' @import url(${node.import})'); |
| 127 } else if (isStartingQuote(node.import)) { | 127 } else if (isStartingQuote(node.import)) { |
| 128 emit(' @import ${node.import}'); | 128 emit(' @import ${node.import}'); |
| 129 } else { | 129 } else { |
| 130 // url(...) isn't needed only a URI can follow an @import directive; emit | 130 // url(...) isn't needed only a URI can follow an @import directive; emit |
| 131 // url as a string. | 131 // url as a string. |
| 132 emit(' @import "${node.import}"'); | 132 emit(' @import "${node.import}"'); |
| (...skipping 21 matching lines...) Expand all Loading... | |
| 154 | 154 |
| 155 void visitKeyFrameBlock(KeyFrameBlock node) { | 155 void visitKeyFrameBlock(KeyFrameBlock node) { |
| 156 emit('$_sp$_sp'); | 156 emit('$_sp$_sp'); |
| 157 node._blockSelectors.visit(this); | 157 node._blockSelectors.visit(this); |
| 158 emit('$_sp{$_newLine'); | 158 emit('$_sp{$_newLine'); |
| 159 node._declarations.visit(this); | 159 node._declarations.visit(this); |
| 160 emit('$_sp$_sp}$_newLine'); | 160 emit('$_sp$_sp}$_newLine'); |
| 161 } | 161 } |
| 162 | 162 |
| 163 void visitStyletDirective(StyletDirective node) { | 163 void visitStyletDirective(StyletDirective node) { |
| 164 emit('/* @stylet export as ${node._dartClassName} */\n'); | 164 emit('/* @stylet export as ${node.dartClassName} */\n'); |
| 165 } | 165 } |
| 166 | 166 |
| 167 void visitNamespaceDirective(NamespaceDirective node) { | 167 void visitNamespaceDirective(NamespaceDirective node) { |
| 168 bool isStartingQuote(String ch) => ('\'"'.indexOf(ch) >= 0); | 168 bool isStartingQuote(String ch) => ('\'"'.indexOf(ch) >= 0); |
|
terry
2013/11/20 14:07:25
var
terry
2013/11/20 16:45:08
ignore.
On 2013/11/20 14:07:25, terry wrote:
| |
| 169 | 169 |
| 170 if (isStartingQuote(node._uri)) { | 170 if (isStartingQuote(node._uri)) { |
| 171 emit(' @namespace ${node.prefix}"${node._uri}"'); | 171 emit(' @namespace ${node.prefix}"${node._uri}"'); |
| 172 } else { | 172 } else { |
| 173 if (_isTesting) { | 173 if (_isTesting) { |
| 174 // Emit exactly was we parsed. | 174 // Emit exactly was we parsed. |
| 175 emit(' @namespace ${node.prefix}url(${node._uri})'); | 175 emit(' @namespace ${node.prefix}url(${node._uri})'); |
| 176 } else { | 176 } else { |
| 177 // url(...) isn't needed only a URI can follow a: | 177 // url(...) isn't needed only a URI can follow a: |
| 178 // @namespace prefix directive. | 178 // @namespace prefix directive. |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 217 | 217 |
| 218 void visitRuleSet(RuleSet node) { | 218 void visitRuleSet(RuleSet node) { |
| 219 emit("$_newLine"); | 219 emit("$_newLine"); |
| 220 node._selectorGroup.visit(this); | 220 node._selectorGroup.visit(this); |
| 221 emit(" {$_newLine"); | 221 emit(" {$_newLine"); |
| 222 node._declarationGroup.visit(this); | 222 node._declarationGroup.visit(this); |
| 223 emit("}"); | 223 emit("}"); |
| 224 } | 224 } |
| 225 | 225 |
| 226 void visitDeclarationGroup(DeclarationGroup node) { | 226 void visitDeclarationGroup(DeclarationGroup node) { |
| 227 var declarations = node._declarations; | 227 var declarations = node.declarations; |
| 228 var declarationsLength = declarations.length; | 228 var declarationsLength = declarations.length; |
| 229 for (var i = 0; i < declarationsLength; i++) { | 229 for (var i = 0; i < declarationsLength; i++) { |
| 230 if (i > 0) emit(_newLine); | 230 if (i > 0) emit(_newLine); |
| 231 emit("$_sp$_sp"); | 231 emit("$_sp$_sp"); |
| 232 declarations[i].visit(this); | 232 declarations[i].visit(this); |
| 233 emit(";"); | 233 emit(";"); |
| 234 } | 234 } |
| 235 if (declarationsLength > 0) emit(_newLine); | 235 if (declarationsLength > 0) emit(_newLine); |
| 236 } | 236 } |
| 237 | 237 |
| 238 void visitMarginGroup(MarginGroup node) { | 238 void visitMarginGroup(MarginGroup node) { |
| 239 var margin_sym_name = | 239 var margin_sym_name = |
| 240 TokenKind.idToValue(TokenKind.MARGIN_DIRECTIVES, node.margin_sym); | 240 TokenKind.idToValue(TokenKind.MARGIN_DIRECTIVES, node.margin_sym); |
| 241 | 241 |
| 242 emit("@$margin_sym_name {$_newLine"); | 242 emit("@$margin_sym_name {$_newLine"); |
| 243 | 243 |
| 244 visitDeclarationGroup(node); | 244 visitDeclarationGroup(node); |
| 245 | 245 |
| 246 emit("}$_newLine"); | 246 emit("}$_newLine"); |
| 247 } | 247 } |
| 248 | 248 |
| 249 void visitDeclaration(Declaration node) { | 249 void visitDeclaration(Declaration node) { |
| 250 String importantAsString() => node.important ? '$_sp!important' : ''; | 250 String importantAsString() => node.important ? '$_sp!important' : ''; |
|
terry
2013/11/20 14:07:25
var
terry
2013/11/20 16:45:08
ignore
On 2013/11/20 14:07:25, terry wrote:
| |
| 251 | 251 |
| 252 emit("${node.property}: "); | 252 emit("${node.property}: "); |
| 253 node._expression.visit(this); | 253 node._expression.visit(this); |
| 254 | 254 |
| 255 emit("${importantAsString()}"); | 255 emit("${importantAsString()}"); |
| 256 } | 256 } |
| 257 | 257 |
| 258 void visitVarDefinition(VarDefinition node) { | 258 void visitVarDefinition(VarDefinition node) { |
| 259 emit("var-${node.definedName}: "); | 259 emit("var-${node.definedName}: "); |
| 260 node._expression.visit(this); | 260 node._expression.visit(this); |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 331 emit(')'); | 331 emit(')'); |
| 332 } | 332 } |
| 333 | 333 |
| 334 void visitNegationSelector(NegationSelector node) { | 334 void visitNegationSelector(NegationSelector node) { |
| 335 emit(':not('); | 335 emit(':not('); |
| 336 node.negationArg.visit(this); | 336 node.negationArg.visit(this); |
| 337 emit(')'); | 337 emit(')'); |
| 338 } | 338 } |
| 339 | 339 |
| 340 void visitSelectorExpression(SelectorExpression node) { | 340 void visitSelectorExpression(SelectorExpression node) { |
| 341 var expressions = node._expressions; | 341 var expressions = node.expressions; |
| 342 var expressionsLength = expressions.length; | 342 var expressionsLength = expressions.length; |
| 343 for (var i = 0; i < expressionsLength; i++) { | 343 for (var i = 0; i < expressionsLength; i++) { |
| 344 // Add space seperator between terms without an operator. | 344 // Add space seperator between terms without an operator. |
| 345 var expression = expressions[i]; | 345 var expression = expressions[i]; |
| 346 expression.visit(this); | 346 expression.visit(this); |
| 347 } | 347 } |
| 348 } | 348 } |
| 349 | 349 |
| 350 void visitUnicodeRangeTerm(UnicodeRangeTerm node) { | 350 void visitUnicodeRangeTerm(UnicodeRangeTerm node) { |
| 351 if (node.hasSecond) { | 351 if (node.hasSecond) { |
| (...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 508 | 508 |
| 509 void visitWildcard(Wildcard node) { | 509 void visitWildcard(Wildcard node) { |
| 510 emit('*'); | 510 emit('*'); |
| 511 } | 511 } |
| 512 | 512 |
| 513 void visitDartStyleExpression(DartStyleExpression node) { | 513 void visitDartStyleExpression(DartStyleExpression node) { |
| 514 // TODO(terry): TBD | 514 // TODO(terry): TBD |
| 515 throw UnimplementedError; | 515 throw UnimplementedError; |
| 516 } | 516 } |
| 517 } | 517 } |
| OLD | NEW |