OLD | NEW |
---|---|
(Empty) | |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | |
2 // for details. All rights reserved. Use of this source code is governed by a | |
3 // BSD-style license that can be found in the LICENSE file. | |
4 | |
5 /** Common methods used by transfomers. */ | |
6 library polymer.src.transform.common; | |
7 | |
8 import 'dart:async'; | |
9 | |
10 import 'package:path/path.dart' as path; | |
11 import 'package:barback/barback.dart'; | |
12 import 'package:html5lib/dom.dart' show Document; | |
13 import 'package:html5lib/parser.dart' show HtmlParser; | |
14 import 'package:source_maps/span.dart' show Span; | |
15 | |
16 | |
17 Future<String> getPrimaryContent(Transform transform) => | |
18 transform.primaryInput.then((asset) => asset.readAsString()); | |
19 | |
20 Future<String> getContent(Transform transform, AssetId id) => | |
21 transform.getInput(id).then((asset) => asset.readAsString()); | |
22 | |
23 /** | |
24 * Parses an HTML file [contents] and returns a DOM-like tree. Adds emitted | |
25 * error/warning to [logger]. | |
26 */ | |
27 Document parseHtml(String contents, String sourcePath, TransformLogger logger) { | |
28 var parser = new HtmlParser(contents, generateSpans: true, | |
Jennifer Messerly
2013/08/19 22:57:26
One recurring issue in DWC was the inability to su
Jennifer Messerly
2013/08/20 17:50:56
it sounds like Bob is saying barback has no config
Siggi Cherem (dart-lang)
2013/08/21 20:35:42
Done, added the utf8 argument as a default encodin
| |
29 sourceUrl: sourcePath); | |
30 var document = parser.parse(); | |
31 | |
32 // Note: errors aren't fatal in HTML (unless strict mode is on). | |
33 // So just print them as warnings. | |
34 for (var e in parser.errors) { | |
Jennifer Messerly
2013/08/19 22:57:26
suggestion: filter out the following error:
if (i
Siggi Cherem (dart-lang)
2013/08/21 20:35:42
Done.
| |
35 logger.warning(e.message, e.span); | |
36 } | |
37 return document; | |
38 } | |
39 | |
40 /** Create an [AssetId] for a [url] seen in the [source] asset. */ | |
41 AssetId resolve(AssetId source, String url, TransformLogger logger, Span span) { | |
42 if (url == null || url == '') return null; | |
Jennifer Messerly
2013/08/19 22:57:26
generally, it's nice if only one of these is allow
Siggi Cherem (dart-lang)
2013/08/21 20:35:42
Not sure I follow - in this case this is more chec
| |
43 var uri = Uri.parse(url); | |
44 if (uri.host != '' || uri.scheme != '' || path.isAbsolute(url)) { | |
45 logger.error('absolute paths not allowed here: "$url"', span); | |
Jennifer Messerly
2013/08/19 22:57:26
what is "here" :)
Siggi Cherem (dart-lang)
2013/08/21 20:35:42
"here" is now gone :)
| |
46 return null; | |
47 } | |
48 | |
49 var package; | |
50 var targetPath; | |
51 var segments = path.split(url); | |
52 if (segments[0] == 'packages') { | |
53 if (segments.length < 3) { | |
54 logger.error("incomplete packages/ path. It should have at least 3 " | |
55 "segments packages/name/path-from-name's-lib-dir", span); | |
56 return null; | |
57 } | |
58 package = segments[1]; | |
59 targetPath = path.join('lib', path.joinAll(segments.sublist(2))); | |
60 } else if (segments[0] == 'assets') { | |
61 if (segments.length < 3) { | |
62 logger.error("incomplete assets/ path. It should have at least 3 " | |
63 "segments assets/name/path-from-name's-asset-dir", span); | |
64 } | |
65 package = segments[1]; | |
66 targetPath = path.join('asset', path.joinAll(segments.sublist(2))); | |
67 } else { | |
68 package = source.package; | |
69 targetPath = path.normalize(path.join(path.dirname(source.path), url)); | |
70 } | |
Bob Nystrom
2013/08/19 22:28:59
Pub serve has identical parsing code for this. We
Siggi Cherem (dart-lang)
2013/08/21 20:35:42
Done.
| |
71 return new AssetId(package, targetPath); | |
72 } | |
OLD | NEW |