Files
sdk/utils/template/tool.dart
T
terry@google.com 91dd628bd8 More changes for CSS to run under VM.
Need unique name for library collision with template parser.

Few more changes to work under VM.

More changes for lang.dart seperation.

Seperation from lang.dart (tokenizer can't access private fields of base class in another library).  This was allowed in frog but not in the VM.  VM is right so need to sever dependency.

BUG=
TEST=

Review URL: https://chromiumcodereview.appspot.com//9695048

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@5544 260f80e4-7a28-3924-810f-c04153c831b5
2012-03-15 21:19:54 +00:00

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.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);
}
}