Esempio n. 1
0
    def setUp(self):
        self._working_dir = tempfile.mkdtemp()
        self._output_dir = os.path.join(self._working_dir, 'output')
        self._database_dir = os.path.join(self._working_dir, 'database')
        self._auxiliary_dir = os.path.join(self._working_dir, 'auxiliary')
        self.assertFalse(os.path.exists(self._database_dir))

        # Create database and add one interface.
        db = database.Database(self._database_dir)
        os.mkdir(self._auxiliary_dir)
        self.assertTrue(os.path.exists(self._database_dir))

        content = """
    module shapes {
      @A1 @A2
      interface Shape {
        @A1 @A2 getter attribute int attr;
        @A1 setter attribute int attr;
        @A3 boolean op();
        const long CONSTANT = 1;
        getter attribute DOMString strAttr;
        Shape create();
        boolean compare(Shape s);
        Rectangle createRectangle();
        void addLine(lines::Line line);
        void someDartType(File file);
        void someUnidentifiedType(UnidentifiableType t);
      };
    };

    module rectangles {
      @A3
      interface Rectangle : @A3 shapes::Shape {
        void someTemplatedType(List<Shape> list);
      };
    };

    module lines {
      @A1
      interface Line : shapes::Shape {
      };
    };
    """

        parser = idlparser.IDLParser(idlparser.FREMONTCUT_SYNTAX)
        ast = parser.parse(content)
        idl_file = idlnode.IDLFile(ast)
        for module in idl_file.modules:
            module_name = module.id
            for interface in module.interfaces:
                db.AddInterface(interface)
        db.Save()

        self.assertTrue(self._InDatabase('Shape'))
        self.assertTrue(self._InDatabase('Rectangle'))
        self.assertTrue(self._InDatabase('Line'))

        self._database = database.Database(self._database_dir)
        self._generator = dartgenerator.DartGenerator(self._auxiliary_dir,
                                                      '../templates', 'test')
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)
Esempio n. 3
0
def Generate(systems, database_dir, use_database_cache, dom_output_dir,
             html_output_dir):
    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)

    emitters = multiemitter.MultiEmitter()

    for system in systems:
        if system in ['htmlfrog', 'htmldartium']:

            output_dir = html_output_dir
            interface_system = HtmlInterfacesSystem(
                TemplateLoader(template_dir, ['html/interface', 'html', '']),
                webkit_database, emitters, output_dir)
        else:
            output_dir = dom_output_dir
            interface_system = InterfacesSystem(
                TemplateLoader(template_dir, ['dom/interface', 'dom', '']),
                webkit_database, emitters, output_dir)

        if system == 'dummy':
            implementation_system = dartgenerator.DummyImplementationSystem(
                TemplateLoader(template_dir, ['dom/dummy', 'dom', '']),
                webkit_database, emitters, output_dir)
        elif system == 'frog':
            implementation_system = FrogSystem(
                TemplateLoader(template_dir, ['dom/frog', 'dom', '']),
                webkit_database, emitters, output_dir)
        elif system == 'htmlfrog':
            implementation_system = HtmlFrogSystem(
                TemplateLoader(template_dir,
                               ['html/frog', 'html/impl', 'html', ''], {
                                   'DARTIUM': False,
                                   'FROG': True
                               }), webkit_database, emitters, output_dir)
        elif system == 'htmldartium':
            # Generate native wrappers.
            native_system = NativeImplementationSystem(
                TemplateLoader(template_dir,
                               ['dom/native', 'html/dartium', 'html/impl', ''],
                               {
                                   'DARTIUM': True,
                                   'FROG': False
                               }), webkit_database, emitters, output_dir)
            generator.Generate(webkit_database,
                               native_system,
                               source_filter=['WebKit', 'Dart'],
                               super_database=common_database,
                               common_prefix='common',
                               webkit_renames=_webkit_renames)
            dom_implementation_classes = native_system.DartImplementationFiles(
            )
            implementation_system = HtmlDartiumSystem(
                TemplateLoader(template_dir,
                               ['html/dartium', 'html/impl', 'html', ''], {
                                   'DARTIUM': True,
                                   'FROG': False
                               }), webkit_database, emitters, auxiliary_dir,
                dom_implementation_classes, output_dir)
        else:
            raise Exception('Unsupported system %s' % system)

        # Makes interface files available for listing in the library for the
        # implementation system.
        implementation_system._interface_system = interface_system

        for system in [interface_system, implementation_system]:
            generator.Generate(webkit_database,
                               system,
                               source_filter=['WebKit', 'Dart'],
                               super_database=common_database,
                               common_prefix='common',
                               webkit_renames=_webkit_renames)

    _logger.info('Flush...')
    emitters.Flush()
Esempio n. 4
0
def GenerateFromDatabase(common_database,
                         dart2js_output_dir,
                         update_dom_metadata=False,
                         logging_level=logging.WARNING,
                         dart_js_interop=False,
                         nnbd=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__)
    if nnbd:
        auxiliary_dir = os.path.join(current_dir, '..', 'nnbd_src')
    else:
        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, nnbd)
        dart_library_emitter = DartLibraryEmitter(emitters, dart_output_dir,
                                                  dart_libraries)
        event_generator = HtmlEventGenerator(webkit_database, renamer, metadata,
                                             template_loader)

        def generate_interface(interface, gl_constants=None):
            backend = backend_factory(interface)
            interface_generator = HtmlDartInterfaceGenerator(
                options, dart_library_emitter, event_generator, interface,
                backend)
            interface_generator.Generate()
            if len(backend._gl_constants) > 0 and not (gl_constants is None):
                gl_constants.extend(backend._gl_constants)

        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,
            'NNBD': nnbd
        })
        backend_options = GeneratorOptions(template_loader, webkit_database,
                                           type_registry, renamer, metadata,
                                           dart_js_interop, nnbd)
        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)
        for file in generator._auxiliary_files.values():
            if file.endswith('darttemplate'):
                dart_libraries._libraries['html'].AddFile(file)

        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)

    emitters.Flush()

    if update_dom_metadata:
        metadata.Flush()

    monitored.FinishMonitoring(dart2js_output_dir, _logger)
Esempio n. 5
0
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)
Esempio n. 6
0
def GenerateDOM(systems, generate_html_systems, output_dir, use_database_cache):
  current_dir = os.path.dirname(__file__)

  generator = dartgenerator.DartGenerator(
      auxiliary_dir=os.path.join(current_dir, '..', 'src'),
      template_dir=os.path.join(current_dir, '..', 'templates'),
      base_package='')
  generator.LoadAuxiliary()

  common_database = database.Database(
      os.path.join(current_dir, '..', 'database'))
  if use_database_cache:
    common_database.LoadFromCache()
  else:
    common_database.Load()
  # Remove these types since they are mapped directly to dart.
  common_database.DeleteInterface('DOMStringMap')
  common_database.DeleteInterface('DOMStringList')

  generator.RenameTypes(common_database, {
      # W3C -> Dart renames
      'AbstractView': 'Window',
      'Function': 'EventListener',
      'DOMStringMap': 'Map<String, String>',
      'DOMStringList': 'List<String>',
      }, False)
  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, False)

  if generate_html_systems:
    html_renames = _MakeHtmlRenames(common_database)
    generator.RenameTypes(webkit_database, html_renames, True)
    html_renames_inverse = dict((v,k) for k, v in html_renames.iteritems())
  else:
    html_renames_inverse = {}

  webkit_renames_inverse = dict((v,k) for k, v in _webkit_renames.iteritems())

  generator.Generate(database = webkit_database,
                     output_dir = output_dir,
                     lib_dir = output_dir,
                     module_source_preference = ['WebKit', 'Dart'],
                     source_filter = ['WebKit', 'Dart'],
                     super_database = common_database,
                     common_prefix = 'common',
                     super_map = webkit_renames_inverse,
                     html_map = html_renames_inverse,
                     systems = systems)

  generator.Flush()

  if 'frog' in systems:
    _logger.info('Copy dom_frog to frog/')
    subprocess.call(['cd ../generated ; '
                     '../../../tools/copy_dart.py ../frog dom_frog.dart'],
                    shell=True);

  if 'htmlfrog' in systems:
    _logger.info('Copy html_frog to ../html/frog/')
    subprocess.call(['cd ../../html/generated ; '
                     '../../../tools/copy_dart.py ../frog html_frog.dart'],
                    shell=True);

  if 'htmldartium' in systems:
    _logger.info('Copy html_dartium to ../html/dartium/')
    subprocess.call(['cd ../../html/generated ; '
                     '../../../tools/copy_dart.py ../dartium html_dartium.dart'],
                    shell=True);

  # Copy dummy DOM where dartc build expects it.
  if 'dummy' in systems:
    _logger.info('Copy dom_dummy to dom.dart')
    subprocess.call(['cd ../generated ; '
                     '../../../tools/copy_dart.py dummy dom_dummy.dart ;'
                     'cp dummy/dom_dummy.dart ../dom.dart'],
                    shell=True);
Esempio n. 7
0
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()
Esempio n. 8
0
def main():
    current_dir = os.path.dirname(__file__)
    logging.config.fileConfig(os.path.join(current_dir, 'logging.conf'))

    generator = dartgenerator.DartGenerator(
        auxiliary_dir=os.path.join(current_dir, '..', 'src'),
        snippet_dir=os.path.join(current_dir, '..', 'snippets'),
        base_package='')
    generator.LoadAuxiliary()

    common_database = database.Database(
        os.path.join(current_dir, '..', 'database'))
    common_database.Load()
    # Remove these types since they are mapped directly to dart.
    common_database.DeleteInterface('DOMStringMap')
    common_database.DeleteInterface('DOMStringList')
    generator.RenameTypes(
        common_database,
        {
            # W3C -> Dart renames
            'AbstractView': 'Window',
            'Function': 'EventListener',
            'DOMStringMap': 'Map<String, String>',
            'DOMStringList': 'List<String>',
        })
    generator.FilterMembersWithUnidentifiedTypes(common_database)
    generator.ConvertToDartTypes(common_database)
    webkit_database = common_database.Clone()

    output_dir = os.path.join(current_dir, '..', 'generated')
    lib_dir = os.path.join(current_dir, '..')
    if os.path.exists(output_dir):
        _logger.info('Cleaning output directory %s' % output_dir)
        shutil.rmtree(output_dir)

    # Generate Dart interfaces for the WebKit DOM.
    webkit_output_dir = output_dir
    generator.FilterInterfaces(database=webkit_database,
                               or_annotations=['WebKit', 'Dart'],
                               exclude_displaced=['WebKit'],
                               exclude_suppressed=['WebKit', 'Dart'])
    generator.RenameTypes(webkit_database, _webkit_renames)

    generator.Generate(database=webkit_database,
                       output_dir=webkit_output_dir,
                       lib_dir=lib_dir,
                       module_source_preference=['WebKit', 'Dart'],
                       source_filter=['WebKit', 'Dart'],
                       super_database=common_database,
                       common_prefix='common',
                       super_map=_webkit_renames_inverse)

    generator.Flush()

    # Install default DOM library.
    default = os.path.join(lib_dir, DOM_DEFAULT_LIBRARY)
    target = os.path.join(lib_dir, DOM_LIBRARY)
    shutil.copyfile(default, target)

    # Remove monkey_dom.dart
    os.rename('../monkey_dom.dart', '../monkey_dom.dart.broken')