示例#1
0
  def GenerateCallback(self, info):
    if IsPureInterface(self._interface.id):
      return

    cpp_impl_includes = set()
    cpp_header_handlers_emitter = emitter.Emitter()
    cpp_impl_handlers_emitter = emitter.Emitter()
    class_name = 'Dart%s' % self._interface.id
    for operation in self._interface.operations:
      parameters = []
      arguments = []
      conversion_includes = []
      for argument in operation.arguments:
        argument_type_info = self._TypeInfo(argument.type.id)
        parameters.append('%s %s' % (argument_type_info.parameter_type(),
                                     argument.id))
        arguments.append(argument_type_info.to_dart_conversion(argument.id))
        conversion_includes.extend(argument_type_info.conversion_includes())

      cpp_header_handlers_emitter.Emit(
          '\n'
          '    virtual bool handleEvent($PARAMETERS);\n',
          PARAMETERS=', '.join(parameters))

      if 'Custom' in operation.ext_attrs:
        continue

      cpp_impl_includes |= set(conversion_includes)
      arguments_declaration = 'Dart_Handle arguments[] = { %s }' % ', '.join(arguments)
      if not len(arguments):
        arguments_declaration = 'Dart_Handle* arguments = 0'
      cpp_impl_handlers_emitter.Emit(
          '\n'
          'bool $CLASS_NAME::handleEvent($PARAMETERS)\n'
          '{\n'
          '    if (!m_callback.isolate()->isAlive())\n'
          '        return false;\n'
          '    DartIsolate::Scope scope(m_callback.isolate());\n'
          '    DartApiScope apiScope;\n'
          '    $ARGUMENTS_DECLARATION;\n'
          '    return m_callback.handleEvent($ARGUMENT_COUNT, arguments);\n'
          '}\n',
          CLASS_NAME=class_name,
          PARAMETERS=', '.join(parameters),
          ARGUMENTS_DECLARATION=arguments_declaration,
          ARGUMENT_COUNT=len(arguments))

    cpp_header_emitter = self._cpp_library_emitter.CreateHeaderEmitter(self._interface.id, True)
    cpp_header_emitter.Emit(
        self._template_loader.Load('cpp_callback_header.template'),
        INTERFACE=self._interface.id,
        HANDLERS=cpp_header_handlers_emitter.Fragments())

    cpp_impl_emitter = self._cpp_library_emitter.CreateSourceEmitter(self._interface.id)
    cpp_impl_emitter.Emit(
        self._template_loader.Load('cpp_callback_implementation.template'),
        INCLUDES=self._GenerateCPPIncludes(cpp_impl_includes),
        INTERFACE=self._interface.id,
        HANDLERS=cpp_impl_handlers_emitter.Fragments())
示例#2
0
    def _GenerateCPPHeader(self):
        to_native_emitter = emitter.Emitter()
        if self._interface_type_info.custom_to_native():
            to_native_emitter.Emit(
                '    static PassRefPtr<NativeType> toNative(Dart_Handle handle, Dart_Handle& exception);\n'
            )
        else:
            to_native_emitter.Emit(
                '    static NativeType* toNative(Dart_Handle handle, Dart_Handle& exception)\n'
                '    {\n'
                '        return DartDOMWrapper::unwrapDartWrapper<Dart$INTERFACE>(handle, exception);\n'
                '    }\n',
                INTERFACE=self._interface.id)

        to_dart_emitter = emitter.Emitter()

        ext_attrs = self._interface.ext_attrs

        if ('CustomToJS' in ext_attrs or
            ('CustomToJSObject' in ext_attrs and 'TypedArray' not in ext_attrs)
                or 'PureInterface' in ext_attrs
                or 'CPPPureInterface' in ext_attrs
                or self._interface_type_info.custom_to_dart()):
            to_dart_emitter.Emit(
                '    static Dart_Handle toDart(NativeType* value);\n')
        else:
            to_dart_emitter.Emit(
                '    static Dart_Handle toDart(NativeType* value)\n'
                '    {\n'
                '        return DartDOMWrapper::toDart<Dart$(INTERFACE)>(value);\n'
                '    }\n',
                INTERFACE=self._interface.id)

        webcore_includes = self._GenerateCPPIncludes(
            self._interface_type_info.webcore_includes())

        is_node_test = lambda interface: interface.id == 'Node'
        is_active_test = lambda interface: 'ActiveDOMObject' in interface.ext_attrs
        is_event_target_test = lambda interface: 'EventTarget' in interface.ext_attrs

        def TypeCheckHelper(test):
            return 'true' if any(
                map(test, self._database.Hierarchy(
                    self._interface))) else 'false'

        self._cpp_header_emitter.Emit(
            self._template_loader.Load('cpp_header.template'),
            INTERFACE=self._interface.id,
            WEBCORE_INCLUDES=webcore_includes,
            WEBCORE_CLASS_NAME=self._interface_type_info.native_type(),
            DECLARATIONS=self._cpp_declarations_emitter.Fragments(),
            IS_NODE=TypeCheckHelper(is_node_test),
            IS_ACTIVE=TypeCheckHelper(is_active_test),
            IS_EVENT_TARGET=TypeCheckHelper(is_event_target_test),
            TO_NATIVE=to_native_emitter.Fragments(),
            TO_DART=to_dart_emitter.Fragments())
示例#3
0
  def StartInterface(self):
    self._interface_type_info = GetIDLTypeInfo(self._interface.id)
    self._members_emitter = emitter.Emitter()
    self._cpp_declarations_emitter = emitter.Emitter()
    self._cpp_impl_includes = set()
    self._cpp_definitions_emitter = emitter.Emitter()
    self._cpp_resolver_emitter = emitter.Emitter()

    self._GenerateConstructors()
    self._GenerateEvents()
示例#4
0
    def GenerateLibraries(self, lib_dir):
        auxiliary_dir = os.path.relpath(self._auxiliary_dir, self._output_dir)

        # Generate dom_public.dart.
        self._GenerateLibFile('dom_public.darttemplate',
                              os.path.join(self._output_dir,
                                           'dom_public.dart'),
                              self._dom_public_files,
                              AUXILIARY_DIR=MassagePath(auxiliary_dir))

        # Generate dom_impl.dart.
        self._GenerateLibFile('dom_impl.darttemplate',
                              os.path.join(self._output_dir, 'dom_impl.dart'),
                              self._dom_impl_files,
                              AUXILIARY_DIR=MassagePath(auxiliary_dir))

        # Generate DartDerivedSourcesXX.cpp.
        partitions = 20  # FIXME: this should be configurable.
        sources_count = len(self._cpp_impl_files)
        for i in range(0, partitions):
            derived_sources_path = os.path.join(
                self._output_dir, 'DartDerivedSources%02i.cpp' % (i + 1))

            includes_emitter = emitter.Emitter()
            for impl_file in self._cpp_impl_files[i::partitions]:
                path = os.path.relpath(impl_file,
                                       os.path.dirname(derived_sources_path))
                includes_emitter.Emit('#include "$PATH"\n', PATH=path)

            derived_sources_emitter = self._emitters.FileEmitter(
                derived_sources_path)
            derived_sources_emitter.Emit(
                self._templates.Load('cpp_derived_sources.template'),
                INCLUDES=includes_emitter.Fragments())

        # Generate DartResolver.cpp.
        cpp_resolver_path = os.path.join(self._output_dir, 'DartResolver.cpp')

        includes_emitter = emitter.Emitter()
        resolver_body_emitter = emitter.Emitter()
        for file in self._cpp_header_files:
            path = os.path.relpath(file, os.path.dirname(cpp_resolver_path))
            includes_emitter.Emit('#include "$PATH"\n', PATH=path)
            resolver_body_emitter.Emit(
                '    if (Dart_NativeFunction func = $CLASS_NAME::resolver(name, argumentCount))\n'
                '        return func;\n',
                CLASS_NAME=os.path.splitext(os.path.basename(path))[0])

        cpp_resolver_emitter = self._emitters.FileEmitter(cpp_resolver_path)
        cpp_resolver_emitter.Emit(
            self._templates.Load('cpp_resolver.template'),
            INCLUDES=includes_emitter.Fragments(),
            RESOLVER_BODY=resolver_body_emitter.Fragments())
示例#5
0
    def _GenerateCppHeader(self):
        webcore_includes = _GenerateCPPIncludes(
            self._interface_type_info.webcore_includes())

        if ('CustomToJS' in self._interface.ext_attrs
                or 'CustomToJSObject' in self._interface.ext_attrs
                or 'PureInterface' in self._interface.ext_attrs
                or 'CPPPureInterface' in self._interface.ext_attrs
                or self._interface_type_info.custom_to_dart()):
            to_dart_value_template = (
                'Dart_Handle toDartValue($(WEBCORE_CLASS_NAME)* value);\n')
        else:
            to_dart_value_template = (
                'inline Dart_Handle toDartValue($(WEBCORE_CLASS_NAME)* value)\n'
                '{\n'
                '    return DartDOMWrapper::toDart<Dart$(INTERFACE)>(value);\n'
                '}\n')
        to_dart_value_emitter = emitter.Emitter()
        to_dart_value_emitter.Emit(
            to_dart_value_template,
            INTERFACE=self._interface.id,
            WEBCORE_CLASS_NAME=self._interface_type_info.native_type())

        self._cpp_header_emitter.Emit(
            self._templates.Load('cpp_header.template'),
            INTERFACE=self._interface.id,
            WEBCORE_INCLUDES=webcore_includes,
            WEBCORE_CLASS_NAME=self._interface_type_info.native_type(),
            TO_DART_VALUE=to_dart_value_emitter.Fragments(),
            DECLARATIONS=self._cpp_declarations_emitter.Fragments())
示例#6
0
 def testNestedTemplateWithWrongBinding(self):
     try:
         e = emitter.Emitter()
         e.Emit('$#A(-)', A='Invalid')
         e.Fragments()
     except RuntimeError, ex:
         return
示例#7
0
  def _AddSetter(self, attr, html_name):
    type_info = GetIDLTypeInfo(attr.type.id)
    dart_declaration = 'void set %s(%s)' % (html_name, self._DartType(attr.type.id))
    is_custom = set(['Custom', 'CustomSetter', 'V8CustomSetter']) & set(attr.ext_attrs)
    cpp_callback_name = self._GenerateNativeBinding(attr.id, 2,
        dart_declaration, 'Setter', is_custom)
    if is_custom:
      return

    arguments = []
    parameter_definitions_emitter = emitter.Emitter()
    self._GenerateCallWithHandling(attr, parameter_definitions_emitter, arguments)

    if 'Reflect' in attr.ext_attrs:
      webcore_function_name = GetIDLTypeInfo(attr.type.id).webcore_setter_name()
      arguments.append(self._GenerateWebCoreReflectionAttributeName(attr))
    else:
      webcore_function_name = re.sub(r'^(xml(?=[A-Z])|\w)',
                                     lambda s: s.group(1).upper(),
                                     attr.id)
      webcore_function_name = 'set%s' % webcore_function_name
      if attr.type.id.startswith('SVGAnimated'):
        webcore_function_name += 'Animated'

    argument_expression = self._GenerateToNative(
        parameter_definitions_emitter, attr, 1, argument_name='value')
    arguments.append(argument_expression)

    parameter_definitions = parameter_definitions_emitter.Fragments()
    function_expression = self._GenerateWebCoreFunctionExpression(webcore_function_name, attr)
    invocation = self._GenerateWebCoreInvocation(function_expression,
        arguments, 'void', attr.ext_attrs, attr.set_raises)

    self._GenerateNativeCallback(cpp_callback_name, parameter_definitions_emitter.Fragments(),
        True, invocation, raises_exceptions=True)
示例#8
0
 def _ImplementationEmitter(self):
   basename = self._interface_type_info.implementation_name()
   if (self._interface_type_info.merged_into() and
       self._backend.ImplementsMergedMembers()):
     # Merged members are implemented in target interface implementation.
     return emitter.Emitter()
   return self._library_emitter.FileEmitter(basename, self._library_name)
示例#9
0
 def testTemplateErrorDuplicate(self):
     try:
         e = emitter.Emitter()
         b = e.Emit('$(A)$(!B)$(A)$(!B)')  # $(!B) is duplicated
     except RuntimeError as ex:
         return
     raise AssertionError('Expected error')
示例#10
0
 def testNestedTemplateWithWrongBinding(self):
     try:
         e = emitter.Emitter()
         e.Emit('$#A(-)', A='Invalid')
         e.Fragments()
     except RuntimeError as ex:
         return
     raise AssertionError('Expected error')
示例#11
0
  def StartInterface(self, memebers_emitter):
    # Create emitters for c++ implementation.
    if not IsPureInterface(self._interface.id):
      self._cpp_header_emitter = self._cpp_library_emitter.CreateHeaderEmitter(self._interface.id)
      self._cpp_impl_emitter = self._cpp_library_emitter.CreateSourceEmitter(self._interface.id)
    else:
      self._cpp_header_emitter = emitter.Emitter()
      self._cpp_impl_emitter = emitter.Emitter()

    self._interface_type_info = self._TypeInfo(self._interface.id)
    self._members_emitter = memebers_emitter
    self._cpp_declarations_emitter = emitter.Emitter()
    self._cpp_impl_includes = set()
    self._cpp_definitions_emitter = emitter.Emitter()
    self._cpp_resolver_emitter = emitter.Emitter()

    self._GenerateConstructors()
示例#12
0
    def __init__(self):
        # key valid for 1 month
        #self.__key = "LvNI43Y9DUdVd6GIOIb6dFjqN0Don6L_"
        self.__key = "_Rgpfd3PVxLrjKlQ0-g3DbYHDGnq51WJ"
        #self.__channel = "camarao-iot"
        self.__channel = "camarao-iot-test"

        self.__emitter = emitter.Emitter()
示例#13
0
 def testExample(self):
     e = emitter.Emitter()
     body = e.Emit('$TYPE $NAME() {\n'
                   '  $!BODY\n'
                   '}\n',
                   TYPE='int',
                   NAME='foo')
     body.Emit('return $VALUE;', VALUE='100')
     self.check(e, 'int foo() {\n' '  return 100;\n' '}\n')
示例#14
0
    def _GenerateCppHeader(self):
        to_native_emitter = emitter.Emitter()
        if self._interface_type_info.custom_to_native():
            to_native_emitter.Emit(
                '    static PassRefPtr<NativeType> toNative(Dart_Handle handle, Dart_Handle& exception);\n'
            )
        else:
            to_native_emitter.Emit(
                '    static NativeType* toNative(Dart_Handle handle, Dart_Handle& exception)\n'
                '    {\n'
                '        return DartDOMWrapper::unwrapDartWrapper<Dart$INTERFACE>(handle, exception);\n'
                '    }\n',
                INTERFACE=self._interface.id)

        to_dart_emitter = emitter.Emitter()
        if ('CustomToJS' in self._interface.ext_attrs
                or 'CustomToJSObject' in self._interface.ext_attrs
                or 'PureInterface' in self._interface.ext_attrs
                or 'CPPPureInterface' in self._interface.ext_attrs
                or self._interface_type_info.custom_to_dart()):
            to_dart_emitter.Emit(
                '    static Dart_Handle toDart(NativeType* value);\n')
        else:
            to_dart_emitter.Emit(
                '    static Dart_Handle toDart(NativeType* value)\n'
                '    {\n'
                '        return DartDOMWrapper::toDart<Dart$(INTERFACE)>(value);\n'
                '    }\n',
                INTERFACE=self._interface.id)

        webcore_includes = _GenerateCPPIncludes(
            self._interface_type_info.webcore_includes())
        wrapper_type = _DOMWrapperType(self._database, self._interface)
        self._cpp_header_emitter.Emit(
            self._system._templates.Load('cpp_header.template'),
            INTERFACE=self._interface.id,
            WEBCORE_INCLUDES=webcore_includes,
            WEBCORE_CLASS_NAME=self._interface_type_info.native_type(),
            DECLARATIONS=self._cpp_declarations_emitter.Fragments(),
            NATIVE_TRAITS_TYPE='DartDOMWrapper::%sTraits' % wrapper_type,
            TO_NATIVE=to_native_emitter.Fragments(),
            TO_DART=to_dart_emitter.Fragments())
示例#15
0
    def _GenerateOperationNativeCallback(self, operation, arguments,
                                         cpp_callback_name):
        webcore_function_name = operation.ext_attrs.get(
            'ImplementedAs', operation.id)

        parameter_definitions_emitter = emitter.Emitter()
        cpp_arguments = []
        raises_exceptions = self._GenerateCallWithHandling(
            operation, parameter_definitions_emitter, cpp_arguments)
        raises_exceptions = raises_exceptions or len(
            arguments) > 0 or operation.raises

        # Process Dart cpp_arguments.
        start_index = 1
        if operation.is_static:
            start_index = 0
        for (i, argument) in enumerate(arguments):
            if (i == len(arguments) - 1 and self._interface.id == 'Console'
                    and argument.id == 'arg'):
                # FIXME: we are skipping last argument here because it was added in
                # supplemental dart.idl. Cleanup dart.idl and remove this check.
                break
            argument_expression = self._GenerateToNative(
                parameter_definitions_emitter, argument, start_index + i)
            cpp_arguments.append(argument_expression)

        if operation.id in ['addEventListener', 'removeEventListener']:
            # addEventListener's and removeEventListener's last argument is marked
            # as optional in idl, but is not optional in webcore implementation.
            if len(arguments) == 2:
                cpp_arguments.append('false')

        if self._interface.id == 'CSSStyleDeclaration' and operation.id == 'setProperty':
            # CSSStyleDeclaration.setProperty priority parameter is optional in Dart
            # idl, but is not optional in webcore implementation.
            if len(arguments) == 2:
                cpp_arguments.append('String()')

        if 'NeedsUserGestureCheck' in operation.ext_attrs:
            cpp_arguments.append('DartUtilities::processingUserGesture')

        function_expression = self._GenerateWebCoreFunctionExpression(
            webcore_function_name, operation)
        invocation = self._GenerateWebCoreInvocation(function_expression,
                                                     cpp_arguments,
                                                     operation.type.id,
                                                     operation.ext_attrs,
                                                     operation.raises)
        self._GenerateNativeCallback(
            cpp_callback_name,
            parameter_definitions=parameter_definitions_emitter.Fragments(),
            needs_receiver=not operation.is_static,
            invocation=invocation,
            raises_exceptions=raises_exceptions)
示例#16
0
    def _AddGetter(self, attr):
        type_info = GetIDLTypeInfo(attr.type.id)
        dart_declaration = '%s get %s()' % (type_info.dart_type(),
                                            DartDomNameOfAttribute(attr))
        is_custom = 'Custom' in attr.ext_attrs or 'CustomGetter' in attr.ext_attrs
        cpp_callback_name = self._GenerateNativeBinding(
            attr.id, 1, dart_declaration, 'Getter', is_custom)
        if is_custom:
            return

        arguments = []
        parameter_definitions_emitter = emitter.Emitter()
        raises_exceptions = self._GenerateCallWithHandling(
            attr, parameter_definitions_emitter, arguments)
        raises_exceptions = raises_exceptions or attr.get_raises

        if 'Reflect' in attr.ext_attrs:
            webcore_function_name = GetIDLTypeInfo(
                attr.type.id).webcore_getter_name()
            if 'URL' in attr.ext_attrs:
                if 'NonEmpty' in attr.ext_attrs:
                    webcore_function_name = 'getNonEmptyURLAttribute'
                else:
                    webcore_function_name = 'getURLAttribute'
            arguments.append(
                self._GenerateWebCoreReflectionAttributeName(attr))
        else:
            if attr.id == 'operator':
                webcore_function_name = '_operator'
            elif attr.id == 'target' and attr.type.id == 'SVGAnimatedString':
                webcore_function_name = 'svgTarget'
            else:
                webcore_function_name = re.sub(r'^(HTML|URL|JS|XML|XSLT|\w)',
                                               lambda s: s.group(1).lower(),
                                               attr.id)
                webcore_function_name = re.sub(
                    r'^(create|exclusive)',
                    lambda s: 'is' + s.group(1).capitalize(),
                    webcore_function_name)
            if attr.type.id.startswith('SVGAnimated'):
                webcore_function_name += 'Animated'

        function_expression = self._GenerateWebCoreFunctionExpression(
            webcore_function_name, attr)
        invocation = self._GenerateWebCoreInvocation(function_expression,
                                                     arguments, attr.type.id,
                                                     attr.ext_attrs,
                                                     attr.get_raises)
        self._GenerateNativeCallback(cpp_callback_name,
                                     parameter_definitions_emitter.Fragments(),
                                     True,
                                     invocation,
                                     raises_exceptions=raises_exceptions)
示例#17
0
    def StartInterface(self):
        # Create emitters for c++ implementation.
        if self.HasImplementation():
            cpp_header_path = self._system._FilePathForCppHeader(
                self._interface.id)
            self._system._cpp_header_files.append(cpp_header_path)
            self._cpp_header_emitter = self._system._emitters.FileEmitter(
                cpp_header_path)
            cpp_impl_path = self._system._FilePathForCppImplementation(
                self._interface.id)
            self._system._cpp_impl_files.append(cpp_impl_path)
            self._cpp_impl_emitter = self._system._emitters.FileEmitter(
                cpp_impl_path)
        else:
            self._cpp_header_emitter = emitter.Emitter()
            self._cpp_impl_emitter = emitter.Emitter()

        self._interface_type_info = GetIDLTypeInfo(self._interface.id)
        self._members_emitter = emitter.Emitter()
        self._cpp_declarations_emitter = emitter.Emitter()
        self._cpp_impl_includes = set()
        self._cpp_definitions_emitter = emitter.Emitter()
        self._cpp_resolver_emitter = emitter.Emitter()

        self._GenerateConstructors()
        return self._members_emitter
示例#18
0
    def StartInterface(self, members_emitter):
        # Create emitters for c++ implementation.
        if not IsPureInterface(self._interface.id) and not IsCustomType(
                self._interface.id):
            self._cpp_header_emitter = self._cpp_library_emitter.CreateHeaderEmitter(
                self._interface.id,
                self._renamer.GetLibraryName(self._interface))
            self._cpp_impl_emitter = self._cpp_library_emitter.CreateSourceEmitter(
                self._interface.id)
        else:
            self._cpp_header_emitter = emitter.Emitter()
            self._cpp_impl_emitter = emitter.Emitter()

        self._interface_type_info = self._TypeInfo(self._interface.id)
        self._members_emitter = members_emitter
        self._cpp_declarations_emitter = emitter.Emitter()
        self._cpp_impl_includes = set([
            '"' + partial + '.h"'
            for partial in _GetCPPPartialNames(self._interface.id)
        ])
        self._cpp_definitions_emitter = emitter.Emitter()
        self._cpp_resolver_emitter = emitter.Emitter()

        # We need to revisit our treatment of typed arrays, right now
        # it is full of hacks.
        if self._interface.ext_attrs.get(
                'ConstructorTemplate') == 'TypedArray':
            self._cpp_resolver_emitter.Emit(
                '    if (name == "$(INTERFACE_NAME)_constructor_Callback")\n'
                '        return Dart$(INTERFACE_NAME)Internal::constructorCallback;\n',
                INTERFACE_NAME=self._interface.id)

            self._cpp_impl_includes.add('"DartArrayBufferViewCustom.h"')
            self._cpp_definitions_emitter.Emit(
                '\n'
                'static void constructorCallback(Dart_NativeArguments args)\n'
                '{\n'
                '    WebCore::DartArrayBufferViewInternal::constructWebGLArray<Dart$(INTERFACE_NAME)>(args);\n'
                '}\n',
                INTERFACE_NAME=self._interface.id)
示例#19
0
    def _AddGetter(self, attr, html_name):
        type_info = GetIDLTypeInfo(attr.type.id)
        dart_declaration = '%s get %s()' % (self._DartType(
            attr.type.id), html_name)
        is_custom = 'Custom' in attr.ext_attrs or 'CustomGetter' in attr.ext_attrs
        cpp_callback_name = self._GenerateNativeBinding(
            attr.id, 1, dart_declaration, 'Getter', is_custom)
        if is_custom:
            return

        arguments = []
        parameter_definitions_emitter = emitter.Emitter()
        raises_exceptions = self._GenerateCallWithHandling(
            attr, parameter_definitions_emitter, arguments)
        raises_exceptions = raises_exceptions or attr.get_raises

        if 'Reflect' in attr.ext_attrs:
            webcore_function_name = GetIDLTypeInfo(
                attr.type.id).webcore_getter_name()
            if 'URL' in attr.ext_attrs:
                if 'NonEmpty' in attr.ext_attrs:
                    webcore_function_name = 'getNonEmptyURLAttribute'
                else:
                    webcore_function_name = 'getURLAttribute'
            arguments.append(
                self._GenerateWebCoreReflectionAttributeName(attr))
        else:
            if attr.id == 'operator':
                webcore_function_name = '_operator'
            elif attr.id == 'target' and attr.type.id == 'SVGAnimatedString':
                webcore_function_name = 'svgTarget'
            else:
                webcore_function_name = _ToWebKitName(attr.id)
            if attr.type.id.startswith('SVGAnimated'):
                webcore_function_name += 'Animated'

        function_expression = self._GenerateWebCoreFunctionExpression(
            webcore_function_name, attr)
        invocation = self._GenerateWebCoreInvocation(function_expression,
                                                     arguments, attr.type.id,
                                                     attr.ext_attrs,
                                                     attr.get_raises)
        self._GenerateNativeCallback(cpp_callback_name,
                                     parameter_definitions_emitter.Fragments(),
                                     True,
                                     invocation,
                                     raises_exceptions=raises_exceptions)
示例#20
0
    def FileEmitter(self, filename, key=None):
        """Creates an emitter for writing to a file.

    When this MultiEmitter is flushed, the contents of the emitter are written
    to the file.

    Arguments:
      filename: a string, the path name of the file
      key: provides an access key to retrieve the emitter.

    Returns: the emitter.
    """
        e = emitter.Emitter()
        self._filename_to_emitter[filename] = e
        if key:
            self.Associate(key, e)
        return e
示例#21
0
  def testHoleScopes(self):
    e = emitter.Emitter()
    # Holes have scope.  They remember the bindings of the template application
    # in which they are created.  Create two holes which inherit bindings for C
    # and D.
    (a, b) = e.Emit('[$!A][$!B]$C$D$E', C='1', D='2')
    e.Emit('  $A$B$C$D')  # Bindings are local to the Emit
    self.check(e, '[][]12$E  $A$B$C$D')

    # Holes are not bound within holes.  That would too easily lead to infinite
    # expansions.
    a.Emit('$A$C$D')   # $A12
    b.Emit('$D$C$B')   # 21$B
    self.check(e, '[$A12][21$B]12$E  $A$B$C$D')
    # EmitRaw avoids interpolation.
    a.EmitRaw('$C$D')
    b.EmitRaw('$D$C')
    self.check(e, '[$A12$C$D][21$B$D$C]12$E  $A$B$C$D')
示例#22
0
 def testTemplate4(self):
   e = emitter.Emitter()
   (a, b) = e.Emit('$!A$!B$A$B')   # pair of holes.
   a.Emit('x')
   b.Emit('y')
   self.check(e, 'xyxy')
示例#23
0
 def testMissing(self):
   # Behaviour of Undefined parameters depends on form.
   e = emitter.Emitter();
   e.Emit('$A $?B $(C) $(?D)')
   self.check(e, '$A  $(C) ')
示例#24
0
 def testTemplate2(self):
   e = emitter.Emitter()
   r = e.Emit('1$(A)2$(B)3$(A)4$(B)5', A='x', B='y')
   self.assertEquals(None, r)
   self.check(e, '1x2y3x4y5')
示例#25
0
 def testTemplate3(self):
   e = emitter.Emitter()
   b = e.Emit('1$(A)2$(!B)3$(A)4$(B)5', A='x')
   b.Emit('y')
   self.check(e, '1x2y3x4y5')
   self.check(b, 'y')
示例#26
0
 def testTemplate1(self):
   e = emitter.Emitter()
   e.Emit('-$A+$B-$A+$B-', A='1', B='2')
   self.check(e, '-1+2-1+2-')
示例#27
0
 def testTemplateErrorDuplicate(self):
   try:
     e = emitter.Emitter()
     b = e.Emit('$(A)$(!B)$(A)$(!B)')   # $(!B) is duplicated
   except RuntimeError, ex:
     return
示例#28
0
	
	with open(path, "w") as tmp:
		tmp.write(python_code)
	
	dynamic_import(path, case)
	
	os.close(fd)
	os.remove(path)

def process_paths(paths):
	if os.path.isfile(path):
		with open(path) as f:
			process_file(f)

if __name__ == "__main__":
	e = emitter.Emitter()
	
	for p in args.path:
		paths = glob.glob(p)
		for path in paths:
			process_paths(paths)
	
	for r in decorators.rules:
		e.emit_rule(r)
	
	if args.output_file:
		with open(args.output_file, "w+") as f:
			f.write(e.string)
	
	print("Rules: {}\nActions: {}\nConditions: {}\n".format(e.rules, e.actions, e.conditions))
	
示例#29
0
 def testNestedTemplates2(self):
     e = emitter.Emitter()
     e.Emit('-$#A( $#B(-$C-) )-', A=True, B=True, C='1')
     self.check(e, '- -1- -')
示例#30
0
 def testNestedTemplatesWithFalse(self):
     e = emitter.Emitter()
     e.Emit('-$#A( $B )-', A=False, B='1')
     self.check(e, '--')