Chromium Code Reviews| Index: lib/src/transform/common.dart |
| diff --git a/lib/src/transform/common.dart b/lib/src/transform/common.dart |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..8781290f751a114b5612aca34e5b1d57cb014eae |
| --- /dev/null |
| +++ b/lib/src/transform/common.dart |
| @@ -0,0 +1,72 @@ |
| +// Copyright (c) 2013, 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. |
| + |
| +/** Common methods used by transfomers. */ |
| +library polymer.src.transform.common; |
| + |
| +import 'dart:async'; |
| + |
| +import 'package:path/path.dart' as path; |
| +import 'package:barback/barback.dart'; |
| +import 'package:html5lib/dom.dart' show Document; |
| +import 'package:html5lib/parser.dart' show HtmlParser; |
| +import 'package:source_maps/span.dart' show Span; |
| + |
| + |
| +Future<String> getPrimaryContent(Transform transform) => |
| + transform.primaryInput.then((asset) => asset.readAsString()); |
| + |
| +Future<String> getContent(Transform transform, AssetId id) => |
| + transform.getInput(id).then((asset) => asset.readAsString()); |
| + |
| +/** |
| + * Parses an HTML file [contents] and returns a DOM-like tree. Adds emitted |
| + * error/warning to [logger]. |
| + */ |
| +Document parseHtml(String contents, String sourcePath, TransformLogger logger) { |
| + 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
|
| + sourceUrl: sourcePath); |
| + var document = parser.parse(); |
| + |
| + // Note: errors aren't fatal in HTML (unless strict mode is on). |
| + // So just print them as warnings. |
| + 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.
|
| + logger.warning(e.message, e.span); |
| + } |
| + return document; |
| +} |
| + |
| +/** Create an [AssetId] for a [url] seen in the [source] asset. */ |
| +AssetId resolve(AssetId source, String url, TransformLogger logger, Span span) { |
| + 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
|
| + var uri = Uri.parse(url); |
| + if (uri.host != '' || uri.scheme != '' || path.isAbsolute(url)) { |
| + 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 :)
|
| + return null; |
| + } |
| + |
| + var package; |
| + var targetPath; |
| + var segments = path.split(url); |
| + if (segments[0] == 'packages') { |
| + if (segments.length < 3) { |
| + logger.error("incomplete packages/ path. It should have at least 3 " |
| + "segments packages/name/path-from-name's-lib-dir", span); |
| + return null; |
| + } |
| + package = segments[1]; |
| + targetPath = path.join('lib', path.joinAll(segments.sublist(2))); |
| + } else if (segments[0] == 'assets') { |
| + if (segments.length < 3) { |
| + logger.error("incomplete assets/ path. It should have at least 3 " |
| + "segments assets/name/path-from-name's-asset-dir", span); |
| + } |
| + package = segments[1]; |
| + targetPath = path.join('asset', path.joinAll(segments.sublist(2))); |
| + } else { |
| + package = source.package; |
| + targetPath = path.normalize(path.join(path.dirname(source.path), url)); |
| + } |
|
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.
|
| + return new AssetId(package, targetPath); |
| +} |