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

Side by Side Diff: lib/dom/scripts/systemhtml.py

Issue 10332144: Move html events generation to domimpl. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years, 7 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698