blob: e77afeba349bee1492b7d53d03f3f8e00c973429 [file] [log] [blame]
library angular.tools.html_expression_extractor;
import 'dart:async';
import 'dart:io';
import 'package:angular/tools/html_extractor.dart';
import 'package:angular/tools/source_metadata_extractor.dart';
import 'package:angular/tools/source_crawler_impl.dart';
import 'package:angular/tools/io.dart';
import 'package:angular/tools/io_impl.dart';
import 'package:angular/tools/common.dart';
import 'package:di/di.dart';
import 'package:di/dynamic_injector.dart';
import 'package:angular/core/module.dart';
import 'package:angular/core/parser/parser.dart';
import 'package:angular/tools/parser_getter_setter/generator.dart';
import 'package:angular/tools/parser_generator/generator.dart';
main(args) {
if (args.length < 5) {
print('Usage: expression_extractor file_to_scan html_root header_file '
'footer_file output [package_roots+]');
exit(0);
}
IoService ioService = new IoServiceImpl();
var packageRoots =
(args.length < 6) ? [Platform.packageRoot] : args.sublist(5);
var sourceCrawler = new SourceCrawlerImpl(packageRoots);
var sourceMetadataExtractor = new SourceMetadataExtractor();
List<DirectiveInfo> directives =
sourceMetadataExtractor.gatherDirectiveInfo(args[0], sourceCrawler);
var htmlExtractor = new HtmlExpressionExtractor(directives);
htmlExtractor.crawl(args[1], ioService);
var expressions = htmlExtractor.expressions;
expressions.add('null');
var headerFile = args[2];
var footerFile = args[3];
var outputFile = args[4];
SourcePrinter printer;
if (outputFile == '--') {
printer = new SourcePrinter();
} else {
printer = new FileSourcePrinter(outputFile);
}
// Output the header file first.
if (headerFile != '') {
printer.printSrc(_readFile(headerFile));
}
printer.printSrc('// Found ${expressions.length} expressions');
Module module = new Module()
..type(Parser, implementedBy: DynamicParser)
..type(ParserBackend, implementedBy: DartGetterSetterGen)
..type(FilterMap, implementedBy: NullFilterMap)
..value(SourcePrinter, printer);
Injector injector =
new DynamicInjector(modules: [module], allowImplicitInjection: true);
runZoned(() {
// Run the generator.
injector.get(ParserGetterSetter).generateParser(htmlExtractor.expressions);
}, zoneSpecification: new ZoneSpecification(print: (_, __, ___, String line) {
printer.printSrc(line);
}));
// Output footer last.
if (footerFile != '') {
printer.printSrc(_readFile(footerFile));
}
}
String _readFile(String filePath) => new File(filePath).readAsStringSync();
class FileSourcePrinter implements SourcePrinter {
final File _file;
FileSourcePrinter(String filePath)
: _file = new File(filePath) {
// clear file
_file.writeAsStringSync('');
}
printSrc(src) => _file.writeAsStringSync('$src\n', mode: FileMode.APPEND);
}