Chromium Code Reviews| 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 ""; |
| + } |
| +} |