Index: utils/template/tool.dart |
diff --git a/utils/template/tool.dart b/utils/template/tool.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..439c2630f12af3ce00d89e4954637fca533fa970 |
--- /dev/null |
+++ b/utils/template/tool.dart |
@@ -0,0 +1,109 @@ |
+// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file |
+// for details. All rights reserved. Use of this source code is governed by a |
+// BSD-style license that can be found in the LICENSE file. |
+ |
+#library('templatetool'); |
+ |
+#import('dart:io'); |
+#import('template.dart'); |
+#import('../lib/file_system.dart'); |
+#import('../lib/file_system_vm.dart'); |
+ |
+ |
+FileSystem files; |
+ |
+/** Invokes [callback] and returns how long it took to execute in ms. */ |
+num time(callback()) { |
+ final watch = new Stopwatch(); |
+ watch.start(); |
+ callback(); |
+ watch.stop(); |
+ return watch.elapsedInMs(); |
+} |
+ |
+String GREEN_COLOR = '\u001b[32m'; |
+String NO_COLOR = '\u001b[0m'; |
+ |
+printStats(String phase, num elapsed, [String filename = '']) { |
+ print('${phase} ${GREEN_COLOR}${filename}${NO_COLOR} in ${elapsed} msec.'); |
+} |
+ |
+/** |
+ * Run from the `utils/css` directory. |
+ */ |
+void main() { |
+ // argument 0 - sourcefile full path |
+ // argument 1 - outputfile full path |
+ var optionArgs = new Options().arguments; |
+ |
+ String sourceFullFn = optionArgs[0]; |
+ String outputFullFn = optionArgs[1]; |
+ |
+ String sourcePath; |
+ String sourceFilename; |
+ int idxBeforeFilename = sourceFullFn.lastIndexOf('/'); |
+ if (idxBeforeFilename >= 0) { |
+ sourcePath = sourceFullFn.substring(0, idxBeforeFilename + 1); |
+ sourceFilename = sourceFullFn.substring(idxBeforeFilename + 1); |
+ } |
+ |
+ String outPath; |
+ String outFilename; |
+ idxBeforeFilename = outputFullFn.lastIndexOf('/'); |
+ if (idxBeforeFilename >= 0) { |
+ outPath = outputFullFn.substring(0, idxBeforeFilename + 1); |
+ outFilename = outputFullFn.substring(idxBeforeFilename + 1); |
+ } |
+ |
+ if (sourceFilename.length == 0 || outFilename.length == 0) { |
+ print("Unknown command:\r"); |
+ print(" Format: sourcefile outputfile [--options]"); |
+ print(" outputfile - template file filename.tmpl"); |
+ print(" outputfile - generated dart source file filename.dart"); |
+ return; |
+ } |
+ |
+// files = new NodeFileSystem(); |
+ files = new VMFileSystem(); |
+ |
+ // TODO(terry): Cleanup options handling need common options between template |
+ // and CSS parsers also cleanup above cruft. |
+ |
+ // TODO(terry): Pass on switches. |
+ var args = []; |
+ parseOptions(args, files); |
+ |
+ initHtmlWorld(false); |
+ |
+ if (!files.fileExists(sourceFullFn)) { |
+ // Display colored error message if file is missing. |
+ print(world.fatal("CSS source file missing - ${sourceFullFn}")); |
+ } else { |
+ |
+ String source = files.readAll(sourceFullFn); |
+ |
+ List<Template> templates; |
+ final parsedElapsed = time(() { |
+ templates = templateParseAndValidate(source); |
+ }); |
+ |
+ StringBuffer code = new StringBuffer(); |
+ |
+ num codegenElapsed; |
+ if (world.errors == 0) { |
+ // Generate the Dart class(es) for all template(s). |
+ codegenElapsed = time(() { |
+ code.add(Codegen.generate(templates, outFilename)); |
+ }); |
+ } |
+ |
+ printStats("Parsed", parsedElapsed, sourceFullFn); |
+ printStats("Codegen", codegenElapsed, sourceFullFn); |
+ |
+ final outputElapsed = time(() { |
+ files.writeString(outputFullFn, code.toString()); |
+ }); |
+ |
+ printStats("Wrote file", codegenElapsed, outputFullFn); |
+ } |
+} |