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: |