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

Side by Side Diff: sdk/lib/html/scripts/systemhtml.py

Issue 11398002: Splitting SVG types out of dart:html. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Minifying. Created 8 years, 1 month 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
« no previous file with comments | « sdk/lib/html/scripts/htmlrenamer.py ('k') | sdk/lib/html/scripts/systemnative.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 import emitter 9 import emitter
10 import os 10 import os
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
192 self._renamer = options.renamer 192 self._renamer = options.renamer
193 self._database = options.database 193 self._database = options.database
194 self._template_loader = options.templates 194 self._template_loader = options.templates
195 self._type_registry = options.type_registry 195 self._type_registry = options.type_registry
196 self._options = options 196 self._options = options
197 self._library_emitter = library_emitter 197 self._library_emitter = library_emitter
198 self._event_generator = event_generator 198 self._event_generator = event_generator
199 self._interface = interface 199 self._interface = interface
200 self._backend = backend 200 self._backend = backend
201 self._interface_type_info = self._type_registry.TypeInfo(self._interface.id) 201 self._interface_type_info = self._type_registry.TypeInfo(self._interface.id)
202 self._library_name = self._renamer.GetLibraryName(self._interface)
202 203
203 def Generate(self): 204 def Generate(self):
204 if 'Callback' in self._interface.ext_attrs: 205 if 'Callback' in self._interface.ext_attrs:
205 self.GenerateCallback() 206 self.GenerateCallback()
206 else: 207 else:
207 self.GenerateInterface() 208 self.GenerateInterface()
208 209
209 def GenerateCallback(self): 210 def GenerateCallback(self):
210 """Generates a typedef for the callback interface.""" 211 """Generates a typedef for the callback interface."""
211 handlers = [operation for operation in self._interface.operations 212 handlers = [operation for operation in self._interface.operations
212 if operation.id == 'handleEvent'] 213 if operation.id == 'handleEvent']
213 info = AnalyzeOperation(self._interface, handlers) 214 info = AnalyzeOperation(self._interface, handlers)
214 code = self._library_emitter.FileEmitter(self._interface.id) 215 code = self._library_emitter.FileEmitter(self._interface.id,
216 self._library_name)
215 code.Emit(self._template_loader.Load('callback.darttemplate')) 217 code.Emit(self._template_loader.Load('callback.darttemplate'))
216 code.Emit('typedef void $NAME($PARAMS);\n', 218 code.Emit('typedef void $NAME($PARAMS);\n',
217 NAME=self._interface.id, 219 NAME=self._interface.id,
218 PARAMS=info.ParametersDeclaration(self._DartType)) 220 PARAMS=info.ParametersDeclaration(self._DartType))
219 self._backend.GenerateCallback(info) 221 self._backend.GenerateCallback(info)
220 222
221 def GenerateInterface(self): 223 def GenerateInterface(self):
222 interface_name = self._interface_type_info.interface_name() 224 interface_name = self._interface_type_info.interface_name()
223 225
224 factory_provider = None 226 factory_provider = None
225 if interface_name in interface_factories: 227 if interface_name in interface_factories:
226 factory_provider = interface_factories[interface_name] 228 factory_provider = interface_factories[interface_name]
227 229
228 constructors = [] 230 constructors = []
229 if interface_name in _static_classes: 231 if interface_name in _static_classes:
230 constructor_info = None 232 constructor_info = None
231 else: 233 else:
232 constructor_info = AnalyzeConstructor(self._interface) 234 constructor_info = AnalyzeConstructor(self._interface)
233 if constructor_info: 235 if constructor_info:
234 constructors.append(constructor_info) 236 constructors.append(constructor_info)
235 factory_provider = '_' + interface_name + 'FactoryProvider' 237 factory_provider = '_' + interface_name + 'FactoryProvider'
236 factory_provider_emitter = self._library_emitter.FileEmitter( 238 factory_provider_emitter = self._library_emitter.FileEmitter(
237 '_%sFactoryProvider' % interface_name) 239 '_%sFactoryProvider' % interface_name, self._library_name)
238 self._backend.EmitFactoryProvider( 240 self._backend.EmitFactoryProvider(
239 constructor_info, factory_provider, factory_provider_emitter) 241 constructor_info, factory_provider, factory_provider_emitter)
240 242
241 infos = HtmlElementConstructorInfos(interface_name) 243 infos = HtmlElementConstructorInfos(interface_name)
242 if infos: 244 if infos:
243 template = self._template_loader.Load( 245 template = self._template_loader.Load(
244 'factoryprovider_Elements.darttemplate') 246 'factoryprovider_Elements.darttemplate')
245 EmitHtmlElementFactoryConstructors( 247 EmitHtmlElementFactoryConstructors(
246 self._library_emitter.FileEmitter('_Elements', template), 248 self._library_emitter.FileEmitter('_Elements', self._library_name,
249 template),
247 infos, 250 infos,
248 self._interface.id, 251 self._interface.id,
249 self._interface_type_info.implementation_name(), 252 self._interface_type_info.implementation_name(),
250 self._DartType) 253 self._DartType)
251 254
252 for info in infos: 255 for info in infos:
253 constructors.append(info.ConstructorInfo(self._interface.id)) 256 constructors.append(info.ConstructorInfo(self._interface.id))
254 if factory_provider: 257 if factory_provider:
255 assert factory_provider == info.factory_provider_name 258 assert factory_provider == info.factory_provider_name
256 else: 259 else:
(...skipping 25 matching lines...) Expand all
282 secure_base_name = self._backend.SecureBaseName(interface_name) 285 secure_base_name = self._backend.SecureBaseName(interface_name)
283 if secure_base_name: 286 if secure_base_name:
284 implements.append(secure_base_name) 287 implements.append(secure_base_name)
285 288
286 implements_str = '' 289 implements_str = ''
287 if implements: 290 if implements:
288 implements_str = ' implements ' + ', '.join(set(implements)) 291 implements_str = ' implements ' + ', '.join(set(implements))
289 292
290 self._implementation_members_emitter = implementation_emitter.Emit( 293 self._implementation_members_emitter = implementation_emitter.Emit(
291 self._backend.ImplementationTemplate(), 294 self._backend.ImplementationTemplate(),
295 LIBRARYNAME=self._library_name,
292 CLASSNAME=self._interface_type_info.implementation_name(), 296 CLASSNAME=self._interface_type_info.implementation_name(),
293 EXTENDS=' extends %s' % base_class if base_class else '', 297 EXTENDS=' extends %s' % base_class if base_class else '',
294 IMPLEMENTS=implements_str, 298 IMPLEMENTS=implements_str,
295 DOMNAME=self._interface.doc_js_name, 299 DOMNAME=self._interface.doc_js_name,
296 NATIVESPEC=self._backend.NativeSpec()) 300 NATIVESPEC=self._backend.NativeSpec())
297 self._backend.StartInterface(self._implementation_members_emitter) 301 self._backend.StartInterface(self._implementation_members_emitter)
298 302
299 self._backend.AddConstructors(constructors, factory_provider, 303 self._backend.AddConstructors(constructors, factory_provider,
300 self._interface_type_info.implementation_name(), 304 self._interface_type_info.implementation_name(),
301 base_class) 305 base_class)
(...skipping 13 matching lines...) Expand all
315 self._backend.AddMembers(self._interface) 319 self._backend.AddMembers(self._interface)
316 self._backend.AddSecondaryMembers(self._interface) 320 self._backend.AddSecondaryMembers(self._interface)
317 self._backend.FinishInterface() 321 self._backend.FinishInterface()
318 322
319 def _ImplementationEmitter(self): 323 def _ImplementationEmitter(self):
320 basename = self._interface_type_info.implementation_name() 324 basename = self._interface_type_info.implementation_name()
321 if (self._interface_type_info.merged_into() and 325 if (self._interface_type_info.merged_into() and
322 self._backend.ImplementsMergedMembers()): 326 self._backend.ImplementsMergedMembers()):
323 # Merged members are implemented in target interface implementation. 327 # Merged members are implemented in target interface implementation.
324 return emitter.Emitter() 328 return emitter.Emitter()
325 return self._library_emitter.FileEmitter(basename) 329 return self._library_emitter.FileEmitter(basename, self._library_name)
326 330
327 def _DartType(self, type_name): 331 def _DartType(self, type_name):
328 return self._type_registry.DartType(type_name) 332 return self._type_registry.DartType(type_name)
329 333
330 334
331 # ------------------------------------------------------------------------------ 335 # ------------------------------------------------------------------------------
332 336
333 class Dart2JSBackend(HtmlDartGenerator): 337 class Dart2JSBackend(HtmlDartGenerator):
334 """Generates a dart2js class for the dart:html library from a DOM IDL 338 """Generates a dart2js class for the dart:html library from a DOM IDL
335 interface. 339 interface.
(...skipping 523 matching lines...) Expand 10 before | Expand all | Expand 10 after
859 return (None, None) 863 return (None, None)
860 864
861 return FindInParent(self._interface) if attr else (None, None) 865 return FindInParent(self._interface) if attr else (None, None)
862 866
863 def _DartType(self, type_name): 867 def _DartType(self, type_name):
864 return self._type_registry.DartType(type_name) 868 return self._type_registry.DartType(type_name)
865 869
866 # ------------------------------------------------------------------------------ 870 # ------------------------------------------------------------------------------
867 871
868 class DartLibraryEmitter(): 872 class DartLibraryEmitter():
869 def __init__(self, multiemitter, template, dart_sources_dir): 873 def __init__(self, multiemitter, dart_sources_dir, dart_libraries):
870 self._multiemitter = multiemitter 874 self._multiemitter = multiemitter
871 self._template = template
872 self._dart_sources_dir = dart_sources_dir 875 self._dart_sources_dir = dart_sources_dir
873 self._path_to_emitter = {} 876 self._path_to_emitter = {}
877 self._dart_libraries = dart_libraries
874 878
875 def FileEmitter(self, basename, template=None): 879 def FileEmitter(self, basename, library_name, template=None):
876 path = os.path.join(self._dart_sources_dir, '%s.dart' % basename) 880 path = os.path.join(self._dart_sources_dir, '%s.dart' % basename)
877 if not path in self._path_to_emitter: 881 if not path in self._path_to_emitter:
878 emitter = self._multiemitter.FileEmitter(path) 882 emitter = self._multiemitter.FileEmitter(path)
879 if not template is None: 883 if not template is None:
880 emitter = emitter.Emit(template) 884 emitter = emitter.Emit(template)
881 self._path_to_emitter[path] = emitter 885 self._path_to_emitter[path] = emitter
886
887 self._dart_libraries.AddFile(basename, library_name, path)
882 return self._path_to_emitter[path] 888 return self._path_to_emitter[path]
883 889
884 def EmitLibrary(self, library_file_path, auxiliary_dir): 890 def EmitLibraries(self, auxiliary_dir):
891 self._dart_libraries.Emit(self._multiemitter, auxiliary_dir)
892
893 # ------------------------------------------------------------------------------
894 class DartLibrary():
895 def __init__(self, name, template_loader, library_type, output_dir):
896 self._template = template_loader.Load(
897 '%s_%s.darttemplate' % (name, library_type))
898 self._dart_path = os.path.join(
899 output_dir, '%s_%s.dart' % (name, library_type))
900 self._paths = []
901
902 def AddFile(self, path):
903 self._paths.append(path)
904
905 def Emit(self, emitter, auxiliary_dir):
885 def massage_path(path): 906 def massage_path(path):
886 # The most robust way to emit path separators is to use / always. 907 # The most robust way to emit path separators is to use / always.
887 return path.replace('\\', '/') 908 return path.replace('\\', '/')
888 909
889 library_emitter = self._multiemitter.FileEmitter(library_file_path) 910 library_emitter = emitter.FileEmitter(self._dart_path)
890 library_file_dir = os.path.dirname(library_file_path) 911 library_file_dir = os.path.dirname(self._dart_path)
891 auxiliary_dir = os.path.relpath(auxiliary_dir, library_file_dir) 912 auxiliary_dir = os.path.relpath(auxiliary_dir, library_file_dir)
892 imports_emitter = library_emitter.Emit( 913 imports_emitter = library_emitter.Emit(
893 self._template, AUXILIARY_DIR=massage_path(auxiliary_dir)) 914 self._template, AUXILIARY_DIR=massage_path(auxiliary_dir))
894 for path in sorted(self._path_to_emitter.keys()): 915
916 for path in sorted(self._paths):
895 relpath = os.path.relpath(path, library_file_dir) 917 relpath = os.path.relpath(path, library_file_dir)
896 imports_emitter.Emit( 918 imports_emitter.Emit(
897 "part '$PATH';\n", PATH=massage_path(relpath)) 919 "part '$PATH';\n", PATH=massage_path(relpath))
920
921 # ------------------------------------------------------------------------------
922
923 class DartLibraries():
924 def __init__(self, template_loader, library_type, output_dir):
925 self._libraries = {
926 'svg': DartLibrary('svg', template_loader, library_type, output_dir),
927 'html': DartLibrary('html', template_loader, library_type, output_dir),
928 }
929
930 def AddFile(self, basename, library_name, path):
931 self._libraries[library_name].AddFile(path)
932
933 def Emit(self, emitter, auxiliary_dir):
934 for lib in self._libraries.values():
935 lib.Emit(emitter, auxiliary_dir)
OLDNEW
« no previous file with comments | « sdk/lib/html/scripts/htmlrenamer.py ('k') | sdk/lib/html/scripts/systemnative.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698