Index: client/html/scripts/html_doc.dart |
diff --git a/client/html/scripts/html_doc.dart b/client/html/scripts/html_doc.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..aa15d7dd9044e0f1ef98feb061063c75ebebbdf1 |
--- /dev/null |
+++ b/client/html/scripts/html_doc.dart |
@@ -0,0 +1,105 @@ |
+// Copyright (c) 2011, 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. |
+ |
+/** |
+ * A script to document the HTML library, including annotations on the mapping |
+ * to and from the DOM library. To use it, from utils/dartdoc, run: |
+ * |
+ * $ htmldoc |
+ * |
+ * This works just like `dartdoc html`, with the additions of the DOM/HTML |
+ * mapping documentation. |
+ */ |
+#library('html_doc'); |
+ |
+#import('html_diff.dart'); |
+#import('../../../frog/lang.dart'); |
+#import('../../../frog/file_system_node.dart'); |
+#import('../../../frog/file_system.dart'); |
+#import('../../../utils/dartdoc/dartdoc.dart', prefix: 'doc'); |
+ |
+HtmlDiff _diff; |
+ |
+void main() { |
+ var files = new NodeFileSystem(); |
+ parseOptions('../../frog', [] /* args */, files); |
+ initializeWorld(files); |
+ doc.initializeDartDoc(); |
+ HtmlDiff.initialize(); |
+ |
+ _diff = new HtmlDiff(); |
+ _diff.run(); |
+ world.reset(); |
+ |
+ doc.addMethodDocumenter(addMemberDoc); |
+ doc.addFieldDocumenter(addMemberDoc); |
+ doc.addTypeDocumenter(addTypeDoc); |
+ doc.document('html'); |
+} |
+ |
+// TODO(nweiz): document this file |
+ |
+String _linkMember(Member member) { |
+ final typeName = member.declaringType.name; |
+ var memberName = "$typeName.${member.name}"; |
+ if (member.isConstructor || member.isFactory) { |
+ final separator = member.constructorName == '' ? '' : '.'; |
+ memberName = 'new $typeName$separator${member.constructorName}'; |
+ } else if (member.name.startsWith('get:')) { |
+ memberName = "$typeName.${member.name.substring(4)}"; |
+ } |
+ |
+ return "[$memberName](../${doc.memberUrl(member)})"; |
+} |
+ |
+String _linkType(Type type) => "[${type.name}](../${doc.typeUrl(type)})"; |
+ |
+/** |
+ * Unify getters and setters of the same property. We only want to print |
+ * explicit setters if no getter exists. |
+ */ |
+Set<Member> _unifyProperties(Set<Member> members) { |
+ // Only print setters if the getter doesn't exist. |
+ return members.filter((m) { |
+ if (!m.name.startsWith('set:')) return true; |
+ var getName = m.name.replaceFirst('set:', 'get:'); |
+ return !members.some((maybeGet) => maybeGet.name == getName); |
+ }); |
+} |
+ |
+String addMemberDoc(Member member) { |
+ if (_diff.domToHtml.containsKey(member)) { |
+ final htmlMemberSet = _unifyProperties(_diff.domToHtml[member]); |
+ final allSameName = htmlMemberSet.every((m) => _diff.sameName(member, m)); |
+ final phrase = allSameName ? "available as" : "renamed to"; |
+ final htmlMembers = doc.joinWithCommas(map(htmlMemberSet, _linkMember)); |
+ return "_This is $phrase $htmlMembers in the " + |
+ "[dart:html](../html.html) library._"; |
+ } else if (_diff.htmlToDom.containsKey(member)) { |
+ final domMemberSet = _unifyProperties(_diff.htmlToDom[member]); |
+ final allSameName = domMemberSet.every((m) => _diff.sameName(m, member)); |
+ final phrase = allSameName ? "is the same as" : "renames"; |
+ final domMembers = doc.joinWithCommas(map(domMemberSet, _linkMember)); |
+ return "_This $phrase $domMembers in the [dart:dom](../dom.html) " + |
+ "library._"; |
+ } else { |
+ return ""; |
+ } |
+} |
+ |
+String addTypeDoc(Type type) { |
+ if (_diff.domTypesToHtml.containsKey(type)) { |
+ var htmlTypes = doc.joinWithCommas( |
+ map(_diff.domTypesToHtml[type], _linkType)); |
+ return "_This corresponds to $htmlTypes in the [dart:html](../html.html) " + |
+ "library._"; |
+ } else if (_diff.htmlTypesToDom.containsKey(type)) { |
+ var domTypes = doc.joinWithCommas( |
+ map(_diff.htmlTypesToDom[type], _linkType)); |
+ return "_This corresponds to $domTypes in the [dart:dom](../dom.html) " + |
+ "library._"; |
+ } else { |
+ return ""; |
+ } |
+} |