0
0
mirror of https://github.com/vim/vim.git synced 2025-07-04 23:07:33 -04:00

updated for version 7.0g05

This commit is contained in:
Bram Moolenaar 2006-05-06 21:40:45 +00:00
parent 773560bc60
commit 97e8f35600
4 changed files with 116 additions and 76 deletions

View File

@ -1,8 +1,9 @@
" Vim completion script " Vim completion script
" Language: All languages, uses existing syntax highlighting rules " Language: All languages, uses existing syntax highlighting rules
" Maintainer: David Fishburn <fishburn@ianywhere.com> " Maintainer: David Fishburn <fishburn@ianywhere.com>
" Version: 1.3 " Version: 2.0
" Last Change: Mon Mar 27 2006 9:29:35 PM " Last Change: Fri May 05 2006 10:34:57 PM
" Usage: For detailed help, ":help ft-syntax-omni"
" Set completion with CTRL-X CTRL-O to autoloaded function. " Set completion with CTRL-X CTRL-O to autoloaded function.
" This check is in place in case this script is " This check is in place in case this script is
@ -18,11 +19,15 @@ endif
if exists('g:loaded_syntax_completion') if exists('g:loaded_syntax_completion')
finish finish
endif endif
let g:loaded_syntax_completion = 1 let g:loaded_syntax_completion = 20
" Set ignorecase to the ftplugin standard
if !exists('g:omni_syntax_ignorecase')
let g:omni_syntax_ignorecase = &ignorecase
endif
" This script will build a completion list based on the syntax " This script will build a completion list based on the syntax
" elements defined by the files in $VIMRUNTIME/syntax. " elements defined by the files in $VIMRUNTIME/syntax.
let s:syn_remove_words = 'match,matchgroup=,contains,'. let s:syn_remove_words = 'match,matchgroup=,contains,'.
\ 'links to,start=,end=,nextgroup=' \ 'links to,start=,end=,nextgroup='
@ -65,20 +70,22 @@ function! syntaxcomplete#Complete(findstart, base)
let base = s:prepended . a:base let base = s:prepended . a:base
let list_idx = index(s:cache_name, &filetype, 0, &ignorecase) let filetype = substitute(&filetype, '\.', '_', 'g')
let list_idx = index(s:cache_name, filetype, 0, &ignorecase)
if list_idx > -1 if list_idx > -1
let compl_list = s:cache_list[list_idx] let compl_list = s:cache_list[list_idx]
else else
let compl_list = OmniSyntaxList() let compl_list = OmniSyntaxList()
let s:cache_name = add( s:cache_name, &filetype ) let s:cache_name = add( s:cache_name, filetype )
let s:cache_list = add( s:cache_list, compl_list ) let s:cache_list = add( s:cache_list, compl_list )
endif endif
" Return list of matches. " Return list of matches.
if base =~ '\w' if base =~ '\w'
let compstr = join(compl_list, ' ') let compstr = join(compl_list, ' ')
let compstr = substitute(compstr, '\<\%('.base.'\)\@!\w\+\s*', '', 'g') let expr = (g:omni_syntax_ignorecase==0?'\C':'').'\<\%('.base.'\)\@!\w\+\s*'
let compstr = substitute(compstr, expr, '', 'g')
let compl_list = split(compstr, '\s\+') let compl_list = split(compstr, '\s\+')
endif endif
@ -86,6 +93,13 @@ function! syntaxcomplete#Complete(findstart, base)
endfunc endfunc
function! OmniSyntaxList() function! OmniSyntaxList()
" Default to returning a dictionary, if use_dictionary is set to 0
" a list will be returned.
" let use_dictionary = 1
" if a:0 > 0 && a:1 != ''
" let use_dictionary = a:1
" endif
let saveL = @l let saveL = @l
" Loop through all the syntax groupnames, and build a " Loop through all the syntax groupnames, and build a
@ -109,85 +123,107 @@ function! OmniSyntaxList()
return [] return []
endif endif
let filetype = substitute(&filetype, '\.', '_', 'g')
" Default the include group to include the requested syntax group " Default the include group to include the requested syntax group
let syntax_group_include_{&filetype} = '' let syntax_group_include_{filetype} = ''
" Check if there are any overrides specified for this filetype " Check if there are any overrides specified for this filetype
if exists('g:omni_syntax_group_include_'.&filetype) if exists('g:omni_syntax_group_include_'.filetype)
let syntax_group_include_{&filetype} = let syntax_group_include_{filetype} =
\ substitute( g:omni_syntax_group_include_{&filetype},'\s\+','','g') \ substitute( g:omni_syntax_group_include_{filetype},'\s\+','','g')
if syntax_group_include_{&filetype} =~ '\w' if syntax_group_include_{filetype} =~ '\w'
let syntax_group_include_{&filetype} = let syntax_group_include_{filetype} =
\ substitute( syntax_group_include_{&filetype}, \ substitute( syntax_group_include_{filetype},
\ '\s*,\s*', '\\|', 'g' \ '\s*,\s*', '\\|', 'g'
\ ) \ )
endif endif
endif endif
" Default the exclude group to nothing " Default the exclude group to nothing
let syntax_group_exclude_{&filetype} = '' let syntax_group_exclude_{filetype} = ''
" Check if there are any overrides specified for this filetype " Check if there are any overrides specified for this filetype
if exists('g:omni_syntax_group_exclude_'.&filetype) if exists('g:omni_syntax_group_exclude_'.filetype)
let syntax_group_exclude_{&filetype} = let syntax_group_exclude_{filetype} =
\ substitute( g:omni_syntax_group_exclude_{&filetype},'\s\+','','g') \ substitute( g:omni_syntax_group_exclude_{filetype},'\s\+','','g')
if syntax_group_exclude_{&filetype} =~ '\w' if syntax_group_exclude_{filetype} =~ '\w'
let syntax_group_exclude_{&filetype} = let syntax_group_exclude_{filetype} =
\ substitute( syntax_group_exclude_{&filetype}, \ substitute( syntax_group_exclude_{filetype},
\ '\s*,\s*', '\\|', 'g' \ '\s*,\s*', '\\|', 'g'
\ ) \ )
endif endif
endif endif
" Syntax rules can contain items for more than just the current " Sometimes filetypes can be composite names, like c.doxygen
" filetype. They can contain additional items added by the user " Loop through each individual part looking for the syntax
" via autocmds or their vimrc. " items specific to each individual filetype.
" Some syntax files can be combined (html, php, jsp).
" We want only items that begin with the filetype we are interested in.
let next_group_regex = '\n' .
\ '\zs'.&filetype.'\w\+\ze'.
\ '\s\+xxx\s\+'
let syn_list = '' let syn_list = ''
let index = 0 let ftindex = 0
let index = match(syntax_full, next_group_regex, index) let ftindex = match(&filetype, '\w\+', ftindex)
while index > 0 while ftindex > -1
let group_name = matchstr( syntax_full, '\w\+', index ) let ft_part_name = matchstr( &filetype, '\w\+', ftindex )
let get_syn_list = 1 " Syntax rules can contain items for more than just the current
" if syntax_group_include_{&filetype} == '' " filetype. They can contain additional items added by the user
" if syntax_group_exclude_{&filetype} != '' " via autocmds or their vimrc.
" if '\<'.syntax_group_exclude_{&filetype}.'\>' =~ '\<'.group_name.'\>' " Some syntax files can be combined (html, php, jsp).
" let get_syn_list = 0 " We want only items that begin with the filetype we are interested in.
" endif let next_group_regex = '\n' .
" endif \ '\zs'.ft_part_name.'\w\+\ze'.
" else \ '\s\+xxx\s\+'
" if '\<'.syntax_group_include_{&filetype}.'\>' !~ '\<'.group_name.'\>' let index = 0
" let get_syn_list = 0 let index = match(syntax_full, next_group_regex, index)
" endif
" endif while index > -1
if syntax_group_exclude_{&filetype} != '' let group_name = matchstr( syntax_full, '\w\+', index )
if '\<'.syntax_group_exclude_{&filetype}.'\>' =~ '\<'.group_name.'\>'
let get_syn_list = 0 let get_syn_list = 1
endif " if syntax_group_include_{&filetype} == ''
endif " if syntax_group_exclude_{&filetype} != ''
" if '\<'.syntax_group_exclude_{&filetype}.'\>' =~ '\<'.group_name.'\>'
if get_syn_list == 1 " let get_syn_list = 0
if syntax_group_include_{&filetype} != '' " endif
if '\<'.syntax_group_include_{&filetype}.'\>' !~ '\<'.group_name.'\>' " endif
" else
" if '\<'.syntax_group_include_{&filetype}.'\>' !~ '\<'.group_name.'\>'
" let get_syn_list = 0
" endif
" endif
if syntax_group_exclude_{filetype} != ''
if '\<'.syntax_group_exclude_{filetype}.'\>' =~ '\<'.group_name.'\>'
let get_syn_list = 0 let get_syn_list = 0
endif endif
endif endif
endif
if get_syn_list == 1
if syntax_group_include_{filetype} != ''
if '\<'.syntax_group_include_{filetype}.'\>' !~ '\<'.group_name.'\>'
let get_syn_list = 0
endif
endif
endif
if get_syn_list == 1 if get_syn_list == 1
" Pass in the full syntax listing, plus the group name we " Pass in the full syntax listing, plus the group name we
" are interested in. " are interested in.
let extra_syn_list = s:SyntaxCSyntaxGroupItems(group_name, syntax_full) let extra_syn_list = s:SyntaxCSyntaxGroupItems(group_name, syntax_full)
let syn_list = syn_list . extra_syn_list . "\n" " if !empty(extra_syn_list)
endif " for elem in extra_syn_list
" let item = {'word':elem, 'kind':'t', 'info':group_name}
" let compl_list += [item]
" endfor
" endif
let index = index + strlen(group_name) let syn_list = syn_list . extra_syn_list . "\n"
let index = match(syntax_full, next_group_regex, index) endif
let index = index + strlen(group_name)
let index = match(syntax_full, next_group_regex, index)
endwhile
let ftindex = ftindex + len(ft_part_name)
let ftindex = match( &filetype, '\w\+', ftindex )
endwhile endwhile
" Convert the string to a List and sort it. " Convert the string to a List and sort it.
@ -228,7 +264,7 @@ function! s:SyntaxCSyntaxGroupItems( group_name, syntax_full )
" \n\w - at the first newline starting with a character " \n\w - at the first newline starting with a character
let syntax_group = matchstr(a:syntax_full, let syntax_group = matchstr(a:syntax_full,
\ "\n".a:group_name.'\s\+xxx\s\+\zs.\{-}\ze'."\n".'\w' \ "\n".a:group_name.'\s\+xxx\s\+\zs.\{-}\ze'."\n".'\w'
\) \ )
if syntax_group != "" if syntax_group != ""
" let syn_list = substitute( @l, '^.*xxx\s*\%(contained\s*\)\?', "", '' ) " let syn_list = substitute( @l, '^.*xxx\s*\%(contained\s*\)\?', "", '' )
@ -242,17 +278,21 @@ function! s:SyntaxCSyntaxGroupItems( group_name, syntax_full )
" contained nextgroup=... " contained nextgroup=...
" So this will strip off the ending of lines with known " So this will strip off the ending of lines with known
" keywords. " keywords.
let syn_list = substitute( syntax_group, '\<\('. let syn_list = substitute(
\ substitute( \ syntax_group, '\<\('.
\ escape( s:syn_remove_words, '\\/.*$^~[]') \ substitute(
\ , ',', '\\|', 'g'). \ escape(s:syn_remove_words, '\\/.*$^~[]')
\ '\).\{-}\%($\|'."\n".'\)' \ , ',', '\\|', 'g'
\ , "\n", 'g' ) \ ).
\ '\).\{-}\%($\|'."\n".'\)'
\ , "\n", 'g'
\ )
" Now strip off the newline + blank space + contained " Now strip off the newline + blank space + contained
let syn_list = substitute( syn_list, '\%(^\|\n\)\@<=\s*\<\('. let syn_list = substitute(
\ 'contained\)' \ syn_list, '\%(^\|\n\)\@<=\s*\<\(contained\)'
\ , "", 'g' ) \ , "", 'g'
\ )
" There are a number of items which have non-word characters in " There are a number of items which have non-word characters in
" them, *'T_F1'*. vim.vim is one such file. " them, *'T_F1'*. vim.vim is one such file.

Binary file not shown.

Binary file not shown.

Binary file not shown.