Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 #!/usr/bin/python | 1 #!/usr/bin/python |
| 2 # Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 2 # Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| 3 # for details. All rights reserved. Use of this source code is governed by a | 3 # for details. All rights reserved. Use of this source code is governed by a |
| 4 # BSD-style license that can be found in the LICENSE file. | 4 # BSD-style license that can be found in the LICENSE file. |
| 5 | 5 |
| 6 """This module provides shared functionality for the system to generate | 6 """This module provides shared functionality for the system to generate |
| 7 Dart:html APIs from the IDL database.""" | 7 Dart:html APIs from the IDL database.""" |
| 8 | 8 |
| 9 from systemfrog import * | 9 from systemfrog import * |
| 10 from systeminterface import * | 10 from systeminterface import * |
| (...skipping 430 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 441 # doesn't match the interface hierarchy. | 441 # doesn't match the interface hierarchy. |
| 442 _html_explicit_event_classes = set(['DocumentFragment']) | 442 _html_explicit_event_classes = set(['DocumentFragment']) |
| 443 | 443 |
| 444 def _OnAttributeToEventName(on_method): | 444 def _OnAttributeToEventName(on_method): |
| 445 event_name = on_method.id[2:] | 445 event_name = on_method.id[2:] |
| 446 if event_name in _on_attribute_to_event_name_mapping: | 446 if event_name in _on_attribute_to_event_name_mapping: |
| 447 return _on_attribute_to_event_name_mapping[event_name] | 447 return _on_attribute_to_event_name_mapping[event_name] |
| 448 else: | 448 else: |
| 449 return event_name | 449 return event_name |
| 450 | 450 |
| 451 def _DomToHtmlEvents(interface_id, events): | 451 def DomToHtmlEvents(interface_id, events): |
| 452 event_names = set(map(_OnAttributeToEventName, events)) | 452 event_names = set(map(_OnAttributeToEventName, events)) |
| 453 if interface_id in _html_manual_events: | 453 if interface_id in _html_manual_events: |
| 454 for manual_event_name in _html_manual_events[interface_id]: | 454 for manual_event_name in _html_manual_events[interface_id]: |
| 455 event_names.add(manual_event_name) | 455 event_names.add(manual_event_name) |
| 456 | 456 |
| 457 return sorted(event_names, key=lambda name: _html_event_names[name]) | 457 return sorted(event_names, key=lambda name: _html_event_names[name]) |
| 458 | 458 |
| 459 def DomToHtmlEvent(event_name): | |
| 460 assert event_name in _html_event_names, 'No known html even name for event: ' + event_name | |
|
sra1
2012/05/14 17:29:15
Line length.
podivilov
2012/05/15 10:24:26
Done.
| |
| 461 return _html_event_names[event_name] | |
| 462 | |
| 459 # ------------------------------------------------------------------------------ | 463 # ------------------------------------------------------------------------------ |
| 460 class HtmlSystemShared(object): | 464 class HtmlSystemShared(object): |
| 461 | 465 |
| 462 def __init__(self, database, generator): | 466 def __init__(self, database, generator): |
| 463 self._event_classes = set() | 467 self._event_classes = set() |
| 464 self._seen_event_names = {} | 468 self._seen_event_names = {} |
| 465 self._database = database | 469 self._database = database |
| 466 self._generator = generator | 470 self._generator = generator |
| 467 | 471 |
| 468 def _AllowInHtmlLibrary(self, interface, member, member_prefix): | 472 def _AllowInHtmlLibrary(self, interface, member, member_prefix): |
| (...skipping 302 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 771 NAME=html_name, | 775 NAME=html_name, |
| 772 PARAMS=info.ParametersInterfaceDeclaration()) | 776 PARAMS=info.ParametersInterfaceDeclaration()) |
| 773 | 777 |
| 774 def FinishInterface(self): | 778 def FinishInterface(self): |
| 775 pass | 779 pass |
| 776 | 780 |
| 777 def AddConstant(self, constant): | 781 def AddConstant(self, constant): |
| 778 self._EmitConstant(self._members_emitter, constant) | 782 self._EmitConstant(self._members_emitter, constant) |
| 779 | 783 |
| 780 def AddEventAttributes(self, event_attrs): | 784 def AddEventAttributes(self, event_attrs): |
| 781 event_attrs = _DomToHtmlEvents(self._interface.id, event_attrs) | 785 event_attrs = DomToHtmlEvents(self._interface.id, event_attrs) |
| 782 self._shared._event_classes.add(self._interface.id) | 786 self._shared._event_classes.add(self._interface.id) |
| 783 events_interface = self._interface.id + 'Events' | 787 events_interface = self._interface.id + 'Events' |
| 784 self._EmitEventGetter(events_interface) | 788 self._EmitEventGetter(events_interface) |
| 785 | 789 |
| 786 events_members = self._emitter.Emit( | 790 events_members = self._emitter.Emit( |
| 787 '\ninterface $INTERFACE extends $PARENTS {\n$!MEMBERS}\n', | 791 '\ninterface $INTERFACE extends $PARENTS {\n$!MEMBERS}\n', |
| 788 INTERFACE=events_interface, | 792 INTERFACE=events_interface, |
| 789 PARENTS=', '.join( | 793 PARENTS=', '.join( |
| 790 self._shared.GetParentsEventsClasses(self._interface))) | 794 self._shared.GetParentsEventsClasses(self._interface))) |
| 791 | 795 |
| (...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1058 else: | 1062 else: |
| 1059 self._members_emitter.Emit( | 1063 self._members_emitter.Emit( |
| 1060 '\n' | 1064 '\n' |
| 1061 ' $TYPE $NAME($PARAMS) native;\n', | 1065 ' $TYPE $NAME($PARAMS) native;\n', |
| 1062 TYPE=self._NarrowOutputType(info.type_name), | 1066 TYPE=self._NarrowOutputType(info.type_name), |
| 1063 NAME=info.name, | 1067 NAME=info.name, |
| 1064 PARAMS=info.ParametersImplementationDeclaration( | 1068 PARAMS=info.ParametersImplementationDeclaration( |
| 1065 lambda type_name: self._NarrowInputType(type_name))) | 1069 lambda type_name: self._NarrowInputType(type_name))) |
| 1066 | 1070 |
| 1067 def AddEventAttributes(self, event_attrs): | 1071 def AddEventAttributes(self, event_attrs): |
| 1068 event_attrs = _DomToHtmlEvents(self._interface.id, event_attrs) | 1072 event_attrs = DomToHtmlEvents(self._interface.id, event_attrs) |
| 1069 events_class = '_' + self._interface.id + 'EventsImpl' | 1073 events_class = '_' + self._interface.id + 'EventsImpl' |
| 1070 events_interface = self._interface.id + 'Events' | 1074 events_interface = self._interface.id + 'Events' |
| 1071 self._EmitEventGetter(events_class) | 1075 self._EmitEventGetter(events_class) |
| 1072 | 1076 |
| 1073 self._shared._event_classes.add(self._interface.id) | 1077 self._shared._event_classes.add(self._interface.id) |
| 1074 | 1078 |
| 1075 parent_event_class = self._shared.GetParentEventsClass(self._interface) | 1079 parent_event_class = self._shared.GetParentEventsClass(self._interface) |
| 1076 | 1080 |
| 1077 # TODO(jacobr): specify the type of _ptr as EventTarget | 1081 # TODO(jacobr): specify the type of _ptr as EventTarget |
| 1078 events_members = self._dart_code.Emit( | 1082 events_members = self._dart_code.Emit( |
| (...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1312 self._members_emitter.Emit( | 1316 self._members_emitter.Emit( |
| 1313 ' $(CLASSNAME)._wrap(ptr) : super._wrap(ptr);\n', | 1317 ' $(CLASSNAME)._wrap(ptr) : super._wrap(ptr);\n', |
| 1314 CLASSNAME=self._class_name) | 1318 CLASSNAME=self._class_name) |
| 1315 | 1319 |
| 1316 # Emit a factory provider class for the constructor. | 1320 # Emit a factory provider class for the constructor. |
| 1317 constructor_info = AnalyzeConstructor(interface) | 1321 constructor_info = AnalyzeConstructor(interface) |
| 1318 if constructor_info: | 1322 if constructor_info: |
| 1319 self._EmitFactoryProvider(interface_name, constructor_info) | 1323 self._EmitFactoryProvider(interface_name, constructor_info) |
| 1320 | 1324 |
| 1321 emit_events, events = self._shared.GetEventAttributes(self._interface) | 1325 emit_events, events = self._shared.GetEventAttributes(self._interface) |
| 1322 if not emit_events: | 1326 if emit_events: |
| 1323 return | 1327 self._members_emitter.Emit( |
| 1324 elif events: | 1328 '\n' |
| 1325 self.AddEventAttributes(events) | 1329 ' Events get on() => $THIS.on;\n', |
| 1326 else: | 1330 THIS=self.DomObjectName()) |
| 1327 parent_events_class = self._shared.GetParentEventsClass(self._interface) | |
| 1328 self._EmitEventGetter('_' + parent_events_class + 'Impl') | |
| 1329 | 1331 |
| 1330 def _EmitFactoryProvider(self, interface_name, constructor_info): | 1332 def _EmitFactoryProvider(self, interface_name, constructor_info): |
| 1331 template_file = 'factoryprovider_%s.darttemplate' % interface_name | 1333 template_file = 'factoryprovider_%s.darttemplate' % interface_name |
| 1332 template = self._system._templates.TryLoad(template_file) | 1334 template = self._system._templates.TryLoad(template_file) |
| 1333 if not template: | 1335 if not template: |
| 1334 template = self._system._templates.Load('factoryprovider.darttemplate') | 1336 template = self._system._templates.Load('factoryprovider.darttemplate') |
| 1335 | 1337 |
| 1336 factory_provider = '_' + interface_name + 'FactoryProvider' | 1338 factory_provider = '_' + interface_name + 'FactoryProvider' |
| 1337 emitter = self._system._ImplFileEmitter(factory_provider) | 1339 emitter = self._system._ImplFileEmitter(factory_provider) |
| 1338 emitter.Emit( | 1340 emitter.Emit( |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1423 THIS=self.DomObjectName()) | 1425 THIS=self.DomObjectName()) |
| 1424 | 1426 |
| 1425 def AddSecondaryAttribute(self, interface, getter, setter): | 1427 def AddSecondaryAttribute(self, interface, getter, setter): |
| 1426 self._SecondaryContext(interface) | 1428 self._SecondaryContext(interface) |
| 1427 self.AddAttribute(getter, setter) | 1429 self.AddAttribute(getter, setter) |
| 1428 | 1430 |
| 1429 def AddSecondaryOperation(self, interface, info): | 1431 def AddSecondaryOperation(self, interface, info): |
| 1430 self._SecondaryContext(interface) | 1432 self._SecondaryContext(interface) |
| 1431 self.AddOperation(info) | 1433 self.AddOperation(info) |
| 1432 | 1434 |
| 1433 def AddEventAttributes(self, event_attrs): | |
| 1434 event_attrs = _DomToHtmlEvents(self._interface.id, event_attrs) | |
| 1435 events_class = '_' + self._interface.id + 'EventsImpl' | |
| 1436 events_interface = self._interface.id + 'Events' | |
| 1437 self._EmitEventGetter(events_class) | |
| 1438 | |
| 1439 self._shared._event_classes.add(self._interface.id) | |
| 1440 | |
| 1441 parent_event_class = self._shared.GetParentEventsClass(self._interface) | |
| 1442 | |
| 1443 # TODO(jacobr): specify the type of _ptr as EventTarget | |
| 1444 events_members = self._dart_code.Emit( | |
| 1445 '\n' | |
| 1446 'class $CLASSNAME extends $SUPER implements $INTERFACE {\n' | |
| 1447 ' $CLASSNAME(_ptr) : super(_ptr);\n' | |
| 1448 '$!MEMBERS}\n', | |
| 1449 CLASSNAME=events_class, | |
| 1450 INTERFACE=events_interface, | |
| 1451 SUPER='_' + parent_event_class + 'Impl') | |
| 1452 | |
| 1453 for event_name in event_attrs: | |
| 1454 if event_name in _html_event_names: | |
| 1455 events_members.Emit( | |
| 1456 "\n" | |
| 1457 " EventListenerList get $NAME() => _get('$RAWNAME');\n", | |
| 1458 RAWNAME=event_name, | |
| 1459 NAME=_html_event_names[event_name]) | |
| 1460 else: | |
| 1461 raise Exception('No known html even name for event: ' + event_name) | |
| 1462 | |
| 1463 def _EmitEventGetter(self, events_class): | |
| 1464 self._members_emitter.Emit( | |
| 1465 '\n' | |
| 1466 ' $TYPE get on() {\n' | |
| 1467 ' if (_on == null) _on = new $TYPE(this);\n' | |
| 1468 ' return _on;\n' | |
| 1469 ' }\n', | |
| 1470 TYPE=events_class) | |
| 1471 | |
| 1472 def _SecondaryContext(self, interface): | 1435 def _SecondaryContext(self, interface): |
| 1473 if interface is not self._current_secondary_parent: | 1436 if interface is not self._current_secondary_parent: |
| 1474 self._current_secondary_parent = interface | 1437 self._current_secondary_parent = interface |
| 1475 self._members_emitter.Emit('\n // From $WHERE\n', WHERE=interface.id) | 1438 self._members_emitter.Emit('\n // From $WHERE\n', WHERE=interface.id) |
| 1476 | 1439 |
| 1477 # TODO(jacobr): change this to more directly match the frog version. | 1440 # TODO(jacobr): change this to more directly match the frog version. |
| 1478 def AddIndexer(self, element_type): | 1441 def AddIndexer(self, element_type): |
| 1479 """Adds all the methods required to complete implementation of List.""" | 1442 """Adds all the methods required to complete implementation of List.""" |
| 1480 # We would like to simply inherit the implementation of everything except | 1443 # We would like to simply inherit the implementation of everything except |
| 1481 # get length(), [], and maybe []=. It is possible to extend from a base | 1444 # get length(), [], and maybe []=. It is possible to extend from a base |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1579 self._members_emitter.Emit( | 1542 self._members_emitter.Emit( |
| 1580 '\n' | 1543 '\n' |
| 1581 ' $TYPE $HTML_NAME($PARAMS) => $FUNCTION_CALL;\n', | 1544 ' $TYPE $HTML_NAME($PARAMS) => $FUNCTION_CALL;\n', |
| 1582 TYPE=info.type_name, | 1545 TYPE=info.type_name, |
| 1583 HTML_NAME=html_name, | 1546 HTML_NAME=html_name, |
| 1584 PARAMS=info.ParametersImplementationDeclaration(), | 1547 PARAMS=info.ParametersImplementationDeclaration(), |
| 1585 FUNCTION_CALL=function_call) | 1548 FUNCTION_CALL=function_call) |
| 1586 | 1549 |
| 1587 def AddStaticOperation(self, info): | 1550 def AddStaticOperation(self, info): |
| 1588 pass | 1551 pass |
| OLD | NEW |