Index: pkg/polymer/lib/src/transform/common.dart |
diff --git a/pkg/polymer/lib/src/transform/common.dart b/pkg/polymer/lib/src/transform/common.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..99055033654c8cf2cf47ac63ad76e40b6fc5ff2c |
--- /dev/null |
+++ b/pkg/polymer/lib/src/transform/common.dart |
@@ -0,0 +1,79 @@ |
+// 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:barback/barback.dart'; |
+import 'package:html5lib/dom.dart' show Document; |
+import 'package:html5lib/parser.dart' show HtmlParser; |
+import 'package:path/path.dart' as path; |
+import 'package:source_maps/span.dart' show Span; |
+ |
+// TODO(sigmund): delete this function (see dartbug.com/12515 and |
+// dartbug.com/12516) |
+Future<String> getPrimaryContent(Transform transform) => |
+ transform.primaryInput.then((asset) => asset.readAsString()); |
+ |
+// TODO(sigmund): delete this function (see dartbug.com/12515) |
+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, |
+ {bool checkDocType: true}) { |
+ // TODO(jmesserly): make HTTP encoding configurable |
+ var parser = new HtmlParser(contents, encoding: 'utf8', generateSpans: true, |
+ 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) { |
+ if (checkDocType || e.errorCode != 'expected-doctype-but-got-start-tag') { |
+ logger.warning(e.message, e.span); |
+ } |
+ } |
+ return document; |
+} |
+ |
+/** Create an [AssetId] for a [url] seen in the [source] asset. */ |
+// TODO(sigmund): delete once this is part of barback (dartbug.com/12610) |
+AssetId resolve(AssetId source, String url, TransformLogger logger, Span span) { |
+ if (url == null || url == '') return null; |
+ var uri = Uri.parse(url); |
+ if (uri.host != '' || uri.scheme != '' || path.isAbsolute(url)) { |
+ logger.error('absolute paths not allowed: "$url"', span); |
+ 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)); |
+ } |
+ return new AssetId(package, targetPath); |
+} |