OLD | NEW |
(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 } |
OLD | NEW |