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..4db268d6f3109f5cb07bacc6ae3d554af1981ef1 |
--- /dev/null |
+++ b/client/html/scripts/html_doc.dart |
@@ -0,0 +1,95 @@ |
+// 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. This needs to be run from the |
Bob Nystrom
2011/12/06 23:11:23
To document what about the HTML library? For a scr
|
+ * utils/dartdoc directory. |
Bob Nystrom
2011/12/06 23:11:23
I'd move this into dartdoc. I know it's specific t
nweiz
2011/12/07 19:26:56
Moving this into dartdoc runs into the same proble
|
+ */ |
+#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() { |
+ HtmlDiff.initWorld('../../frog', new NodeFileSystem()); |
+ doc.initializeDartDoc(); |
+ _diff = new HtmlDiff(); |
+ _diff.run(); |
+ |
+ process.argv[2] = 'dart:html'; |
Bob Nystrom
2011/12/06 23:11:23
This is pretty gross. Right now dartdoc isn't set
nweiz
2011/12/07 19:26:56
Done.
|
+ doc.registerMethodCallback(addMemberDoc); |
+ doc.registerFieldCallback(addMemberDoc); |
+ doc.registerTypeCallback(addTypeDoc); |
+ doc.main(); |
+} |
+ |
+String _andList(List<String> items) { |
Jacob
2011/12/06 22:38:14
nit: name _andList is a bit confusing. Maybe some
Bob Nystrom
2011/12/06 23:11:23
Dartdoc also has code that does this. Since you're
nweiz
2011/12/07 19:26:56
Done.
|
+ if (items.length == 1) return items[0]; |
+ if (items.length == 2) return "${items[0]} and ${items[1]}"; |
+ return Strings.join(items.getRange(0, items.length - 1), ', ') + |
+ ', and ' + items[items.length - 1]; |
+} |
+ |
+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)})"; |
Bob Nystrom
2011/12/06 23:11:23
Yay markdown!
|
+} |
+ |
+String _linkType(Type type) => "[${type.name}](../${doc.typeUrl(type)})"; |
+ |
+Set<Member> _mergeProps(Set<Member> members) { |
+ // Only print setters if the getter doesn't exist. |
Bob Nystrom
2011/12/06 23:11:23
Make this a doc comment. I'd name this something d
nweiz
2011/12/07 19:26:56
Done.
|
+ 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)) { |
+ var htmlMemberSet = _mergeProps(_diff.domToHtml[member]); |
Jacob
2011/12/06 22:38:14
nit: var ==> final
nweiz
2011/12/07 19:26:56
Done.
|
+ var phrase = htmlMemberSet.every((m) => _diff.sameName(member, m)) ? |
Bob Nystrom
2011/12/06 23:11:23
Some temporary variables would help here:
final b
nweiz
2011/12/07 19:26:56
I think it reads pretty well... "if every member h
|
+ "available as" : "renamed to"; |
+ var htmlMembers = _andList(map(htmlMemberSet, _linkMember)); |
+ return "_This is $phrase $htmlMembers in the " + |
+ "[dart:html](../html.html) library._"; |
+ } else if (_diff.htmlToDom.containsKey(member)) { |
+ var domMemberSet = _mergeProps(_diff.htmlToDom[member]); |
+ var phrase = domMemberSet.every((m) => _diff.sameName(m, member)) ? |
+ "is the same as" : "renames"; |
+ var domMembers = _andList(map(domMemberSet, _linkMember)); |
+ return "_This $phrase ${domMembers} in the [dart:dom](../dom.html) " + |
Jacob
2011/12/06 22:38:14
nit: personally i'd recommend violating the 80 cha
Bob Nystrom
2011/12/06 23:11:23
Don't need {} on domMembers.
nweiz
2011/12/07 19:26:56
That makes it harder to read in text editors that
nweiz
2011/12/07 19:26:56
Done.
|
+ "library._"; |
+ } else { |
+ return ""; |
+ } |
+} |
+ |
+String addTypeDoc(Type type) { |
+ if (_diff.domTypesToHtml.containsKey(type)) { |
+ var htmlTypes = _andList(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 = _andList(map(_diff.htmlTypesToDom[type], _linkType)); |
+ return "_This corresponds to $domTypes in the [dart:dom](../dom.html) " + |
+ "library._"; |
+ } else { |
+ return ""; |
+ } |
+} |