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

Unified Diff: client/dom/scripts/dartdomgenerator.py

Issue 9403004: Wrapperless dart:html generator (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Final version to check in. changes generator script but doesn't check in an active version of the … Created 8 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | client/dom/scripts/dartgenerator.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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:
« no previous file with comments | « no previous file | client/dom/scripts/dartgenerator.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698