Mercurial > vim
diff runtime/autoload/syntaxcomplete.vim @ 3996:b3f3237a3d72
Update runtime files.
author | Bram Moolenaar <bram@vim.org> |
---|---|
date | Wed, 05 Dec 2012 19:01:43 +0100 |
parents | c53344bacabf |
children | eb6ab7e78925 |
line wrap: on
line diff
--- a/runtime/autoload/syntaxcomplete.vim +++ b/runtime/autoload/syntaxcomplete.vim @@ -1,22 +1,26 @@ " Vim completion script " Language: All languages, uses existing syntax highlighting rules " Maintainer: David Fishburn <dfishburn dot vim at gmail dot com> -" Version: 10.0 -" Last Change: 2012 Oct 20 -" Usage: For detailed help, ":help ft-syntax-omni" +" Version: 11.0 +" Last Change: 2012 Dec 04 +" Usage: For detailed help, ":help ft-syntax-omni" " History " +" Version 11.0 +" Corrected which characters required escaping during +" substitution calls. +" " Version 10.0 " Cycle through all the character ranges specified in the " iskeyword option and build a list of valid word separators. -" Prior to this change, only actual characters were used, -" where for example ASCII "45" == "-". If "45" were used -" in iskeyword the hyphen would not be picked up. +" Prior to this change, only actual characters were used, +" where for example ASCII "45" == "-". If "45" were used +" in iskeyword the hyphen would not be picked up. " This introduces a new option, since the character ranges " specified could be multibyte: " let g:omni_syntax_use_single_byte = 1 -" This by default will only allow single byte ASCII +" This by default will only allow single byte ASCII " characters to be added and an additional check to ensure " the charater is printable (see documentation for isprint). " @@ -32,7 +36,7 @@ " Version 7.0 " Updated syntaxcomplete#OmniSyntaxList() " - Looking up the syntax groups defined from a syntax file -" looked for only 1 format of {filetype}GroupName, but some +" looked for only 1 format of {filetype}GroupName, but some " syntax writers use this format as well: " {b:current_syntax}GroupName " OmniSyntaxList() will now check for both if the first @@ -40,11 +44,11 @@ " " Version 6.0 " Added syntaxcomplete#OmniSyntaxList() -" - Allows other plugins to use this for their own +" - Allows other plugins to use this for their own " purposes. " - It will return a List of all syntax items for the -" syntax group name passed in. -" - XPTemplate for SQL will use this function via the +" syntax group name passed in. +" - XPTemplate for SQL will use this function via the " sqlcomplete plugin to populate a Choose box. " " Version 5.0 @@ -54,7 +58,7 @@ " " Set completion with CTRL-X CTRL-O to autoloaded function. " This check is in place in case this script is -" sourced directly instead of using the autoload feature. +" sourced directly instead of using the autoload feature. if exists('+omnifunc') " Do not set the option if already set since this " results in an E117 warning. @@ -64,9 +68,9 @@ if exists('+omnifunc') endif if exists('g:loaded_syntax_completion') - finish + finish endif -let g:loaded_syntax_completion = 100 +let g:loaded_syntax_completion = 110 " Turn on support for line continuations when creating the script let s:cpo_save = &cpo @@ -190,7 +194,7 @@ endfunc function! syntaxcomplete#OmniSyntaxList(...) if a:0 > 0 let parms = [] - if 3 == type(a:1) + if 3 == type(a:1) let parms = a:1 elseif 1 == type(a:1) let parms = split(a:1, ',') @@ -204,7 +208,7 @@ endfunc function! OmniSyntaxList(...) let list_parms = [] if a:0 > 0 - if 3 == type(a:1) + if 3 == type(a:1) let list_parms = a:1 elseif 1 == type(a:1) let list_parms = split(a:1, ',') @@ -240,18 +244,18 @@ function! OmniSyntaxList(...) let saveL = @l let filetype = substitute(&filetype, '\.', '_', 'g') - + if empty(list_parms) " Default the include group to include the requested syntax group let syntax_group_include_{filetype} = '' " Check if there are any overrides specified for this filetype if exists('g:omni_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') let list_parms = split(g:omni_syntax_group_include_{filetype}, ',') if syntax_group_include_{filetype} =~ '\w' - let syntax_group_include_{filetype} = - \ substitute( syntax_group_include_{filetype}, + let syntax_group_include_{filetype} = + \ substitute( syntax_group_include_{filetype}, \ '\s*,\s*', '\\|', 'g' \ ) endif @@ -261,11 +265,11 @@ function! OmniSyntaxList(...) endif " Loop through all the syntax groupnames, and build a - " syntax file which contains these names. This can + " syntax file which contains these names. This can " work generically for any filetype that does not already " have a plugin defined. " This ASSUMES the syntax groupname BEGINS with the name - " of the filetype. From my casual viewing of the vim7\syntax + " of the filetype. From my casual viewing of the vim7\syntax " directory this is true for almost all syntax definitions. " As an example, the SQL syntax groups have this pattern: " sqlType @@ -278,7 +282,7 @@ function! OmniSyntaxList(...) let syntax_full = "\n".@l let @l = saveL - if syntax_full =~ 'E28' + if syntax_full =~ 'E28' \ || syntax_full =~ 'E411' \ || syntax_full =~ 'E415' \ || syntax_full =~ 'No Syntax items' @@ -288,7 +292,7 @@ function! OmniSyntaxList(...) let filetype = substitute(&filetype, '\.', '_', 'g') let list_exclude_groups = [] - if a:0 > 0 + if a:0 > 0 " Do nothing since we have specific a specific list of groups else " Default the exclude group to nothing @@ -296,11 +300,11 @@ function! OmniSyntaxList(...) " Check if there are any overrides specified for this filetype if exists('g:omni_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') let list_exclude_groups = split(g:omni_syntax_group_exclude_{filetype}, ',') - if syntax_group_exclude_{filetype} =~ '\w' - let syntax_group_exclude_{filetype} = - \ substitute( syntax_group_exclude_{filetype}, + if syntax_group_exclude_{filetype} =~ '\w' + let syntax_group_exclude_{filetype} = + \ substitute( syntax_group_exclude_{filetype}, \ '\s*,\s*', '\\|', 'g' \ ) endif @@ -317,14 +321,14 @@ function! OmniSyntaxList(...) while ftindex > -1 let ft_part_name = matchstr( &filetype, '\w\+', ftindex ) - " Syntax rules can contain items for more than just the current + " Syntax rules can contain items for more than just the current " filetype. They can contain additional items added by the user " via autocmds or their vimrc. " 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'.ft_part_name.'\w\+\ze'. - \ '\s\+xxx\s\+' + \ '\s\+xxx\s\+' let index = 0 let index = match(syntax_full, next_group_regex, index) @@ -338,11 +342,11 @@ function! OmniSyntaxList(...) " syn keyword {syntax_filename}Keyword values ... " let b:current_syntax = "mysql" " So, we will make the format of finding the syntax group names - " a bit more flexible and look for both if the first fails to + " a bit more flexible and look for both if the first fails to " find a match. let next_group_regex = '\n' . \ '\zs'.b:current_syntax.'\w\+\ze'. - \ '\s\+xxx\s\+' + \ '\s\+xxx\s\+' let index = 0 let index = match(syntax_full, next_group_regex, index) endif @@ -356,9 +360,9 @@ function! OmniSyntaxList(...) let get_syn_list = 0 endif endfor - + " This code is no longer needed in version 6.0 since we have - " augmented the syntax list command to only retrieve the syntax + " augmented the syntax list command to only retrieve the syntax " groups we are interested in. " " if get_syn_list == 1 @@ -370,7 +374,7 @@ function! OmniSyntaxList(...) " endif 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. let extra_syn_list = s:SyntaxCSyntaxGroupItems(group_name, syntax_full) let syn_list = syn_list . extra_syn_list . "\n" @@ -424,7 +428,7 @@ function! s:SyntaxCSyntaxGroupItems( gro " \| - 2nd potential match " \%$ - matches end of the file or string " \) - end a group - 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\|\%$\)' \ ) @@ -434,42 +438,42 @@ function! s:SyntaxCSyntaxGroupItems( gro " We only want the words for the lines begining with " containedin, but there could be other items. - + " Tried to remove all lines that do not begin with contained " but this does not work in all cases since you can have " contained nextgroup=... " So this will strip off the ending of lines with known " keywords. - let syn_list = substitute( + let syn_list = substitute( \ syntax_group, '\<\('. \ substitute( \ escape(s:syn_remove_words, '\\/.*$^~[]') \ , ',', '\\|', 'g' \ ). \ '\).\{-}\%($\|'."\n".'\)' - \ , "\n", 'g' + \ , "\n", 'g' \ ) " Now strip off the newline + blank space + contained. " Also include lines with nextgroup=@someName skip_key_words syntax_element - let syn_list = substitute( + let syn_list = substitute( \ syn_list, '\%(^\|\n\)\@<=\s*\<\(contained\|nextgroup=\)' - \ , "", 'g' + \ , "", 'g' \ ) " This can leave lines like this " =@vimMenuList skipwhite onoremenu " Strip the special option keywords first " :h :syn-skipwhite* - let syn_list = substitute( + let syn_list = substitute( \ syn_list, '\<\(skipwhite\|skipnl\|skipempty\)\>' - \ , "", 'g' + \ , "", 'g' \ ) " Now remove the remainder of the nextgroup=@someName lines - let syn_list = substitute( + let syn_list = substitute( \ syn_list, '\%(^\|\n\)\@<=\s*\(@\w\+\)' - \ , "", 'g' + \ , "", 'g' \ ) if b:omni_syntax_use_iskeyword == 0 @@ -484,17 +488,17 @@ function! s:SyntaxCSyntaxGroupItems( gro " Numeric values convert to their ASCII equivalent using the " nr2char() function. " & 38 - " * 42 + " * 42 " + 43 - " - 45 + " - 45 " ^ 94 - " Iterate through all numeric specifications and convert those + " Iterate through all numeric specifications and convert those " to their ascii equivalent ensuring the character is printable. " If so, add it to the list. let accepted_chars = '' for item in split(&iskeyword, ',') if item =~ '-' - " This is a character range (ie 47-58), + " This is a character range (ie 47-58), " cycle through each character within the range let [b:start, b:end] = split(item, '-') for range_item in range( b:start, b:end ) @@ -520,7 +524,11 @@ function! s:SyntaxCSyntaxGroupItems( gro endif endfor " Escape special regex characters - let accepted_chars = escape(accepted_chars, '\\/.*$^~[]' ) + " Looks like the wrong chars are escaped. In a collection, + " :h /[] + " only `]', `\', `-' and `^' are special: + " let accepted_chars = escape(accepted_chars, '\\/.*$^~[]' ) + let accepted_chars = escape(accepted_chars, ']\-^' ) " Remove all characters that are not acceptable let syn_list = substitute( syn_list, '[^A-Za-z'.accepted_chars.']', ' ', 'g' ) else @@ -534,7 +542,11 @@ function! s:SyntaxCSyntaxGroupItems( gro " Remove all commas let accept_chars = substitute(accept_chars, ',', '', 'g') " Escape special regex characters - let accept_chars = escape(accept_chars, '\\/.*$^~[]' ) + " Looks like the wrong chars are escaped. In a collection, + " :h /[] + " only `]', `\', `-' and `^' are special: + " let accept_chars = escape(accept_chars, '\\/.*$^~[]' ) + let accept_chars = escape(accept_chars, ']\-^' ) " Remove all characters that are not acceptable let syn_list = substitute( syn_list, '[^0-9A-Za-z_'.accept_chars.']', ' ', 'g' ) endif