| Index: dart/pkg/polymer/lib/src/build/common.dart | 
| =================================================================== | 
| --- dart/pkg/polymer/lib/src/build/common.dart	(revision 37358) | 
| +++ dart/pkg/polymer/lib/src/build/common.dart	(working copy) | 
| @@ -18,20 +18,28 @@ | 
| import 'package:observe/transformer.dart' show ObservableTransformer; | 
| import 'package:source_maps/span.dart' show Span; | 
|  | 
| +const _ignoredErrors = const [ | 
| +  'unexpected-dash-after-double-dash-in-comment', | 
| +  'unexpected-char-in-comment', | 
| +]; | 
| + | 
| /// 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}) { | 
| +    {bool checkDocType: true, bool showWarnings: true}) { | 
| // TODO(jmesserly): make HTTP encoding configurable | 
| -  var parser = new HtmlParser(contents, encoding: 'utf8', generateSpans: true, | 
| -      sourceUrl: sourcePath); | 
| +  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, span: e.span); | 
| +  if (showWarnings) { | 
| +    for (var e in parser.errors) { | 
| +      if (_ignoredErrors.contains(e.errorCode)) continue; | 
| +      if (checkDocType || e.errorCode != 'expected-doctype-but-got-start-tag') { | 
| +        logger.warning(e.message, span: e.span); | 
| +      } | 
| } | 
| } | 
| return document; | 
| @@ -99,13 +107,15 @@ | 
| }); | 
| } | 
|  | 
| -  Future<Document> readAsHtml(AssetId id, Transform transform) { | 
| +  Future<Document> readAsHtml(AssetId id, Transform transform, | 
| +      {bool showWarnings: true}) { | 
| var primaryId = transform.primaryInput.id; | 
| bool samePackage = id.package == primaryId.package; | 
| var url = spanUrlFor(id, transform); | 
| return transform.readInputAsString(id).then((content) { | 
| return _parseHtml(content, url, transform.logger, | 
| -        checkDocType: samePackage && options.isHtmlEntryPoint(id)); | 
| +        checkDocType: samePackage && options.isHtmlEntryPoint(id), | 
| +        showWarnings: showWarnings); | 
| }); | 
| } | 
|  | 
| @@ -172,22 +182,6 @@ | 
| return path.posix.joinAll(path.split(assetPath)); | 
| } | 
|  | 
| - | 
| -/// Parse [code] using analyzer. | 
| -CompilationUnit parseCompilationUnit(String code) { | 
| -  var errorListener = new _ErrorCollector(); | 
| -  var reader = new CharSequenceReader(code); | 
| -  var scanner = new Scanner(null, reader, errorListener); | 
| -  var token = scanner.tokenize(); | 
| -  var parser = new Parser(null, errorListener); | 
| -  return parser.parseCompilationUnit(token); | 
| -} | 
| - | 
| -class _ErrorCollector extends AnalysisErrorListener { | 
| -  final errors = <AnalysisError>[]; | 
| -  onError(error) => errors.add(error); | 
| -} | 
| - | 
| /// These names have meaning in SVG or MathML, so they aren't allowed as custom | 
| /// tags. See [isCustomTagName]. | 
| const invalidTagNames = const { | 
|  |