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

Side by Side Diff: lib/src/emitters.dart

Issue 12096106: work in progress: observable implementation using detailed change records (Closed) Base URL: https://github.com/dart-lang/web-ui.git@master
Patch Set: Created 7 years, 10 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 | « lib/src/directive_parser.dart ('k') | lib/src/files.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 /** Collects several code emitters for the template tool. */ 5 /** Collects several code emitters for the template tool. */
6 library emitters; 6 library emitters;
7 7
8 import 'package:html5lib/dom.dart'; 8 import 'package:html5lib/dom.dart';
9 import 'package:html5lib/dom_parsing.dart'; 9 import 'package:html5lib/dom_parsing.dart';
10 10
(...skipping 333 matching lines...) Expand 10 before | Expand all | Expand 10 after
344 344
345 var code = codeInfo.code; 345 var code = codeInfo.code;
346 var match = new RegExp('class ${info.constructor}[^{]*{').firstMatch(code); 346 var match = new RegExp('class ${info.constructor}[^{]*{').firstMatch(code);
347 if (match != null) { 347 if (match != null) {
348 var printer = new CodePrinter(); 348 var printer = new CodePrinter();
349 var libraryName = (codeInfo.libraryName != null) 349 var libraryName = (codeInfo.libraryName != null)
350 ? codeInfo.libraryName 350 ? codeInfo.libraryName
351 : info.tagName.replaceAll(new RegExp('[-./]'), '_'); 351 : info.tagName.replaceAll(new RegExp('[-./]'), '_');
352 printer.add(codegen.header(info.declaringFile.path, libraryName)); 352 printer.add(codegen.header(info.declaringFile.path, libraryName));
353 353
354 // Add exisitng import, export, and part directives. 354 // Add existing import, export, and part directives.
355 for (var directive in codeInfo.directives) { 355 for (var directive in codeInfo.directives) {
356 printer.add(codegen.directiveText(directive, info, pathInfo)); 356 printer.add(codegen.directiveText(directive, info, pathInfo));
357 } 357 }
358 358
359 // Add imports only for those components used by this component. 359 // Add imports only for those components used by this component.
360 var imports = info.usedComponents.keys.mappedBy( 360 var imports = info.usedComponents.keys.mappedBy(
361 (c) => pathInfo.relativePath(info, c)); 361 (c) => pathInfo.relativePath(info, c));
362 362
363 if (hasExtends) { 363 if (hasExtends) {
364 // Inject an import to the base component. 364 // Inject an import to the base component.
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
414 414
415 // Inject library name if not pressent. 415 // Inject library name if not pressent.
416 var codeInfo = _fileInfo.userCode; 416 var codeInfo = _fileInfo.userCode;
417 if (codeInfo == null) { 417 if (codeInfo == null) {
418 codeInfo = new DartCodeInfo(null, null, [], 'main(){\n}'); 418 codeInfo = new DartCodeInfo(null, null, [], 'main(){\n}');
419 } 419 }
420 var libraryName = codeInfo.libraryName != null 420 var libraryName = codeInfo.libraryName != null
421 ? codeInfo.libraryName : _fileInfo.libraryName; 421 ? codeInfo.libraryName : _fileInfo.libraryName;
422 printer.add(codegen.header(_fileInfo.path, libraryName)); 422 printer.add(codegen.header(_fileInfo.path, libraryName));
423 423
424 // Add exisitng import, export, and part directives. 424 // Add existing import, export, and part directives.
425 for (var directive in codeInfo.directives) { 425 for (var directive in codeInfo.directives) {
426 printer.add(codegen.directiveText(directive, _fileInfo, pathInfo)); 426 printer.add(codegen.directiveText(directive, _fileInfo, pathInfo));
427 } 427 }
428 428
429 // Import only those components used by the page. 429 // Import only those components used by the page.
430 var imports = _fileInfo.usedComponents.keys.mappedBy( 430 var imports = _fileInfo.usedComponents.keys.mappedBy(
431 (c) => pathInfo.relativePath(_fileInfo, c)); 431 (c) => pathInfo.relativePath(_fileInfo, c));
432 var mainCode = codegen.mainDartCode( 432 var mainCode = codegen.mainDartCode(
433 codeInfo.code, _context.declarations.formatString(1), 433 codeInfo.code, _context.declarations.formatString(1),
434 _context.printer.formatString(1)); 434 _context.printer.formatString(1));
435 printer.add(codegen.importList(imports)).addRaw(mainCode); 435 printer.add(codegen.importList(imports)).addRaw(mainCode);
436 return printer.formatString(); 436 return printer.formatString();
437 } 437 }
438 } 438 }
439 439
440 /** Emits a .dart file using the [DartCodeInfo]. */
441 String emitDartFile(FileInfo fileInfo, PathInfo pathInfo) {
442 var printer = new CodePrinter();
443
444 // Inject library name if not pressent.
445 var codeInfo = fileInfo.userCode;
446 var libraryName = codeInfo.libraryName;
447 printer.add(codegen.header(fileInfo.path, codeInfo.libraryName));
448
449 // Add existing import, export, and part directives.
450 for (var directive in codeInfo.directives) {
451 printer.add(codegen.directiveText(directive, fileInfo, pathInfo));
452 }
453 printer.addRaw(codeInfo.code);
454 return printer.formatString();
455 }
456
440 /** Clears all fields in [declarations]. */ 457 /** Clears all fields in [declarations]. */
441 String _clearFields(Declarations declarations) { 458 String _clearFields(Declarations declarations) {
442 if (declarations.declarations.isEmpty) return ''; 459 if (declarations.declarations.isEmpty) return '';
443 var buff = new StringBuffer(); 460 var buff = new StringBuffer();
444 for (var d in declarations.declarations) { 461 for (var d in declarations.declarations) {
445 buff.add('${d.name} = '); 462 buff.add('${d.name} = ');
446 } 463 }
447 buff.add('null;'); 464 buff.add('null;');
448 return buff.toString(); 465 return buff.toString();
449 } 466 }
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
503 } 520 }
504 typeName = htmlElementExtends[typeName]; 521 typeName = htmlElementExtends[typeName];
505 } 522 }
506 // If we didn't find a DOM setter, and this is a component, set a property on 523 // If we didn't find a DOM setter, and this is a component, set a property on
507 // the component. 524 // the component.
508 if (info.component != null && !name.startsWith('data-')) { 525 if (info.component != null && !name.startsWith('data-')) {
509 return 'xtag.${toCamelCase(name)}'; 526 return 'xtag.${toCamelCase(name)}';
510 } 527 }
511 return "attributes['$name']"; 528 return "attributes['$name']";
512 } 529 }
OLDNEW
« no previous file with comments | « lib/src/directive_parser.dart ('k') | lib/src/files.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698