Chromium Code Reviews| Index: pkg/docgen/lib/docgen.dart |
| diff --git a/pkg/docgen/lib/docgen.dart b/pkg/docgen/lib/docgen.dart |
| index d75b60f6910434507e801f508b942d694a4d4623..46e280a075b6b0943e6915a67dcae16e0672e513 100644 |
| --- a/pkg/docgen/lib/docgen.dart |
| +++ b/pkg/docgen/lib/docgen.dart |
| @@ -42,11 +42,61 @@ var _outputDirectory; |
| const String USAGE = 'Usage: dart docgen.dart [OPTIONS] fooDir/barFile'; |
| - |
| List<String> skippedAnnotations = const [ |
| 'metadata.DocsEditable', '_js_helper.JSName', '_js_helper.Creates', |
| '_js_helper.Returns']; |
| +/// If we can't find the SDK introduction text, which will happen if running |
| +/// from a snapshot and using --parse-sdk or --include-sdk, then use this |
| +/// hard-coded version. This should be updated to be consistent with the text |
| +/// in docgen/doc/sdk-introduction.md |
| +const DEFAULT_SDK_INTRODUCTION = """ |
| +Welcome to the Dart API reference documentation, |
| +covering the official Dart API libraries. |
| +Some of the most fundamental Dart libraries include: |
| + |
| +* [dart:core](#dart:core): |
| + Core functionality such as strings, numbers, collections, errors, |
| + dates, and URIs. |
| +* [dart:html](#dart:html): |
| + DOM manipulation for web apps. |
| +* [dart:io](#dart:io): |
| + I/O for command-line apps. |
| + |
| +Except for dart:core, you must import a library before you can use it. |
| +Here's an example of importing dart:html, dart:math, and a |
| +third popular library called |
| +[polymer.dart](http://www.dartlang.org/polymer-dart/): |
| + |
| + import 'dart:html'; |
| + import 'dart:math'; |
| + import 'package:polymer/polymer.dart'; |
| + |
| +Polymer.dart is an example of a library that isn't |
| +included in the Dart download, |
| +but is easy to get and update using the _pub package manager_. |
| +For information on finding, using, and publishing libraries (and more) |
| +with pub, see |
| +[pub.dartlang.org](http://pub.dartlang.org). |
| + |
| +The main site for learning and using Dart is |
| +[www.dartlang.org](http://www.dartlang.org). |
| +Check out these pages: |
| + |
| + * [Dart homepage](http://www.dartlang.org) |
| + * [Tutorials](http://www.dartlang.org/docs/tutorials/) |
| + * [Programmer's Guide](http://www.dartlang.org/docs/) |
| + * [Samples](http://www.dartlang.org/samples/) |
| + * [A Tour of the Dart Libraries](http://www.dartlang.org/docs/dart-up-and-running/contents/ch03.html) |
| + |
| +This API reference is automatically generated from the source code in the |
| +[Dart project](https://code.google.com/p/dart/). |
| +If you'd like to contribute to this documentation, see |
| +[Contributing](https://code.google.com/p/dart/wiki/Contributing) |
| +and |
| +[Writing API Documentation](https://code.google.com/p/dart/wiki/WritingApiDocumentation). |
| +"""; |
| + |
| /// Set of libraries declared in the SDK, so libraries that can be accessed |
| /// when running dart by default. |
| Iterable<LibraryMirror> _sdkLibraries; |
| @@ -92,7 +142,7 @@ Map _mdn; |
| /// Returned Future completes with true if document generation is successful. |
| Future<bool> docgen(List<String> files, {String packageRoot, |
| bool outputToYaml: true, bool includePrivate: false, bool includeSdk: false, |
| - bool parseSdk: false, bool append: false, String introduction: '', |
| + bool parseSdk: false, bool append: false, String introFileName: '', |
| out: DEFAULT_OUTPUT_DIRECTORY, List<String> excludeLibraries, |
| bool includeDependentPackages}) { |
| _excluded = excludeLibraries; |
| @@ -145,7 +195,7 @@ Future<bool> docgen(List<String> files, {String packageRoot, |
| librariesToDocument.removeWhere((x) => _excluded.contains(x.simpleName)); |
| _documentLibraries(librariesToDocument, includeSdk: includeSdk, |
| outputToYaml: outputToYaml, append: append, parseSdk: parseSdk, |
| - introduction: introduction); |
| + introFileName: introFileName); |
|
ricow1
2014/01/13 13:14:20
do we ever read this from a file now? if not just
Alan Knight
2014/01/13 17:36:04
We don't in the SDK, but if we're using this to ge
|
| return true; |
| }); |
| } |
| @@ -258,7 +308,7 @@ String _findPackageRoot(String directory) { |
| if (packageRoot != '') { |
| packageRoot = path.join(path.dirname(packageRoot), 'packages'); |
| } |
| - return packageRoot; |
| + return path.normalize(path.absolute(packageRoot)); |
| } |
| /// Read a pubspec and return the library name. |
| @@ -334,7 +384,7 @@ Future<MirrorSystem> _analyzeLibraries(List<Uri> libraries, |
| /// Creates documentation for filtered libraries. |
| void _documentLibraries(List<LibraryMirror> libs, {bool includeSdk: false, |
| bool outputToYaml: true, bool append: false, bool parseSdk: false, |
| - String introduction: ''}) { |
| + String introFileName: ''}) { |
| libs.forEach((lib) { |
| // Files belonging to the SDK have a uri that begins with 'dart:'. |
| if (includeSdk || !lib.uri.toString().startsWith('dart:')) { |
| @@ -357,6 +407,19 @@ void _documentLibraries(List<LibraryMirror> libs, {bool includeSdk: false, |
| // This will help the viewer know what libraries are available to read in. |
| var libraryMap; |
| var linkResolver = (name) => fixReference(name, null, null, null); |
| + |
| + String readIntroductionFile(String fileName, includeSdk) { |
| + var defaultText = includeSdk ? DEFAULT_SDK_INTRODUCTION : ''; |
| + var introText = defaultText; |
| + if (fileName.isNotEmpty) { |
| + var introFile = new File(fileName); |
| + introText = introFile.existsSync() ? introFile.readAsStringSync() : |
| + defaultText; |
| + } |
| + return markdown.markdownToHtml(introText, |
| + linkResolver: linkResolver, inlineSyntaxes: markdownSyntaxes); |
| + } |
| + |
| if (append) { |
| var docsDir = listDir(_outputDirectory); |
| if (!docsDir.contains('$_outputDirectory/library_list.json')) { |
| @@ -368,23 +431,16 @@ void _documentLibraries(List<LibraryMirror> libs, {bool includeSdk: false, |
| libraryMap['libraries'].addAll(filteredEntities |
| .where((e) => e is Library) |
| .map((e) => e.previewMap)); |
| - if (introduction.isNotEmpty) { |
| - var intro = libraryMap['introduction']; |
| - if (intro.isNotEmpty) intro += '<br/><br/>'; |
| - intro += markdown.markdownToHtml( |
| - new File(introduction).readAsStringSync(), |
| - linkResolver: linkResolver, inlineSyntaxes: markdownSyntaxes); |
| - libraryMap['introduction'] = intro; |
| - } |
| + var intro = libraryMap['introduction']; |
| + var spacing = intro.isEmpty ? '' : '<br/><br/>'; |
| + libraryMap['introduction'] = |
| + "$intro$spacing${readIntroductionFile(introFileName, includeSdk)}"; |
| outputToYaml = libraryMap['filetype'] == 'yaml'; |
| } else { |
| libraryMap = { |
| 'libraries' : filteredEntities.where((e) => |
| e is Library).map((e) => e.previewMap).toList(), |
| - 'introduction' : introduction == '' ? |
| - '' : markdown.markdownToHtml(new File(introduction) |
| - .readAsStringSync(), linkResolver: linkResolver, |
| - inlineSyntaxes: markdownSyntaxes), |
| + 'introduction' : readIntroductionFile(introFileName, includeSdk), |
| 'filetype' : outputToYaml ? 'yaml' : 'json' |
| }; |
| } |