| 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);
|
| +}
|
|
|