blob: cad31a27e5575a25d669a5a09827e0595893adbb [file] [log] [blame]
// 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 'dart:io';
import 'css.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;
}
printStats(num elapsed, [String filename = '']) {
print('Parsed ${_GREEN_COLOR}${filename}${_NO_COLOR} in ${elapsed} msec.');
}
/**
* Run from the `utils/css` directory.
*/
void main() {
var optionArgs = new Options().arguments;
assert(optionArgs.length == 2);
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;
idxBeforeFilename = outputFullFn.lastIndexOf('/');
if (idxBeforeFilename >= 0) {
outPath = outputFullFn.substring(0, idxBeforeFilename + 1);
}
initCssWorld();
files = new VMFileSystem();
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 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.write(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}");
}
}