OLD | NEW |
1 library angular.tools.html_expression_extractor; | 1 library angular.tools.html_expression_extractor; |
2 | 2 |
3 import 'dart:async'; | 3 import 'dart:async'; |
4 import 'dart:io'; | 4 import 'dart:io'; |
5 import 'package:angular/tools/html_extractor.dart'; | 5 import 'package:angular/tools/html_extractor.dart'; |
6 import 'package:angular/tools/source_metadata_extractor.dart'; | 6 import 'package:angular/tools/source_metadata_extractor.dart'; |
7 import 'package:angular/tools/source_crawler_impl.dart'; | 7 import 'package:angular/tools/source_crawler_impl.dart'; |
8 import 'package:angular/tools/io.dart'; | 8 import 'package:angular/tools/io.dart'; |
9 import 'package:angular/tools/io_impl.dart'; | 9 import 'package:angular/tools/io_impl.dart'; |
10 import 'package:angular/tools/common.dart'; | 10 import 'package:angular/tools/common.dart'; |
11 | 11 |
12 import 'package:di/di.dart'; | 12 import 'package:di/di.dart'; |
13 import 'package:di/dynamic_injector.dart'; | 13 import 'package:di/dynamic_injector.dart'; |
14 | 14 |
15 import 'package:angular/core/module.dart'; | |
16 import 'package:angular/core/parser/parser.dart'; | 15 import 'package:angular/core/parser/parser.dart'; |
17 import 'package:angular/tools/parser_getter_setter/generator.dart'; | 16 import 'package:angular/tools/parser_getter_setter/generator.dart'; |
18 import 'package:angular/tools/parser_generator/generator.dart'; | |
19 | 17 |
20 main(args) { | 18 main(args) { |
21 if (args.length < 5) { | 19 if (args.length < 5) { |
22 print('Usage: expression_extractor file_to_scan html_root header_file ' | 20 print('Usage: expression_extractor file_to_scan html_root header_file ' |
23 'footer_file output [package_roots+]'); | 21 'footer_file output [package_roots+]'); |
24 exit(0); | 22 exit(0); |
25 } | 23 } |
26 IoService ioService = new IoServiceImpl(); | 24 IoService ioService = new IoServiceImpl(); |
27 | 25 |
28 var packageRoots = | 26 var packageRoots = |
29 (args.length < 6) ? [Platform.packageRoot] : args.sublist(5); | 27 (args.length < 6) ? [Platform.packageRoot] : args.sublist(5); |
30 var sourceCrawler = new SourceCrawlerImpl(packageRoots); | 28 var sourceCrawler = new SourceCrawlerImpl(packageRoots); |
31 var sourceMetadataExtractor = new SourceMetadataExtractor(); | 29 var sourceMetadataExtractor = new SourceMetadataExtractor(); |
32 List<DirectiveInfo> directives = | 30 List<DirectiveInfo> directives = |
33 sourceMetadataExtractor.gatherDirectiveInfo(args[0], sourceCrawler); | 31 sourceMetadataExtractor.gatherDirectiveInfo(args[0], sourceCrawler); |
34 var htmlExtractor = new HtmlExpressionExtractor(directives); | 32 var htmlExtractor = new HtmlExpressionExtractor(directives); |
35 htmlExtractor.crawl(args[1], ioService); | 33 htmlExtractor.crawl(args[1], ioService); |
36 | 34 |
37 var expressions = htmlExtractor.expressions; | 35 var expressions = htmlExtractor.expressions; |
38 expressions.add('null'); | 36 expressions.add('null'); |
39 | 37 |
40 var headerFile = args[2]; | 38 var headerFile = args[2]; |
41 var footerFile = args[3]; | 39 var footerFile = args[3]; |
42 var outputFile = args[4]; | 40 var outputFile = args[4]; |
43 SourcePrinter printer; | 41 var printer; |
44 if (outputFile == '--') { | 42 if (outputFile == '--') { |
45 printer = new SourcePrinter(); | 43 printer = stdout; |
46 } else { | 44 } else { |
47 printer = new FileSourcePrinter(outputFile); | 45 printer = new File(outputFile).openWrite(); |
48 } | 46 } |
49 | 47 |
50 // Output the header file first. | 48 // Output the header file first. |
51 if (headerFile != '') { | 49 if (headerFile != '') { |
52 printer.printSrc(_readFile(headerFile)); | 50 printer.write(_readFile(headerFile)); |
53 } | 51 } |
54 | 52 |
55 printer.printSrc('// Found ${expressions.length} expressions'); | 53 printer.write('// Found ${expressions.length} expressions\n'); |
56 Module module = new Module() | 54 Module module = new Module() |
57 ..type(Parser, implementedBy: DynamicParser) | 55 ..type(Parser, implementedBy: DynamicParser) |
58 ..type(ParserBackend, implementedBy: DartGetterSetterGen) | 56 ..type(ParserBackend, implementedBy: DartGetterSetterGen); |
59 ..type(FilterMap, implementedBy: NullFilterMap) | |
60 ..value(SourcePrinter, printer); | |
61 Injector injector = | 57 Injector injector = |
62 new DynamicInjector(modules: [module], allowImplicitInjection: true); | 58 new DynamicInjector(modules: [module], allowImplicitInjection: true); |
63 | 59 |
64 runZoned(() { | 60 runZoned(() { |
65 // Run the generator. | 61 // Run the generator. |
66 injector.get(ParserGetterSetter).generateParser(htmlExtractor.expressions); | 62 injector.get(ParserGetterSetter).generateParser(htmlExtractor.expressions, |
| 63 printer); |
67 }, zoneSpecification: new ZoneSpecification(print: (_, __, ___, String line) { | 64 }, zoneSpecification: new ZoneSpecification(print: (_, __, ___, String line) { |
68 printer.printSrc(line); | 65 printer.write(line); |
69 })); | 66 })); |
70 | 67 |
71 | 68 |
72 // Output footer last. | 69 // Output footer last. |
73 if (footerFile != '') { | 70 if (footerFile != '') { |
74 printer.printSrc(_readFile(footerFile)); | 71 printer.write(_readFile(footerFile)); |
75 } | 72 } |
76 } | 73 } |
77 | 74 |
78 String _readFile(String filePath) => new File(filePath).readAsStringSync(); | 75 String _readFile(String filePath) => new File(filePath).readAsStringSync(); |
79 | |
80 class FileSourcePrinter implements SourcePrinter { | |
81 final File _file; | |
82 | |
83 FileSourcePrinter(String filePath) | |
84 : _file = new File(filePath) { | |
85 // clear file | |
86 _file.writeAsStringSync(''); | |
87 } | |
88 | |
89 printSrc(src) => _file.writeAsStringSync('$src\n', mode: FileMode.APPEND); | |
90 } | |
OLD | NEW |