" Tag Highlighter: " Author: A. S. Budden " Copyright: Copyright (C) 2009-2011 A. S. Budden " Permission is hereby granted to use and distribute this code, " with or without modifications, provided that this copyright " notice is copied with it. Like anything else that's free, " the TagHighlight plugin is provided *as is* and comes with no " warranty of any kind, either expressed or implied. By using " this plugin, you agree that in no event will the copyright " holder be liable for any damages resulting from the use " of this software. " --------------------------------------------------------------------- try if &cp || v:version < 700 || (exists('g:loaded_TagHighlight') && (g:plugin_development_mode != 1)) throw "Already loaded" endif catch finish endtry let g:loaded_TagHighlight = 1 let old_versions = globpath(&rtp, 'plugin/ctags_highlighting.vim') if len(old_versions) > 0 echoerr "Legacy ctags highlighter found. This highlighter is" \ "intended to replace ctags_highlighter. See the" \ "user documentation in doc/TagHighlight.txt for" \ "more information." finish endif if ! exists('g:TagHighlightSettings') let g:TagHighlightSettings = {} endif let g:TagHighlightPrivate = {} let s:plugin_paths = split(globpath(&rtp, 'plugin/TagHighlight/TagHighlight.py'), '\n') if len(s:plugin_paths) == 1 let g:TagHighlightPrivate['PluginPath'] = fnamemodify(s:plugin_paths[0], ':p:h') elseif len(s:plugin_paths) == 0 echoerr "Cannot find TagHighlight.py" else echoerr "Multiple plugin installs found: something has gone wrong!" endif " Update types & tags command! -bar UpdateTypesFile \ silent call TagHighlight#Generation#UpdateAndRead(0) command! -bar UpdateTypesFileOnly \ silent call TagHighlight#Generation#UpdateAndRead(1) command! -nargs=1 UpdateTypesFileDebug \ call TagHighlight#Debug#DebugUpdateTypesFile() function! s:LoadLanguages() " This loads the language data files. let language_files = split(glob(g:TagHighlightPrivate['PluginPath'] . '/data/languages/*.txt'), '\n') let g:TagHighlightPrivate['ExtensionLookup'] = {} let g:TagHighlightPrivate['FileTypeLookup'] = {} let g:TagHighlightPrivate['SyntaxLookup'] = {} let g:TagHighlightPrivate['SpecialSyntaxHandlers'] = {} for language_file in language_files let entries = TagHighlight#LoadDataFile#LoadFile(language_file) if has_key(entries, 'Suffix') && has_key(entries, 'VimExtensionMatcher') \ && has_key(entries, 'VimFileTypes') && has_key(entries, 'VimSyntaxes') let g:TagHighlightPrivate['ExtensionLookup'][entries['VimExtensionMatcher']] = entries['Suffix'] if type(entries['VimFileTypes']) == type([]) let ftkey = join(entries['VimFileTypes'], ",") else let ftkey = entries['VimFileTypes'] endif let g:TagHighlightPrivate['FileTypeLookup'][ftkey] = entries['Suffix'] if type(entries['VimSyntaxes']) == type([]) let stkey = join(entries['VimSyntaxes'], ",") else let stkey = entries['VimSyntaxes'] endif let g:TagHighlightPrivate['SyntaxLookup'][stkey] = entries['Suffix'] else echoerr "Could not load language from file " . language_file endif if has_key(entries, 'SpecialSyntaxHandlers') if type(entries['SpecialSyntaxHandlers']) == type([]) let handlers = entries['SpecialSyntaxHandlers'] else let handlers = [entries['SpecialSyntaxHandlers']] endif let g:TagHighlightPrivate['SpecialSyntaxHandlers'][entries['Suffix']] = handlers endif endfor endfunction function! s:LoadKinds() " Load the list of kinds (ignoring ctags information) into " Vim. This is used to make the default links let g:TagHighlightPrivate['Kinds'] = TagHighlight#LoadDataFile#LoadDataFile('kinds.txt') " Use a dictionary to get all unique entries let tag_names_dict = {} for entry in keys(g:TagHighlightPrivate['Kinds']) for key in keys(g:TagHighlightPrivate['Kinds'][entry]) let tag_names_dict[g:TagHighlightPrivate['Kinds'][entry][key]] = "" endfor endfor let g:TagHighlightPrivate['AllTypes'] = sort(keys(tag_names_dict)) endfunction function! TagHLDebug(str, level) if TagHighlight#Debug#DebugLevelIncludes(a:level) try let debug_file = TagHighlight#Option#GetOption('DebugFile') let print_time = TagHighlight#Option#GetOption('DebugPrintTime') catch /Unrecognised option/ " Probably haven't loaded the option definitions " yet, so assume no debug log file let debug_file = 'None' endtry if debug_file == 'None' echomsg a:str else exe 'redir >>' debug_file if print_time && exists("*strftime") silent echo strftime("%H.%M.%S") . ": " . a:str else silent echo a:str endif redir END endif endif endfunction call s:LoadLanguages() call s:LoadKinds() for tagname in g:TagHighlightPrivate['AllTypes'] let simplename = substitute(tagname, '^CTags', '', '') exe 'hi default link' tagname simplename " Highlight everything as a keyword by default exe 'hi default link' simplename 'Keyword' endfor if ! has_key(g:TagHighlightPrivate, 'AutoCommandsLoaded') let g:TagHighlightPrivate['AutoCommandsLoaded'] = 1 autocmd BufRead,BufNewFile * call TagHighlight#ReadTypes#ReadTypesByExtension() autocmd Syntax * call TagHighlight#ReadTypes#ReadTypesBySyntax() autocmd FileType * call TagHighlight#ReadTypes#ReadTypesByFileType() endif command! ReadTypes call TagHighlight#ReadTypes#ReadTypesByOption()