updated for version 7.0g05
diff --git a/runtime/autoload/syntaxcomplete.vim b/runtime/autoload/syntaxcomplete.vim
index 6158a27..5e0d013 100644
--- a/runtime/autoload/syntaxcomplete.vim
+++ b/runtime/autoload/syntaxcomplete.vim
@@ -1,8 +1,9 @@
 " Vim completion script
 " Language:    All languages, uses existing syntax highlighting rules
 " Maintainer:  David Fishburn <fishburn@ianywhere.com>
-" Version:     1.3
-" Last Change: Mon Mar 27 2006 9:29:35 PM
+" Version:     2.0
+" 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.
 " This check is in place in case this script is
@@ -18,11 +19,15 @@
 if exists('g:loaded_syntax_completion')
     finish 
 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
 " elements defined by the files in $VIMRUNTIME/syntax.
-
 let s:syn_remove_words = 'match,matchgroup=,contains,'.
             \ 'links to,start=,end=,nextgroup='
 
@@ -65,20 +70,22 @@
 
     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
         let compl_list = s:cache_list[list_idx]
     else
-        let compl_list = OmniSyntaxList()
-        let s:cache_name  = add( s:cache_name,  &filetype )
-        let s:cache_list  = add( s:cache_list,  compl_list )
+        let compl_list   = OmniSyntaxList()
+        let s:cache_name = add( s:cache_name,  filetype )
+        let s:cache_list = add( s:cache_list,  compl_list )
     endif
 
     " Return list of matches.
 
     if base =~ '\w'
-        let compstr = join(compl_list, ' ')
-        let compstr = substitute(compstr, '\<\%('.base.'\)\@!\w\+\s*', '', 'g')
+        let compstr    = join(compl_list, ' ')
+        let expr       = (g:omni_syntax_ignorecase==0?'\C':'').'\<\%('.base.'\)\@!\w\+\s*'
+        let compstr    = substitute(compstr, expr, '', 'g')
         let compl_list = split(compstr, '\s\+')
     endif
 
@@ -86,6 +93,13 @@
 endfunc
 
 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
     
     " Loop through all the syntax groupnames, and build a
@@ -109,85 +123,107 @@
         return []
     endif
 
+    let filetype = substitute(&filetype, '\.', '_', 'g')
+
     " 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
-    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}, 
+    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} = ''
+    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}, 
+    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\+' 
+    " Sometimes filetypes can be composite names, like c.doxygen
+    " Loop through each individual part looking for the syntax
+    " items specific to each individual filetype.
     let syn_list = ''
-    let index    = 0
-    let index    = match(syntax_full, next_group_regex, index)
+    let ftindex  = 0
+    let ftindex  = match(&filetype, '\w\+', ftindex)
 
-    while index > 0
-        let group_name = matchstr( syntax_full, '\w\+', index )
+    while ftindex > -1
+        let ft_part_name = matchstr( &filetype, '\w\+', ftindex )
 
-        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.'\>'
+        " 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\+' 
+        let index    = 0
+        let index    = match(syntax_full, next_group_regex, index)
+
+        while index > -1
+            let group_name = matchstr( syntax_full, '\w\+', index )
+
+            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
-        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
-            " Pass in the full syntax listing, plus the group name we 
-            " are interested in.
-            let extra_syn_list = s:SyntaxCSyntaxGroupItems(group_name, syntax_full)
+            if get_syn_list == 1
+                " 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"
-        endif
+                " if !empty(extra_syn_list)
+                "     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 index = match(syntax_full, next_group_regex, index)
+                let syn_list = syn_list . extra_syn_list . "\n"
+            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
 
     " Convert the string to a List and sort it.
@@ -228,7 +264,7 @@
     "     \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*\)\?', "", '' )
@@ -242,17 +278,21 @@
         "    contained nextgroup=...
         " So this will strip off the ending of lines with known
         " keywords.
-        let syn_list = substitute( syntax_group, '\<\('.
-                    \ substitute(
-                    \ escape( s:syn_remove_words, '\\/.*$^~[]')
-                    \ , ',', '\\|', 'g').
-                    \ '\).\{-}\%($\|'."\n".'\)'
-                    \ , "\n", 'g' )
+        let syn_list = substitute( 
+                    \    syntax_group, '\<\('.
+                    \    substitute(
+                    \      escape(s:syn_remove_words, '\\/.*$^~[]')
+                    \      , ',', '\\|', 'g'
+                    \    ).
+                    \    '\).\{-}\%($\|'."\n".'\)'
+                    \    , "\n", 'g' 
+                    \  )
 
         " Now strip off the newline + blank space + contained
-        let syn_list = substitute( syn_list, '\%(^\|\n\)\@<=\s*\<\('.
-                    \ 'contained\)'
-                    \ , "", 'g' )
+        let syn_list = substitute( 
+                    \    syn_list, '\%(^\|\n\)\@<=\s*\<\(contained\)'
+                    \    , "", 'g' 
+                    \ )
 
         " There are a number of items which have non-word characters in
         " them, *'T_F1'*.  vim.vim is one such file.