Index: sdk/lib/html/scripts/systemhtml.py |
diff --git a/sdk/lib/html/scripts/systemhtml.py b/sdk/lib/html/scripts/systemhtml.py |
index 431f8007dec97c455fb18abb329fe90bbb65fe78..dbdb4ccaa29d86cc75e6e1df969ab95cedf3030b 100644 |
--- a/sdk/lib/html/scripts/systemhtml.py |
+++ b/sdk/lib/html/scripts/systemhtml.py |
@@ -199,6 +199,7 @@ class HtmlDartInterfaceGenerator(object): |
self._interface = interface |
self._backend = backend |
self._interface_type_info = self._type_registry.TypeInfo(self._interface.id) |
+ self._library_name = self._renamer.GetLibraryName(self._interface) |
def Generate(self): |
if 'Callback' in self._interface.ext_attrs: |
@@ -211,7 +212,8 @@ class HtmlDartInterfaceGenerator(object): |
handlers = [operation for operation in self._interface.operations |
if operation.id == 'handleEvent'] |
info = AnalyzeOperation(self._interface, handlers) |
- code = self._library_emitter.FileEmitter(self._interface.id) |
+ code = self._library_emitter.FileEmitter(self._interface.id, |
+ self._library_name) |
code.Emit(self._template_loader.Load('callback.darttemplate')) |
code.Emit('typedef void $NAME($PARAMS);\n', |
NAME=self._interface.id, |
@@ -234,7 +236,7 @@ class HtmlDartInterfaceGenerator(object): |
constructors.append(constructor_info) |
factory_provider = '_' + interface_name + 'FactoryProvider' |
factory_provider_emitter = self._library_emitter.FileEmitter( |
- '_%sFactoryProvider' % interface_name) |
+ '_%sFactoryProvider' % interface_name, self._library_name) |
self._backend.EmitFactoryProvider( |
constructor_info, factory_provider, factory_provider_emitter) |
@@ -243,7 +245,8 @@ class HtmlDartInterfaceGenerator(object): |
template = self._template_loader.Load( |
'factoryprovider_Elements.darttemplate') |
EmitHtmlElementFactoryConstructors( |
- self._library_emitter.FileEmitter('_Elements', template), |
+ self._library_emitter.FileEmitter('_Elements', self._library_name, |
+ template), |
infos, |
self._interface.id, |
self._interface_type_info.implementation_name(), |
@@ -289,6 +292,7 @@ class HtmlDartInterfaceGenerator(object): |
self._implementation_members_emitter = implementation_emitter.Emit( |
self._backend.ImplementationTemplate(), |
+ LIBRARYNAME=self._library_name, |
CLASSNAME=self._interface_type_info.implementation_name(), |
EXTENDS=' extends %s' % base_class if base_class else '', |
IMPLEMENTS=implements_str, |
@@ -322,7 +326,7 @@ class HtmlDartInterfaceGenerator(object): |
self._backend.ImplementsMergedMembers()): |
# Merged members are implemented in target interface implementation. |
return emitter.Emitter() |
- return self._library_emitter.FileEmitter(basename) |
+ return self._library_emitter.FileEmitter(basename, self._library_name) |
def _DartType(self, type_name): |
return self._type_registry.DartType(type_name) |
@@ -866,32 +870,66 @@ class Dart2JSBackend(HtmlDartGenerator): |
# ------------------------------------------------------------------------------ |
class DartLibraryEmitter(): |
- def __init__(self, multiemitter, template, dart_sources_dir): |
+ def __init__(self, multiemitter, dart_sources_dir, dart_libraries): |
self._multiemitter = multiemitter |
- self._template = template |
self._dart_sources_dir = dart_sources_dir |
self._path_to_emitter = {} |
+ self._dart_libraries = dart_libraries |
- def FileEmitter(self, basename, template=None): |
+ def FileEmitter(self, basename, library_name, template=None): |
path = os.path.join(self._dart_sources_dir, '%s.dart' % basename) |
if not path in self._path_to_emitter: |
emitter = self._multiemitter.FileEmitter(path) |
if not template is None: |
emitter = emitter.Emit(template) |
self._path_to_emitter[path] = emitter |
+ |
+ self._dart_libraries.AddFile(basename, library_name, path) |
return self._path_to_emitter[path] |
- def EmitLibrary(self, library_file_path, auxiliary_dir): |
+ def EmitLibraries(self, auxiliary_dir): |
+ self._dart_libraries.Emit(self._multiemitter, auxiliary_dir) |
+ |
+# ------------------------------------------------------------------------------ |
+class DartLibrary(): |
+ def __init__(self, name, template_loader, library_type, output_dir): |
+ self._template = template_loader.Load( |
+ '%s_%s.darttemplate' % (name, library_type)) |
+ self._dart_path = os.path.join( |
+ output_dir, '%s_%s.dart' % (name, library_type)) |
+ self._paths = [] |
+ |
+ def AddFile(self, path): |
+ self._paths.append(path) |
+ |
+ def Emit(self, emitter, auxiliary_dir): |
def massage_path(path): |
# The most robust way to emit path separators is to use / always. |
return path.replace('\\', '/') |
- library_emitter = self._multiemitter.FileEmitter(library_file_path) |
- library_file_dir = os.path.dirname(library_file_path) |
+ library_emitter = emitter.FileEmitter(self._dart_path) |
+ library_file_dir = os.path.dirname(self._dart_path) |
auxiliary_dir = os.path.relpath(auxiliary_dir, library_file_dir) |
imports_emitter = library_emitter.Emit( |
self._template, AUXILIARY_DIR=massage_path(auxiliary_dir)) |
- for path in sorted(self._path_to_emitter.keys()): |
+ |
+ for path in sorted(self._paths): |
relpath = os.path.relpath(path, library_file_dir) |
imports_emitter.Emit( |
"part '$PATH';\n", PATH=massage_path(relpath)) |
+ |
+# ------------------------------------------------------------------------------ |
+ |
+class DartLibraries(): |
+ def __init__(self, template_loader, library_type, output_dir): |
+ self._libraries = { |
+ 'svg': DartLibrary('svg', template_loader, library_type, output_dir), |
+ 'html': DartLibrary('html', template_loader, library_type, output_dir), |
+ } |
+ |
+ def AddFile(self, basename, library_name, path): |
+ self._libraries[library_name].AddFile(path) |
+ |
+ def Emit(self, emitter, auxiliary_dir): |
+ for lib in self._libraries.values(): |
+ lib.Emit(emitter, auxiliary_dir) |