| // 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}"); |
| } |
| } |