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

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, \
461 'No known html even name for event: ' + event_name
Anton Muhin 2012/05/15 14:54:57 nit: even<t>
podivilov 2012/05/16 12:32:24 Done.
462 return _html_event_names[event_name]
463
459 # ------------------------------------------------------------------------------ 464 # ------------------------------------------------------------------------------
460 class HtmlSystemShared(object): 465 class HtmlSystemShared(object):
461 466
462 def __init__(self, database, generator): 467 def __init__(self, database, generator):
463 self._event_classes = set() 468 self._event_classes = set()
464 self._seen_event_names = {} 469 self._seen_event_names = {}
465 self._database = database 470 self._database = database
466 self._generator = generator 471 self._generator = generator
467 472
468 def _AllowInHtmlLibrary(self, interface, member, member_prefix): 473 def _AllowInHtmlLibrary(self, interface, member, member_prefix):
(...skipping 302 matching lines...) Expand 10 before | Expand all | Expand 10 after
771 NAME=html_name, 776 NAME=html_name,
772 PARAMS=info.ParametersInterfaceDeclaration()) 777 PARAMS=info.ParametersInterfaceDeclaration())
773 778
774 def FinishInterface(self): 779 def FinishInterface(self):
775 pass 780 pass
776 781
777 def AddConstant(self, constant): 782 def AddConstant(self, constant):
778 self._EmitConstant(self._members_emitter, constant) 783 self._EmitConstant(self._members_emitter, constant)
779 784
780 def AddEventAttributes(self, event_attrs): 785 def AddEventAttributes(self, event_attrs):
781 event_attrs = _DomToHtmlEvents(self._interface.id, event_attrs) 786 event_attrs = DomToHtmlEvents(self._interface.id, event_attrs)
782 self._shared._event_classes.add(self._interface.id) 787 self._shared._event_classes.add(self._interface.id)
783 events_interface = self._interface.id + 'Events' 788 events_interface = self._interface.id + 'Events'
784 self._EmitEventGetter(events_interface) 789 self._EmitEventGetter(events_interface)
785 790
786 events_members = self._emitter.Emit( 791 events_members = self._emitter.Emit(
787 '\ninterface $INTERFACE extends $PARENTS {\n$!MEMBERS}\n', 792 '\ninterface $INTERFACE extends $PARENTS {\n$!MEMBERS}\n',
788 INTERFACE=events_interface, 793 INTERFACE=events_interface,
789 PARENTS=', '.join( 794 PARENTS=', '.join(
790 self._shared.GetParentsEventsClasses(self._interface))) 795 self._shared.GetParentsEventsClasses(self._interface)))
791 796
(...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after
1058 else: 1063 else:
1059 self._members_emitter.Emit( 1064 self._members_emitter.Emit(
1060 '\n' 1065 '\n'
1061 ' $TYPE $NAME($PARAMS) native;\n', 1066 ' $TYPE $NAME($PARAMS) native;\n',
1062 TYPE=self._NarrowOutputType(info.type_name), 1067 TYPE=self._NarrowOutputType(info.type_name),
1063 NAME=info.name, 1068 NAME=info.name,
1064 PARAMS=info.ParametersImplementationDeclaration( 1069 PARAMS=info.ParametersImplementationDeclaration(
1065 lambda type_name: self._NarrowInputType(type_name))) 1070 lambda type_name: self._NarrowInputType(type_name)))
1066 1071
1067 def AddEventAttributes(self, event_attrs): 1072 def AddEventAttributes(self, event_attrs):
1068 event_attrs = _DomToHtmlEvents(self._interface.id, event_attrs) 1073 event_attrs = DomToHtmlEvents(self._interface.id, event_attrs)
1069 events_class = '_' + self._interface.id + 'EventsImpl' 1074 events_class = '_' + self._interface.id + 'EventsImpl'
1070 events_interface = self._interface.id + 'Events' 1075 events_interface = self._interface.id + 'Events'
1071 self._EmitEventGetter(events_class) 1076 self._EmitEventGetter(events_class)
1072 1077
1073 self._shared._event_classes.add(self._interface.id) 1078 self._shared._event_classes.add(self._interface.id)
1074 1079
1075 parent_event_class = self._shared.GetParentEventsClass(self._interface) 1080 parent_event_class = self._shared.GetParentEventsClass(self._interface)
1076 1081
1077 # TODO(jacobr): specify the type of _ptr as EventTarget 1082 # TODO(jacobr): specify the type of _ptr as EventTarget
1078 events_members = self._dart_code.Emit( 1083 events_members = self._dart_code.Emit(
(...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after
1312 self._members_emitter.Emit( 1317 self._members_emitter.Emit(
1313 ' $(CLASSNAME)._wrap(ptr) : super._wrap(ptr);\n', 1318 ' $(CLASSNAME)._wrap(ptr) : super._wrap(ptr);\n',
1314 CLASSNAME=self._class_name) 1319 CLASSNAME=self._class_name)
1315 1320
1316 # Emit a factory provider class for the constructor. 1321 # Emit a factory provider class for the constructor.
1317 constructor_info = AnalyzeConstructor(interface) 1322 constructor_info = AnalyzeConstructor(interface)
1318 if constructor_info: 1323 if constructor_info:
1319 self._EmitFactoryProvider(interface_name, constructor_info) 1324 self._EmitFactoryProvider(interface_name, constructor_info)
1320 1325
1321 emit_events, events = self._shared.GetEventAttributes(self._interface) 1326 emit_events, events = self._shared.GetEventAttributes(self._interface)
1322 if not emit_events: 1327 if emit_events:
1323 return 1328 self._members_emitter.Emit(
1324 elif events: 1329 '\n'
1325 self.AddEventAttributes(events) 1330 ' Events get on() => $THIS.on;\n',
1326 else: 1331 THIS=self.DomObjectName())
1327 parent_events_class = self._shared.GetParentEventsClass(self._interface)
1328 self._EmitEventGetter('_' + parent_events_class + 'Impl')
1329 1332
1330 def _EmitFactoryProvider(self, interface_name, constructor_info): 1333 def _EmitFactoryProvider(self, interface_name, constructor_info):
1331 template_file = 'factoryprovider_%s.darttemplate' % interface_name 1334 template_file = 'factoryprovider_%s.darttemplate' % interface_name
1332 template = self._system._templates.TryLoad(template_file) 1335 template = self._system._templates.TryLoad(template_file)
1333 if not template: 1336 if not template:
1334 template = self._system._templates.Load('factoryprovider.darttemplate') 1337 template = self._system._templates.Load('factoryprovider.darttemplate')
1335 1338
1336 factory_provider = '_' + interface_name + 'FactoryProvider' 1339 factory_provider = '_' + interface_name + 'FactoryProvider'
1337 emitter = self._system._ImplFileEmitter(factory_provider) 1340 emitter = self._system._ImplFileEmitter(factory_provider)
1338 emitter.Emit( 1341 emitter.Emit(
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
1423 THIS=self.DomObjectName()) 1426 THIS=self.DomObjectName())
1424 1427
1425 def AddSecondaryAttribute(self, interface, getter, setter): 1428 def AddSecondaryAttribute(self, interface, getter, setter):
1426 self._SecondaryContext(interface) 1429 self._SecondaryContext(interface)
1427 self.AddAttribute(getter, setter) 1430 self.AddAttribute(getter, setter)
1428 1431
1429 def AddSecondaryOperation(self, interface, info): 1432 def AddSecondaryOperation(self, interface, info):
1430 self._SecondaryContext(interface) 1433 self._SecondaryContext(interface)
1431 self.AddOperation(info) 1434 self.AddOperation(info)
1432 1435
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): 1436 def _SecondaryContext(self, interface):
1473 if interface is not self._current_secondary_parent: 1437 if interface is not self._current_secondary_parent:
1474 self._current_secondary_parent = interface 1438 self._current_secondary_parent = interface
1475 self._members_emitter.Emit('\n // From $WHERE\n', WHERE=interface.id) 1439 self._members_emitter.Emit('\n // From $WHERE\n', WHERE=interface.id)
1476 1440
1477 # TODO(jacobr): change this to more directly match the frog version. 1441 # TODO(jacobr): change this to more directly match the frog version.
1478 def AddIndexer(self, element_type): 1442 def AddIndexer(self, element_type):
1479 """Adds all the methods required to complete implementation of List.""" 1443 """Adds all the methods required to complete implementation of List."""
1480 # We would like to simply inherit the implementation of everything except 1444 # We would like to simply inherit the implementation of everything except
1481 # get length(), [], and maybe []=. It is possible to extend from a base 1445 # 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( 1543 self._members_emitter.Emit(
1580 '\n' 1544 '\n'
1581 ' $TYPE $HTML_NAME($PARAMS) => $FUNCTION_CALL;\n', 1545 ' $TYPE $HTML_NAME($PARAMS) => $FUNCTION_CALL;\n',
1582 TYPE=info.type_name, 1546 TYPE=info.type_name,
1583 HTML_NAME=html_name, 1547 HTML_NAME=html_name,
1584 PARAMS=info.ParametersImplementationDeclaration(), 1548 PARAMS=info.ParametersImplementationDeclaration(),
1585 FUNCTION_CALL=function_call) 1549 FUNCTION_CALL=function_call)
1586 1550
1587 def AddStaticOperation(self, info): 1551 def AddStaticOperation(self, info):
1588 pass 1552 pass
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698