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

Side by Side Diff: utils/apidoc/mdn/prettyPrint.dart

Issue 1361163002: remove docgen remnants from repo, update CHANGELOG (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: remove unused code Created 5 years, 3 months 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
« no previous file with comments | « utils/apidoc/mdn/postProcess.dart ('k') | utils/apidoc/mdn/search.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 /**
2 * Creates database.html, examples.html, and obsolete.html.
3 */
4
5 library prettyPrint;
6
7 import 'dart:convert';
8 import 'dart:io';
9 import 'util.dart';
10
11 String orEmpty(String str) {
12 return str == null ? "" : str;
13 }
14
15 List<String> sortStringCollection(Iterable<String> collection) {
16 final out = <String>[];
17 out.addAll(collection);
18 out.sort((String a, String b) => a.compareTo(b));
19 return out;
20 }
21
22 int addMissing(StringBuffer sb, String type, Map members) {
23 int total = 0;
24 /**
25 * Add all missing members to the string output and return the number of
26 * missing members.
27 */
28 void addMissingHelper(String propType) {
29 Map expected = allProps[type][propType];
30 if (expected != null) {
31 for(final name in sortStringCollection(expected.keys)) {
32 if (!members.containsKey(name)) {
33 total++;
34 sb.write("""
35 <tr class="missing">
36 <td>$name</td>
37 <td></td>
38 <td>Could not find documentation for $propType</td>
39 </tr>
40 """);
41 }
42 }
43 }
44 }
45
46 addMissingHelper('properties');
47 addMissingHelper('methods');
48 addMissingHelper('constants');
49 return total;
50 }
51
52 void main() {
53 // Database of code documentation.
54 final Map<String, Map> database = JSON.decode(
55 new File('output/database.filtered.json').readAsStringSync());
56
57 // Types we have documentation for.
58 matchedTypes = new Set<String>();
59 int numMissingMethods = 0;
60 int numFoundMethods = 0;
61 int numExtraMethods = 0;
62 int numGen = 0;
63 int numSkipped = 0;
64 final sbSkipped = new StringBuffer();
65 final sbAllExamples = new StringBuffer();
66
67 // Table rows for all obsolete members.
68 final sbObsolete = new StringBuffer();
69 // Main documentation file.
70 final sb = new StringBuffer();
71
72 // TODO(jacobr): switch to using a real template system instead of string
73 // interpolation combined with StringBuffers.
74 sb.write("""
75 <html>
76 <head>
77 <style type="text/css">
78 body {
79 background-color: #eee;
80 margin: 10px;
81 font: 14px/1.428 "Lucida Grande", "Lucida Sans Unicode", Lucida,
82 Arial, Helvetica, sans-serif;
83 }
84
85 .debug {
86 color: #888;
87 }
88
89 .compatibility, .links, .see-also, .summary, .members, .example {
90 border: 1px solid #CCC;
91 margin: 5px;
92 padding: 5px;
93 }
94
95 .type, #dart_summary {
96 border: 1px solid;
97 margin-top: 10px;
98 margin-bottom: 10px;
99 padding: 10px;
100 overflow: hidden;
101 background-color: white;
102 -moz-box-shadow: 5px 5px 5px #888;
103 -webkit-box-shadow: 5px 5px 5px #888;
104 box-shadow: 5px 5px 5px #888;
105 }
106
107 #dart_summary {
108 border: 2px solid #00F;
109 margin: 5px;
110 padding: 5px;
111 }
112
113 th {
114 background-color:#ccc;
115 font-weight: bold;
116 }
117
118 tr:nth-child(odd) {
119 background-color:#eee;
120 }
121 tr:nth-child(even) {
122 background-color:#fff;
123 }
124
125 tr:nth-child(odd).unknown {
126 background-color:#dd0;
127 }
128 tr:nth-child(even).unknown {
129 background-color:#ff0;
130 }
131
132 tr:nth-child(odd).missing {
133 background-color:#d88;
134 }
135 tr:nth-child(even).missing {
136 background-color:#faa;
137 }
138
139 li.unknown {
140 color: #f00;
141 }
142
143 td, th {
144 vertical-align: top;
145 }
146 </style>
147 <title>Doc Dump</title>
148 </head>
149 <body>
150 <h1>Doc Dump</h1>
151 <ul>
152 <li><a href="#dart_summary">Summary</a></li>
153 </li>
154 """);
155 for (String type in sortStringCollection(database.keys)) {
156 final entry = database[type];
157 if (entry == null || entry.containsKey('skipped')) {
158 numSkipped++;
159 sbSkipped.write("""
160 <li id="$type">
161 <a target="_blank" href="http://www.google.com/cse?cx=01719397256594783026 6%3Awpqsk6dy6ee&ie=UTF-8&q=$type">
162 $type
163 </a>
164 --
165 Title: ${entry == null ? "???" : entry["title"]} -- Issue:
166 ${entry == null ? "???" : entry['cause']}
167 --
168 <a target="_blank" href="${entry == null ? "???" : entry["srcUrl"]}">
169 scraped url
170 </a>
171 </li>""");
172 continue;
173 }
174 matchedTypes.add(type);
175 numGen++;
176 StringBuffer sbSections = new StringBuffer();
177 StringBuffer sbMembers = new StringBuffer();
178 StringBuffer sbExamples = new StringBuffer();
179 if (entry.containsKey("members")) {
180 Map members = getMembersMap(entry);
181 sbMembers.write("""
182 <div class="members">
183 <h3><span class="debug">[dart]</span> Members</h3>
184 <table>
185 <tbody>
186 <tr>
187 <th>Name</th><th>Description</th><th>IDL</th><th>Status</th>
188 </tr>
189 """);
190 for (String name in sortStringCollection(members.keys)) {
191 Map memberData = members[name];
192 bool unknown = !hasAny(type, name);
193 StringBuffer classes = new StringBuffer();
194 if (unknown) classes.write("unknown ");
195 if (unknown) {
196 numExtraMethods++;
197 } else {
198 numFoundMethods++;
199 }
200
201 final sbMember = new StringBuffer();
202
203 if (memberData.containsKey('url')) {
204 sbMember.write("""
205 <td><a href="${memberData['url']}">$name</a></td>
206 """);
207 } else {
208 sbMember.write("""
209 <td>$name</td>
210 """);
211 }
212 sbMember.write("""
213 <td>${memberData['help']}</td>
214 <td>
215 <pre>${orEmpty(memberData['idl'])}</pre>
216 </td>
217 <td>${memberData['obsolete'] == true ? "Obsolete" : ""}</td>
218 """);
219 if (memberData['obsolete'] == true) {
220 sbObsolete.write("<tr class='$classes'><td>$type</td>$sbMember</tr>");
221 }
222 sbMembers.write("<tr class='$classes'>$sbMember</tr>");
223 }
224
225 numMissingMethods += addMissing(sbMembers, type, members);
226
227 sbMembers.write("""
228 </tbody>
229 </table>
230 </div>
231 """);
232 }
233 for (String sectionName in
234 ["summary", "constructor", "compatibility", "specification",
235 "seeAlso"]) {
236 if (entry.containsKey(sectionName)) {
237 sbSections.write("""
238 <div class="$sectionName">
239 <h3><span class="debug">[Dart]</span> $sectionName</h3>
240 ${entry[sectionName]}
241 </div>
242 """);
243 }
244 }
245 if (entry.containsKey("links")) {
246 sbSections.write("""
247 <div class="links">
248 <h3><span class="debug">[Dart]</span> Specification</h3>
249 <ul>
250 """);
251 List links = entry["links"];
252 for (Map link in links) {
253 sbSections.write("""
254 <li><a href="${link['href']}">${link['title']}</a></li>
255 """);
256 }
257 sbSections.write("""
258 </ul>
259 </div>
260 """);
261 }
262 if (entry.containsKey("examples")) {
263 for (String example in entry["examples"]) {
264 sbExamples.write("""
265 <div class="example">
266 <h3><span class="debug">[Dart]</span> Example</h3>
267 $example
268 </div>
269 """);
270 }
271 }
272
273 String title = entry['title'];
274 if (title != type) {
275 title = '<h4>Dart type: $type</h4><h2>$title</h2>';
276 } else {
277 title = '<h2>$title</h2>';
278 }
279 sb.write("""
280 <div class='type' id="$type">
281 <a href='${entry['srcUrl']}'>$title</a>
282 $sbSections
283 $sbExamples
284 $sbMembers
285 </div>
286 """);
287 if (sbExamples.length > 0) {
288 sbAllExamples.write("""
289 <div class='type' id="$type">
290 <a href='${entry['srcUrl']}'>$title</a>
291 $sbExamples
292 </div>
293 """);
294 }
295 }
296
297 for (String type in sortStringCollection(allProps.keys)) {
298 if (!matchedTypes.contains(type) &&
299 !database.containsKey(type)) {
300 numSkipped++;
301 sbSkipped.write("""
302 <li class="unknown" id="$type">
303 <a target="_blank" href="http://www.google.com/cse?cx=01719397256594783026 6%3Awpqsk6dy6ee&ie=UTF-8&q=$type">
304 $type
305 </a>
306 </li>
307 """);
308 }
309 }
310
311 sb.write("""
312 <div id="#dart_summary">
313 <h2>Summary</h2>
314 <h3>
315 Generated docs for $numGen classes out of a possible
316 ${allProps.keys.length}
317 </h3>
318 <h3>Found documentation for $numFoundMethods methods listed in WebKit</h3>
319 <h3>
320 Found documentation for $numExtraMethods methods not listed in WebKit
321 </h3>
322 <h3>
323 Unable to find documentation for $numMissingMethods methods present in
324 WebKit
325 </h3>
326 <h3>
327 Skipped generating documentation for $numSkipped classes due to no
328 plausible matching files
329 </h3>
330 <ul>
331 $sbSkipped
332 </ul>
333 </div>
334 """);
335 sb.write("""
336 </body>
337 </html>
338 """);
339
340 writeFileSync("output/database.html", sb.toString());
341
342 writeFileSync("output/examples.html", """
343 <html>
344 <head>
345 <style type="text/css">
346 body {
347 background-color: #eee;
348 margin: 10px;
349 font: 14px/1.428 "Lucida Grande", "Lucida Sans Unicode", Lucida, Arial,
350 Helvetica, sans-serif;
351 }
352
353 .debug {
354 color: #888;
355 }
356
357 .example {
358 border: 1px solid #CCC;
359 margin: 5px;
360 padding: 5px;
361 }
362
363 .type {
364 border: 1px solid;
365 margin-top: 10px;
366 margin-bottom: 10px;
367 padding: 10px;
368 overflow: hidden;
369 background-color: white;
370 -moz-box-shadow: 5px 5px 5px #888;
371 -webkit-box-shadow: 5px 5px 5px #888;
372 box-shadow: 5px 5px 5px #888;
373 }
374 </style>
375 <title>All examples</title>
376 </head>
377 <body>
378 <h1>All examples</h1>
379 $sbAllExamples
380 </body>
381 </html>
382 """);
383
384 writeFileSync("output/obsolete.html", """
385 <html>
386 <head>
387 <style type="text/css">
388 body {
389 background-color: #eee;
390 margin: 10px;
391 font: 14px/1.428 "Lucida Grande", "Lucida Sans Unicode", Lucida,
392 Arial, Helvetica, sans-serif;
393 }
394
395 .debug {
396 color: #888;
397 }
398
399 .type {
400 border: 1px solid;
401 margin-top: 10px;
402 margin-bottom: 10px;
403 padding: 10px;
404 overflow: hidden;
405 background-color: white;
406 -moz-box-shadow: 5px 5px 5px #888;
407 -webkit-box-shadow: 5px 5px 5px #888;
408 box-shadow: 5px 5px 5px #888;
409 }
410 </style>
411 <title>Methods marked as obsolete</title>
412 </head>
413 <body>
414 <h1>Methods marked as obsolete</h1>
415 <table>
416 <tbody>
417 <tr>
418 <th>Type</th>
419 <th>Name</th>
420 <th>Description</th>
421 <th>IDL</th>
422 <th>Status</th>
423 </tr>
424 $sbObsolete
425 </tbody>
426 </table>
427 </body>
428 </html>
429 """);
430 }
OLDNEW
« no previous file with comments | « utils/apidoc/mdn/postProcess.dart ('k') | utils/apidoc/mdn/search.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698