| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 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. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 /** | 5 /** |
| 6 * This generates the reference documentation for the core libraries that come | 6 * This generates the reference documentation for the core libraries that come |
| 7 * with dart. It is built on top of dartdoc, which is a general-purpose library | 7 * with dart. It is built on top of dartdoc, which is a general-purpose library |
| 8 * for generating docs from any Dart code. This library extends that to include | 8 * for generating docs from any Dart code. This library extends that to include |
| 9 * additional information and styling specific to our standard library. | 9 * additional information and styling specific to our standard library. |
| 10 * | 10 * |
| 11 * Usage: | 11 * Usage: |
| 12 * | 12 * |
| 13 * $ dart apidoc.dart [--out=<output directory>] | 13 * $ dart apidoc.dart [--out=<output directory>] |
| 14 */ | 14 */ |
| 15 library apidoc; | 15 library apidoc; |
| 16 | 16 |
| 17 import 'dart:async'; |
| 17 import 'dart:io'; | 18 import 'dart:io'; |
| 18 import 'dart:json'; | 19 import 'dart:json' as json; |
| 19 import 'html_diff.dart'; | 20 import 'html_diff.dart'; |
| 20 // TODO(rnystrom): Use "package:" URL (#4968). | 21 // TODO(rnystrom): Use "package:" URL (#4968). |
| 21 import '../../sdk/lib/_internal/compiler/implementation/mirrors/mirrors.dart'; | 22 import '../../sdk/lib/_internal/compiler/implementation/mirrors/mirrors.dart'; |
| 22 import '../../sdk/lib/_internal/compiler/implementation/mirrors/mirrors_util.dar
t'; | 23 import '../../sdk/lib/_internal/compiler/implementation/mirrors/mirrors_util.dar
t'; |
| 23 import '../../sdk/lib/_internal/dartdoc/lib/dartdoc.dart' as doc; | 24 import '../../sdk/lib/_internal/dartdoc/lib/dartdoc.dart' as doc; |
| 24 import '../../sdk/lib/_internal/libraries.dart'; | 25 import '../../sdk/lib/_internal/libraries.dart'; |
| 25 | 26 |
| 26 HtmlDiff _diff; | 27 HtmlDiff _diff; |
| 27 | 28 |
| 28 void main() { | 29 void main() { |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 80 doc.scriptDir.append('../../sdk/lib/_internal/dartdoc/static'), | 81 doc.scriptDir.append('../../sdk/lib/_internal/dartdoc/static'), |
| 81 outputDir); | 82 outputDir); |
| 82 | 83 |
| 83 // The apidoc-specific static content. | 84 // The apidoc-specific static content. |
| 84 final copiedApiDocStatic = doc.copyDirectory( | 85 final copiedApiDocStatic = doc.copyDirectory( |
| 85 doc.scriptDir.append('static'), | 86 doc.scriptDir.append('static'), |
| 86 outputDir); | 87 outputDir); |
| 87 | 88 |
| 88 print('Parsing MDN data...'); | 89 print('Parsing MDN data...'); |
| 89 final mdnFile = new File.fromPath(doc.scriptDir.append('mdn/database.json')); | 90 final mdnFile = new File.fromPath(doc.scriptDir.append('mdn/database.json')); |
| 90 final mdn = JSON.parse(mdnFile.readAsStringSync()); | 91 final mdn = json.parse(mdnFile.readAsStringSync()); |
| 91 | 92 |
| 92 print('Cross-referencing dart:html...'); | 93 print('Cross-referencing dart:html...'); |
| 93 HtmlDiff.initialize(libPath); | 94 HtmlDiff.initialize(libPath); |
| 94 _diff = new HtmlDiff(printWarnings:false); | 95 _diff = new HtmlDiff(printWarnings:false); |
| 95 _diff.run(); | 96 _diff.run(); |
| 96 | 97 |
| 97 // Process handwritten HTML documentation. | 98 // Process handwritten HTML documentation. |
| 98 print('Processing handwritten HTML documentation...'); | 99 print('Processing handwritten HTML documentation...'); |
| 99 final htmldoc = new Htmldoc(); | 100 final htmldoc = new Htmldoc(); |
| 100 htmldoc.includeApi = true; | 101 htmldoc.includeApi = true; |
| (...skipping 376 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 477 // If it's an HTML type, try to map it to a base DOM type so we can find | 478 // If it's an HTML type, try to map it to a base DOM type so we can find |
| 478 // the MDN docs. | 479 // the MDN docs. |
| 479 final domTypes = _diff.htmlTypesToDom[type.qualifiedName]; | 480 final domTypes = _diff.htmlTypesToDom[type.qualifiedName]; |
| 480 | 481 |
| 481 // Couldn't find a DOM type. | 482 // Couldn't find a DOM type. |
| 482 if ((domTypes == null) || (domTypes.length != 1)) return null; | 483 if ((domTypes == null) || (domTypes.length != 1)) return null; |
| 483 | 484 |
| 484 // Use the corresponding DOM type when searching MDN. | 485 // Use the corresponding DOM type when searching MDN. |
| 485 // TODO(rnystrom): Shame there isn't a simpler way to get the one item | 486 // TODO(rnystrom): Shame there isn't a simpler way to get the one item |
| 486 // out of a singleton Set. | 487 // out of a singleton Set. |
| 487 typeString = domTypes.iterator().next(); | 488 // TODO(floitsch): switch to domTypes.first, once that's implemented. |
| 489 var iter = domTypes.iterator; |
| 490 iter.moveNext(); |
| 491 typeString = iter.current; |
| 488 } else { | 492 } else { |
| 489 // Not a DOM type. | 493 // Not a DOM type. |
| 490 return null; | 494 return null; |
| 491 } | 495 } |
| 492 | 496 |
| 493 final mdnType = mdn[typeString]; | 497 final mdnType = mdn[typeString]; |
| 494 if (mdnType == null) return null; | 498 if (mdnType == null) return null; |
| 495 if (mdnType['skipped'] != null) return null; | 499 if (mdnType['skipped'] != null) return null; |
| 496 if (mdnType['summary'] == null) return null; | 500 if (mdnType['summary'] == null) return null; |
| 497 if (mdnType['summary'].trim().isEmpty) return null; | 501 if (mdnType['summary'].trim().isEmpty) return null; |
| (...skipping 13 matching lines...) Expand all Loading... |
| 511 // If it's an HTML type, try to map it to a DOM type name so we can find | 515 // If it's an HTML type, try to map it to a DOM type name so we can find |
| 512 // the MDN docs. | 516 // the MDN docs. |
| 513 final domMembers = _diff.htmlToDom[member.qualifiedName]; | 517 final domMembers = _diff.htmlToDom[member.qualifiedName]; |
| 514 | 518 |
| 515 // Couldn't find a DOM type. | 519 // Couldn't find a DOM type. |
| 516 if ((domMembers == null) || (domMembers.length != 1)) return null; | 520 if ((domMembers == null) || (domMembers.length != 1)) return null; |
| 517 | 521 |
| 518 // Use the corresponding DOM member when searching MDN. | 522 // Use the corresponding DOM member when searching MDN. |
| 519 // TODO(rnystrom): Shame there isn't a simpler way to get the one item | 523 // TODO(rnystrom): Shame there isn't a simpler way to get the one item |
| 520 // out of a singleton Set. | 524 // out of a singleton Set. |
| 521 memberString = domMembers.iterator().next(); | 525 // TODO(floitsch): switch to domTypes.first, once that's implemented. |
| 526 var iter = domMembers.iterator; |
| 527 iter.moveNext(); |
| 528 memberString = iter.current; |
| 522 } else { | 529 } else { |
| 523 // Not a DOM type. | 530 // Not a DOM type. |
| 524 return null; | 531 return null; |
| 525 } | 532 } |
| 526 | 533 |
| 527 // Ignore top-level functions. | 534 // Ignore top-level functions. |
| 528 if (member.isTopLevel) return null; | 535 if (member.isTopLevel) return null; |
| 529 | 536 |
| 530 var mdnMember = null; | 537 var mdnMember = null; |
| 531 var mdnType = null; | 538 var mdnType = null; |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 582 return ''' | 589 return ''' |
| 583 <div class="mdn"> | 590 <div class="mdn"> |
| 584 $mdnComment | 591 $mdnComment |
| 585 <div class="mdn-note"><a href="$mdnUrl">from MDN</a></div> | 592 <div class="mdn-note"><a href="$mdnUrl">from MDN</a></div> |
| 586 </div> | 593 </div> |
| 587 '''; | 594 '''; |
| 588 } | 595 } |
| 589 | 596 |
| 590 String toString() => mdnComment; | 597 String toString() => mdnComment; |
| 591 } | 598 } |
| OLD | NEW |