Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1619)

Unified Diff: pkg/polymer/lib/src/transform/common.dart

Issue 22935016: Introduce polymer transformers (inlined code extraction, inlining html imports, (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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);
+}
« no previous file with comments | « pkg/polymer/lib/src/transform/code_extractor.dart ('k') | pkg/polymer/lib/src/transform/import_inliner.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698