| OLD | NEW |
| 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2011, 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 class CGBlock { | 5 class CGBlock { |
| 6 int _blockType; // Code type of this block | 6 int _blockType; // Code type of this block |
| 7 int _indent; // Number of spaces to prefix for each statement | 7 int _indent; // Number of spaces to prefix for each statement |
| 8 bool _inEach; // This block or any currently active blocks is a | 8 bool _inEach; // This block or any currently active blocks is a |
| 9 // #each. If so then any element marked with a | 9 // #each. If so then any element marked with a |
| 10 // var attribute is repeated therefore the var | 10 // var attribute is repeated therefore the var |
| 11 // is a List type instead of an Element type. | 11 // is a List type instead of an Element type. |
| 12 String _localName; // optional local name for #each or #with | 12 String _localName; // optional local name for #each or #with |
| 13 List<CGStatement> _stmts; | 13 List<CGStatement> _stmts; |
| 14 int localIndex; // Local variable index (e.g., e0, e1, etc.) | 14 int localIndex; // Local variable index (e.g., e0, e1, etc.) |
| 15 | 15 |
| 16 // Block Types: | 16 // Block Types: |
| 17 static final int CONSTRUCTOR = 0; | 17 static const int CONSTRUCTOR = 0; |
| 18 static final int EACH = 1; | 18 static const int EACH = 1; |
| 19 static final int WITH = 2; | 19 static const int WITH = 2; |
| 20 | 20 |
| 21 CGBlock([this._indent = 4, | 21 CGBlock([this._indent = 4, |
| 22 this._blockType = CGBlock.CONSTRUCTOR, | 22 this._blockType = CGBlock.CONSTRUCTOR, |
| 23 this._inEach = false, | 23 this._inEach = false, |
| 24 this._localName = null]) : | 24 this._localName = null]) : |
| 25 _stmts = new List<CGStatement>(), localIndex = 0 { | 25 _stmts = new List<CGStatement>(), localIndex = 0 { |
| 26 assert(_blockType >= CGBlock.CONSTRUCTOR && _blockType <= CGBlock.WITH); | 26 assert(_blockType >= CGBlock.CONSTRUCTOR && _blockType <= CGBlock.WITH); |
| 27 } | 27 } |
| 28 | 28 |
| 29 bool get anyStatements() => !_stmts.isEmpty(); | 29 bool get anyStatements() => !_stmts.isEmpty(); |
| (...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 240 statement.add("${spaces}${varName}.add(${tmpRepeat});\n"); | 240 statement.add("${spaces}${varName}.add(${tmpRepeat});\n"); |
| 241 } | 241 } |
| 242 } | 242 } |
| 243 } | 243 } |
| 244 | 244 |
| 245 return statement.toString(); | 245 return statement.toString(); |
| 246 } | 246 } |
| 247 } | 247 } |
| 248 | 248 |
| 249 class Codegen { | 249 class Codegen { |
| 250 static final String SPACES = " "; | 250 static const String SPACES = " "; |
| 251 static String spaces(int numSpaces) { | 251 static String spaces(int numSpaces) { |
| 252 return SPACES.substring(0, numSpaces); | 252 return SPACES.substring(0, numSpaces); |
| 253 } | 253 } |
| 254 | 254 |
| 255 // TODO(terry): Before generating Dart class need a validate phase that | 255 // TODO(terry): Before generating Dart class need a validate phase that |
| 256 // checks mangles all class names to be prefix with the | 256 // checks mangles all class names to be prefix with the |
| 257 // template name to avoid any class name collisions. Also, | 257 // template name to avoid any class name collisions. Also, |
| 258 // investigate possible runtime check mode to insure that only | 258 // investigate possible runtime check mode to insure that only |
| 259 // valid CSS class names are used (in case someone uses strings | 259 // valid CSS class names are used (in case someone uses strings |
| 260 // and not the generated getters to the CSS class selector. This | 260 // and not the generated getters to the CSS class selector. This |
| (...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 451 for (var eachFunc in ecg.eachs) { | 451 for (var eachFunc in ecg.eachs) { |
| 452 buff.add("${eachFunc}\n"); | 452 buff.add("${eachFunc}\n"); |
| 453 } | 453 } |
| 454 | 454 |
| 455 buff.add("\n // With functions:\n"); | 455 buff.add("\n // With functions:\n"); |
| 456 for (var withFunc in ecg.withs) { | 456 for (var withFunc in ecg.withs) { |
| 457 buff.add("${withFunc}\n"); | 457 buff.add("${withFunc}\n"); |
| 458 } | 458 } |
| 459 | 459 |
| 460 buff.add("\n // CSS for this template.\n"); | 460 buff.add("\n // CSS for this template.\n"); |
| 461 buff.add(" static final String stylesheet = "); | 461 buff.add(" static const String stylesheet = "); |
| 462 | 462 |
| 463 if (content.css != null) { | 463 if (content.css != null) { |
| 464 buff.add("\'\'\'\n ${content.css.toString()}\n"); | 464 buff.add("\'\'\'\n ${content.css.toString()}\n"); |
| 465 buff.add(" \'\'\';\n\n"); | 465 buff.add(" \'\'\';\n\n"); |
| 466 | 466 |
| 467 // TODO(terry): Emit all known selectors for this template. | 467 // TODO(terry): Emit all known selectors for this template. |
| 468 buff.add(" // Stylesheet class selectors:\n"); | 468 buff.add(" // Stylesheet class selectors:\n"); |
| 469 } else { | 469 } else { |
| 470 buff.add("\"\";\n"); | 470 buff.add("\"\";\n"); |
| 471 } | 471 } |
| (...skipping 532 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1004 for (String name in names) { | 1004 for (String name in names) { |
| 1005 buff.add(" var ${name} = _scopes[\"${name}\"];\n"); | 1005 buff.add(" var ${name} = _scopes[\"${name}\"];\n"); |
| 1006 } | 1006 } |
| 1007 buff.add("\n"); | 1007 buff.add("\n"); |
| 1008 } | 1008 } |
| 1009 | 1009 |
| 1010 return buff.toString(); | 1010 return buff.toString(); |
| 1011 } | 1011 } |
| 1012 | 1012 |
| 1013 } | 1013 } |
| OLD | NEW |