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

Side by Side 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file.
4
5 /** Common methods used by transfomers. */
6 library polymer.src.transform.common;
7
8 import 'dart:async';
9
10 import 'package:barback/barback.dart';
11 import 'package:html5lib/dom.dart' show Document;
12 import 'package:html5lib/parser.dart' show HtmlParser;
13 import 'package:path/path.dart' as path;
14 import 'package:source_maps/span.dart' show Span;
15
16 // TODO(sigmund): delete this function (see dartbug.com/12515 and
17 // dartbug.com/12516)
18 Future<String> getPrimaryContent(Transform transform) =>
19 transform.primaryInput.then((asset) => asset.readAsString());
20
21 // TODO(sigmund): delete this function (see dartbug.com/12515)
22 Future<String> getContent(Transform transform, AssetId id) =>
23 transform.getInput(id).then((asset) => asset.readAsString());
24
25 /**
26 * Parses an HTML file [contents] and returns a DOM-like tree. Adds emitted
27 * error/warning to [logger].
28 */
29 Document parseHtml(String contents, String sourcePath, TransformLogger logger,
30 {bool checkDocType: true}) {
31 // TODO(jmesserly): make HTTP encoding configurable
32 var parser = new HtmlParser(contents, encoding: 'utf8', generateSpans: true,
33 sourceUrl: sourcePath);
34 var document = parser.parse();
35
36 // Note: errors aren't fatal in HTML (unless strict mode is on).
37 // So just print them as warnings.
38 for (var e in parser.errors) {
39 if (checkDocType || e.errorCode != 'expected-doctype-but-got-start-tag') {
40 logger.warning(e.message, e.span);
41 }
42 }
43 return document;
44 }
45
46 /** Create an [AssetId] for a [url] seen in the [source] asset. */
47 // TODO(sigmund): delete once this is part of barback (dartbug.com/12610)
48 AssetId resolve(AssetId source, String url, TransformLogger logger, Span span) {
49 if (url == null || url == '') return null;
50 var uri = Uri.parse(url);
51 if (uri.host != '' || uri.scheme != '' || path.isAbsolute(url)) {
52 logger.error('absolute paths not allowed: "$url"', span);
53 return null;
54 }
55
56 var package;
57 var targetPath;
58 var segments = path.split(url);
59 if (segments[0] == 'packages') {
60 if (segments.length < 3) {
61 logger.error("incomplete packages/ path. It should have at least 3 "
62 "segments packages/name/path-from-name's-lib-dir", span);
63 return null;
64 }
65 package = segments[1];
66 targetPath = path.join('lib', path.joinAll(segments.sublist(2)));
67 } else if (segments[0] == 'assets') {
68 if (segments.length < 3) {
69 logger.error("incomplete assets/ path. It should have at least 3 "
70 "segments assets/name/path-from-name's-asset-dir", span);
71 }
72 package = segments[1];
73 targetPath = path.join('asset', path.joinAll(segments.sublist(2)));
74 } else {
75 package = source.package;
76 targetPath = path.normalize(path.join(path.dirname(source.path), url));
77 }
78 return new AssetId(package, targetPath);
79 }
OLDNEW
« 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