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

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: Cleanup 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') | client/dom/scripts/dartgenerator.py » ('J')
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 70cc4a43825910d797017f8837b648c519f4fca3..f8b3bb39a65471ab026365da2f28b3d91b2e8992 100755
--- a/client/dom/scripts/dartdomgenerator.py
+++ b/client/dom/scripts/dartdomgenerator.py
@@ -28,10 +28,39 @@ _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.
+_webkit_renames_inverse = None
nweiz 2012/02/15 21:36:00 This doesn't need to be defined top-level; it's on
Jacob 2012/02/17 00:44:23 Done.
+
+_html_strip_webkit_prefix_classes = [
+ 'Animation',
+ 'AnimationEvent',
+ 'AnimationList',
+ 'BlobBuilder',
+ 'CSSKeyframeRule',
+ 'CSSKeyframesRule',
+ 'CSSMatrix',
+ 'CSSTransformValue',
+ 'Flags',
+ 'LoseContext',
+ 'Point',
+ 'TransitionEvent']
+
+_html_renames = {}
+_html_renames_inverse = {}
+
+def _AddHtmlRename(source, dest):
+ _html_renames[source] = dest
+ _html_renames_inverse[dest] = source
+
+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 GenerateDOM(systems, generate_html_systems, output_dir, use_database_cache):
current_dir = os.path.dirname(__file__)
generator = dartgenerator.DartGenerator(
@@ -42,22 +71,29 @@ 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')
+
+ _webkit_renames_inverse = dict((v,k) for k, v in _webkit_renames.iteritems())
+
generator.RenameTypes(common_database, {
# W3C -> Dart renames
'AbstractView': 'Window',
'Function': 'EventListener',
'DOMStringMap': 'Map<String, String>',
'DOMStringList': 'List<String>',
- })
+ }, False)
generator.FilterMembersWithUnidentifiedTypes(common_database)
generator.ConvertToDartTypes(common_database)
webkit_database = common_database.Clone()
- 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)
@@ -69,7 +105,24 @@ 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:
+
+ for interface in common_database.GetInterfaces():
sra1 2012/02/16 04:43:28 It would be nice to move this out of the main flow
Jacob 2012/02/17 00:44:23 Done.
Jacob 2012/02/17 00:44:23 Done.
+ if (interface.id.startswith("HTML") and
+ HasAncestor(interface, ['Element', 'Document'], common_database)):
+ _AddHtmlRename(interface.id, interface.id[4:])
+
+ for subclass in _html_strip_webkit_prefix_classes:
+ _AddHtmlRename('WebKit' + subclass, subclass)
+
+# TODO(jacobr): we almost want to add this commented out line back.
+# _AddHtmlRename('HTMLCollection', 'ElementList')
+# _AddHtmlRename('NodeList', 'ElementList')
+# _AddHtmlRename('HTMLOptionsCollection', 'ElementList')
+ _AddHtmlRename('DOMWindow', 'Window')
+ generator.RenameTypes(webkit_database, _html_renames, True)
generator.Generate(database = webkit_database,
output_dir = webkit_output_dir,
@@ -79,35 +132,55 @@ def GenerateDOM(systems, output_dir):
super_database = common_database,
common_prefix = 'common',
super_map = _webkit_renames_inverse,
- systems = systems)
+ html_map = _html_renames_inverse,
+ systems = systems,
+ generate_html_systems = generate_html_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(',')
+ 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)
+ num_html_systems = ('htmlfrog' in systems) + ('htmldartium' in systems)
sra1 2012/02/16 04:43:28 Move validation as early as feasible.
Jacob 2012/02/17 00:44:23 Done.
+ 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)
- # 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') | client/dom/scripts/dartgenerator.py » ('J')

Powered by Google App Engine
This is Rietveld 408576698