dd48256fe5
Review URL: https://codereview.chromium.org//12473003 git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@19690 260f80e4-7a28-3924-810f-c04153c831b5
110 lines
3.1 KiB
Dart
110 lines
3.1 KiB
Dart
// 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.elapsedMilliseconds;
|
|
}
|
|
|
|
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.write(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);
|
|
}
|
|
}
|