| Index: client/dom/scripts/dartdomgenerator.py
|
| diff --git a/client/dom/scripts/dartdomgenerator.py b/client/dom/scripts/dartdomgenerator.py
|
| index 950f5d95b60fdaf6e4a6ef88a42dc37e5087913c..7d8337e63b1a36e2b5cc617e4ab5cd808e797868 100755
|
| --- a/client/dom/scripts/dartdomgenerator.py
|
| +++ b/client/dom/scripts/dartdomgenerator.py
|
| @@ -28,10 +28,49 @@ _webkit_renames = {
|
| 'Window': 'DOMWindow',
|
| 'WorkerGlobalScope': 'WorkerContext'}
|
|
|
| -_webkit_renames_inverse = dict((v,k) for k, v in _webkit_renames.iteritems())
|
| -
|
| -def GenerateDOM(systems, output_dir):
|
| - # TODO(sra): Make this entry point also generate HTML.
|
| +_html_strip_webkit_prefix_classes = [
|
| + 'Animation',
|
| + 'AnimationEvent',
|
| + 'AnimationList',
|
| + 'BlobBuilder',
|
| + 'CSSKeyframeRule',
|
| + 'CSSKeyframesRule',
|
| + 'CSSMatrix',
|
| + 'CSSTransformValue',
|
| + 'Flags',
|
| + 'LoseContext',
|
| + 'Point',
|
| + 'TransitionEvent']
|
| +
|
| +def HasAncestor(interface, names_to_match, database):
|
| + for parent in interface.parents:
|
| + if (parent.type.id in names_to_match or
|
| + (database.HasInterface(parent.type.id) and
|
| + HasAncestor(database.GetInterface(parent.type.id), names_to_match,
|
| + database))):
|
| + return True
|
| + return False
|
| +
|
| +def _MakeHtmlRenames(common_database):
|
| + html_renames = {}
|
| +
|
| + for interface in common_database.GetInterfaces():
|
| + if (interface.id.startswith("HTML") and
|
| + HasAncestor(interface, ['Element', 'Document'], common_database)):
|
| + html_renames[interface.id] = interface.id[4:]
|
| +
|
| + for subclass in _html_strip_webkit_prefix_classes:
|
| + html_renames['WebKit' + subclass] = subclass
|
| +
|
| + # TODO(jacobr): we almost want to add this commented out line back.
|
| + # html_renames['HTMLCollection'] = 'ElementList'
|
| + # html_renames['NodeList'] = 'ElementList'
|
| + # html_renames['HTMLOptionsCollection'] = 'ElementList'
|
| + html_renames['DOMWindow'] = 'Window'
|
| +
|
| + return html_renames
|
| +
|
| +def GenerateDOM(systems, generate_html_systems, output_dir, use_database_cache):
|
| current_dir = os.path.dirname(__file__)
|
|
|
| generator = dartgenerator.DartGenerator(
|
| @@ -42,17 +81,21 @@ def GenerateDOM(systems, output_dir):
|
|
|
| common_database = database.Database(
|
| os.path.join(current_dir, '..', 'database'))
|
| - common_database.Load()
|
| + 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()
|
| # FIXME: get rid of _original_idl_types map in dartgenerator.py and
|
| @@ -60,7 +103,8 @@ def GenerateDOM(systems, output_dir):
|
| generator.ConvertToDartTypes(common_database)
|
| generator.ConvertToDartTypes(webkit_database)
|
|
|
| - generated_output_dir = os.path.join(output_dir, 'generated')
|
| + generated_output_dir = os.path.join(output_dir,
|
| + '../html/generated' if generate_html_systems else 'generated')
|
| if os.path.exists(generated_output_dir):
|
| _logger.info('Cleaning output directory %s' % generated_output_dir)
|
| shutil.rmtree(generated_output_dir)
|
| @@ -72,7 +116,16 @@ def GenerateDOM(systems, output_dir):
|
| or_annotations = ['WebKit', 'Dart'],
|
| exclude_displaced = ['WebKit'],
|
| exclude_suppressed = ['WebKit', 'Dart'])
|
| - generator.RenameTypes(webkit_database, _webkit_renames)
|
| + 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 = webkit_output_dir,
|
| @@ -81,36 +134,56 @@ def GenerateDOM(systems, output_dir):
|
| source_filter = ['WebKit', 'Dart'],
|
| super_database = common_database,
|
| common_prefix = 'common',
|
| - super_map = _webkit_renames_inverse,
|
| + 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 .. ; ../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 ; ../tools/copy_dart.py frog html_frog.dart'],
|
| + shell=True);
|
| +
|
| def main():
|
| parser = optparse.OptionParser()
|
| parser.add_option('--systems', dest='systems',
|
| action='store', type='string',
|
| - default='frog,dummy,wrapping,htmlfrog',
|
| + default='frog,dummy,wrapping',
|
| help='Systems to generate (frog, native, dummy, '
|
| - 'htmlfrog)')
|
| + 'htmlfrog, htmldartium)')
|
| parser.add_option('--output-dir', dest='output_dir',
|
| action='store', type='string',
|
| default=None,
|
| help='Directory to put the generated files')
|
| + parser.add_option('--use-database-cache', dest='use_database_cache',
|
| + action='store',
|
| + default=False,
|
| + help='''Use the cached database from the previous run to
|
| + improve startup performance''')
|
| (options, args) = parser.parse_args()
|
|
|
| current_dir = os.path.dirname(__file__)
|
| - output_dir = options.output_dir or os.path.join(current_dir, '..')
|
| systems = options.systems.split(',')
|
| + num_html_systems = ('htmlfrog' in systems) + ('htmldartium' in systems)
|
| + if num_html_systems > 0 and num_html_systems < len(systems):
|
| + print 'Cannot generate html and dom bindings at the same time'
|
| + sys.exit(-1)
|
| +
|
| + use_database_cache = options.use_database_cache
|
| + generate_html_systems = ('htmlfrog' in systems) or ('htmldartium' in systems)
|
| + output_dir = options.output_dir or (
|
| + os.path.join(current_dir, '../../html') if generate_html_systems else
|
| + os.path.join(current_dir, '..'))
|
|
|
| logging.config.fileConfig(os.path.join(current_dir, 'logging.conf'))
|
| - GenerateDOM(systems, output_dir)
|
|
|
| - # Copy Frog DOM to frog/dom_frog.dart.
|
| - if 'frog' in systems:
|
| - _logger.info('Copy dom_frog to frog/')
|
| - subprocess.call(['cd .. ; ../tools/copy_dart.py frog dom_frog.dart'],
|
| - shell=True);
|
| + GenerateDOM(systems, generate_html_systems, output_dir, use_database_cache)
|
|
|
| # Copy dummy DOM where dartc build expects it.
|
| if 'dummy' in systems:
|
|
|