| Index: utils/css/tool.dart
|
| diff --git a/utils/css/tool.dart b/utils/css/tool.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..9279b3f1c045bbe6a6d68bec306af0dbb3ece677
|
| --- /dev/null
|
| +++ b/utils/css/tool.dart
|
| @@ -0,0 +1,84 @@
|
| +// 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('csstool');
|
| +
|
| +#import('../../frog/file_system.dart');
|
| +#import('../../frog/file_system_node.dart');
|
| +#import('../../frog/lang.dart', prefix:'lang');
|
| +#import('css.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();
|
| +}
|
| +
|
| +printStats(num elapsed, [String filename = '']) {
|
| + print('Parsed\033[32m ${filename}\033[0m in ${elapsed} msec.');
|
| +}
|
| +
|
| +/**
|
| + * Run from the `utils/css` directory.
|
| + */
|
| +void main() {
|
| + // process.argv[0] == node and process.argv[1] == minfrog
|
| + assert(process.argv.length == 4);
|
| +
|
| + String sourceFullFn = process.argv[2];
|
| + String outputFullFn = process.argv[3];
|
| +
|
| + String sourcePath;
|
| + String sourceFilename;
|
| + int idxBeforeFilename = sourceFullFn.lastIndexOf('/');
|
| + if (idxBeforeFilename >= 0) {
|
| + sourcePath = sourceFullFn.substring(0, idxBeforeFilename + 1);
|
| + sourceFilename = sourceFullFn.substring(idxBeforeFilename + 1);
|
| + }
|
| +
|
| + String outPath;
|
| + idxBeforeFilename = outputFullFn.lastIndexOf('/');
|
| + if (idxBeforeFilename >= 0) {
|
| + outPath = outputFullFn.substring(0, idxBeforeFilename + 1);
|
| + }
|
| +
|
| + initCssWorld();
|
| +
|
| + files = new NodeFileSystem();
|
| + if (!files.fileExists(sourceFullFn)) {
|
| + // Display colored error message if file is missing.
|
| + print("\033[31mCSS source file missing - ${sourceFullFn}\033[0m");
|
| + } else {
|
| + String source = files.readAll(sourceFullFn);
|
| +
|
| + Stylesheet stylesheet;
|
| +
|
| + final elapsed = time(() {
|
| + Parser parser = new Parser(
|
| + new lang.SourceFile(sourceFullFn, source), 0, files, sourcePath);
|
| + stylesheet = parser.parse();
|
| + });
|
| +
|
| + printStats(elapsed, sourceFullFn);
|
| +
|
| + StringBuffer buff = new StringBuffer(
|
| + '/* File generated by SCSS from source ${sourceFilename}\n' +
|
| + ' * Do not edit.\n' +
|
| + ' */\n\n');
|
| + buff.add(stylesheet.toString());
|
| +
|
| + files.writeString(outputFullFn, buff.toString());
|
| + print("Generated file ${outputFullFn}");
|
| +
|
| + // Generate CSS.dart file.
|
| + String genDartClassFile = Generate.dartClass(files, outPath, stylesheet,
|
| + sourceFilename);
|
| + print("Generated file ${genDartClassFile}");
|
| + }
|
| +}
|
|
|