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

Side by Side Diff: pkg/analysis_server/tool/spec/to_html.dart

Issue 2742333005: Move some of analyzer's code generation utilities into front_end. (Closed)
Patch Set: Created 3 years, 9 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
OLDNEW
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, 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 * Code for displaying the API as HTML. This is used both for generating a 6 * Code for displaying the API as HTML. This is used both for generating a
7 * full description of the API as a web page, and for generating doc comments 7 * full description of the API as a web page, and for generating doc comments
8 * in generated code. 8 * in generated code.
9 */ 9 */
10 library to.html; 10 library to.html;
11 11
12 import 'dart:convert'; 12 import 'dart:convert';
13 13
14 import 'package:analyzer/src/codegen/html.dart'; 14 import 'package:analyzer/src/codegen/html.dart';
15 import 'package:analyzer/src/codegen/tools.dart'; 15 import 'package:analyzer/src/codegen/tools.dart';
16 import 'package:front_end/src/codegen/tools.dart';
16 import 'package:html/dom.dart' as dom; 17 import 'package:html/dom.dart' as dom;
17 18
18 import 'api.dart'; 19 import 'api.dart';
19 import 'from_html.dart'; 20 import 'from_html.dart';
20 21
21 /** 22 /**
22 * Embedded stylesheet 23 * Embedded stylesheet
23 */ 24 */
24 final String stylesheet = ''' 25 final String stylesheet = '''
25 body { 26 body {
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
133 new GeneratedFile('doc/api.html', (String pkgPath) { 134 new GeneratedFile('doc/api.html', (String pkgPath) {
134 ToHtmlVisitor visitor = new ToHtmlVisitor(readApi(pkgPath)); 135 ToHtmlVisitor visitor = new ToHtmlVisitor(readApi(pkgPath));
135 dom.Document document = new dom.Document(); 136 dom.Document document = new dom.Document();
136 document.append(new dom.DocumentType('html', null, null)); 137 document.append(new dom.DocumentType('html', null, null));
137 for (dom.Node node in visitor.collectHtml(visitor.visitApi)) { 138 for (dom.Node node in visitor.collectHtml(visitor.visitApi)) {
138 document.append(node); 139 document.append(node);
139 } 140 }
140 return document.outerHtml; 141 return document.outerHtml;
141 }); 142 });
142 143
144 String _toTitleCase(String str) {
145 if (str.isEmpty) return str;
146 return str.substring(0, 1).toUpperCase() + str.substring(1);
147 }
148
143 /** 149 /**
144 * Visitor that records the mapping from HTML elements to various kinds of API 150 * Visitor that records the mapping from HTML elements to various kinds of API
145 * nodes. 151 * nodes.
146 */ 152 */
147 class ApiMappings extends HierarchicalApiVisitor { 153 class ApiMappings extends HierarchicalApiVisitor {
148 Map<dom.Element, Domain> domains = <dom.Element, Domain>{}; 154 Map<dom.Element, Domain> domains = <dom.Element, Domain>{};
149 155
150 ApiMappings(Api api) : super(api); 156 ApiMappings(Api api) : super(api);
151 157
152 @override 158 @override
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
262 generateNotificationsIndex(domain.notifications); 268 generateNotificationsIndex(domain.notifications);
263 } 269 }
264 }); 270 });
265 } else if (domain.notifications.length > 0) { 271 } else if (domain.notifications.length > 0) {
266 element('div', {'class': 'subindex'}, () { 272 element('div', {'class': 'subindex'}, () {
267 generateNotificationsIndex(domain.notifications); 273 generateNotificationsIndex(domain.notifications);
268 }); 274 });
269 } 275 }
270 } 276 }
271 277
272 void generateTableOfContents() {
273 ul(() {
274 writeln();
275
276 for (var domain in api.domains.where((domain) => !domain.experimental)) {
277 write(' ');
278 li(() {
279 link('domain_${domain.name}', () {
280 write(_toTitleCase(domain.name));
281 });
282 });
283 writeln();
284 }
285 });
286 }
287
288 void generateIndex() { 278 void generateIndex() {
289 h3(() => write('Domains')); 279 h3(() => write('Domains'));
290 for (var domain in api.domains) { 280 for (var domain in api.domains) {
291 if (domain.experimental || 281 if (domain.experimental ||
292 (domain.requests.length == 0 && domain.notifications == 0)) { 282 (domain.requests.length == 0 && domain.notifications == 0)) {
293 continue; 283 continue;
294 } 284 }
295 generateDomainIndex(domain); 285 generateDomainIndex(domain);
296 } 286 }
297 287
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
341 for (var request in requests) { 331 for (var request in requests) {
342 element( 332 element(
343 'li', 333 'li',
344 {}, 334 {},
345 () => link( 335 () => link(
346 'request_${request.longMethod}', () => write(request.method))); 336 'request_${request.longMethod}', () => write(request.method)));
347 } 337 }
348 }); 338 });
349 } 339 }
350 340
341 void generateTableOfContents() {
342 ul(() {
343 writeln();
344
345 for (var domain in api.domains.where((domain) => !domain.experimental)) {
346 write(' ');
347 li(() {
348 link('domain_${domain.name}', () {
349 write(_toTitleCase(domain.name));
350 });
351 });
352 writeln();
353 }
354 });
355 }
356
351 void generateTypesIndex(Set<String> types) { 357 void generateTypesIndex(Set<String> types) {
352 h3(() { 358 h3(() {
353 write("Types"); 359 write("Types");
354 write(' ('); 360 write(' (');
355 link('types', () => write('\u2191')); 361 link('types', () => write('\u2191'));
356 write(')'); 362 write(')');
357 }); 363 });
358 element('div', {'class': 'subindex'}, () { 364 element('div', {'class': 'subindex'}, () {
359 element('ul', {}, () { 365 element('ul', {}, () {
360 for (var type in types) { 366 for (var type in types) {
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
416 } 422 }
417 switch (node.localName) { 423 switch (node.localName) {
418 case 'domain': 424 case 'domain':
419 visitDomain(apiMappings.domains[node]); 425 visitDomain(apiMappings.domains[node]);
420 break; 426 break;
421 case 'head': 427 case 'head':
422 head(() { 428 head(() {
423 translateHtml(node, squashParagraphs: squashParagraphs); 429 translateHtml(node, squashParagraphs: squashParagraphs);
424 element('link', { 430 element('link', {
425 'rel': 'stylesheet', 431 'rel': 'stylesheet',
426 'href': 'https://fonts.googleapis.com/css?family=Source+Code+Pro |Roboto:500,400italic,300,400', 432 'href':
433 'https://fonts.googleapis.com/css?family=Source+Code+Pro|Rob oto:500,400italic,300,400',
427 'type': 'text/css' 434 'type': 'text/css'
428 }); 435 });
429 element('style', {}, () { 436 element('style', {}, () {
430 writeln(stylesheet); 437 writeln(stylesheet);
431 }); 438 });
432 }); 439 });
433 break; 440 break;
434 case 'refactorings': 441 case 'refactorings':
435 visitRefactorings(api.refactorings); 442 visitRefactorings(api.refactorings);
436 break; 443 break;
437 case 'types': 444 case 'types':
438 visitTypes(api.types); 445 visitTypes(api.types);
(...skipping 341 matching lines...) Expand 10 before | Expand all | Expand 10 after
780 bool verticalBarNeeded = false; 787 bool verticalBarNeeded = false;
781 for (TypeDecl choice in typeUnion.choices) { 788 for (TypeDecl choice in typeUnion.choices) {
782 if (verticalBarNeeded) { 789 if (verticalBarNeeded) {
783 write(' | '); 790 write(' | ');
784 } 791 }
785 visitTypeDecl(choice); 792 visitTypeDecl(choice);
786 verticalBarNeeded = true; 793 verticalBarNeeded = true;
787 } 794 }
788 } 795 }
789 } 796 }
790
791 String _toTitleCase(String str) {
792 if (str.isEmpty) return str;
793 return str.substring(0, 1).toUpperCase() + str.substring(1);
794 }
OLDNEW
« no previous file with comments | « pkg/analysis_server/tool/spec/generate_all.dart ('k') | pkg/analyzer/lib/src/codegen/tools.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698