class CodeGeneratorWebModule(CodeGeneratorBase): def __init__(self, info_provider, cache_dir, output_dir): CodeGeneratorBase.__init__(self, MODULE_PYNAME, info_provider, cache_dir, output_dir) self.typedef_resolver = TypedefResolver(info_provider) def get_template(self, file_extension): template_filename = 'web_module_interface.%s.tmpl' % file_extension return self.jinja_env.get_template(template_filename) # TODO(dglazkov): Move to CodeGeneratorBase. def output_paths(self, definition_name): header_path = posixpath.join(self.output_dir, 'Web%s.h' % definition_name) cpp_path = posixpath.join(self.output_dir, 'Web%s.cpp' % definition_name) return header_path, cpp_path def generate_interface_code(self, interface): # TODO(dglazkov): Implement callback interfaces. # TODO(dglazkov): Make sure partial interfaces are handled. if interface.is_callback or interface.is_partial: raise ValueError("Partial or callback interfaces are not supported") template_context = interface_context(interface) cpp_template = self.get_template('cpp') header_template = self.get_template('h') cpp_text = cpp_template.render(template_context) header_text = header_template.render(template_context) header_path, cpp_path = self.output_paths(interface.name) return ( (header_path, header_text), (cpp_path, cpp_text) ) def generate_code(self, definitions, definition_name): self.typedef_resolver.resolve(definitions, definition_name) header_path, cpp_path = self.output_paths(definition_name) template_context = {} # TODO(dglazkov): Implement dictionaries if definition_name not in definitions.interfaces: return None interface = definitions.interfaces[definition_name] if WEB_MODULE_IDL_ATTRIBUTE not in interface.extended_attributes: return None return self.generate_interface_code(interface)
class CodeGeneratorWebModule(CodeGeneratorBase): def __init__(self, info_provider, cache_dir, output_dir): CodeGeneratorBase.__init__(self, MODULE_PYNAME, info_provider, cache_dir, output_dir) self.typedef_resolver = TypedefResolver(info_provider) def get_template(self, file_extension): template_filename = 'web_module_interface.%s.tmpl' % file_extension return self.jinja_env.get_template(template_filename) # TODO(dglazkov): Move to CodeGeneratorBase. def output_paths(self, definition_name): header_path = posixpath.join(self.output_dir, 'Web%s.h' % definition_name) cpp_path = posixpath.join(self.output_dir, 'Web%s.cpp' % definition_name) return header_path, cpp_path def generate_interface_code(self, interface): # TODO(dglazkov): Implement callback interfaces. # TODO(dglazkov): Make sure partial interfaces are handled. if interface.is_callback or interface.is_partial: raise ValueError( "Partial or callback interfaces are not supported") template_context = interface_context(interface) cpp_template = self.get_template('cpp') header_template = self.get_template('h') cpp_text = cpp_template.render(template_context) header_text = header_template.render(template_context) header_path, cpp_path = self.output_paths(interface.name) return ((header_path, header_text), (cpp_path, cpp_text)) def generate_code(self, definitions, definition_name): self.typedef_resolver.resolve(definitions, definition_name) header_path, cpp_path = self.output_paths(definition_name) template_context = {} # TODO(dglazkov): Implement dictionaries if definition_name not in definitions.interfaces: return None interface = definitions.interfaces[definition_name] if WEB_MODULE_IDL_ATTRIBUTE not in interface.extended_attributes: return None return self.generate_interface_code(interface)
class CodeGeneratorWebAgentAPI(CodeGeneratorBase): def __init__(self, info_provider, cache_dir, output_dir): CodeGeneratorBase.__init__(self, MODULE_PYNAME, info_provider, cache_dir, output_dir) self.type_resolver = TypeResolver(info_provider.interfaces_info) self.typedef_resolver = TypedefResolver(info_provider) def get_template(self, file_extension): template_filename = 'web_agent_api_interface.%s.tmpl' % file_extension return self.jinja_env.get_template(template_filename) def generate_file(self, template_context, file_extension): template = self.get_template(file_extension) path = posixpath.join( self.output_dir, '%s.%s' % (template_context['class_name']['snake_case'], file_extension)) text = render_template(template, template_context) return (path, text) def generate_interface_code(self, interface): # TODO(dglazkov): Implement callback interfaces. # TODO(dglazkov): Make sure partial interfaces are handled. if interface.is_callback or interface.is_partial: raise ValueError('Partial or callback interfaces are not supported') template_context = interface_context(interface, self.type_resolver) return ( self.generate_file(template_context, 'h'), self.generate_file(template_context, 'cc') ) def generate_code(self, definitions, definition_name): self.typedef_resolver.resolve(definitions, definition_name) # TODO(dglazkov): Implement dictionaries if definition_name not in definitions.interfaces: return None interface = definitions.interfaces[definition_name] if WEB_AGENT_API_IDL_ATTRIBUTE not in interface.extended_attributes: return None return self.generate_interface_code(interface)
class CodeGeneratorWebModule(CodeGeneratorBase): def __init__(self, info_provider, cache_dir, output_dir): CodeGeneratorBase.__init__(self, MODULE_PYNAME, info_provider, cache_dir, output_dir) self.typedef_resolver = TypedefResolver(info_provider) def get_template(self): template_filename = 'web_module_interface.cpp.tmpl' return self.jinja_env.get_template(template_filename) # TODO(dglazkov): Move to CodeGeneratorBase. def output_paths(self, definition_name): header_path = posixpath.join(self.output_dir, 'Web%s.h' % definition_name) cpp_path = posixpath.join(self.output_dir, 'Web%s.cpp' % definition_name) return header_path, cpp_path def generate_code(self, definitions, definition_name): self.typedef_resolver.resolve(definitions, definition_name) header_path, cpp_path = self.output_paths(definition_name) template_context = {} # TODO(dglazkov): Implement dictionaries if definition_name not in definitions.interfaces: return None interface = definitions.interfaces[definition_name] if WEB_MODULE_IDL_ATTRIBUTE not in interface.extended_attributes: return None # TODO(dglazkov): Implement callback interfaces. # TODO(dglazkov): Implement partial interfaces. if interface.is_callback and interface.is_partial: return None template_context = interface_context(interface, definitions.interfaces) template_context['code_generator'] = MODULE_PYNAME template_context['class_name'] = definition_name cpp_template = self.get_template() cpp_text = cpp_template.render(template_context) header_text = 'header' return ((header_path, header_text), (cpp_path, cpp_text))