コード例 #1
0
ファイル: syntax_highlighter.py プロジェクト: artisdom/yavide
    def generate_vim_syntax_file_from_clang(self, filename, compiler_args, project_root_directory):
        # Generate the tokens
        tokenizer = ClangTokenizer()
        tokenizer.run(filename, compiler_args, project_root_directory)

        # Build Vim syntax highlight rules
        vim_syntax_element = ['call clearmatches()\n']
        token_list = tokenizer.get_token_list()
        for token in token_list:
            token_id = tokenizer.get_token_id(token)
            if token_id != TokenIdentifier.getUnsupportedId():
                highlight_rule = self.__tag_id_to_vim_syntax_group(token_id) + " " + tokenizer.get_token_name(token)
                vim_syntax_element.append(
                    "call matchaddpos('" +
                    str(self.__tag_id_to_vim_syntax_group(token_id)) +
                    "', [[" +
                    str(tokenizer.get_token_line(token)) +
                    ", " +
                    str(tokenizer.get_token_column(token)) +
                    ", " +
                    str(len(tokenizer.get_token_name(token))) +
                    "]], -1)" +
                    "\n"
                )
            else:
                logging.debug("Unsupported token id: [{0}, {1}]: {2} '{3}'".format(token.location.line, token.location.column, token.kind, tokenizer.get_token_name(token)))

        # Write Vim syntax file
        vim_syntax_file = open(self.output_syntax_file, "w")
        vim_syntax_file.writelines(vim_syntax_element)

        # Write some debug information
        tokenizer.dump_token_list()
コード例 #2
0
    def generate_vim_syntax_file_from_clang(self, filename, compiler_args, project_root_directory):
        # Generate the tokens
        tokenizer = ClangTokenizer()
        tokenizer.run(filename, compiler_args, project_root_directory)

        # Build Vim syntax highlight rules
        vim_syntax_element = ['call clearmatches()\n']
        ast_node_list = tokenizer.get_ast_node_list()
        for ast_node in ast_node_list:
            ast_node_id = tokenizer.get_ast_node_id(ast_node)
            if ast_node_id != TokenIdentifier.getUnsupportedId():
                highlight_rule = self.__tag_id_to_vim_syntax_group(ast_node_id) + " " + tokenizer.get_ast_node_name(ast_node)
                vim_syntax_element.append(
                    "call matchaddpos('" +
                    str(self.__tag_id_to_vim_syntax_group(ast_node_id)) +
                    "', [[" +
                    str(tokenizer.get_ast_node_line(ast_node)) +
                    ", " +
                    str(tokenizer.get_ast_node_column(ast_node)) +
                    ", " +
                    str(len(tokenizer.get_ast_node_name(ast_node))) +
                    "]], -1)" +
                    "\n"
                )
            else:
                logging.debug("Unsupported token id: [{0}, {1}]: {2} '{3}'".format(ast_node.location.line, ast_node.location.column, ast_node.kind, tokenizer.get_ast_node_name(ast_node)))

        # Write Vim syntax file
        vim_syntax_file = open(self.output_syntax_file, "w")
        vim_syntax_file.writelines(vim_syntax_element)

        # Write some debug information
        tokenizer.dump_ast_nodes()
コード例 #3
0
 def __tag_id_to_vim_syntax_group(self, tag_identifier):
     if tag_identifier == TokenIdentifier.getNamespaceId():
         return "yavideCppNamespace"
     if tag_identifier == TokenIdentifier.getNamespaceAliasId():
         return "yavideCppNamespaceAlias"
     if tag_identifier == TokenIdentifier.getClassId():
         return "yavideCppClass"
     if tag_identifier == TokenIdentifier.getStructId():
         return "yavideCppStructure"
     if tag_identifier == TokenIdentifier.getEnumId():
         return "yavideCppEnum"
     if tag_identifier == TokenIdentifier.getEnumValueId():
         return "yavideCppEnumValue"
     if tag_identifier == TokenIdentifier.getUnionId():
         return "yavideCppUnion"
     if tag_identifier == TokenIdentifier.getFieldId():
         return "yavideCppField"
     if tag_identifier == TokenIdentifier.getLocalVariableId():
         return "yavideCppLocalVariable"
     if tag_identifier == TokenIdentifier.getFunctionId():
         return "yavideCppFunction"
     if tag_identifier == TokenIdentifier.getMethodId():
         return "yavideCppMethod"
     if tag_identifier == TokenIdentifier.getFunctionParameterId():
         return "yavideCppFunctionParameter"
     if tag_identifier == TokenIdentifier.getTemplateTypeParameterId():
         return "yavideCppTemplateTypeParameter"
     if tag_identifier == TokenIdentifier.getTemplateNonTypeParameterId():
         return "yavideCppTemplateNonTypeParameter"
     if tag_identifier == TokenIdentifier.getTemplateTemplateParameterId():
         return "yavideCppTemplateTemplateParameter"
     if tag_identifier == TokenIdentifier.getMacroDefinitionId():
         return "yavideCppMacroDefinition"
     if tag_identifier == TokenIdentifier.getMacroInstantiationId():
         return "yavideCppMacroInstantiation"
     if tag_identifier == TokenIdentifier.getTypedefId():
         return "yavideCppTypedef"
     if tag_identifier == TokenIdentifier.getUsingDirectiveId():
         return "yavideCppUsingDirective"
     if tag_identifier == TokenIdentifier.getUsingDeclarationId():
         return "yavideCppUsingDeclaration"
コード例 #4
0
 def to_token_id(kind):
     if (kind == "namespace"):
         return TokenIdentifier.getNamespaceId()
     if (kind == "class"):
         return TokenIdentifier.getClassId()
     if (kind == "struct"):
         return TokenIdentifier.getStructId()
     if (kind == "enum"):
         return TokenIdentifier.getEnumId()
     if (kind == "enumerator"):
         return TokenIdentifier.getEnumValueId()
     if (kind == "union"):
         return TokenIdentifier.getUnionId()
     if (kind == "member"):
         return TokenIdentifier.getClassStructUnionMemberId()
     if (kind == "local"):
         return TokenIdentifier.getLocalVariableId()
     if (kind == "variable"):
         return TokenIdentifier.getVariableDefinitionId()
     if (kind == "prototype"):
         return TokenIdentifier.getFunctionPrototypeId()
     if (kind == "function"):
         return TokenIdentifier.getFunctionDefinitionId()
     if (kind == "macro"):
         return TokenIdentifier.getMacroId()
     if (kind == "typedef"):
         return TokenIdentifier.getTypedefId()
     if (kind == "externvar"):
         return TokenIdentifier.getExternFwdDeclarationId()
コード例 #5
0
ファイル: syntax_highlighter.py プロジェクト: artisdom/yavide
 def __tag_id_to_vim_syntax_group(self, tag_identifier):
     if tag_identifier == TokenIdentifier.getNamespaceId():
         return "yavideCppNamespace"
     if tag_identifier == TokenIdentifier.getNamespaceAliasId():
         return "yavideCppNamespaceAlias"
     if tag_identifier == TokenIdentifier.getClassId():
         return "yavideCppClass"
     if tag_identifier == TokenIdentifier.getStructId():
         return "yavideCppStructure"
     if tag_identifier == TokenIdentifier.getEnumId():
         return "yavideCppEnum"
     if tag_identifier == TokenIdentifier.getEnumValueId():
         return "yavideCppEnumValue"
     if tag_identifier == TokenIdentifier.getUnionId():
         return "yavideCppUnion"
     if tag_identifier == TokenIdentifier.getFieldId():
         return "yavideCppField"
     if tag_identifier == TokenIdentifier.getLocalVariableId():
         return "yavideCppLocalVariable"
     if tag_identifier == TokenIdentifier.getFunctionId():
         return "yavideCppFunction"
     if tag_identifier == TokenIdentifier.getMethodId():
         return "yavideCppMethod"
     if tag_identifier == TokenIdentifier.getFunctionParameterId():
         return "yavideCppFunctionParameter"
     if tag_identifier == TokenIdentifier.getTemplateTypeParameterId():
         return "yavideCppTemplateTypeParameter"
     if tag_identifier == TokenIdentifier.getTemplateNonTypeParameterId():
         return "yavideCppTemplateNonTypeParameter"
     if tag_identifier == TokenIdentifier.getTemplateTemplateParameterId():
         return "yavideCppTemplateTemplateParameter"
     if tag_identifier == TokenIdentifier.getMacroDefinitionId():
         return "yavideCppMacroDefinition"
     if tag_identifier == TokenIdentifier.getMacroInstantiationId():
         return "yavideCppMacroInstantiation"
     if tag_identifier == TokenIdentifier.getTypedefId():
         return "yavideCppTypedef"
     if tag_identifier == TokenIdentifier.getUsingDirectiveId():
         return "yavideCppUsingDirective"
     if tag_identifier == TokenIdentifier.getUsingDeclarationId():
         return "yavideCppUsingDeclaration"
コード例 #6
0
 def to_token_id(kind):
     if (kind == clang.cindex.CursorKind.NAMESPACE):
         return TokenIdentifier.getNamespaceId()
     if (kind in [clang.cindex.CursorKind.CLASS_DECL, clang.cindex.CursorKind.CLASS_TEMPLATE, clang.cindex.CursorKind.CLASS_TEMPLATE_PARTIAL_SPECIALIZATION]):
         return TokenIdentifier.getClassId()
     if (kind == clang.cindex.CursorKind.STRUCT_DECL):
         return TokenIdentifier.getStructId()
     if (kind == clang.cindex.CursorKind.ENUM_DECL):
         return TokenIdentifier.getEnumId()
     if (kind == clang.cindex.CursorKind.ENUM_CONSTANT_DECL):
         return TokenIdentifier.getEnumValueId()
     if (kind == clang.cindex.CursorKind.UNION_DECL):
         return TokenIdentifier.getUnionId()
     if (kind == clang.cindex.CursorKind.FIELD_DECL):
         return TokenIdentifier.getFieldId()
     if (kind == clang.cindex.CursorKind.VAR_DECL):
         return TokenIdentifier.getLocalVariableId()
     if (kind in [clang.cindex.CursorKind.FUNCTION_DECL, clang.cindex.CursorKind.FUNCTION_TEMPLATE]):
         return TokenIdentifier.getFunctionId()
     if (kind in [clang.cindex.CursorKind.CXX_METHOD, clang.cindex.CursorKind.CONSTRUCTOR, clang.cindex.CursorKind.DESTRUCTOR]):
         return TokenIdentifier.getMethodId()
     if (kind == clang.cindex.CursorKind.PARM_DECL):
         return TokenIdentifier.getFunctionParameterId()
     if (kind == clang.cindex.CursorKind.TEMPLATE_TYPE_PARAMETER):
         return TokenIdentifier.getTemplateTypeParameterId()
     if (kind == clang.cindex.CursorKind.TEMPLATE_NON_TYPE_PARAMETER):
         return TokenIdentifier.getTemplateNonTypeParameterId()
     if (kind == clang.cindex.CursorKind.TEMPLATE_TEMPLATE_PARAMETER):
         return TokenIdentifier.getTemplateTemplateParameterId()
     if (kind == clang.cindex.CursorKind.MACRO_DEFINITION):
         return TokenIdentifier.getMacroDefinitionId()
     if (kind == clang.cindex.CursorKind.MACRO_INSTANTIATION):
         return TokenIdentifier.getMacroInstantiationId()
     if (kind in [clang.cindex.CursorKind.TYPEDEF_DECL, clang.cindex.CursorKind.TYPE_ALIAS_DECL]):
         return TokenIdentifier.getTypedefId()
     if (kind == clang.cindex.CursorKind.NAMESPACE_ALIAS):
         return TokenIdentifier.getNamespaceAliasId()
     if (kind == clang.cindex.CursorKind.USING_DIRECTIVE):
         return TokenIdentifier.getUsingDirectiveId()
     if (kind == clang.cindex.CursorKind.USING_DECLARATION):
         return TokenIdentifier.getUsingDeclarationId()
     return TokenIdentifier.getUnsupportedId()
コード例 #7
0
 def to_token_id(kind):
     if (kind == "namespace"):
         return TokenIdentifier.getNamespaceId()
     if (kind == "class"):
         return TokenIdentifier.getClassId()
     if (kind == "struct"):
         return TokenIdentifier.getStructId()
     if (kind == "enum"):
         return TokenIdentifier.getEnumId()
     if (kind == "enumerator"):
         return TokenIdentifier.getEnumValueId()
     if (kind == "union"):
         return TokenIdentifier.getUnionId()
     if (kind == "member"):
         return TokenIdentifier.getClassStructUnionMemberId()
     if (kind == "local"):
         return TokenIdentifier.getLocalVariableId()
     if (kind == "variable"):
         return TokenIdentifier.getVariableDefinitionId()
     if (kind == "prototype"):
         return TokenIdentifier.getFunctionPrototypeId()
     if (kind == "function"):
         return TokenIdentifier.getFunctionDefinitionId()
     if (kind == "macro"):
         return TokenIdentifier.getMacroId()
     if (kind == "typedef"):
         return TokenIdentifier.getTypedefId()
     if (kind == "externvar"):
         return TokenIdentifier.getExternFwdDeclarationId()
コード例 #8
0
ファイル: clang_tokenizer.py プロジェクト: artisdom/yavide
 def to_token_id(kind):
     if (kind == clang.cindex.CursorKind.NAMESPACE):
         return TokenIdentifier.getNamespaceId()
     if (kind in [clang.cindex.CursorKind.CLASS_DECL, clang.cindex.CursorKind.CLASS_TEMPLATE, clang.cindex.CursorKind.CLASS_TEMPLATE_PARTIAL_SPECIALIZATION]):
         return TokenIdentifier.getClassId()
     if (kind == clang.cindex.CursorKind.STRUCT_DECL):
         return TokenIdentifier.getStructId()
     if (kind == clang.cindex.CursorKind.ENUM_DECL):
         return TokenIdentifier.getEnumId()
     if (kind == clang.cindex.CursorKind.ENUM_CONSTANT_DECL):
         return TokenIdentifier.getEnumValueId()
     if (kind == clang.cindex.CursorKind.UNION_DECL):
         return TokenIdentifier.getUnionId()
     if (kind == clang.cindex.CursorKind.FIELD_DECL):
         return TokenIdentifier.getFieldId()
     if (kind == clang.cindex.CursorKind.VAR_DECL):
         return TokenIdentifier.getLocalVariableId()
     if (kind in [clang.cindex.CursorKind.FUNCTION_DECL, clang.cindex.CursorKind.FUNCTION_TEMPLATE]):
         return TokenIdentifier.getFunctionId()
     if (kind in [clang.cindex.CursorKind.CXX_METHOD, clang.cindex.CursorKind.CONSTRUCTOR, clang.cindex.CursorKind.DESTRUCTOR]):
         return TokenIdentifier.getMethodId()
     if (kind == clang.cindex.CursorKind.PARM_DECL):
         return TokenIdentifier.getFunctionParameterId()
     if (kind == clang.cindex.CursorKind.TEMPLATE_TYPE_PARAMETER):
         return TokenIdentifier.getTemplateTypeParameterId()
     if (kind == clang.cindex.CursorKind.TEMPLATE_NON_TYPE_PARAMETER):
         return TokenIdentifier.getTemplateNonTypeParameterId()
     if (kind == clang.cindex.CursorKind.TEMPLATE_TEMPLATE_PARAMETER):
         return TokenIdentifier.getTemplateTemplateParameterId()
     if (kind == clang.cindex.CursorKind.MACRO_DEFINITION):
         return TokenIdentifier.getMacroDefinitionId()
     if (kind == clang.cindex.CursorKind.MACRO_INSTANTIATION):
         return TokenIdentifier.getMacroInstantiationId()
     if (kind in [clang.cindex.CursorKind.TYPEDEF_DECL, clang.cindex.CursorKind.TYPE_ALIAS_DECL]):
         return TokenIdentifier.getTypedefId()
     if (kind == clang.cindex.CursorKind.NAMESPACE_ALIAS):
         return TokenIdentifier.getNamespaceAliasId()
     if (kind == clang.cindex.CursorKind.USING_DIRECTIVE):
         return TokenIdentifier.getUsingDirectiveId()
     if (kind == clang.cindex.CursorKind.USING_DECLARATION):
         return TokenIdentifier.getUsingDeclarationId()
     return TokenIdentifier.getUnsupportedId()