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

Side by Side Diff: lib/html/scripts/systemhtml.py

Issue 10917264: Fix dart:html generated directory structure and unify file names between backends. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years, 3 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 | Annotate | Revision Log
« no previous file with comments | « lib/html/scripts/systembase.py ('k') | lib/html/scripts/systemnative.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/python 1 #!/usr/bin/python
2 # Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 2 # Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
3 # for details. All rights reserved. Use of this source code is governed by a 3 # for details. All rights reserved. Use of this source code is governed by a
4 # BSD-style license that can be found in the LICENSE file. 4 # BSD-style license that can be found in the LICENSE file.
5 5
6 """This module provides shared functionality for the system to generate 6 """This module provides shared functionality for the system to generate
7 Dart:html APIs from the IDL database.""" 7 Dart:html APIs from the IDL database."""
8 8
9 import emitter 9 import emitter
10 10
(...skipping 419 matching lines...) Expand 10 before | Expand all | Expand 10 after
430 430
431 def IsPrivate(self, name): 431 def IsPrivate(self, name):
432 return name.startswith('_') 432 return name.startswith('_')
433 433
434 434
435 class HtmlInterfacesSystem(System): 435 class HtmlInterfacesSystem(System):
436 def __init__(self, options, backend): 436 def __init__(self, options, backend):
437 super(HtmlInterfacesSystem, self).__init__(options) 437 super(HtmlInterfacesSystem, self).__init__(options)
438 self._backend = backend 438 self._backend = backend
439 self._shared = HtmlSystemShared(options) 439 self._shared = HtmlSystemShared(options)
440 self._dart_interface_file_paths = [] 440 self._dart_file_paths = []
441 self._elements_factory_emitter = None 441 self._elements_factory_emitter = None
442 442
443 def ProcessInterface(self, interface): 443 def ProcessInterface(self, interface):
444 HtmlDartInterfaceGenerator(self, interface).Generate() 444 HtmlDartInterfaceGenerator(self, interface).Generate()
445 445
446 def ProcessCallback(self, interface, info): 446 def ProcessCallback(self, interface, info):
447 """Generates a typedef for the callback interface.""" 447 """Generates a typedef for the callback interface."""
448 interface_name = interface.id 448 code = self._CreateEmitter('%s.dart' % interface.id)
449 file_path = self._FilePathForDartInterface(interface_name) 449 code.Emit(self._templates.Load('callback.darttemplate'))
450 self._ProcessCallback(interface, info, file_path) 450 code.Emit('typedef $TYPE $NAME($PARAMS);\n',
451 NAME=interface.id,
452 TYPE=DartType(info.type_name),
453 PARAMS=info.ParametersImplementationDeclaration(DartType))
451 self._backend.ProcessCallback(interface, info) 454 self._backend.ProcessCallback(interface, info)
452 455
453 def GenerateLibraries(self): 456 def GenerateLibraries(self):
454 self._backend.GenerateLibraries(self._dart_interface_file_paths) 457 self._backend.GenerateLibraries(self._dart_file_paths)
455 458
456 def _FilePathForDartInterface(self, interface_name): 459 def _CreateEmitter(self, filename):
457 """Returns the file path of the Dart interface definition.""" 460 path = os.path.join(self._output_dir, 'dart', filename)
458 # TODO(jmesserly): is this the right path 461 self._dart_file_paths.append(path)
459 return os.path.join(self._output_dir, 'html', 'interface', 462 return self._emitters.FileEmitter(path)
460 '%s.dart' % interface_name)
461 463
462 # ------------------------------------------------------------------------------ 464 # ------------------------------------------------------------------------------
463 465
464 class HtmlDartInterfaceGenerator(BaseGenerator): 466 class HtmlDartInterfaceGenerator(BaseGenerator):
465 """Generates dart interface and implementation for the DOM IDL interface.""" 467 """Generates dart interface and implementation for the DOM IDL interface."""
466 468
467 def __init__(self, system, interface): 469 def __init__(self, system, interface):
468 super(HtmlDartInterfaceGenerator, self).__init__( 470 super(HtmlDartInterfaceGenerator, self).__init__(
469 system._database, interface) 471 system._database, interface)
470 self._system = system 472 self._system = system
471 self._shared = system._shared 473 self._shared = system._shared
472 self._html_interface_name = system._renamer.RenameInterface(self._interface) 474 self._html_interface_name = system._renamer.RenameInterface(self._interface)
473 self._backend = system._backend.ImplementationGenerator(self._interface) 475 self._backend = system._backend.ImplementationGenerator(self._interface)
474 476
475 def StartInterface(self): 477 def StartInterface(self):
476 if not self._interface.id in _merged_html_interfaces: 478 if not self._interface.id in _merged_html_interfaces:
477 path = self._system._FilePathForDartInterface(self._html_interface_name) 479 path = '%s.dart' % self._html_interface_name
478 self._system._dart_interface_file_paths.append(path) 480 self._interface_emitter = self._system._CreateEmitter(path)
479 self._interface_emitter = self._system._emitters.FileEmitter(path)
480 else: 481 else:
481 self._interface_emitter = emitter.Emitter() 482 self._interface_emitter = emitter.Emitter()
482 483
483 template_file = 'interface_%s.darttemplate' % self._html_interface_name 484 template_file = 'interface_%s.darttemplate' % self._html_interface_name
484 interface_template = (self._system._templates.TryLoad(template_file) or 485 interface_template = (self._system._templates.TryLoad(template_file) or
485 self._system._templates.Load('interface.darttemplate') ) 486 self._system._templates.Load('interface.darttemplate') )
486 487
487 typename = self._html_interface_name 488 typename = self._html_interface_name
488 489
489 extends = [] 490 extends = []
(...skipping 22 matching lines...) Expand all
512 513
513 factory_provider = None 514 factory_provider = None
514 if typename in interface_factories: 515 if typename in interface_factories:
515 factory_provider = interface_factories[typename] 516 factory_provider = interface_factories[typename]
516 517
517 constructors = [] 518 constructors = []
518 constructor_info = AnalyzeConstructor(self._interface) 519 constructor_info = AnalyzeConstructor(self._interface)
519 if constructor_info: 520 if constructor_info:
520 constructors.append(constructor_info) 521 constructors.append(constructor_info)
521 factory_provider = '_' + typename + 'FactoryProvider' 522 factory_provider = '_' + typename + 'FactoryProvider'
522 path = self._backend.FilePathForDartFactoryProviderImplementation() 523 factory_provider_emitter = self._system._CreateEmitter(
523 self._system._dart_interface_file_paths.append(path) 524 '_%sFactoryProvider.dart' % self._html_interface_name)
524 factory_provider_emitter = self._system._emitters.FileEmitter(path)
525 self._backend.EmitFactoryProvider( 525 self._backend.EmitFactoryProvider(
526 constructor_info, factory_provider, factory_provider_emitter) 526 constructor_info, factory_provider, factory_provider_emitter)
527 527
528 infos = HtmlElementConstructorInfos(typename) 528 infos = HtmlElementConstructorInfos(typename)
529 if infos: 529 if infos:
530 if not self._system._elements_factory_emitter: 530 if not self._system._elements_factory_emitter:
531 path = self._backend.FilePathForDartElementsFactoryProviderImplementatio n() 531 file_emitter = self._system._CreateEmitter('_Elements.dart')
532 self._system._dart_interface_file_paths.append(path)
533 file_emitter = self._system._emitters.FileEmitter(path)
534 template = self._system._templates.Load( 532 template = self._system._templates.Load(
535 'factoryprovider_Elements.darttemplate') 533 'factoryprovider_Elements.darttemplate')
536 self._system._elements_factory_emitter = file_emitter.Emit(template) 534 self._system._elements_factory_emitter = file_emitter.Emit(template)
537 EmitHtmlElementFactoryConstructors( 535 EmitHtmlElementFactoryConstructors(
538 self._system._elements_factory_emitter, 536 self._system._elements_factory_emitter,
539 infos, 537 infos,
540 self._html_interface_name, 538 self._html_interface_name,
541 self._backend.ImplementationClassName()) 539 self._backend.ImplementationClassName())
542 540
543 for info in infos: 541 for info in infos:
(...skipping 11 matching lines...) Expand all
555 self._members_emitter, 553 self._members_emitter,
556 self._top_level_emitter) = self._interface_emitter.Emit( 554 self._top_level_emitter) = self._interface_emitter.Emit(
557 interface_template + '$!TOP_LEVEL', 555 interface_template + '$!TOP_LEVEL',
558 ID=typename, 556 ID=typename,
559 EXTENDS=extends_str) 557 EXTENDS=extends_str)
560 558
561 self._type_comment_emitter.Emit("/// @domName $DOMNAME", 559 self._type_comment_emitter.Emit("/// @domName $DOMNAME",
562 DOMNAME=self._interface.doc_js_name) 560 DOMNAME=self._interface.doc_js_name)
563 561
564 if self._backend.HasImplementation(): 562 if self._backend.HasImplementation():
565 path = self._backend.FilePathForDartImplementation() 563 if not self._interface.id in _merged_html_interfaces:
566 self._system._dart_interface_file_paths.append(path) 564 filename = '%sImpl.dart' % self._html_interface_name
Anton Muhin 2012/09/14 15:48:13 as an option: filenameprefix = self._html_interfac
567 self._implementation_emitter = self._system._emitters.FileEmitter(path) 565 else:
566 filename = '%sImpl.dart' % self._interface.id
567 self._implementation_emitter = self._system._CreateEmitter(filename)
568 else: 568 else:
569 self._implementation_emitter = emitter.Emitter() 569 self._implementation_emitter = emitter.Emitter()
570 self._backend.SetImplementationEmitter(self._implementation_emitter) 570 self._backend.SetImplementationEmitter(self._implementation_emitter)
571 self._implementation_members_emitter = self._backend.StartInterface() 571 self._implementation_members_emitter = self._backend.StartInterface()
572 572
573 for constructor_info in constructors: 573 for constructor_info in constructors:
574 self._members_emitter.Emit( 574 self._members_emitter.Emit(
575 '\n' 575 '\n'
576 ' $CTOR($PARAMS);\n', 576 ' $CTOR($PARAMS);\n',
577 CTOR=self._DartType(constructor_info.ConstructorFullName()), 577 CTOR=self._DartType(constructor_info.ConstructorFullName()),
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after
763 system, interface, None, None) 763 system, interface, None, None)
764 self._html_interface_name = system._renamer.RenameInterface(self._interface) 764 self._html_interface_name = system._renamer.RenameInterface(self._interface)
765 765
766 def HasImplementation(self): 766 def HasImplementation(self):
767 return not (IsPureInterface(self._interface.id) or 767 return not (IsPureInterface(self._interface.id) or
768 self._interface.id in _merged_html_interfaces) 768 self._interface.id in _merged_html_interfaces)
769 769
770 def ImplementationClassName(self): 770 def ImplementationClassName(self):
771 return self._ImplClassName(self._html_interface_name) 771 return self._ImplClassName(self._html_interface_name)
772 772
773 def FilePathForDartImplementation(self):
774 return os.path.join(self._system._output_dir, 'html', 'dart2js',
775 '%s.dart' % self._html_interface_name)
776
777 def FilePathForDartFactoryProviderImplementation(self):
778 return os.path.join(self._system._output_dir, 'html', 'dart2js',
779 '_%sFactoryProvider.dart' % self._html_interface_name)
780
781 def FilePathForDartElementsFactoryProviderImplementation(self):
782 return os.path.join(self._system._output_dir, 'html', 'dart2js',
783 '_Elements.dart')
784
785 def SetImplementationEmitter(self, implementation_emitter): 773 def SetImplementationEmitter(self, implementation_emitter):
786 self._dart_code = implementation_emitter 774 self._dart_code = implementation_emitter
787 775
788 def ImplementsMergedMembers(self): 776 def ImplementsMergedMembers(self):
789 return True 777 return True
790 778
791 def _ImplClassName(self, type_name): 779 def _ImplClassName(self, type_name):
792 return '_%sImpl' % type_name 780 return '_%sImpl' % type_name
793 781
794 def StartInterface(self): 782 def StartInterface(self):
(...skipping 439 matching lines...) Expand 10 before | Expand all | Expand 10 after
1234 return HtmlDart2JSClassGenerator(self, interface) 1222 return HtmlDart2JSClassGenerator(self, interface)
1235 1223
1236 def GenerateLibraries(self, dart_files): 1224 def GenerateLibraries(self, dart_files):
1237 self._GenerateLibFile( 1225 self._GenerateLibFile(
1238 'html_dart2js.darttemplate', 1226 'html_dart2js.darttemplate',
1239 os.path.join(self._output_dir, 'html_dart2js.dart'), 1227 os.path.join(self._output_dir, 'html_dart2js.dart'),
1240 dart_files) 1228 dart_files)
1241 1229
1242 def Finish(self): 1230 def Finish(self):
1243 pass 1231 pass
OLDNEW
« no previous file with comments | « lib/html/scripts/systembase.py ('k') | lib/html/scripts/systemnative.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698