def GenerateFromDatabase(common_database, dart2js_output_dir, dartium_output_dir, blink_output_dir, update_dom_metadata=False, logging_level=logging.WARNING, dart_js_interop=False): print '\n ----- Accessing DOM using %s -----\n' % ('dart:js' if dart_js_interop else 'C++') start_time = time.time() current_dir = os.path.dirname(__file__) auxiliary_dir = os.path.join(current_dir, '..', 'src') template_dir = os.path.join(current_dir, '..', 'templates') _logger.setLevel(logging_level) generator = dartgenerator.DartGenerator(logging_level) generator.LoadAuxiliary(auxiliary_dir) generator.FilterMembersWithUnidentifiedTypes(common_database) webkit_database = common_database.Clone() # Generate Dart interfaces for the WebKit DOM. generator.FilterInterfaces(database = webkit_database, or_annotations = ['WebKit', 'Dart'], exclude_displaced = ['WebKit'], exclude_suppressed = ['WebKit', 'Dart']) generator.FixEventTargets(webkit_database) generator.AddMissingArguments(webkit_database) generator.CleanupOperationArguments(webkit_database) emitters = multiemitter.MultiEmitter(logging_level) metadata = DartMetadata( os.path.join(current_dir, '..', 'dom.json'), os.path.join(current_dir, '..', 'docs', 'docs.json'), logging_level) renamer = HtmlRenamer(webkit_database, metadata) type_registry = TypeRegistry(webkit_database, renamer) print 'GenerateFromDatabase %s seconds' % round((time.time() - start_time), 2) def RunGenerator(dart_libraries, dart_output_dir, template_loader, backend_factory, dart_js_interop): options = GeneratorOptions( template_loader, webkit_database, type_registry, renamer, metadata, dart_js_interop) dart_library_emitter = DartLibraryEmitter( emitters, dart_output_dir, dart_libraries) event_generator = HtmlEventGenerator(webkit_database, renamer, metadata, template_loader) def generate_interface(interface): backend = backend_factory(interface) interface_generator = HtmlDartInterfaceGenerator( options, dart_library_emitter, event_generator, interface, backend) interface_generator.Generate() generator.Generate(webkit_database, common_database, generate_interface) dart_library_emitter.EmitLibraries(auxiliary_dir, dart_js_interop) if dart2js_output_dir: template_paths = ['html/dart2js', 'html/impl', 'html/interface', ''] template_loader = TemplateLoader(template_dir, template_paths, {'DARTIUM': False, 'DART2JS': True, 'JSINTEROP': False}) backend_options = GeneratorOptions( template_loader, webkit_database, type_registry, renamer, metadata, dart_js_interop) backend_factory = lambda interface:\ Dart2JSBackend(interface, backend_options, logging_level) dart_output_dir = os.path.join(dart2js_output_dir, 'dart') dart_libraries = DartLibraries( HTML_LIBRARY_NAMES, template_loader, 'dart2js', dart2js_output_dir, dart_js_interop) print '\nGenerating dart2js:\n' start_time = time.time() RunGenerator(dart_libraries, dart_output_dir, template_loader, backend_factory, dart_js_interop) print 'Generated dart2js in %s seconds' % round(time.time() - start_time, 2) if dartium_output_dir: template_paths = ['html/dartium', 'html/impl', 'html/interface', ''] template_loader = TemplateLoader(template_dir, template_paths, {'DARTIUM': True, 'DART2JS': False, 'JSINTEROP': dart_js_interop}) backend_options = GeneratorOptions( template_loader, webkit_database, type_registry, renamer, metadata, dart_js_interop) cpp_output_dir = os.path.join(dartium_output_dir, 'cpp') cpp_library_emitter = CPPLibraryEmitter(emitters, cpp_output_dir) dart_output_dir = os.path.join(dartium_output_dir, 'dart') backend_factory = lambda interface:\ DartiumBackend(interface, cpp_library_emitter, backend_options, _logger) dart_libraries = DartLibraries( HTML_LIBRARY_NAMES, template_loader, 'dartium', dartium_output_dir, dart_js_interop) print '\nGenerating dartium:\n' start_time = time.time() RunGenerator(dart_libraries, dart_output_dir, template_loader, backend_factory, dart_js_interop) print 'Generated dartium in %s seconds' % round(time.time() - start_time, 2) cpp_library_emitter.EmitDerivedSources( template_loader.Load('cpp_derived_sources.template'), dartium_output_dir) cpp_library_emitter.EmitResolver( template_loader.Load('cpp_resolver.template'), dartium_output_dir) cpp_library_emitter.EmitClassIdTable( webkit_database, dartium_output_dir, type_registry, renamer) emitters.Flush() if blink_output_dir: print '\nGenerating _blink:\n' start_time = time.time() Generate_Blink(blink_output_dir, webkit_database, type_registry) print 'Generated _blink in %s seconds' % round(time.time() - start_time, 2) if update_dom_metadata: metadata.Flush() monitored.FinishMonitoring(dart2js_output_dir, _logger)
def GenerateFromDatabase(common_database, dart2js_output_dir, dartium_output_dir, update_dom_metadata=False): current_dir = os.path.dirname(__file__) auxiliary_dir = os.path.join(current_dir, '..', 'src') template_dir = os.path.join(current_dir, '..', 'templates') generator = dartgenerator.DartGenerator() generator.LoadAuxiliary(auxiliary_dir) generator.FilterMembersWithUnidentifiedTypes(common_database) webkit_database = common_database.Clone() # Generate Dart interfaces for the WebKit DOM. generator.FilterInterfaces(database=webkit_database, or_annotations=['WebKit', 'Dart'], exclude_displaced=['WebKit'], exclude_suppressed=['WebKit', 'Dart']) generator.FixEventTargets(webkit_database) generator.AddMissingArguments(webkit_database) emitters = multiemitter.MultiEmitter() metadata = DartMetadata( os.path.join(current_dir, '..', 'dom.json'), os.path.join(current_dir, '..', 'docs', 'docs.json')) renamer = HtmlRenamer(webkit_database, metadata) type_registry = TypeRegistry(webkit_database, renamer) def RunGenerator(dart_libraries, dart_output_dir, template_loader, backend_factory): options = GeneratorOptions(template_loader, webkit_database, type_registry, renamer, metadata) dart_library_emitter = DartLibraryEmitter(emitters, dart_output_dir, dart_libraries) event_generator = HtmlEventGenerator(webkit_database, renamer, metadata, template_loader) def generate_interface(interface): backend = backend_factory(interface) interface_generator = HtmlDartInterfaceGenerator( options, dart_library_emitter, event_generator, interface, backend) interface_generator.Generate() generator.Generate(webkit_database, common_database, generate_interface) dart_library_emitter.EmitLibraries(auxiliary_dir) if dart2js_output_dir: template_paths = ['html/dart2js', 'html/impl', 'html/interface', ''] template_loader = TemplateLoader(template_dir, template_paths, { 'DARTIUM': False, 'DART2JS': True }) backend_options = GeneratorOptions(template_loader, webkit_database, type_registry, renamer, metadata) backend_factory = lambda interface:\ Dart2JSBackend(interface, backend_options) dart_output_dir = os.path.join(dart2js_output_dir, 'dart') dart_libraries = DartLibraries(HTML_LIBRARY_NAMES, template_loader, 'dart2js', dart2js_output_dir) RunGenerator(dart_libraries, dart_output_dir, template_loader, backend_factory) if dartium_output_dir: template_paths = ['html/dartium', 'html/impl', 'html/interface', ''] template_loader = TemplateLoader(template_dir, template_paths, { 'DARTIUM': True, 'DART2JS': False }) backend_options = GeneratorOptions(template_loader, webkit_database, type_registry, renamer, metadata) cpp_output_dir = os.path.join(dartium_output_dir, 'cpp') cpp_library_emitter = CPPLibraryEmitter(emitters, cpp_output_dir) backend_factory = lambda interface:\ DartiumBackend(interface, cpp_library_emitter, backend_options) dart_output_dir = os.path.join(dartium_output_dir, 'dart') dart_libraries = DartLibraries(HTML_LIBRARY_NAMES, template_loader, 'dartium', dartium_output_dir) RunGenerator(dart_libraries, dart_output_dir, template_loader, backend_factory) cpp_library_emitter.EmitDerivedSources( template_loader.Load('cpp_derived_sources.template'), dartium_output_dir) cpp_library_emitter.EmitResolver( template_loader.Load('cpp_resolver.template'), dartium_output_dir) cpp_library_emitter.EmitClassIdTable(webkit_database, dartium_output_dir, type_registry, renamer) emitters.Flush() if update_dom_metadata: metadata.Flush() monitored.FinishMonitoring(dart2js_output_dir)
def Generate(database_dir, use_database_cache, dart2js_output_dir=None, dartium_output_dir=None): current_dir = os.path.dirname(__file__) auxiliary_dir = os.path.join(current_dir, '..', 'src') template_dir = os.path.join(current_dir, '..', 'templates') generator = dartgenerator.DartGenerator() generator.LoadAuxiliary(auxiliary_dir) common_database = database.Database(database_dir) if use_database_cache: common_database.LoadFromCache() else: common_database.Load() generator.FilterMembersWithUnidentifiedTypes(common_database) webkit_database = common_database.Clone() # Generate Dart interfaces for the WebKit DOM. generator.FilterInterfaces(database = webkit_database, or_annotations = ['WebKit', 'Dart'], exclude_displaced = ['WebKit'], exclude_suppressed = ['WebKit', 'Dart']) generator.RenameTypes(webkit_database, _webkit_renames, True) generator.FixEventTargets(webkit_database) generator.AddMissingArguments(webkit_database) emitters = multiemitter.MultiEmitter() renamer = HtmlRenamer(webkit_database) type_registry = TypeRegistry(webkit_database, renamer) def RunGenerator(dart_library_template, dart_output_dir, dart_library_path, template_loader, backend_factory): options = GeneratorOptions( template_loader, webkit_database, type_registry, renamer) dart_library_emitter = DartLibraryEmitter( emitters, dart_library_template, dart_output_dir) html_system = HtmlInterfacesSystem( options, dart_library_emitter, backend_factory) generator.Generate( webkit_database, html_system, common_database, _webkit_renames) dart_library_emitter.EmitLibrary(dart_library_path, auxiliary_dir) if dart2js_output_dir: template_paths = ['html/dart2js', 'html/impl', 'html/interface', ''] template_loader = TemplateLoader(template_dir, template_paths, {'DARTIUM': False, 'DART2JS': True}) backend_options = GeneratorOptions( template_loader, webkit_database, type_registry, renamer) backend_factory = lambda interface:\ Dart2JSBackend(interface, backend_options) dart_library_template = template_loader.Load('html_dart2js.darttemplate') dart_output_dir = os.path.join(dart2js_output_dir, 'dart') dart_library_path = os.path.join(dart2js_output_dir, 'html_dart2js.dart') RunGenerator(dart_library_template, dart_output_dir, dart_library_path, template_loader, backend_factory) if dartium_output_dir: template_paths = ['html/dartium', 'html/impl', 'html/interface', ''] template_loader = TemplateLoader(template_dir, template_paths, {'DARTIUM': True, 'DART2JS': False}) backend_options = GeneratorOptions( template_loader, webkit_database, type_registry, renamer) cpp_output_dir = os.path.join(dartium_output_dir, 'cpp') cpp_library_emitter = CPPLibraryEmitter(emitters, cpp_output_dir) backend_factory = lambda interface:\ DartiumBackend(interface, cpp_library_emitter, backend_options) dart_library_template = template_loader.Load('html_dartium.darttemplate') dart_output_dir = os.path.join(dartium_output_dir, 'dart') dart_library_path = os.path.join(dartium_output_dir, 'html_dartium.dart') RunGenerator(dart_library_template, dart_output_dir, dart_library_path, template_loader, backend_factory) cpp_library_emitter.EmitDerivedSources( template_loader.Load('cpp_derived_sources.template'), dartium_output_dir) cpp_library_emitter.EmitResolver( template_loader.Load('cpp_resolver.template'), dartium_output_dir) _logger.info('Flush...') emitters.Flush()