Esempio n. 1
0
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)
Esempio n. 3
0
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))
Esempio n. 5
0
 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 __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)