| Index: packages/polymer/tool/create_message_details_page.dart
 | 
| diff --git a/packages/polymer/tool/create_message_details_page.dart b/packages/polymer/tool/create_message_details_page.dart
 | 
| deleted file mode 100644
 | 
| index d3db18616c0dfe347cec3494cc1e2cac965f1141..0000000000000000000000000000000000000000
 | 
| --- a/packages/polymer/tool/create_message_details_page.dart
 | 
| +++ /dev/null
 | 
| @@ -1,286 +0,0 @@
 | 
| -// Copyright (c) 2014, 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.
 | 
| -
 | 
| -/// Simple script to generate a page summarizing all error messages produces by
 | 
| -/// the polymer compiler code. The generated code will be placed directly under
 | 
| -/// the `polymer/lib/src/generated` folder. This script should be invoked from
 | 
| -/// the root of the polymer package either by doing:
 | 
| -///
 | 
| -///    dart tool/create_message_details_page.dart
 | 
| -///
 | 
| -/// or
 | 
| -///
 | 
| -///    pub run tool/create_message_details_page
 | 
| -library polymer.tool.create_message_details_page;
 | 
| -
 | 
| -import 'dart:io';
 | 
| -import 'dart:mirrors';
 | 
| -
 | 
| -import 'package:code_transformers/messages/messages.dart';
 | 
| -import 'package:code_transformers/src/messages.dart' as m1; // used via mirrors
 | 
| -import 'package:observe/src/messages.dart' as m2; // used via mirrors
 | 
| -import 'package:polymer/src/build/messages.dart' as m3; // used via mirrors
 | 
| -import 'package:web_components/build/messages.dart' as m4; // used via mirrors
 | 
| -import 'package:markdown/markdown.dart';
 | 
| -import 'package:path/path.dart' as path;
 | 
| -import 'package:args/args.dart';
 | 
| -
 | 
| -main(args) {
 | 
| -  var options = _parseOptions(args);
 | 
| -  var seen = {};
 | 
| -  var templates = [];
 | 
| -  _getMessagesFrom(#polymer.src.build.messages, seen, templates);
 | 
| -  _getMessagesFrom(#code_transformers.src.messages, seen, templates);
 | 
| -  _getMessagesFrom(#observe.src.messages, seen, templates);
 | 
| -  _getMessagesFrom(#web_components.build.messages, seen, templates);
 | 
| -
 | 
| -  templates.sort((a, b) => a.id.compareTo(b.id));
 | 
| -  var sb = new StringBuffer();
 | 
| -  bool forSite = options['site'];
 | 
| -  var out = path.join(path.current, options['out']);
 | 
| -  var ext = forSite ? '.markdown' : '.html';
 | 
| -  if (!out.endsWith(ext)) {
 | 
| -    print('error: expected to have a $ext extension.');
 | 
| -    exit(1);
 | 
| -  }
 | 
| -
 | 
| -  sb.write(forSite ? _SITE_HEADER : _LOCAL_HEADER);
 | 
| -
 | 
| -  var lastPackage = '';
 | 
| -  for (var t in templates) {
 | 
| -    if (lastPackage != t.id.package) {
 | 
| -      lastPackage = t.id.package;
 | 
| -      var sectionTitle = '## Messages from package `$lastPackage`\n\n----\n\n';
 | 
| -      sb.write(forSite ? sectionTitle : markdownToHtml(sectionTitle));
 | 
| -    }
 | 
| -    _generateMessage(t, forSite, sb);
 | 
| -  }
 | 
| -  sb.write(forSite ? '' : _LOCAL_FOOTER);
 | 
| -  new File(out).writeAsStringSync(sb.toString());
 | 
| -  print('updated: ${options["out"]}');
 | 
| -}
 | 
| -
 | 
| -final _mirrors = currentMirrorSystem();
 | 
| -
 | 
| -_getMessagesFrom(Symbol libName, Map seen, List templates) {
 | 
| -  var lib = _mirrors.findLibrary(libName);
 | 
| -  lib.declarations.forEach((symbol, decl) {
 | 
| -    if (decl is! VariableMirror) return;
 | 
| -    var template = lib.getField(symbol).reflectee;
 | 
| -    var name = MirrorSystem.getName(symbol);
 | 
| -    if (template is! MessageTemplate) return;
 | 
| -    var id = template.id;
 | 
| -    if (seen.containsKey(id)) {
 | 
| -      print('error: duplicate id `$id`. '
 | 
| -          'Currently set for both `$name` and `${seen[id]}`.');
 | 
| -    }
 | 
| -    seen[id] = name;
 | 
| -    templates.add(template);
 | 
| -  });
 | 
| -}
 | 
| -
 | 
| -_generateMessage(MessageTemplate template, bool forSite, StringBuffer sb) {
 | 
| -  var details =
 | 
| -      template.details == null ? 'No details available' : template.details;
 | 
| -  if (forSite) details = '{% raw %}$details{% endraw %}';
 | 
| -  var id = template.id;
 | 
| -  var hashTag = '${id.package}_${id.id}';
 | 
| -  var title = '### ${template.description} [#${id.id}](#$hashTag)';
 | 
| -  var body = '\n$details\n\n----\n\n';
 | 
| -  // We add the anchor inside the <h3> title, otherwise the link doesn't work.
 | 
| -  if (forSite) {
 | 
| -    sb
 | 
| -      ..write(title)
 | 
| -      ..write('\n{: #$hashTag}\n')
 | 
| -      ..write(body);
 | 
| -  } else {
 | 
| -    var html = markdownToHtml('$title$body').replaceFirst('<hr', '</div><hr');
 | 
| -    sb.write('\n\n<div id="$hashTag">$html');
 | 
| -  }
 | 
| -}
 | 
| -
 | 
| -_parseOptions(args) {
 | 
| -  var parser = new ArgParser(allowTrailingOptions: true)
 | 
| -    ..addOption('out',
 | 
| -        abbr: 'o',
 | 
| -        defaultsTo: 'lib/src/build/generated/messages.html',
 | 
| -        help: 'the output file path')
 | 
| -    ..addFlag('site',
 | 
| -        abbr: 's',
 | 
| -        negatable: false,
 | 
| -        help: 'generate contents for the dartlang.org site')
 | 
| -    ..addFlag('help', abbr: 'h', negatable: false);
 | 
| -
 | 
| -  var options = parser.parse(args);
 | 
| -  if (options['help']) {
 | 
| -    var command = Platform.script.path;
 | 
| -    var relPath = path.relative(command, from: path.current);
 | 
| -    if (!relPath.startsWith('../')) command = relPath;
 | 
| -    print('usage: dart $command [-o path_to_output_file] [-s]');
 | 
| -    print(parser.getUsage());
 | 
| -    exit(0);
 | 
| -  }
 | 
| -  return options;
 | 
| -}
 | 
| -
 | 
| -const _SITE_HEADER = '''
 | 
| ----
 | 
| -# WARNING: GENERATED FILE. DO NOT EDIT.
 | 
| -#
 | 
| -#   This file was generated automatically from the polymer package.
 | 
| -#   To regenerate this file, from the top directory of the polymer package run:
 | 
| -#
 | 
| -#     dart tool/create_message_details_page.dart -s -o path_to_this_file
 | 
| -layout: default
 | 
| -title: "Error Messages"
 | 
| -subsite: "Polymer.dart"
 | 
| -description: "Details about error messages from polymer and related packages."
 | 
| ----
 | 
| -
 | 
| -{% include breadcrumbs.html %}
 | 
| -
 | 
| -# {{ page.title }}
 | 
| -
 | 
| -<style>
 | 
| -h3 > a {
 | 
| -  display: none;
 | 
| -}
 | 
| -
 | 
| -h3:hover > a {
 | 
| -  display: inline;
 | 
| -}
 | 
| -
 | 
| -</style>
 | 
| -
 | 
| -
 | 
| -This page contains a list of error messages produced during `pub build` and `pub
 | 
| -serve` by transformers in polymer and its related packages. You can find here
 | 
| -additional details that can often help you figure out how to fix the underlying
 | 
| -problem.
 | 
| -
 | 
| -
 | 
| -''';
 | 
| -
 | 
| -const _LOCAL_HEADER = '''
 | 
| -<!doctype html>
 | 
| -<!--
 | 
| -  This file is autogenerated with polymer/tool/create_message_details_page.dart
 | 
| --->
 | 
| -<html>
 | 
| -<style>
 | 
| -@font-face {
 | 
| -  font-family: 'Montserrat';
 | 
| -  font-style: normal;
 | 
| -  font-weight: 400;
 | 
| -  src: url(https://themes.googleusercontent.com/static/fonts/montserrat/v4/zhcz-_WihjSQC0oHJ9TCYL3hpw3pgy2gAi-Ip7WPMi0.woff) format('woff');
 | 
| -}
 | 
| -@font-face {
 | 
| -  font-family: 'Montserrat';
 | 
| -  font-style: normal;
 | 
| -  font-weight: 700;
 | 
| -  src: url(https://themes.googleusercontent.com/static/fonts/montserrat/v4/IQHow_FEYlDC4Gzy_m8fcnbFhgvWbfSbdVg11QabG8w.woff) format('woff');
 | 
| -}
 | 
| -@font-face {
 | 
| -  font-family: 'Roboto';
 | 
| -  font-style: normal;
 | 
| -  font-weight: 300;
 | 
| -  src: url(https://themes.googleusercontent.com/static/fonts/roboto/v10/Hgo13k-tfSpn0qi1SFdUfbO3LdcAZYWl9Si6vvxL-qU.woff) format('woff');
 | 
| -}
 | 
| -@font-face {
 | 
| -  font-family: 'Roboto';
 | 
| -  font-style: normal;
 | 
| -  font-weight: 400;
 | 
| -  src: url(https://themes.googleusercontent.com/static/fonts/roboto/v10/CrYjSnGjrRCn0pd9VQsnFOvvDin1pK8aKteLpeZ5c0A.woff) format('woff');
 | 
| -}
 | 
| -
 | 
| -body {
 | 
| -  width: 80vw;
 | 
| -  margin: 20px;
 | 
| -  font-family: Roboto, sans-serif;
 | 
| -  background-color: #f0f0f0;
 | 
| -}
 | 
| -
 | 
| -h2 {
 | 
| -  font-family: Montserrat, sans-serif;
 | 
| -  box-sizing: border-box;
 | 
| -  color: rgb(72, 72, 72);
 | 
| -  display: block;
 | 
| -  font-style: normal;
 | 
| -  font-variant: normal;
 | 
| -  font-weight: normal;
 | 
| -}
 | 
| -
 | 
| -div:target {
 | 
| -  background-color: #fff;
 | 
| -  border: 1px solid #888;
 | 
| -  border-radius: 5px;
 | 
| -  padding: 0px 10px 2px 10px;
 | 
| -  box-shadow: 7px 7px 5px #888888;
 | 
| -  margin-bottom: 15px;
 | 
| -}
 | 
| -
 | 
| -
 | 
| -h3 {
 | 
| -  font-family: Montserrat, sans-serif;
 | 
| -  box-sizing: border-box;
 | 
| -  color: rgb(72, 72, 72);
 | 
| -  display: block;
 | 
| -  font-style: normal;
 | 
| -  font-variant: normal;
 | 
| -  font-weight: normal;
 | 
| -}
 | 
| -
 | 
| -div:target > h3 {
 | 
| -  font-weight: bold;
 | 
| -}
 | 
| -
 | 
| -pre {
 | 
| -  display: block;
 | 
| -  padding: 9.5px;
 | 
| -  margin: 0 0 10px;
 | 
| -  color: #333;
 | 
| -  word-break: break-all;
 | 
| -  word-wrap: break-word;
 | 
| -  background-color: #f5f5f5;
 | 
| -  border: 1px solid #ccc;
 | 
| -  border-radius: 4px;
 | 
| -}
 | 
| -
 | 
| -code {
 | 
| -   font-family: Menlo,Monaco,Consolas,"Courier New",monospace;
 | 
| -   box-sizing: border-box;
 | 
| -   padding: 0;
 | 
| -   font-size: 90%;
 | 
| -   color: #0084c5;
 | 
| -   white-space: nowrap;
 | 
| -   border-radius: 4px;
 | 
| -   background-color: #f9f2f4;
 | 
| -}
 | 
| -
 | 
| -pre code {
 | 
| -   white-space: inherit;
 | 
| -   color: inherit;
 | 
| -   background-color: inherit;
 | 
| -}
 | 
| -
 | 
| -a {
 | 
| -  color: rgb(42, 100, 150);
 | 
| -}
 | 
| -
 | 
| -h3 > a {
 | 
| -  display: none;
 | 
| -  font-size: 0.8em;
 | 
| -}
 | 
| -
 | 
| -h3:hover > a {
 | 
| -  display: inline;
 | 
| -}
 | 
| -</style>
 | 
| -<body>
 | 
| -''';
 | 
| -
 | 
| -const _LOCAL_FOOTER = '''
 | 
| -</body>
 | 
| -</html>
 | 
| -''';
 | 
| 
 |