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

Unified Diff: utils/apidoc/apidoc.dart

Issue 10540085: Modify apidoc to prefer handwritten HTML5 docs over those in MDN or generated code. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Fixes from review comments Created 8 years, 6 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « lib/html/doc/interface/AbstractWorker.dartdoc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: utils/apidoc/apidoc.dart
diff --git a/utils/apidoc/apidoc.dart b/utils/apidoc/apidoc.dart
index 92f12c9445ec459705b847c88213919f393e593d..af4e862f2370048396dd6f818c8366dd088487c1 100644
--- a/utils/apidoc/apidoc.dart
+++ b/utils/apidoc/apidoc.dart
@@ -104,6 +104,19 @@ void main() {
HtmlDiff.initialize();
_diff = new HtmlDiff(printWarnings:false);
_diff.run();
+
+ // Process handwritten HTML documentation.
+ world.reset();
+ world.getOrAddLibrary('${doc.scriptDir}/../../lib/html/doc/html.dartdoc');
+ world.process();
+ final htmldoc = new Htmldoc();
+ htmldoc.document();
+ print('Processing handwritten HTML documentation...');
+
+ // Process libraries.
+
+ // Note, Frog has global internal state. We need to clear away the
+ // HTML documentation classes above first.
world.reset();
// Add all of the core libraries.
@@ -121,17 +134,126 @@ void main() {
world.process();
print('Generating docs...');
- final apidoc = new Apidoc(mdn, outputDir, mode, generateAppCache);
+ final apidoc = new Apidoc(mdn, htmldoc, outputDir, mode, generateAppCache);
Futures.wait([scriptCompiled, copiedStatic, copiedApiDocStatic]).then((_) {
apidoc.document();
});
}
+/**
+ * This class is purely here to scrape handwritten HTML documentation.
+ * This scraped documentation will later be merged with the generated
+ * HTML library.
+ */
+class Htmldoc extends doc.Dartdoc {
+ String libraryComment;
+ Map<String, String> typeComments;
+ Map<String, Map<String, String>> memberComments;
+
+ Htmldoc() {
+ typeComments = new Map<String, String>();
+ memberComments = new Map<String, Map<String, String>>();
+ }
+
+ // Suppress any actual writing to file. This is only for analysis.
+ void endFile() {
+ }
+
+ void write(String s) {
+ }
+
+ String getRecordedLibraryComment(Library library) {
+ if (library.name == 'html') {
+ return libraryComment;
+ }
+ return null;
+ }
+
+ String getRecordedTypeComment(Type type) {
+ if (type.library.name == 'html') {
+ if (typeComments.containsKey(type.name)) {
+ return typeComments[type.name];
+ }
+ }
+ return null;
+ }
+
+ String getRecordedMemberComment(Member member) {
+ if (member.library.name == 'html') {
+ String typeName;
+ if (member.declaringType != null) {
+ typeName = member.declaringType.name;
+ }
+ if (typeName == null) {
+ typeName = '';
+ }
+ if (memberComments.containsKey(typeName)) {
+ Map<String, String> memberMap = memberComments[typeName];
+ if (memberMap.containsKey(member.name)) {
+ return memberMap[member.name];
+ }
+ }
+ }
+ return null;
+ }
+
+ // These methods are subclassed and used for internal processing.
+ // Do not invoke outside of this class.
+ String getLibraryComment(Library library) {
+ String comment = super.getLibraryComment(library);
+ libraryComment = comment;
+ return comment;
+ }
+
+ String getTypeComment(Type type) {
+ String comment = super.getTypeComment(type);
+ recordTypeComment(type, comment);
+ return comment;
+ }
+
+ String getMethodComment(MethodMember method) {
+ String comment = super.getMethodComment(method);
+ recordMemberComment(method, comment);
+ return comment;
+ }
+
+ String getFieldComment(FieldMember field) {
+ String comment = super.getFieldComment(field);
+ recordMemberComment(field, comment);
+ return comment;
+ }
+
+ void recordTypeComment(Type type, String comment) {
+ if (comment != null && comment.contains('@domName')) {
+ // This is not a handwritten comment.
+ return;
+ }
+ typeComments[type.name] = comment;
+ }
+
+ void recordMemberComment(Member member, String comment) {
+ if (comment != null && comment.contains('@domName')) {
+ // This is not a handwritten comment.
+ return;
+ }
+ String typeName = member.declaringType.name;
+ if (typeName == null)
+ typeName = '';
+ if (!memberComments.containsKey(typeName)) {
+ memberComments[typeName] = new Map<String, String>();
+ }
+ Map<String, String> memberMap = memberComments[typeName];
+ memberMap[member.name] = comment;
+ }
+}
+
class Apidoc extends doc.Dartdoc {
/** Big ball of JSON containing the scraped MDN documentation. */
final Map mdn;
+ final Htmldoc htmldoc;
+
static final disqusShortname = 'dartapidocs';
/**
@@ -141,7 +263,8 @@ class Apidoc extends doc.Dartdoc {
*/
String mdnUrl;
- Apidoc(this.mdn, String outputDir, int mode, bool generateAppCache) {
+ Apidoc(this.mdn, this.htmldoc, String outputDir, int mode,
+ bool generateAppCache) {
this.outputDir = outputDir;
this.mode = mode;
this.generateAppCache = generateAppCache;
@@ -253,27 +376,43 @@ class Apidoc extends doc.Dartdoc {
comment.replaceAll(const RegExp("@([a-zA-Z]+) ([^;]+)(?:;|\$)"), ''));
}
+ String getLibraryComment(Library library) {
+ if (library.name == 'html') {
+ return htmldoc.libraryComment;
+ }
+ return super.getLibraryComment(library);
+ }
+
String getTypeComment(Type type) {
return _mergeDocs(
- includeMdnTypeComment(type), super.getTypeComment(type));
+ includeMdnTypeComment(type), super.getTypeComment(type),
+ htmldoc.getRecordedTypeComment(type));
}
String getMethodComment(MethodMember method) {
return _mergeDocs(
- includeMdnMemberComment(method), super.getMethodComment(method));
+ includeMdnMemberComment(method), super.getMethodComment(method),
+ htmldoc.getRecordedMemberComment(method));
}
String getFieldComment(FieldMember field) {
return _mergeDocs(
- includeMdnMemberComment(field), super.getFieldComment(field));
+ includeMdnMemberComment(field), super.getFieldComment(field),
+ htmldoc.getRecordedMemberComment(field));
}
bool isNonEmpty(String string) => (string != null) && (string.trim() != '');
- String _mergeDocs(String mdnComment, String dartComment) {
- // Prefer hand-written Dart comments over stuff from MDN.
- if (isNonEmpty(dartComment)) return dartComment;
+ String _mergeDocs(String mdnComment, String fileComment,
+ String handWrittenComment) {
+ // Prefer the hand-written comment first.
+ if (isNonEmpty(handWrittenComment)) return handWrittenComment;
+
+ // Otherwise, prefer comment from the (possibly generated) Dart
+ // file.
+ if (isNonEmpty(fileComment)) return fileComment;
+ // Finally, fallback on MDN if available.
if (isNonEmpty(mdnComment)) {
// Wrap it so we can highlight it and so we handle MDN scraped content
// that lacks a top-level block tag.
« no previous file with comments | « lib/html/doc/interface/AbstractWorker.dartdoc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698