Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(83)

Side by Side Diff: client/html/scripts/html_doc.dart

Issue 8771054: Add a script to generate HTML and DOM docs with cross-links to one another. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Merge with HEAD Created 9 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file.
4
5 /**
6 * A script to document the HTML library, including annotations on the mapping
7 * to and from the DOM library. To use it, from utils/dartdoc, run:
8 *
9 * $ htmldoc
10 *
11 * This works just like `dartdoc html`, with the additions of the DOM/HTML
12 * mapping documentation.
13 */
14 #library('html_doc');
15
16 #import('html_diff.dart');
17 #import('../../../frog/lang.dart');
18 #import('../../../frog/file_system_node.dart');
19 #import('../../../frog/file_system.dart');
20 #import('../../../utils/dartdoc/dartdoc.dart', prefix: 'doc');
21
22 HtmlDiff _diff;
23
24 void main() {
25 var files = new NodeFileSystem();
26 parseOptions('../../frog', [] /* args */, files);
27 initializeWorld(files);
28 doc.initializeDartDoc();
29 HtmlDiff.initialize();
30
31 _diff = new HtmlDiff();
32 _diff.run();
33 world.reset();
34
35 doc.registerMethodCallback(addMemberDoc);
36 doc.registerFieldCallback(addMemberDoc);
37 doc.registerTypeCallback(addTypeDoc);
38 doc.document('html');
39 }
40
41 String _linkMember(Member member) {
42 final typeName = member.declaringType.name;
43 var memberName = "$typeName.${member.name}";
44 if (member.isConstructor || member.isFactory) {
45 final separator = member.constructorName == '' ? '' : '.';
46 memberName = 'new $typeName$separator${member.constructorName}';
47 } else if (member.name.startsWith('get:')) {
48 memberName = "$typeName.${member.name.substring(4)}";
49 }
50
51 return "[$memberName](../${doc.memberUrl(member)})";
52 }
53
54 String _linkType(Type type) => "[${type.name}](../${doc.typeUrl(type)})";
55
56 /**
57 * Unify getters and setters of the same property. We only want to print
58 * explicit setters if no getter exists.
59 */
60 Set<Member> _unifyProperties(Set<Member> members) {
61 // Only print setters if the getter doesn't exist.
62 return members.filter((m) {
63 if (!m.name.startsWith('set:')) return true;
64 var getName = m.name.replaceFirst('set:', 'get:');
65 return !members.some((maybeGet) => maybeGet.name == getName);
66 });
67 }
68
69 String addMemberDoc(Member member) {
70 if (_diff.domToHtml.containsKey(member)) {
71 final htmlMemberSet = _unifyProperties(_diff.domToHtml[member]);
72 final allSameName = htmlMemberSet.every((m) => _diff.sameName(member, m));
73 final phrase = allSameName ? "available as" : "renamed to";
74 final htmlMembers = doc.joinWithCommas(map(htmlMemberSet, _linkMember));
75 return "_This is $phrase $htmlMembers in the " +
76 "[dart:html](../html.html) library._";
77 } else if (_diff.htmlToDom.containsKey(member)) {
78 final domMemberSet = _unifyProperties(_diff.htmlToDom[member]);
79 final allSameName = domMemberSet.every((m) => _diff.sameName(m, member));
80 final phrase = allSameName ? "is the same as" : "renames";
81 final domMembers = doc.joinWithCommas(map(domMemberSet, _linkMember));
82 return "_This $phrase $domMembers in the [dart:dom](../dom.html) " +
83 "library._";
84 } else {
85 return "";
86 }
87 }
88
89 String addTypeDoc(Type type) {
90 if (_diff.domTypesToHtml.containsKey(type)) {
91 var htmlTypes = doc.joinWithCommas(
92 map(_diff.domTypesToHtml[type], _linkType));
93 return "_This corresponds to $htmlTypes in the [dart:html](../html.html) " +
94 "library._";
95 } else if (_diff.htmlTypesToDom.containsKey(type)) {
96 var domTypes = doc.joinWithCommas(
97 map(_diff.htmlTypesToDom[type], _linkType));
98 return "_This corresponds to $domTypes in the [dart:dom](../dom.html) " +
99 "library._";
100 } else {
101 return "";
102 }
103 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698