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

Side by Side Diff: client/dom/scripts/dartgenerator.py

Issue 9342008: start of code to generate dart:html using dart:dom scripts (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: merged 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 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 generates Dart APIs from the IDL database.""" 6 """This module generates Dart APIs from the IDL database."""
7 7
8 import emitter 8 import emitter
9 import idlnode 9 import idlnode
10 import logging 10 import logging
(...skipping 358 matching lines...) Expand 10 before | Expand all | Expand 10 after
369 """ 369 """
370 370
371 self._emitters = multiemitter.MultiEmitter() 371 self._emitters = multiemitter.MultiEmitter()
372 self._database = database 372 self._database = database
373 self._output_dir = output_dir 373 self._output_dir = output_dir
374 374
375 self._ComputeInheritanceClosure() 375 self._ComputeInheritanceClosure()
376 376
377 self._systems = [] 377 self._systems = []
378 378
379 # TODO(jmesserly): only create these if needed
379 interface_system = InterfacesSystem( 380 interface_system = InterfacesSystem(
380 TemplateLoader(self._template_dir, ['dom/interface', 'dom', '']), 381 TemplateLoader(self._template_dir, ['dom/interface', 'dom', '']),
381 self._database, self._emitters, self._output_dir) 382 self._database, self._emitters, self._output_dir)
382 self._systems.append(interface_system) 383 self._systems.append(interface_system)
383 384
385 html_interface_system = HtmlInterfacesSystem(
386 TemplateLoader(self._template_dir, ['html/interface', 'html', '']),
387 self._database, self._emitters, self._output_dir)
388 self._systems.append(html_interface_system)
389
384 if 'native' in systems: 390 if 'native' in systems:
385 native_system = NativeImplementationSystem( 391 native_system = NativeImplementationSystem(
386 TemplateLoader(self._template_dir, ['dom/native', 'dom', '']), 392 TemplateLoader(self._template_dir, ['dom/native', 'dom', '']),
387 self._database, self._emitters, self._auxiliary_dir, 393 self._database, self._emitters, self._auxiliary_dir,
388 self._output_dir) 394 self._output_dir)
389 395
390 self._systems.append(native_system) 396 self._systems.append(native_system)
391 397
392 if 'wrapping' in systems: 398 if 'wrapping' in systems:
393 wrapping_system = WrappingImplementationSystem( 399 wrapping_system = WrappingImplementationSystem(
(...skipping 16 matching lines...) Expand all
410 self._systems.append(dummy_system) 416 self._systems.append(dummy_system)
411 417
412 if 'frog' in systems: 418 if 'frog' in systems:
413 frog_system = FrogSystem( 419 frog_system = FrogSystem(
414 TemplateLoader(self._template_dir, ['dom/frog', 'dom', '']), 420 TemplateLoader(self._template_dir, ['dom/frog', 'dom', '']),
415 self._database, self._emitters, self._output_dir) 421 self._database, self._emitters, self._output_dir)
416 422
417 frog_system._interface_system = interface_system 423 frog_system._interface_system = interface_system
418 self._systems.append(frog_system) 424 self._systems.append(frog_system)
419 425
426 if 'htmlfrog' in systems:
427 html_system = HtmlFrogSystem(
428 TemplateLoader(self._template_dir, ['html/frog', 'html', '']),
429 self._database, self._emitters, self._output_dir)
430
431 html_system._interface_system = html_interface_system
432 self._systems.append(html_system)
433
434 if 'htmldartium' in systems:
435 html_system = HtmlDartiumSystem(
436 TemplateLoader(self._template_dir, ['html/dartium', 'html', '']),
437 self._database, self._emitters, self._output_dir)
438
439 html_system._interface_system = html_interface_system
440 self._systems.append(html_system)
420 441
421 # Render all interfaces into Dart and save them in files. 442 # Render all interfaces into Dart and save them in files.
422 for interface in database.GetInterfaces(): 443 for interface in database.GetInterfaces():
423 444
424 super_interface = None 445 super_interface = None
425 super_name = interface.id 446 super_name = interface.id
426 447
427 if not _MatchSourceFilter(source_filter, interface): 448 if not _MatchSourceFilter(source_filter, interface):
428 # Skip this interface since it's not present in the required source 449 # Skip this interface since it's not present in the required source
429 _logger.info('Omitting interface - %s' % interface.id) 450 _logger.info('Omitting interface - %s' % interface.id)
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
476 for system in self._systems] 497 for system in self._systems]
477 498
478 for generator in generators: 499 for generator in generators:
479 generator.StartInterface() 500 generator.StartInterface()
480 501
481 for const in sorted(interface.constants, ConstantOutputOrder): 502 for const in sorted(interface.constants, ConstantOutputOrder):
482 for generator in generators: 503 for generator in generators:
483 generator.AddConstant(const) 504 generator.AddConstant(const)
484 505
485 attributes = [attr for attr in interface.attributes 506 attributes = [attr for attr in interface.attributes
486 if not self._OmitAttribute(interface, attr)] 507 if not self._IsEventAttribute(interface, attr)]
487 for (getter, setter) in _PairUpAttributes(attributes): 508 for (getter, setter) in _PairUpAttributes(attributes):
488 for generator in generators: 509 for generator in generators:
489 generator.AddAttribute(getter, setter) 510 generator.AddAttribute(getter, setter)
490 511
512 events = _PairUpAttributes([attr for attr in interface.attributes
513 if self._IsEventAttribute(interface, attr)])
514 if events:
515 for generator in generators:
516 generator.AddEventAttributes(events)
517
491 # The implementation should define an indexer if the interface directly 518 # The implementation should define an indexer if the interface directly
492 # extends List. 519 # extends List.
493 element_type = MaybeListElementType(interface) 520 element_type = MaybeListElementType(interface)
494 if element_type: 521 if element_type:
495 for generator in generators: 522 for generator in generators:
496 generator.AddIndexer(element_type) 523 generator.AddIndexer(element_type)
497 524
498 # Group overloaded operations by id 525 # Group overloaded operations by id
499 operationsById = {} 526 operationsById = {}
500 for operation in interface.operations: 527 for operation in interface.operations:
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
535 if not any(op.id == id for op in interface.operations): 562 if not any(op.id == id for op in interface.operations):
536 operations = operationsById[id] 563 operations = operationsById[id]
537 info = _AnalyzeOperation(interface, operations) 564 info = _AnalyzeOperation(interface, operations)
538 for generator in generators: 565 for generator in generators:
539 generator.AddSecondaryOperation(parent_interface, info) 566 generator.AddSecondaryOperation(parent_interface, info)
540 567
541 for generator in generators: 568 for generator in generators:
542 generator.FinishInterface() 569 generator.FinishInterface()
543 return 570 return
544 571
545 def _OmitAttribute(self, interface, attr): 572 def _IsEventAttribute(self, interface, attr):
546 # Remove EventListener attributes like 'onclick' when addEventListener 573 # Remove EventListener attributes like 'onclick' when addEventListener
547 # is available. 574 # is available.
548 if attr.type.id == 'EventListener': 575 if attr.type.id == 'EventListener':
549 if 'EventTarget' in self._AllImplementedInterfaces(interface): 576 if 'EventTarget' in self._AllImplementedInterfaces(interface):
550 return True 577 return True
551 return False 578 return False
552 579
553 def _DefinesSameAttribute(self, interface, attr1): 580 def _DefinesSameAttribute(self, interface, attr1):
554 return any(attr1.id == attr2.id 581 return any(attr1.id == attr2.id
555 and attr1.is_fc_getter == attr2.is_fc_getter 582 and attr1.is_fc_getter == attr2.is_fc_getter
(...skipping 419 matching lines...) Expand 10 before | Expand all | Expand 10 after
975 1002
976 1003
977 def _FilePathForDartInterface(self, interface_name): 1004 def _FilePathForDartInterface(self, interface_name):
978 """Returns the file path of the Dart interface definition.""" 1005 """Returns the file path of the Dart interface definition."""
979 return os.path.join(self._output_dir, 'src', 'interface', 1006 return os.path.join(self._output_dir, 'src', 'interface',
980 '%s.dart' % interface_name) 1007 '%s.dart' % interface_name)
981 1008
982 1009
983 # ------------------------------------------------------------------------------ 1010 # ------------------------------------------------------------------------------
984 1011
1012 class HtmlInterfacesSystem(System):
1013
1014 def __init__(self, templates, database, emitters, output_dir):
1015 super(HtmlInterfacesSystem, self).__init__(
1016 templates, database, emitters, output_dir)
1017 self._dart_interface_file_paths = []
1018
1019 def InterfaceGenerator(self,
1020 interface,
1021 common_prefix,
1022 super_interface_name,
1023 source_filter):
1024 """."""
1025 interface_name = interface.id
1026 dart_interface_file_path = self._FilePathForDartInterface(interface_name)
1027
1028 self._dart_interface_file_paths.append(dart_interface_file_path)
1029
1030 dart_interface_code = self._emitters.FileEmitter(dart_interface_file_path)
1031
1032 template_file = 'interface_%s.darttemplate' % interface_name
1033 template = self._templates.TryLoad(template_file)
1034 if not template:
1035 template = self._templates.Load('interface.darttemplate')
1036
1037 return HtmlDartInterfaceGenerator(
1038 interface, dart_interface_code,
1039 template,
1040 common_prefix, super_interface_name,
1041 source_filter)
1042
1043 def ProcessCallback(self, interface, info):
1044 """Generates a typedef for the callback interface."""
1045 interface_name = interface.id
1046 file_path = self._FilePathForDartInterface(interface_name)
1047 self._ProcessCallback(interface, info, file_path)
1048
1049 def GenerateLibraries(self, lib_dir):
1050 pass
1051
1052
1053 def _FilePathForDartInterface(self, interface_name):
1054 """Returns the file path of the Dart interface definition."""
1055 # TODO(jmesserly): is this the right path
1056 return os.path.join(self._output_dir, 'html', 'interface',
1057 '%s.dart' % interface_name)
1058
1059
1060 # ------------------------------------------------------------------------------
1061
985 class DummyImplementationSystem(System): 1062 class DummyImplementationSystem(System):
986 """Generates a dummy implementation for use by the editor analysis. 1063 """Generates a dummy implementation for use by the editor analysis.
987 1064
988 All the code comes from hand-written library files. 1065 All the code comes from hand-written library files.
989 """ 1066 """
990 1067
991 def __init__(self, templates, database, emitters, output_dir): 1068 def __init__(self, templates, database, emitters, output_dir):
992 super(DummyImplementationSystem, self).__init__( 1069 super(DummyImplementationSystem, self).__init__(
993 templates, database, emitters, output_dir) 1070 templates, database, emitters, output_dir)
994 1071
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
1087 """.""" 1164 """."""
1088 dart_frog_file_path = self._FilePathForFrogImpl(interface.id) 1165 dart_frog_file_path = self._FilePathForFrogImpl(interface.id)
1089 self._dart_frog_file_paths.append(dart_frog_file_path) 1166 self._dart_frog_file_paths.append(dart_frog_file_path)
1090 1167
1091 template_file = 'impl_%s.darttemplate' % interface.id 1168 template_file = 'impl_%s.darttemplate' % interface.id
1092 template = self._templates.TryLoad(template_file) 1169 template = self._templates.TryLoad(template_file)
1093 if not template: 1170 if not template:
1094 template = self._templates.Load('frog_impl.darttemplate') 1171 template = self._templates.Load('frog_impl.darttemplate')
1095 1172
1096 dart_code = self._emitters.FileEmitter(dart_frog_file_path) 1173 dart_code = self._emitters.FileEmitter(dart_frog_file_path)
1097 # dart_code.Emit(self._templates.Load('frog_impl.darttemplate'))
1098 return FrogInterfaceGenerator(self, interface, template, 1174 return FrogInterfaceGenerator(self, interface, template,
1099 super_interface_name, dart_code) 1175 super_interface_name, dart_code)
1100 1176
1101 #def ProcessCallback(self, interface, info):
1102 # """Generates a typedef for the callback interface."""
1103 # file_path = self._FilePathForFrogImpl(interface.id)
1104 # self._ProcessCallback(interface, info, file_path)
1105
1106 def GenerateLibraries(self, lib_dir): 1177 def GenerateLibraries(self, lib_dir):
1107 self._GenerateLibFile( 1178 self._GenerateLibFile(
1108 'frog_dom.darttemplate', 1179 'frog_dom.darttemplate',
1109 os.path.join(lib_dir, 'dom_frog.dart'), 1180 os.path.join(lib_dir, 'dom_frog.dart'),
1110 (self._interface_system._dart_interface_file_paths + 1181 (self._interface_system._dart_interface_file_paths +
1111 self._interface_system._dart_callback_file_paths + 1182 self._interface_system._dart_callback_file_paths +
1112 self._dart_frog_file_paths)) 1183 self._dart_frog_file_paths))
1113 1184
1114 def Finish(self): 1185 def Finish(self):
1115 pass 1186 pass
1116 1187
1117 def _FilePathForFrogImpl(self, interface_name): 1188 def _FilePathForFrogImpl(self, interface_name):
1118 """Returns the file path of the Frog implementation.""" 1189 """Returns the file path of the Frog implementation."""
1119 return os.path.join(self._output_dir, 'src', 'frog', 1190 return os.path.join(self._output_dir, 'src', 'frog',
1120 '%s.dart' % interface_name) 1191 '%s.dart' % interface_name)
1121 1192
1193
1194 # ------------------------------------------------------------------------------
1195
1196 class HtmlFrogSystem(System):
1197
1198 def __init__(self, templates, database, emitters, output_dir):
1199 super(HtmlFrogSystem, self).__init__(
1200 templates, database, emitters, output_dir)
1201 self._dart_frog_file_paths = []
1202
1203 def InterfaceGenerator(self,
1204 interface,
1205 common_prefix,
1206 super_interface_name,
1207 source_filter):
1208 """."""
1209 dart_frog_file_path = self._FilePathForFrogImpl(interface.id)
1210 self._dart_frog_file_paths.append(dart_frog_file_path)
1211
1212 template_file = 'impl_%s.darttemplate' % interface.id
1213 template = self._templates.TryLoad(template_file)
1214 if not template:
1215 template = self._templates.Load('frog_impl.darttemplate')
1216
1217 dart_code = self._emitters.FileEmitter(dart_frog_file_path)
1218 return HtmlFrogInterfaceGenerator(self, interface, template,
1219 super_interface_name, dart_code)
1220
1221 def GenerateLibraries(self, lib_dir):
1222 self._GenerateLibFile(
1223 'html_frog.darttemplate',
1224 os.path.join(lib_dir, 'html_frog.dart'),
1225 (self._interface_system._dart_interface_file_paths +
1226 self._interface_system._dart_callback_file_paths +
1227 self._dart_frog_file_paths))
1228
1229 def Finish(self):
1230 pass
1231
1232 def _FilePathForFrogImpl(self, interface_name):
1233 """Returns the file path of the Frog implementation."""
1234 # TODO(jmesserly): is this the right path
1235 return os.path.join(self._output_dir, 'html', 'frog',
1236 '%s.dart' % interface_name)
1237
1122 # ------------------------------------------------------------------------------ 1238 # ------------------------------------------------------------------------------
1123 1239
1124 class DartInterfaceGenerator(object): 1240 class DartInterfaceGenerator(object):
1125 """Generates Dart Interface definition for one DOM IDL interface.""" 1241 """Generates Dart Interface definition for one DOM IDL interface."""
1126 1242
1127 def __init__(self, interface, emitter, template, 1243 def __init__(self, interface, emitter, template,
1128 common_prefix, super_interface, source_filter): 1244 common_prefix, super_interface, source_filter):
1129 """Generates Dart code for the given interface. 1245 """Generates Dart code for the given interface.
1130 1246
1131 Args: 1247 Args:
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
1254 NAME=info.name, 1370 NAME=info.name,
1255 PARAMS=info.ParametersInterfaceDeclaration()) 1371 PARAMS=info.ParametersInterfaceDeclaration())
1256 1372
1257 # Interfaces get secondary members directly via the superinterfaces. 1373 # Interfaces get secondary members directly via the superinterfaces.
1258 def AddSecondaryAttribute(self, interface, getter, setter): 1374 def AddSecondaryAttribute(self, interface, getter, setter):
1259 pass 1375 pass
1260 1376
1261 def AddSecondaryOperation(self, interface, attr): 1377 def AddSecondaryOperation(self, interface, attr):
1262 pass 1378 pass
1263 1379
1380 def AddEventAttributes(self, event_attrs):
1381 pass
1264 1382
1265 # Given a sorted sequence of type identifiers, return an appropriate type 1383 # Given a sorted sequence of type identifiers, return an appropriate type
1266 # name 1384 # name
1267 def TypeName(typeIds, interface): 1385 def TypeName(typeIds, interface):
1268 # Dynamically type this field for now. 1386 # Dynamically type this field for now.
1269 return 'var' 1387 return 'var'
1270 1388
1389 # ------------------------------------------------------------------------------
1390
1391 # TODO(jmesserly): inheritance is probably not the right way to factor this long
1392 # term, but it makes merging better for now.
1393 class HtmlDartInterfaceGenerator(DartInterfaceGenerator):
1394 """Generates Dart Interface definition for one DOM IDL interface."""
1395
1396 def __init__(self, interface, emitter, template,
1397 common_prefix, super_interface, source_filter):
1398 super(HtmlDartInterfaceGenerator, self).__init__(interface,
1399 emitter, template, common_prefix, super_interface, source_filter)
1400
1401 def AddEventAttributes(self, event_attrs):
1402 events_interface = self._interface.id + 'Events'
1403 self._members_emitter.Emit('\n $TYPE get on();\n',
1404 TYPE=events_interface)
1405 events_members = self._emitter.Emit(
1406 '\ninterface $INTERFACE {\n$!MEMBERS}\n',
1407 INTERFACE=events_interface)
1408
1409 for getter, setter in event_attrs:
1410 event = getter or setter
1411 events_members.Emit('\n EventListenerList get $NAME();\n', NAME=event.id)
1412
1271 1413
1272 # ------------------------------------------------------------------------------ 1414 # ------------------------------------------------------------------------------
1273 1415
1274 class DummyInterfaceGenerator(object): 1416 class DummyInterfaceGenerator(object):
1275 """Generates nothing.""" 1417 """Generates nothing."""
1276 1418
1277 def __init__(self, system, interface): 1419 def __init__(self, system, interface):
1278 pass 1420 pass
1279 1421
1280 def StartInterface(self): 1422 def StartInterface(self):
(...skipping 16 matching lines...) Expand all
1297 1439
1298 def AddIndexer(self, element_type): 1440 def AddIndexer(self, element_type):
1299 pass 1441 pass
1300 1442
1301 def AddTypedArrayConstructors(self, element_type): 1443 def AddTypedArrayConstructors(self, element_type):
1302 pass 1444 pass
1303 1445
1304 def AddOperation(self, info): 1446 def AddOperation(self, info):
1305 pass 1447 pass
1306 1448
1449 def AddEventAttributes(self, event_attrs):
1450 pass
1451
1307 # ------------------------------------------------------------------------------ 1452 # ------------------------------------------------------------------------------
1308 1453
1309 class WrappingInterfaceGenerator(object): 1454 class WrappingInterfaceGenerator(object):
1310 """Generates Dart and JS implementation for one DOM IDL interface.""" 1455 """Generates Dart and JS implementation for one DOM IDL interface."""
1311 1456
1312 def __init__(self, interface, super_interface, dart_code, base_members): 1457 def __init__(self, interface, super_interface, dart_code, base_members):
1313 """Generates Dart and JS code for the given interface. 1458 """Generates Dart and JS code for the given interface.
1314 1459
1315 Args: 1460 Args:
1316 1461
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
1425 NAME=attr.id, TYPE=attr.type.id, METHOD=method_name) 1570 NAME=attr.id, TYPE=attr.type.id, METHOD=method_name)
1426 1571
1427 def AddSecondaryAttribute(self, interface, getter, setter): 1572 def AddSecondaryAttribute(self, interface, getter, setter):
1428 self._SecondaryContext(interface) 1573 self._SecondaryContext(interface)
1429 self.AddAttribute(getter, setter) 1574 self.AddAttribute(getter, setter)
1430 1575
1431 def AddSecondaryOperation(self, interface, info): 1576 def AddSecondaryOperation(self, interface, info):
1432 self._SecondaryContext(interface) 1577 self._SecondaryContext(interface)
1433 self.AddOperation(info) 1578 self.AddOperation(info)
1434 1579
1580 def AddEventAttributes(self, event_attrs):
1581 pass
1582
1435 def _SecondaryContext(self, interface): 1583 def _SecondaryContext(self, interface):
1436 if interface is not self._current_secondary_parent: 1584 if interface is not self._current_secondary_parent:
1437 self._current_secondary_parent = interface 1585 self._current_secondary_parent = interface
1438 self._members_emitter.Emit('\n // From $WHERE\n', WHERE=interface.id) 1586 self._members_emitter.Emit('\n // From $WHERE\n', WHERE=interface.id)
1439 1587
1440 def AddIndexer(self, element_type): 1588 def AddIndexer(self, element_type):
1441 """Adds all the methods required to complete implementation of List.""" 1589 """Adds all the methods required to complete implementation of List."""
1442 # We would like to simply inherit the implementation of everything except 1590 # We would like to simply inherit the implementation of everything except
1443 # get length(), [], and maybe []=. It is possible to extend from a base 1591 # get length(), [], and maybe []=. It is possible to extend from a base
1444 # array implementation class only when there is no other implementation 1592 # array implementation class only when there is no other implementation
(...skipping 477 matching lines...) Expand 10 before | Expand all | Expand 10 after
1922 NAME=attr.id, TYPE=self._NarrowInputType(attr.type.id)) 2070 NAME=attr.id, TYPE=self._NarrowInputType(attr.type.id))
1923 2071
1924 def AddSecondaryAttribute(self, interface, getter, setter): 2072 def AddSecondaryAttribute(self, interface, getter, setter):
1925 self._SecondaryContext(interface) 2073 self._SecondaryContext(interface)
1926 self.AddAttribute(getter, setter) 2074 self.AddAttribute(getter, setter)
1927 2075
1928 def AddSecondaryOperation(self, interface, info): 2076 def AddSecondaryOperation(self, interface, info):
1929 self._SecondaryContext(interface) 2077 self._SecondaryContext(interface)
1930 self.AddOperation(info) 2078 self.AddOperation(info)
1931 2079
2080 def AddEventAttributes(self, event_attrs):
2081 pass
2082
1932 def _SecondaryContext(self, interface): 2083 def _SecondaryContext(self, interface):
1933 if interface is not self._current_secondary_parent: 2084 if interface is not self._current_secondary_parent:
1934 self._current_secondary_parent = interface 2085 self._current_secondary_parent = interface
1935 self._members_emitter.Emit('\n // From $WHERE\n', WHERE=interface.id) 2086 self._members_emitter.Emit('\n // From $WHERE\n', WHERE=interface.id)
1936 2087
1937 def AddIndexer(self, element_type): 2088 def AddIndexer(self, element_type):
1938 """Adds all the methods required to complete implementation of List.""" 2089 """Adds all the methods required to complete implementation of List."""
1939 # We would like to simply inherit the implementation of everything except 2090 # We would like to simply inherit the implementation of everything except
1940 # get length(), [], and maybe []=. It is possible to extend from a base 2091 # get length(), [], and maybe []=. It is possible to extend from a base
1941 # array implementation class only when there is no other implementation 2092 # array implementation class only when there is no other implementation
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
2002 '\n' 2153 '\n'
2003 ' $TYPE $NAME($PARAMS) native;\n', 2154 ' $TYPE $NAME($PARAMS) native;\n',
2004 TYPE=self._NarrowOutputType(info.type_name), 2155 TYPE=self._NarrowOutputType(info.type_name),
2005 NAME=info.name, 2156 NAME=info.name,
2006 PARAMS=info.ParametersImplementationDeclaration( 2157 PARAMS=info.ParametersImplementationDeclaration(
2007 lambda type_name: self._NarrowInputType(type_name))) 2158 lambda type_name: self._NarrowInputType(type_name)))
2008 2159
2009 2160
2010 # ------------------------------------------------------------------------------ 2161 # ------------------------------------------------------------------------------
2011 2162
2163 # TODO(jmesserly): inheritance is probably not the right way to factor this long
2164 # term, but it makes merging better for now.
2165 class HtmlFrogInterfaceGenerator(FrogInterfaceGenerator):
2166 """Generates a Frog class for the dart:html library from a DOM IDL
2167 interface.
2168 """
2169
2170 def __init__(self, system, interface, template, super_interface, dart_code):
2171 super(HtmlFrogInterfaceGenerator, self).__init__(
2172 system, interface, template, super_interface, dart_code)
2173
2174 def AddEventAttributes(self, event_attrs):
2175 events_class = self._interface.id + 'EventsImpl'
2176 events_interface = self._interface.id + 'Events'
2177 self._members_emitter.Emit('\n $TYPE get on() =>\n new $TYPE(this);\n',
2178 TYPE=events_class)
2179
2180 events_members = self._dart_code.Emit(
2181 '\n'
2182 'class $CLASSNAME extends EventsImplementation '
2183 'implements $INTERFACE {\n'
2184 ' $CLASSNAME(_ptr) : super._wrap(_ptr);\n'
2185 '$!MEMBERS}\n',
2186 CLASSNAME=events_class,
2187 INTERFACE=events_interface)
2188
2189 for getter, setter in event_attrs:
2190 event = getter or setter
2191 events_members.Emit(
2192 "\n"
2193 "EventListenerList get $NAME() => _get('$NAME');\n",
2194 NAME=event.id)
2195
2196
2197 # ------------------------------------------------------------------------------
2198
2012 class NativeImplementationSystem(System): 2199 class NativeImplementationSystem(System):
2013 2200
2014 def __init__(self, templates, database, emitters, auxiliary_dir, output_dir): 2201 def __init__(self, templates, database, emitters, auxiliary_dir, output_dir):
2015 super(NativeImplementationSystem, self).__init__( 2202 super(NativeImplementationSystem, self).__init__(
2016 templates, database, emitters, output_dir) 2203 templates, database, emitters, output_dir)
2017 2204
2018 self._auxiliary_dir = auxiliary_dir 2205 self._auxiliary_dir = auxiliary_dir
2019 self._dom_public_files = [] 2206 self._dom_public_files = []
2020 self._dom_impl_files = [] 2207 self._dom_impl_files = []
2021 2208
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after
2212 INDENT=indent, 2399 INDENT=indent,
2213 NATIVENAME=native_name, 2400 NATIVENAME=native_name,
2214 ARGS=argument_expressions) 2401 ARGS=argument_expressions)
2215 2402
2216 self._members_emitter.Emit(' $TYPE $NATIVE_NAME($PARAMS) native ' 2403 self._members_emitter.Emit(' $TYPE $NATIVE_NAME($PARAMS) native '
2217 '"$(INTERFACE)$(NATIVE_NAME)_Callback";\n', 2404 '"$(INTERFACE)$(NATIVE_NAME)_Callback";\n',
2218 NATIVE_NAME=native_name, 2405 NATIVE_NAME=native_name,
2219 TYPE=info.type_name, 2406 TYPE=info.type_name,
2220 PARAMS=', '.join(arg_names), 2407 PARAMS=', '.join(arg_names),
2221 INTERFACE=self._interface.id) 2408 INTERFACE=self._interface.id)
OLDNEW
« no previous file with comments | « client/dom/scripts/dartdomgenerator.py ('k') | client/dom/templates/dom/frog/frog_impl.darttemplate » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698