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