updated for version 7.0212
diff --git a/runtime/autoload/syntaxcomplete.vim b/runtime/autoload/syntaxcomplete.vim
index 367847c..deaf7ed 100644
--- a/runtime/autoload/syntaxcomplete.vim
+++ b/runtime/autoload/syntaxcomplete.vim
@@ -1,12 +1,12 @@
 " Vim completion script
 " Language:    All languages, uses existing syntax highlighting rules
 " Maintainer:  David Fishburn <fishburn@ianywhere.com>
-" Version:     1.0
-" Last Change: Sun Jan 08 2006 10:17:51 PM
+" Version:     1.1
+" Last Change: Wed Mar 01 2006 9:58:14 PM
 
 " Set completion with CTRL-X CTRL-O to autoloaded function.
-if exists('&ofu')
-    setlocal ofu=syntaxcomplete#Complete
+if exists('+omnifunc')
+    setlocal omnifunc=syntaxcomplete#Complete
 endif
 
 if exists('g:loaded_syntax_completion')
@@ -62,7 +62,7 @@
     if list_idx > -1
         let compl_list = s:cache_list[list_idx]
     else
-        let compl_list = s:SyntaxList()
+        let compl_list = OmniSyntaxList()
         let s:cache_name  = add( s:cache_name,  &filetype )
         let s:cache_list  = add( s:cache_list,  compl_list )
     endif
@@ -78,7 +78,7 @@
     return compl_list
 endfunc
 
-function! s:SyntaxList()
+function! OmniSyntaxList()
     let saveL = @l
     
     " Loop through all the syntax groupnames, and build a
@@ -86,63 +86,146 @@
     " 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\sytax 
+    " of the filetype.  From my casual viewing of the vim7\syntax 
     " directory.
     redir @l
     silent! exec 'syntax list '
     redir END
 
-    let syntax_groups = @l
+    let syntax_full = "\n".@l
     let @l = saveL
 
-    if syntax_groups =~ 'E28' 
-                \ || syntax_groups =~ 'E411'
-                \ || syntax_groups =~ 'E415'
-                \ || syntax_groups =~ 'No sytax items'
-        return -1
+    if syntax_full =~ 'E28' 
+                \ || syntax_full =~ 'E411'
+                \ || syntax_full =~ 'E415'
+                \ || syntax_full =~ 'No Syntax items'
+        return []
     endif
 
-    " Abort names - match, links to, matchgroup=, start=, contains=, contained,
-    "               cluster=, nextgroup=, end=
+    " 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') 
+        if syntax_group_include_{&filetype} =~ '\w'
+            let syntax_group_include_{&filetype} = 
+                        \ substitute( syntax_group_include_{&filetype}, 
+                        \ '\s*,\s*', '\\|', 'g'
+                        \ )
+        endif
+    endif
+
+    " Default the exclude group to nothing
+    let syntax_group_exclude_{&filetype} = ''
+    " 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') 
+        if syntax_group_exclude_{&filetype} =~ '\w' 
+            let syntax_group_exclude_{&filetype} = 
+                        \ substitute( syntax_group_exclude_{&filetype}, 
+                        \ '\s*,\s*', '\\|', 'g'
+                        \ )
+        endif
+    endif
+
+    " 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'.&filetype.'\w\+\ze'.
-                \ '\s\+xxx\s\+'.
-                \ '\<\('.
-                \ substitute(s:syn_remove_words, ',', '\\|', 'g').
-                \ '\)\@!'
+                \ '\s\+xxx\s\+' 
     let syn_list = ''
     let index    = 0
-    let index    = match(syntax_groups, next_group_regex, index)
-
+    let index    = match(syntax_full, next_group_regex, index)
 
     while index > 0
-        let group_name = matchstr( syntax_groups, '\w\+', index )
+        let group_name = matchstr( syntax_full, '\w\+', index )
 
-        let extra_syn_list = s:SyntaxGroupItems(group_name)
+        let get_syn_list = 1
+        " if syntax_group_include_{&filetype} == ''
+        "     if syntax_group_exclude_{&filetype} != ''
+        "         if '\<'.syntax_group_exclude_{&filetype}.'\>' =~ '\<'.group_name.'\>'
+        "             let get_syn_list = 0
+        "         endif
+        "     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
+            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
 
-        let syn_list = syn_list . extra_syn_list . "\n"
+        if get_syn_list == 1
+            " Pass in the full syntax listing, plus the group name we 
+            " are interested in.
+            let extra_syn_list = s:SyntaxGroupItems(group_name, syntax_full)
+
+            let syn_list = syn_list . extra_syn_list . "\n"
+        endif
 
         let index = index + strlen(group_name)
-        let index = match(syntax_groups, next_group_regex, index)
+        let index = match(syntax_full, next_group_regex, index)
     endwhile
 
-    return sort(split(syn_list))
+    " Convert the string to a List and sort it.
+    let compl_list = sort(split(syn_list))
+
+    if &filetype == 'vim'
+        let short_compl_list = []
+        for i in range(len(compl_list))
+            if i == len(compl_list)-1
+                let next = i
+            else
+                let next = i + 1
+            endif
+            if  compl_list[next] !~ '^'.compl_list[i].'.$'
+                let short_compl_list += [compl_list[i]]
+            endif
+        endfor
+
+        return short_compl_list
+    else
+        return compl_list
+    endif
 endfunction
 
-function! s:SyntaxGroupItems( group_name )
-    let saveL = @l
-    
-    " Generate (based on the syntax highlight rules) a list of
-    " the Statements, functions, keywords and so on available
-    " If this needs updating, the syntax\sql.vim file should be
-    " updated
-    redir @l
-    silent! exec 'syntax list ' . a:group_name
-    redir END
+function! s:SyntaxGroupItems( group_name, syntax_full )
 
-    if @l !~ 'E28'
+    let syn_list = ""
+
+    " From the full syntax listing, strip out the portion for the
+    " request group.
+    " Query:
+    "     \n           - must begin with a newline
+    "     a:group_name - the group name we are interested in
+    "     \s\+xxx\s\+  - group names are always followed by xxx
+    "     \zs          - start the match
+    "     .\{-}        - everything ...
+    "     \ze          - end the match
+    "     \n\w         - at the first newline starting with a character
+    let syntax_group = matchstr(a:syntax_full, 
+                \ "\n".a:group_name.'\s\+xxx\s\+\zs.\{-}\ze'."\n".'\w'
+                \)
+
+    if syntax_group != ""
         " let syn_list = substitute( @l, '^.*xxx\s*\%(contained\s*\)\?', "", '' )
-        let syn_list = substitute( @l, '^.*xxx\s*', "", '' )
+        " let syn_list = substitute( @l, '^.*xxx\s*', "", '' )
 
         " We only want the words for the lines begining with
         " containedin, but there could be other items.
@@ -152,7 +235,7 @@
         "    contained nextgroup=...
         " So this will strip off the ending of lines with known
         " keywords.
-        let syn_list = substitute( syn_list, '\<\('.
+        let syn_list = substitute( syntax_group, '\<\('.
                     \ substitute(
                     \ escape( s:syn_remove_words, '\\/.*$^~[]')
                     \ , ',', '\\|', 'g').
@@ -172,8 +255,6 @@
         let syn_list = ''
     endif
 
-    let @l = saveL
-
     return syn_list
 endfunction