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 |
deleted file mode 100644 |
index 8e62d48a53bf168a8a78a6e1af332ca6bd2982cb..0000000000000000000000000000000000000000 |
--- a/pkg/polymer/lib/src/transform/common.dart |
+++ /dev/null |
@@ -1,159 +0,0 @@ |
-// 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; |
- |
-/** |
- * 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; |
-} |
- |
-/** Additional options used by polymer transformers */ |
-class TransformOptions { |
- String currentPackage; |
- List<String> entryPoints; |
- |
- TransformOptions([this.currentPackage, entryPoints]) |
- : entryPoints = entryPoints == null ? null |
- : entryPoints.map(_systemToAssetPath).toList(); |
- |
- /** Whether an asset with [id] is an entry point HTML file. */ |
- bool isHtmlEntryPoint(AssetId id) { |
- if (id.extension != '.html') return false; |
- |
- // Note: [id.path] is a relative path from the root of a package. |
- if (currentPackage == null || entryPoints == null) { |
- return id.path.startsWith('web/') || id.path.startsWith('test/'); |
- } |
- |
- return id.package == currentPackage && entryPoints.contains(id.path); |
- } |
-} |
- |
-/** Mixin for polymer transformers. */ |
-abstract class PolymerTransformer { |
- TransformOptions get options; |
- |
- Future<Document> readPrimaryAsHtml(Transform transform) { |
- var asset = transform.primaryInput; |
- var id = asset.id; |
- return asset.readAsString().then((content) { |
- return _parseHtml(content, id.path, transform.logger, |
- checkDocType: options.isHtmlEntryPoint(id)); |
- }); |
- } |
- |
- Future<Document> readAsHtml(AssetId id, Transform transform) { |
- var primaryId = transform.primaryInput.id; |
- var url = (id.package == primaryId.package) ? id.path |
- : assetUrlFor(id, primaryId, transform.logger, allowAssetUrl: true); |
- return transform.readInputAsString(id).then((content) { |
- return _parseHtml(content, url, transform.logger, |
- checkDocType: options.isHtmlEntryPoint(id)); |
- }); |
- } |
-} |
- |
-/** 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); |
- var urlBuilder = path.url; |
- if (uri.host != '' || uri.scheme != '' || urlBuilder.isAbsolute(url)) { |
- logger.error('absolute paths not allowed: "$url"', span); |
- return null; |
- } |
- |
- var package; |
- var targetPath; |
- var segments = urlBuilder.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 = urlBuilder.join('lib', |
- urlBuilder.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 = urlBuilder.join('asset', |
- urlBuilder.joinAll(segments.sublist(2))); |
- } else { |
- package = source.package; |
- targetPath = urlBuilder.normalize( |
- urlBuilder.join(urlBuilder.dirname(source.path), url)); |
- } |
- return new AssetId(package, targetPath); |
-} |
- |
-/** |
- * Generate the import url for a file described by [id], referenced by a file |
- * with [sourceId]. |
- */ |
-// TODO(sigmund): this should also be in barback (dartbug.com/12610) |
-String assetUrlFor(AssetId id, AssetId sourceId, TransformLogger logger, |
- {bool allowAssetUrl: false}) { |
- // use package: and asset: urls if possible |
- if (id.path.startsWith('lib/')) { |
- return 'package:${id.package}/${id.path.substring(4)}'; |
- } |
- |
- if (id.path.startsWith('asset/')) { |
- if (!allowAssetUrl) { |
- logger.error("asset urls not allowed. " |
- "Don't know how to refer to $id from $sourceId"); |
- return null; |
- } |
- return 'asset:${id.package}/${id.path.substring(6)}'; |
- } |
- |
- // Use relative urls only if it's possible. |
- if (id.package != sourceId.package) { |
- logger.error("don't know how to refer to $id from $sourceId"); |
- return null; |
- } |
- |
- var builder = path.url; |
- return builder.relative(builder.join('/', id.path), |
- from: builder.join('/', builder.dirname(sourceId.path))); |
-} |
- |
- |
-/** Convert system paths to asset paths (asset paths are posix style). */ |
-String _systemToAssetPath(String assetPath) { |
- if (path.Style.platform != path.Style.windows) return assetPath; |
- return path.posix.joinAll(path.split(assetPath)); |
-} |