changeset 3281:af1e8a1714c2

Update runtime files.
author Bram Moolenaar <bram@vim.org>
date Fri, 20 Jan 2012 21:08:56 +0100
parents aa265b7165cc
children 7b59c2c032ca
files runtime/autoload/getscript.vim runtime/autoload/tar.vim runtime/autoload/vimball.vim runtime/autoload/zip.vim runtime/compiler/erlang.vim runtime/doc/autocmd.txt runtime/doc/develop.txt runtime/doc/mlang.txt runtime/doc/options.txt runtime/doc/pi_getscript.txt runtime/doc/pi_tar.txt runtime/doc/pi_vimball.txt runtime/doc/pi_zip.txt runtime/doc/syntax.txt runtime/doc/tags runtime/doc/todo.txt runtime/doc/various.txt runtime/ftplugin/erlang.vim runtime/ftplugin/logcheck.vim runtime/ftplugin/postscr.vim runtime/indent/erlang.vim runtime/indent/java.vim runtime/plugin/getscriptPlugin.vim runtime/plugin/tarPlugin.vim runtime/plugin/vimballPlugin.vim runtime/plugin/zipPlugin.vim runtime/spell/ga/ga_IE.diff runtime/spell/gd/gd_GB.diff runtime/spell/sv/sv_SE.diff runtime/syntax/c.vim runtime/syntax/d.vim runtime/syntax/erlang.vim runtime/syntax/fortran.vim runtime/syntax/gp.vim runtime/syntax/groovy.vim runtime/syntax/idl.vim runtime/syntax/mail.vim runtime/syntax/sh.vim runtime/syntax/tex.vim runtime/syntax/upstart.vim runtime/syntax/vim.vim
diffstat 41 files changed, 1390 insertions(+), 1189 deletions(-) [+]
line wrap: on
line diff
--- a/runtime/autoload/getscript.vim
+++ b/runtime/autoload/getscript.vim
@@ -1,8 +1,8 @@
 " ---------------------------------------------------------------------
 " getscript.vim
 "  Author:	Charles E. Campbell, Jr.
-"  Date:	May 31, 2011
-"  Version:	33
+"  Date:	Jan 17, 2012
+"  Version:	34
 "  Installing:	:help glvs-install
 "  Usage:	:help glvs
 "
@@ -15,7 +15,7 @@
 if exists("g:loaded_getscript")
  finish
 endif
-let g:loaded_getscript= "v33"
+let g:loaded_getscript= "v34"
 if &cp
  echoerr "GetLatestVimScripts is not vi-compatible; not loaded (you need to set nocp)"
  finish
@@ -550,30 +550,42 @@ fun! s:GetOneScript(...)
      " decompress
      if sname =~ '\.bz2$'
 "      call Decho("decompress: attempt to bunzip2 ".sname)
-      exe "silent !bunzip2 ".shellescape(sname)
+      exe "sil !bunzip2 ".shellescape(sname)
       let sname= substitute(sname,'\.bz2$','','')
 "      call Decho("decompress: new sname<".sname."> after bunzip2")
      elseif sname =~ '\.gz$'
 "      call Decho("decompress: attempt to gunzip ".sname)
-      exe "silent !gunzip ".shellescape(sname)
+      exe "sil !gunzip ".shellescape(sname)
       let sname= substitute(sname,'\.gz$','','')
 "      call Decho("decompress: new sname<".sname."> after gunzip")
      elseif sname =~ '\.xz$'
 "      call Decho("decompress: attempt to unxz ".sname)
-      exe "silent !unxz ".shellescape(sname)
+      exe "sil !unxz ".shellescape(sname)
       let sname= substitute(sname,'\.xz$','','')
 "      call Decho("decompress: new sname<".sname."> after unxz")
      else
 "      call Decho("no decompression needed")
      endif
      
-     " distribute archive(.zip, .tar, .vba) contents
+     " distribute archive(.zip, .tar, .vba, ...) contents
      if sname =~ '\.zip$'
 "      call Decho("dearchive: attempt to unzip ".sname)
       exe "silent !unzip -o ".shellescape(sname)
      elseif sname =~ '\.tar$'
 "      call Decho("dearchive: attempt to untar ".sname)
       exe "silent !tar -xvf ".shellescape(sname)
+     elseif sname =~ '\.tgz$'
+"      call Decho("dearchive: attempt to untar+gunzip ".sname)
+      exe "silent !tar -zxvf ".shellescape(sname)
+     elseif sname =~ '\.taz$'
+"      call Decho("dearchive: attempt to untar+uncompress ".sname)
+      exe "silent !tar -Zxvf ".shellescape(sname)
+     elseif sname =~ '\.tbz$'
+"      call Decho("dearchive: attempt to untar+bunzip2 ".sname)
+      exe "silent !tar -jxvf ".shellescape(sname)
+     elseif sname =~ '\.txz$'
+"      call Decho("dearchive: attempt to untar+xz ".sname)
+      exe "silent !tar -Jxvf ".shellescape(sname)
      elseif sname =~ '\.vba$'
 "      call Decho("dearchive: attempt to handle a vimball: ".sname)
       silent 1split
--- a/runtime/autoload/tar.vim
+++ b/runtime/autoload/tar.vim
@@ -1,7 +1,7 @@
 " tar.vim: Handles browsing tarfiles
 "            AUTOLOAD PORTION
-" Date:			May 31, 2011
-" Version:		27
+" Date:			Jan 17, 2012
+" Version:		28
 " Maintainer:	Charles E Campbell, Jr <NdrOchip@ScampbellPfamily.AbizM-NOSPAM>
 " License:		Vim License  (see vim's :help license)
 "
@@ -22,7 +22,7 @@
 if &cp || exists("g:loaded_tar")
  finish
 endif
-let g:loaded_tar= "v27"
+let g:loaded_tar= "v28"
 if v:version < 702
  echohl WarningMsg
  echo "***warning*** this version of tar needs vim 7.2"
@@ -143,7 +143,7 @@ fun! tar#Browse(tarfile)
   call setline(lastline+2,'" Browsing tarfile '.a:tarfile)
   call setline(lastline+3,'" Select a file with cursor and press ENTER')
   keepj $put =''
-  keepj 0d
+  keepj sil! 0d
   keepj $
 
   let tarfile= a:tarfile
@@ -158,10 +158,10 @@ fun! tar#Browse(tarfile)
   elseif tarfile =~# '\.lrp'
 "   call Decho("2: exe silent r! cat -- ".shellescape(tarfile,1)."|gzip -d -c -|".g:tar_cmd." -".g:tar_browseoptions." - ")
    exe "sil! r! cat -- ".shellescape(tarfile,1)."|gzip -d -c -|".g:tar_cmd." -".g:tar_browseoptions." - "
-  elseif tarfile =~# '\.bz2$'
+  elseif tarfile =~# '\.\(bz2\|tbz\|tb2\)$'
 "   call Decho("3: exe silent r! bzip2 -d -c -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - ")
    exe "sil! r! bzip2 -d -c -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - "
-  elseif tarfile =~# '\.lzma$'
+  elseif tarfile =~# '\.\(lzma\|tlz\)$'
 "   call Decho("3: exe silent r! lzma -d -c -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - ")
    exe "sil! r! lzma -d -c -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - "
   elseif tarfile =~# '\.\(xz\|txz\)$'
--- a/runtime/autoload/vimball.vim
+++ b/runtime/autoload/vimball.vim
@@ -1,7 +1,7 @@
 " vimball.vim : construct a file containing both paths and files
 " Author:	Charles E. Campbell, Jr.
-" Date:		Sep 26, 2011
-" Version:	34
+" Date:		Jan 17, 2012
+" Version:	35
 " GetLatestVimScripts: 1502 1 :AutoInstall: vimball.vim
 " Copyright: (c) 2004-2011 by Charles E. Campbell, Jr.
 "            The VIM LICENSE applies to Vimball.vim, and Vimball.txt
@@ -14,7 +14,7 @@
 if &cp || exists("g:loaded_vimball")
  finish
 endif
-let g:loaded_vimball = "v34"
+let g:loaded_vimball = "v35"
 if v:version < 702
  echohl WarningMsg
  echo "***warning*** this version of vimball needs vim 7.2"
@@ -767,6 +767,9 @@ fun! vimball#RestoreSettings()
 "  call Dret("RestoreSettings")
 endfun
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 " ---------------------------------------------------------------------
 " Modelines: {{{1
 " vim: fdm=marker
--- a/runtime/autoload/zip.vim
+++ b/runtime/autoload/zip.vim
@@ -1,10 +1,10 @@
 " zip.vim: Handles browsing zipfiles
 "            AUTOLOAD PORTION
-" Date:		May 24, 2011
-" Version:	24
+" Date:		Jan 17, 2012
+" Version:	25
 " Maintainer:	Charles E Campbell, Jr <NdrOchip@ScampbellPfamily.AbizM-NOSPAM>
 " License:	Vim License  (see vim's :help license)
-" Copyright:    Copyright (C) 2005-2011 Charles E. Campbell, Jr. {{{1
+" Copyright:    Copyright (C) 2005-2012 Charles E. Campbell, Jr. {{{1
 "               Permission is hereby granted to use and distribute this code,
 "               with or without modifications, provided that this copyright
 "               notice is copied with it. Like anything else that's free,
@@ -19,7 +19,7 @@
 if &cp || exists("g:loaded_zip")
  finish
 endif
-let g:loaded_zip= "v24"
+let g:loaded_zip= "v25"
 if v:version < 702
  echohl WarningMsg
  echo "***warning*** this version of zip needs vim 7.2"
@@ -104,12 +104,12 @@ fun! zip#Browse(zipfile)
 
   " give header
   call append(0, ['" zip.vim version '.g:loaded_zip,
-                \ '" Browsing zipfile '.a:zipfile,
-                \ '" Select a file with cursor and press ENTER'])
+ \                '" Browsing zipfile '.a:zipfile,
+ \                '" Select a file with cursor and press ENTER'])
   keepj $
 
 "  call Decho("exe silent r! ".g:zip_unzipcmd." -l -- ".s:Escape(a:zipfile,1))
-  exe "silent r! ".g:zip_unzipcmd." -Z -1 -- ".s:Escape(a:zipfile,1)
+  exe "keepj sil! r! ".g:zip_unzipcmd." -Z -1 -- ".s:Escape(a:zipfile,1)
   if v:shell_error != 0
    redraw!
    echohl WarningMsg | echo "***warning*** (zip#Browse) ".fnameescape(a:zipfile)." is not a zip file" | echohl None
new file mode 100644
--- /dev/null
+++ b/runtime/compiler/erlang.vim
@@ -0,0 +1,11 @@
+" Vim compiler file
+" Compiler:	Erlang
+" Maintainer:	none, please volunteer!
+" Last Change:	2012 Jan 20
+
+if exists("current_compiler")
+  finish
+endif
+let current_compiler = "erlang"
+
+" TODO
--- a/runtime/doc/autocmd.txt
+++ b/runtime/doc/autocmd.txt
@@ -1,4 +1,4 @@
-*autocmd.txt*   For Vim version 7.3.  Last change: 2011 Oct 26
+*autocmd.txt*   For Vim version 7.3.  Last change: 2012 Jan 20
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -699,7 +699,8 @@ MenuPopup			Just before showing the popu
 QuickFixCmdPre			Before a quickfix command is run (|:make|,
 				|:lmake|, |:grep|, |:lgrep|, |:grepadd|,
 				|:lgrepadd|, |:vimgrep|, |:lvimgrep|,
-				|:vimgrepadd|, |:lvimgrepadd|, |:cscope|).
+				|:vimgrepadd|, |:lvimgrepadd|, |:cscope|,
+				|:helpgrep|, |:lhelpgrep|).
 				The pattern is matched against the command
 				being run.  When |:grep| is used but 'grepprg'
 				is set to "internal" it still matches "grep".
--- a/runtime/doc/develop.txt
+++ b/runtime/doc/develop.txt
@@ -1,4 +1,4 @@
-*develop.txt*   For Vim version 7.3.  Last change: 2008 Dec 17
+*develop.txt*   For Vim version 7.3.  Last change: 2012 Jan 10
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -232,6 +232,17 @@ time		shadows global declaration
 new		C++ reserved keyword
 try		Borland C++ doesn't like it to be used as a variable.
 
+clear		Mac curses.h
+echo		Mac curses.h
+instr		Mac curses.h
+meta		Mac curses.h
+newwin		Mac curses.h
+nl		Mac curses.h
+overwrite	Mac curses.h
+refresh		Mac curses.h
+scroll		Mac curses.h
+typeahead	Mac curses.h
+
 basename()	GNU string function
 dirname()	GNU string function
 get_env_value()	Linux system function
--- a/runtime/doc/mlang.txt
+++ b/runtime/doc/mlang.txt
@@ -1,4 +1,4 @@
-*mlang.txt*     For Vim version 7.3.  Last change: 2010 Dec 11
+*mlang.txt*     For Vim version 7.3.  Last change: 2012 Jan 15
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -59,7 +59,7 @@ use of "-" and "_".
 			system.  Some systems accept aliases like "en" or
 			"en_US", but some only accept the full specification
 			like "en_US.ISO_8859-1".  On Unix systems you can use
-			the this command to see what locales are supported: >
+			this command to see what locales are supported: >
 				:!locale -a
 <			With the "messages" argument the language used for
 			messages is set.  This can be different when you want,
--- a/runtime/doc/options.txt
+++ b/runtime/doc/options.txt
@@ -1,4 +1,4 @@
-*options.txt*	For Vim version 7.3.  Last change: 2011 Dec 15
+*options.txt*	For Vim version 7.3.  Last change: 2012 Jan 13
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -301,9 +301,8 @@ You will not get back the 'list' value a
 			copying the value.
 			{not in Vi}
 
-:se[t] {option}<	Set the local value of {option} to its global value by
-			making it empty.  Only makes sense for |global-local|
-			options.
+:se[t] {option}<	For |global-local| options: Remove the local value of
+			{option}, so that the global value will be used.
 			{not in Vi}
 
 							*:setg* *:setglobal*
--- a/runtime/doc/pi_getscript.txt
+++ b/runtime/doc/pi_getscript.txt
@@ -1,15 +1,21 @@
-*pi_getscript.txt*  For Vim version 7.0.  Last change: 2011 May 31
+*pi_getscript.txt*  For Vim version 7.0.  Last change: 2011 Jun 23
 >
 		GETSCRIPT REFERENCE MANUAL  by Charles E. Campbell, Jr.
 <
 Authors:  Charles E. Campbell, Jr.  <NdrOchip@ScampbellPfamilyA.Mbiz>
 	  (remove NOSPAM from the email address)
 						*GetLatestVimScripts-copyright*
-Copyright: (c) 2004-2010 by Charles E. Campbell, Jr.	*glvs-copyright*
-           The VIM LICENSE applies to getscript.vim and
-           pi_getscript.txt (see |copyright|) except use
-           "getscript" instead of "Vim".  No warranty, express or implied.
-	   Use At-Your-Own-Risk.
+Copyright: (c) 2004-2012 by Charles E. Campbell, Jr.	*glvs-copyright*
+	The VIM LICENSE (see |copyright|) applies to the files in this
+	package, including getscriptPlugin.vim, getscript.vim,
+	GetLatestVimScripts.dist, and pi_getscript.txt, except use "getscript"
+	instead of "VIM".  Like anything else that's free, getscript and its
+	associated files are provided *as is* and comes with no warranty of
+	any kind, either expressed or implied.  No guarantees of
+	merchantability.  No guarantees of suitability for any purpose.  By
+	using this plugin, you agree that in no event will the copyright
+	holder be liable for any damages resulting from the use of this
+	software. Use at your own risk!
 
 Getscript is a plugin that simplifies retrieval of the latest versions of the
 scripts that you yourself use!  Typing |:GLVS| will invoke getscript; it will
@@ -374,6 +380,8 @@ The AutoInstall process will:
 ==============================================================================
 9. GetLatestVimScripts History		*getscript-history* *glvs-hist* {{{1
 
+v44 Jun 23, 2011 : * handles additional decompression options for tarballs
+                     (tgz taz tbz txz)
 v33 May 31, 2011 : * using fnameescape() instead of escape()
 		   * *.xz support
 v32 Jun 19, 2010 : * (Jan Steffens) added support for xz compression
--- a/runtime/doc/pi_tar.txt
+++ b/runtime/doc/pi_tar.txt
@@ -1,4 +1,4 @@
-*pi_tar.txt*	For Vim version 7.3.  Last change: 2011 May 31
+*pi_tar.txt*	For Vim version 7.3.  Last change: 2012 Jan 17
 
 		       +====================+
 		       | Tar File Interface |
@@ -6,9 +6,16 @@
 
 Author:  Charles E. Campbell, Jr.  <NdrOchip@ScampbellPfamily.AbizM>
 	  (remove NOSPAM from Campbell's email first)
-Copyright 2005-2010: The GPL (gnu public license) applies to	*tar-copyright*
-	   tar.vim, tarPlugin.vim, and pi_tar.txt.
-	   No warranty, express or implied.  Use At-Your-Own-Risk.
+Copyright 2005-2012:					*tar-copyright*
+	The VIM LICENSE (see |copyright|) applies to the files in this
+	package, including tarPlugin.vim, tar.vim, and pi_tar.txt.  Like
+	anything else that's except use "tar.vim" instead of "VIM".  Like
+	anything else that's free, tar.vim and its associated files are
+	provided *as is* and comes with no warranty of any kind, either
+	expressed or implied.  No guarantees of merchantability.  No
+	guarantees of suitability for any purpose.  By using this plugin, you
+	agree that in no event will the copyright holder be liable for any
+	damages resulting from the use of this software. Use at your own risk!
 
 ==============================================================================
 1. Contents					*tar* *tar-contents*
@@ -83,6 +90,7 @@ 3. Options						*tar-options*
 4. History						*tar-history*
 
 
+   v28 Jun 23, 2011 * a few more decompression options (tbz tb2 txz)
    v27 May 31, 2011 * moved cygwin detection before g:tar_copycmd handling
    		    * inserted additional |:keepj| modifiers
 		    * changed silent  to  sil!  (|:silent|)
--- a/runtime/doc/pi_vimball.txt
+++ b/runtime/doc/pi_vimball.txt
@@ -1,4 +1,4 @@
-*pi_vimball.txt*	For Vim version 7.3.  Last change: 2011 Sep 26
+*pi_vimball.txt*	For Vim version 7.3.  Last change: 2012 Jan 17
 
 			       ----------------
 			       Vimball Archiver
@@ -6,11 +6,16 @@
 
 Author:  Charles E. Campbell, Jr.  <NdrOchip@ScampbellPfamily.AbizM>
 	  (remove NOSPAM from Campbell's email first)
-Copyright: (c) 2004-2011 by Charles E. Campbell, Jr.	*Vimball-copyright*
-	   The VIM LICENSE applies to Vimball.vim, and Vimball.txt
-	   (see |copyright|) except use "Vimball" instead of "Vim".
-	   No warranty, express or implied.
-	   Use At-Your-Own-Risk!
+Copyright: (c) 2004-2012 by Charles E. Campbell, Jr.	*Vimball-copyright*
+	The VIM LICENSE (see |copyright|) applies to the files in this
+	package, including vimballPlugin.vim, vimball.vim, and pi_vimball.txt.
+	except use "vimball" instead of "VIM".  Like anything else that's free,
+	vimball.vim and its associated files are provided *as is* and comes with
+	no warranty of any kind, either expressed or implied.  No guarantees
+	of merchantability.  No guarantees of suitability for any purpose.  By
+	using this plugin, you agree that in no event will the copyright
+	holder be liable for any damages resulting from the use of this
+	software. Use at your own risk!
 
 ==============================================================================
 1. Contents				*vba* *vimball* *vimball-contents*
--- a/runtime/doc/pi_zip.txt
+++ b/runtime/doc/pi_zip.txt
@@ -1,4 +1,4 @@
-*pi_zip.txt*	For Vim version 7.3.  Last change: 2011 Aug 14
+*pi_zip.txt*	For Vim version 7.3.  Last change: 2012 Jan 17
 
 				+====================+
 				| Zip File Interface |
@@ -7,14 +7,15 @@
 Author:  Charles E. Campbell, Jr.  <NdrOchip@ScampbellPfamily.AbizM>
 	  (remove NOSPAM from Campbell's email first)
 Copyright: Copyright (C) 2005-2011 Charles E Campbell, Jr *zip-copyright*
-           Permission is hereby granted to use and distribute this code,
-	   with or without modifications, provided that this copyright
-	   notice is copied with it. Like anything else that's free,
-	   zip.vim, zipPlugin.vim, and pi_zip.txt are provided *as is*
-	   and it comes with no warranty of any kind, either expressed or
-	   implied. By using this plugin, you agree that in no event will
-	   the copyright holder be liable for any damages resulting from
-	   the use of this software.
+	The VIM LICENSE (see |copyright|) applies to the files in this
+	package, including zipPlugin.vim, zip.vim, and pi_zip.vim.  except use
+	"zip.vim" instead of "VIM".  Like anything else that's free, zip.vim
+	and its associated files are provided *as is* and comes with no
+	warranty of any kind, either expressed or implied.  No guarantees of
+	merchantability.  No guarantees of suitability for any purpose.  By
+	using this plugin, you agree that in no event will the copyright
+	holder be liable for any damages resulting from the use of this
+	software. Use at your own risk!
 
 ==============================================================================
 1. Contents						*zip* *zip-contents*
@@ -73,7 +74,7 @@ 2. Usage						*zip-usage* *zip-manual*
 ==============================================================================
 3. Additional Extensions					*zip-extension*
 
-   Apparently there are a number of archivers who generate zip files that
+   Apparently there are a number of archivers which generate zip files that
    don't use the .zip extension (.jar, .xpi, etc).  To handle such files,
    place a line in your <.vimrc> file: >
 
@@ -84,6 +85,8 @@ 3. Additional Extensions					*zip-extens
 
 ==============================================================================
 4. History							*zip-history* {{{1
+   v25 Jun 27, 2011 * using keepj with unzip -Z
+		      (consistent with the -p variant)
    v24 Jun 21, 2010 * (Cédric Bosdonnat) unzip seems to need its filenames
 		      fnameescape'd as well as shellquote'd
 		    * (Motoya Kurotsu) inserted keepj before 0d to protect
--- a/runtime/doc/syntax.txt
+++ b/runtime/doc/syntax.txt
@@ -1,4 +1,4 @@
-*syntax.txt*	For Vim version 7.3.  Last change: 2012 Jan 04
+*syntax.txt*	For Vim version 7.3.  Last change: 2012 Jan 20
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -1161,7 +1161,7 @@ should be appropriate for most users mos
 almost a superset of previous versions (Fortran 2003, 95, 90, and 77). 
 
 Fortran source code form ~
-Fortran 9x code can be in either fixed or free source form.  Note that the
+Fortran code can be in either fixed or free source form.  Note that the
 syntax highlighting will not be correct if the form is incorrectly set.
 
 When you create a new fortran file, the syntax script assumes fixed source
@@ -1242,54 +1242,54 @@ recognized, as will construct names at t
 construct.
 
 Non-default fortran dialects ~
-The syntax script supports five Fortran dialects: f95, f90, f77, the Lahey
-subset elf90, and the Imagine1 subset F. However, these dialects are outdated;
-the next version of the syntax script will support only two variants: modern
-Fortran and legacy Fortran.
-
-If you use f77 with extensions, even common ones like do/enddo loops, do/while
-loops and free source form that are supported by most f77 compilers including
-g77 (GNU Fortran), then you will probably find the default highlighting
-satisfactory.  However, if you use strict f77 with no extensions, not even free
-source form or the MIL STD 1753 extensions, then the advantages of setting the
-dialect to f77 are that names such as SUM are recognized as user variable
-names and not highlighted as f9x intrinsic functions, that obsolete constructs
-such as ASSIGN statements are not highlighted as todo items, and that fixed
-source form will be assumed.
-
-If you use elf90 or F, the advantage of setting the dialect appropriately is
-that f90 features excluded from these dialects will be highlighted as todo
-items and that free source form will be assumed as required for these
-dialects.
-
-The dialect can be selected by setting the variable fortran_dialect.  The
-permissible values of fortran_dialect are case-sensitive and must be "f95",
-"f90", "f77", "elf" or "F".  Invalid values of fortran_dialect are ignored.
-
-If all your fortran files use the same dialect, set fortran_dialect in your
-.vimrc prior to your syntax on statement.  If the dialect depends upon the file
-extension, then it is most convenient to set it in a ftplugin file.  For more
-information on ftplugin files, see |ftplugin|.  For example, if all your
-fortran files with an .f90 extension are written in the elf subset, your
-ftplugin file should contain the code >
+The syntax script supports two Fortran dialects: f08 and F. You will probably
+find the default highlighting (f08) satisfactory.  A few legacy constructs
+deleted or declared obsolescent in the 2008 standard are highlighted as todo
+items.
+
+If you use F, the advantage of setting the dialect appropriately is that
+other legacy features excluded from F will be highlighted as todo items and
+that free source form will be assumed. 
+
+The dialect can be selected in various ways.  If all your fortran files use
+the same dialect, set the global variable fortran_dialect in your .vimrc prior
+to your syntax on statement.  The case-sensitive, permissible values of
+fortran_dialect are "f08" or "F".  Invalid values of fortran_dialect are
+ignored.
+
+If the dialect depends upon the file extension, then it is most convenient to
+set a buffer-local variable in a ftplugin file.  For more information on
+ftplugin files, see |ftplugin|.  For example, if all your fortran files with
+an .f90 extension are written in the F subset, your ftplugin file should
+contain the code >
     let s:extfname = expand("%:e")
     if s:extfname ==? "f90"
-	let fortran_dialect="elf"
+	let b:fortran_dialect="F"
     else
-	unlet! fortran_dialect
+	unlet! b:fortran_dialect
     endif
 Note that this will work only if the "filetype plugin indent on" command
 precedes the "syntax on" command in your .vimrc file.
 
 Finer control is necessary if the file extension does not uniquely identify
-the dialect.  You can override the default dialect, on a file-by-file basis, by
-including a comment with the directive "fortran_dialect=xx" (where xx=f77 or
-elf or F or f90 or f95) in one of the first three lines in your file.  For
-example, your older .f files may be written in extended f77 but your newer
-ones may be F codes, and you would identify the latter by including in the
-first three lines of those files a Fortran comment of the form >
+the dialect.  You can override the default dialect, on a file-by-file basis,
+by including a comment with the directive "fortran_dialect=xx" (where xx=F or
+f08) in one of the first three lines in your file.  For example, your older .f
+files may be legacy code but your newer ones may be F codes, and you would
+identify the latter by including in the first three lines of those files a
+Fortran comment of the form >
   ! fortran_dialect=F
-F overrides elf if both directives are present.
+
+For previous versions of the syntax, you may have set fortran_dialect to the
+now-obsolete values "f77", "f90", "f95", or "elf". Such settings will be
+silently handled as "f08". Users of "elf" may wish to experiment with "F"
+instead. 
+
+The syntax/fortran.vim script contains embedded comments that tell you how to
+comment and/or uncomment some lines to (a) activate recognition of some
+non-standard, vendor-supplied intrinsics and (b) to prevent features deleted
+or declared obsolescent in the 2008 standard from being highlighted as todo
+items. 
 
 Limitations ~
 Parenthesis checking does not catch too few closing parentheses.  Hollerith
--- a/runtime/doc/tags
+++ b/runtime/doc/tags
@@ -1243,6 +1243,7 @@
 +writebackup	various.txt	/*+writebackup*
 +xfontset	various.txt	/*+xfontset*
 +xim	various.txt	/*+xim*
++xpm_w32	various.txt	/*+xpm_w32*
 +xsmp	various.txt	/*+xsmp*
 +xsmp_interact	various.txt	/*+xsmp_interact*
 +xterm_clipboard	various.txt	/*+xterm_clipboard*
@@ -4791,6 +4792,7 @@ beval_col-variable	eval.txt	/*beval_col-
 beval_lnum-variable	eval.txt	/*beval_lnum-variable*
 beval_text-variable	eval.txt	/*beval_text-variable*
 beval_winnr-variable	eval.txt	/*beval_winnr-variable*
+bitwise-function	usr_41.txt	/*bitwise-function*
 blockwise-examples	visual.txt	/*blockwise-examples*
 blockwise-operators	visual.txt	/*blockwise-operators*
 blockwise-register	change.txt	/*blockwise-register*
@@ -7041,8 +7043,8 @@ objects	index.txt	/*objects*
 obtaining-exted	netbeans.txt	/*obtaining-exted*
 ocaml.vim	syntax.txt	/*ocaml.vim*
 octal	eval.txt	/*octal*
+octal-nrformats	options.txt	/*octal-nrformats*
 octal-number	eval.txt	/*octal-number*
-octal-number	options.txt	/*octal-number*
 oldfiles-variable	eval.txt	/*oldfiles-variable*
 ole-activation	if_ole.txt	/*ole-activation*
 ole-eval	if_ole.txt	/*ole-eval*
@@ -8357,13 +8359,27 @@ vimdev	intro.txt	/*vimdev*
 vimdiff	diff.txt	/*vimdiff*
 vimfiles	options.txt	/*vimfiles*
 viminfo	starting.txt	/*viminfo*
+viminfo-!	options.txt	/*viminfo-!*
+viminfo-%	options.txt	/*viminfo-%*
+viminfo-'	options.txt	/*viminfo-'*
+viminfo-/	options.txt	/*viminfo-\/*
+viminfo-:	options.txt	/*viminfo-:*
+viminfo-<	options.txt	/*viminfo-<*
+viminfo-@	options.txt	/*viminfo-@*
+viminfo-c	options.txt	/*viminfo-c*
 viminfo-encoding	starting.txt	/*viminfo-encoding*
 viminfo-errors	starting.txt	/*viminfo-errors*
+viminfo-f	options.txt	/*viminfo-f*
 viminfo-file	starting.txt	/*viminfo-file*
 viminfo-file-marks	starting.txt	/*viminfo-file-marks*
 viminfo-file-name	starting.txt	/*viminfo-file-name*
+viminfo-h	options.txt	/*viminfo-h*
+viminfo-n	options.txt	/*viminfo-n*
+viminfo-quote	options.txt	/*viminfo-quote*
+viminfo-r	options.txt	/*viminfo-r*
 viminfo-read	starting.txt	/*viminfo-read*
 viminfo-read-write	starting.txt	/*viminfo-read-write*
+viminfo-s	options.txt	/*viminfo-s*
 viminfo-write	starting.txt	/*viminfo-write*
 vimrc	starting.txt	/*vimrc*
 vimrc-filetype	usr_05.txt	/*vimrc-filetype*
--- a/runtime/doc/todo.txt
+++ b/runtime/doc/todo.txt
@@ -1,4 +1,4 @@
-*todo.txt*      For Vim version 7.3.  Last change: 2012 Jan 10
+*todo.txt*      For Vim version 7.3.  Last change: 2012 Jan 20
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -38,32 +38,35 @@ Go through more coverity reports.
 
 Discussion about canonicalization of Hebrew. (Ron Aaron, 2011 April 10)
 
-Compilation problem on z/OS, POUND is equal to '#', duplicate case.
-(Stephen Bovy, 2011 Dec 16)
-
 Once syntax and other runtime files have been fixed: add "set cp" to
 check.vim.  Use a function to run both with 'cp' and 'nocp'.
 
-Patch to fix regression caused by 7.3.251. (Christian Brabandt, 2012 Jan 5)
-
-Patch to make ":helpgrep" work with non-UTF-8 encoding. (Yasuhiro Matsumoto,
-2011 Nov 28, update later that day)
-
-Patch to fix messing up terminal when redrawing too early. (Christian
-Brabandt, 2012 Jan 5)
-
-Patch to fix member confusion in Lua interface. (Taro Muraoka, 2012 Jan 8)
-Update Jan 9.
-Carvalho will merge the patch.
-
-Possible quickfix bug: Audrius Kažukauskas, 2012 Jan 6
-
-Problem reading german spell file? (Jan Stocker, 2012 Jan 5)
+Win32: When the taskbar is at the top of the screen creating the tabbar causes
+the window to move unnecessarily. (William E. Skeith III, 2012 Jan 12)
+Patch: 2012 Jan 13
+
+Patch for using DBCS encoding in user command. (Yasuhiro Matsumoto, 2012 Jan
+15)  Update Jan 17.
+
+Repeating search history entries. (Edwin Steiner, 2012 Jan 17)
+Jan 18: Caused by patch 7.3.265?
+
+Hang in using VimEnter. (Alex Efros, 2012 Jan 14)
+
+":cd" doesn't work when current directory path contains wildcards.
+finddir() has the same problem.  (Yukihiro Nakadaira, 2012 Jan 10)
 
 Win32: When a directory name contains an exclamation mark, completion doesn't
 complete the contents of the directory.  No escaping for the "!"? (Jan
 Stocker, 2012 Jan 5)
 
+Patch to add support for Solaris ZFS ACLs. (Danek Duvall, 2012 Jan 13)
+
+Patch to make continued lines work faster. (Yasuhiro Matsumoto, 2012 Jan 11)
+
+Also an idea to make join() faster. (Yasuhiro Matsumoto, 2012 Jan 11)
+Another one from Taro Muraoka, 2012 Jan 12.
+
 ":doau" says it triggers modeline.  Should this only happen for events used
 when loading a buffer?  (Kana Natsuno, 2011 Nov 7)
 
@@ -103,6 +106,10 @@ 7   Setting an option always sets "w_set
     side effect.
 Patch by Kana Natsuno, 2011 Nov 12.
 
+Patch to fix member confusion in Lua interface. (Taro Muraoka, 2012 Jan 8)
+Update Jan 9.
+Carvalho merged the patch:  New version 2012 Jan 19.
+
 Patch for option in 'cino' to specify more indent for continued conditions.
 (Lech Lorens, 2011 Nov 27)
 Isn't this already possible?
@@ -136,6 +143,8 @@ And one for gui_x11.txt.
 
 Problem with l: dictionary being locked in a function. (ZyX, 2011 Jul 21)
 
+Issue 48: foldopen error can't be caught by try/catch
+
 Patch to sort functions starting with '<' after others.  Omit dict functions,
 they can't be called. (Yasuhiro Matsumoto, 2011 Oct 11)
 
@@ -180,6 +189,9 @@ New feature, requires testing.  Made som
 Win32: Patch for alpha-blended icons and toolbar height. (Sergiu Dotenco, 2011
 Sep 17)  Asked for feedback from others.
 
+Win32: Cannot cd into a directory that starts with a space. (Andy Wokula, 2012
+Jan 19)
+
 Need to escape $HOME on Windows?  (ZyX, 2011 Jul 21)
 
 "2" in 'formatopions' not working in comments. (Christian Corneliussen, 2011
@@ -803,8 +815,6 @@ the buffer to be unmodified.
 Unfinished patch by Ian Kelling, 2008 Jul 11.  Followup Jul 14, need to have
 another look at it.
 
-Patch for c.vim and cpp.vim syntax files. (Chung-chieh Shan, 2008 Nov 26)
-
 c.vim: XXX in a comment is colored yellow, but not when it's after "#if 0".
 (Ilya Dogolazky, 2009 Aug 7)
 
--- a/runtime/doc/various.txt
+++ b/runtime/doc/various.txt
@@ -1,4 +1,4 @@
-*various.txt*   For Vim version 7.3.  Last change: 2012 Jan 04
+*various.txt*   For Vim version 7.3.  Last change: 2012 Jan 15
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -363,30 +363,30 @@ N  *+multi_lang*		non-English language s
 m  *+mzscheme*		Mzscheme interface |mzscheme|
 m  *+mzscheme/dyn*	Mzscheme interface |mzscheme-dynamic| |/dyn|
 m  *+netbeans_intg*	|netbeans|
-m  *+ole*		Win32 GUI only: |ole-interface|
-N  *+path_extra*	Up/downwards search in 'path' and 'tags'
+m  *+ole*			Win32 GUI only: |ole-interface|
+N  *+path_extra*		Up/downwards search in 'path' and 'tags'
 m  *+perl*		Perl interface |perl|
 m  *+perl/dyn*		Perl interface |perl-dynamic| |/dyn|
 N  *+persistent_undo*	Persistent undo |undo-persistence|
-   *+postscript*	|:hardcopy| writes a PostScript file
+   *+postscript*		|:hardcopy| writes a PostScript file
 N  *+printer*		|:hardcopy| command
 H  *+profile*		|:profile| command
 m  *+python*		Python 2 interface |python|
-m  *+python/dyn*	Python 2 interface |python-dynamic| |/dyn|
+m  *+python/dyn*		Python 2 interface |python-dynamic| |/dyn|
 m  *+python3*		Python 3 interface |python|
-m  *+python3/dyn*	Python 3 interface |python-dynamic| |/dyn|
+m  *+python3/dyn*		Python 3 interface |python-dynamic| |/dyn|
 N  *+quickfix*		|:make| and |quickfix| commands
 N  *+reltime*		|reltime()| function, 'hlsearch'/'incsearch' timeout,
 			'redrawtime' option
 B  *+rightleft*		Right to left typing |'rightleft'|
 m  *+ruby*		Ruby interface |ruby|
 m  *+ruby/dyn*		Ruby interface |ruby-dynamic| |/dyn|
-N  *+scrollbind*	|'scrollbind'|
+N  *+scrollbind*		|'scrollbind'|
 B  *+signs*		|:sign|
-N  *+smartindent*	|'smartindent'|
+N  *+smartindent*		|'smartindent'|
 m  *+sniff*		SniFF interface |sniff|
-N  *+startuptime*	|--startuptime| argument
-N  *+statusline*	Options 'statusline', 'rulerformat' and special
+N  *+startuptime*		|--startuptime| argument
+N  *+statusline*		Options 'statusline', 'rulerformat' and special
 			formats of 'titlestring' and 'iconstring'
 m  *+sun_workshop*	|workshop|
 N  *+syntax*		Syntax highlighting |syntax|
new file mode 100644
--- /dev/null
+++ b/runtime/ftplugin/erlang.vim
@@ -0,0 +1,150 @@
+" Vim ftplugin file
+" Language:     Erlang
+" Author:       Oscar Hellström <oscar@oscarh.net>
+" Contributors: Ricardo Catalinas Jiménez <jimenezrick@gmail.com>
+"               Eduardo Lopez (http://github.com/tapichu)
+" License:      Vim license
+" Version:      2011/11/21
+
+if exists('b:did_ftplugin')
+	finish
+else
+	let b:did_ftplugin = 1
+endif
+
+if exists('s:did_function_definitions')
+	call s:SetErlangOptions()
+	finish
+else
+	let s:did_function_definitions = 1
+endif
+
+if !exists('g:erlang_keywordprg')
+	let g:erlang_keywordprg = 'erl -man'
+endif
+
+if !exists('g:erlang_folding')
+	let g:erlang_folding = 0
+endif
+
+" Local settings
+function s:SetErlangOptions()
+	compiler erlang
+	if version >= 700
+		setlocal omnifunc=erlang_complete#Complete
+	endif
+
+	if g:erlang_folding
+		setlocal foldmethod=expr
+		setlocal foldexpr=GetErlangFold(v:lnum)
+		setlocal foldtext=ErlangFoldText()
+	endif
+
+	setlocal comments=:%%%,:%%,:%
+	setlocal commentstring=%%s
+
+	setlocal formatoptions+=ro
+	let &l:keywordprg = g:erlang_keywordprg
+endfunction
+
+" Define folding functions
+if !exists('*GetErlangFold')
+	" Folding params
+	let s:erlang_fun_begin  = '^\a\w*(.*$'
+	let s:erlang_fun_end    = '^[^%]*\.\s*\(%.*\)\?$'
+	let s:erlang_blank_line = '^\s*\(%.*\)\?$'
+
+	" Auxiliary fold functions
+	function s:GetNextNonBlank(lnum)
+		let lnum = nextnonblank(a:lnum + 1)
+		let line = getline(lnum)
+		while line =~ s:erlang_blank_line && 0 != lnum
+			let lnum = nextnonblank(lnum + 1)
+			let line = getline(lnum)
+		endwhile
+		return lnum
+	endfunction
+
+	function s:GetFunName(str)
+		return matchstr(a:str, '^\a\w*(\@=')
+	endfunction
+
+	function s:GetFunArgs(str, lnum)
+		let str = a:str
+		let lnum = a:lnum
+		while str !~ '->\s*\(%.*\)\?$'
+			let lnum = s:GetNextNonBlank(lnum)
+			if 0 == lnum " EOF
+				return ''
+			endif
+			let str .= getline(lnum)
+		endwhile
+		return matchstr(str, 
+			\ '\(^(\s*\)\@<=.*\(\s*)\(\s\+when\s\+.*\)\?\s\+->\s*\(%.*\)\?$\)\@=')
+	endfunction
+
+	function s:CountFunArgs(arguments)
+		let pos = 0
+		let ac = 0 " arg count
+		let arguments = a:arguments
+		
+		" Change list / tuples into just one A(rgument)
+		let erlang_tuple = '{\([A-Za-z_,|=\-\[\]]\|\s\)*}'
+		let erlang_list  = '\[\([A-Za-z_,|=\-{}]\|\s\)*\]'
+
+		" FIXME: Use searchpair?
+		while arguments =~ erlang_tuple
+			let arguments = substitute(arguments, erlang_tuple, 'A', 'g')
+		endwhile
+		" FIXME: Use searchpair?
+		while arguments =~ erlang_list
+			let arguments = substitute(arguments, erlang_list, 'A', 'g')
+		endwhile
+		
+		let len = strlen(arguments)
+		while pos < len && pos > -1
+			let ac += 1
+			let pos = matchend(arguments, ',\s*', pos)
+		endwhile
+		return ac
+	endfunction
+
+	" Main fold function
+	function GetErlangFold(lnum)
+		let lnum = a:lnum
+		let line = getline(lnum)
+
+		if line =~ s:erlang_fun_end
+			return '<1'
+		endif
+
+		if line =~ s:erlang_fun_begin && foldlevel(lnum - 1) == 1
+			return '1'
+		endif
+
+		if line =~ s:erlang_fun_begin
+			return '>1'
+		endif
+
+		return '='
+	endfunction
+
+	" Erlang fold description (foldtext function)
+	function ErlangFoldText()
+		let foldlen = v:foldend - v:foldstart
+		if 1 < foldlen
+			let lines = 'lines'
+		else
+			let lines = 'line'
+		endif
+		let line = getline(v:foldstart)
+		let name = s:GetFunName(line)
+		let arguments = s:GetFunArgs(strpart(line, strlen(name)), v:foldstart)
+		let argcount = s:CountFunArgs(arguments)
+		let retval = '+' . v:folddashes . ' ' . name . '/' . argcount
+		let retval .= ' (' . foldlen . ' ' . lines . ')'
+		return retval
+	endfunction
+endif
+
+call s:SetErlangOptions()
--- a/runtime/ftplugin/logcheck.vim
+++ b/runtime/ftplugin/logcheck.vim
@@ -1,8 +1,8 @@
 " Vim filetype plugin file
 " Language:    Logcheck
 " Maintainer:  Debian Vim Maintainers <pkg-vim-maintainers@lists.alioth.debian.org>
-" Last Change: 2010 Jul 29
-" License:     GNU GPL, version 2.0
+" Last Change: 2012 Jan 15
+" License:     Vim License
 " URL: http://hg.debian.org/hg/pkg-vim/vim/file/unstable/runtime/ftplugin/logcheck.vim
 
 if exists("b:did_ftplugin")
--- a/runtime/ftplugin/postscr.vim
+++ b/runtime/ftplugin/postscr.vim
@@ -1,7 +1,7 @@
 " Vim filetype plugin file
-" Language:     PostScript
-" Maintainer:   Mike Williams <mrw@eandem.co.uk>
-" Last Change:  27th June 2002
+" Language:	PostScript
+" Maintainer:	Mike Williams <mrw@eandem.co.uk>
+" Last Change:  16th January 2012
 
 " Only do this when not done yet for this buffer
 if exists("b:did_ftplugin")
@@ -11,6 +11,9 @@ endif
 " Don't load another plugin for this buffer
 let b:did_ftplugin = 1
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " PS comment formatting
 setlocal comments=b:%
 setlocal formatoptions-=t formatoptions+=rol
@@ -21,11 +24,12 @@ if !exists("b:match_words")
   let b:match_words = '<<:>>,\<begin\>:\<end\>,\<save\>:\<restore\>,\<gsave\>:\<grestore\>'
 endif
 
-set cpo-=C
-
 " Define patterns for the browse file filter
 if has("gui_win32") && !exists("b:browsefilter")
   let b:browsefilter = "PostScript Files (*.ps)\t*.ps\n" .
     \ "EPS Files (*.eps)\t*.eps\n" .
     \ "All Files (*.*)\t*.*\n"
 endif
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
--- a/runtime/indent/erlang.vim
+++ b/runtime/indent/erlang.vim
@@ -1,128 +1,144 @@
 " Vim indent file
 " Language:     Erlang
-" Maintainer:   Csaba Hoch <csaba.hoch@gmail.com>
-" Contributor:  Edwin Fine <efine145_nospam01 at usa dot net>
-" Last Change:  2008 Mar 12
+" Author:       Csaba Hoch <csaba.hoch@gmail.com>
+" Contributors: Edwin Fine <efine145_nospam01 at usa dot net>
+"               Pawel 'kTT' Salata <rockplayer.pl@gmail.com>
+"               Ricardo Catalinas Jiménez <jimenezrick@gmail.com>
+" License:      Vim license
+" Version:      2011/09/06
 
-" Only load this indent file when no other was loaded.
+" Only load this indent file when no other was loaded
 if exists("b:did_indent")
-  finish
+    finish
+else
+    let b:did_indent = 1
 endif
-let b:did_indent = 1
 
 setlocal indentexpr=ErlangIndent()
 setlocal indentkeys+==after,=end,=catch,=),=],=}
 
-" Only define the functions once.
+" Only define the functions once
 if exists("*ErlangIndent")
-   finish
+    finish
 endif
 
-" The function go through the whole line, analyses it and sets the indentation
-" (ind variable).
-" l: the number of the line to be examined.
-function s:ErlangIndentAtferLine(l)
-    let i = 0 " the index of the current character in the line
-    let length = strlen(a:l) " the length of the line
+" The function goes through the whole line, analyses it and returns the
+" indentation level.
+"
+" line: the line to be examined
+" return: the indentation level of the examined line
+function s:ErlangIndentAfterLine(line)
+    let linelen = strlen(a:line) " the length of the line
+    let i       = 0 " the index of the current character in the line
     let ind = 0 " how much should be the difference between the indentation of
                 " the current line and the indentation of the next line?
                 " e.g. +1: the indentation of the next line should be equal to
                 " the indentation of the current line plus one shiftwidth
-    let lastFun = 0 " the last token was a 'fun'
-    let lastReceive = 0 " the last token was a 'receive'; needed for 'after'
-    let lastHashMark = 0 " the last token was a 'hashmark'
+    let last_fun      = 0 " the last token was a 'fun'
+    let last_receive  = 0 " the last token was a 'receive'; needed for 'after'
+    let last_hash_sym = 0 " the last token was a '#'
+
+    " Ignore comments
+    if a:line =~# '^\s*%'
+        return 0
+    endif
 
-    while 0<= i && i < length
+    " Partial function head where the guard is missing
+    if a:line =~# "\\(^\\l[[:alnum:]_]*\\)\\|\\(^'[^']\\+'\\)(" && a:line !~# '->'
+        return 2
+    endif
 
+    " The missing guard from the split function head
+    if a:line =~# '^\s*when\s\+.*->'
+        return -1
+    endif
+
+    while 0<=i && i<linelen
         " m: the next value of the i
-        if a:l[i] == '%'
-            break
-        elseif a:l[i] == '"'
-            let m = matchend(a:l,'"\%([^"\\]\|\\.\)*"',i)
-            let lastReceive = 0
-        elseif a:l[i] == "'"
-            let m = matchend(a:l,"'[^']*'",i)
-            let lastReceive = 0
-        elseif a:l[i] =~# "[a-z]"
-            let m = matchend(a:l,".[[:alnum:]_]*",i)
-            if lastFun
+        if a:line[i] == '"'
+            let m = matchend(a:line,'"\%([^"\\]\|\\.\)*"',i)
+            let last_receive = 0
+        elseif a:line[i] == "'"
+            let m = matchend(a:line,"'[^']*'",i)
+            let last_receive = 0
+        elseif a:line[i] =~# "[a-z]"
+            let m = matchend(a:line,".[[:alnum:]_]*",i)
+            if last_fun
                 let ind = ind - 1
-                let lastFun = 0
-                let lastReceive = 0
-            elseif a:l[(i):(m-1)] =~# '^\%(case\|if\|try\)$'
+                let last_fun = 0
+                let last_receive = 0
+            elseif a:line[(i):(m-1)] =~# '^\%(case\|if\|try\)$'
                 let ind = ind + 1
-            elseif a:l[(i):(m-1)] =~# '^receive$'
+            elseif a:line[(i):(m-1)] =~# '^receive$'
                 let ind = ind + 1
-                let lastReceive = 1
-            elseif a:l[(i):(m-1)] =~# '^begin$'
+                let last_receive = 1
+            elseif a:line[(i):(m-1)] =~# '^begin$'
                 let ind = ind + 2
-                let lastReceive = 0
-            elseif a:l[(i):(m-1)] =~# '^end$'
+                let last_receive = 0
+            elseif a:line[(i):(m-1)] =~# '^end$'
                 let ind = ind - 2
-                let lastReceive = 0
-            elseif a:l[(i):(m-1)] =~# '^after$'
-                if lastReceive == 0
+                let last_receive = 0
+            elseif a:line[(i):(m-1)] =~# '^after$'
+                if last_receive == 0
                     let ind = ind - 1
                 else
                     let ind = ind + 0
-                end
-                let lastReceive = 0
-            elseif a:l[(i):(m-1)] =~# '^fun$'
+                endif
+                let last_receive = 0
+            elseif a:line[(i):(m-1)] =~# '^fun$'
                 let ind = ind + 1
-                let lastFun = 1
-                let lastReceive = 0
+                let last_fun = 1
+                let last_receive = 0
             endif
-        elseif a:l[i] =~# "[A-Z_]"
-            let m = matchend(a:l,".[[:alnum:]_]*",i)
-            let lastReceive = 0
-        elseif a:l[i] == '$'
+        elseif a:line[i] =~# "[A-Z_]"
+            let m = matchend(a:line,".[[:alnum:]_]*",i)
+            let last_receive = 0
+        elseif a:line[i] == '$'
             let m = i+2
-            let lastReceive = 0
-        elseif a:l[i] == "." && (i+1>=length || a:l[i+1]!~ "[0-9]")
+            let last_receive = 0
+        elseif a:line[i] == "." && (i+1>=linelen || a:line[i+1]!~ "[0-9]")
             let m = i+1
-            if lastHashMark
-                let lastHashMark = 0
+            if last_hash_sym
+                let last_hash_sym = 0
             else
                 let ind = ind - 1
-            end
-            let lastReceive = 0
-        elseif a:l[i] == '-' && (i+1<length && a:l[i+1]=='>')
+            endif
+            let last_receive = 0
+        elseif a:line[i] == '-' && (i+1<linelen && a:line[i+1]=='>')
             let m = i+2
             let ind = ind + 1
-            let lastReceive = 0
-        elseif a:l[i] == ';'
+            let last_receive = 0
+        elseif a:line[i] == ';' && a:line[(i):(linelen)] !~# '.*->.*'
             let m = i+1
             let ind = ind - 1
-            let lastReceive = 0
-        elseif a:l[i] == '#'
+            let last_receive = 0
+        elseif a:line[i] == '#'
             let m = i+1
-            let lastHashMark = 1
-        elseif a:l[i] =~# '[({[]'
+            let last_hash_sym = 1
+        elseif a:line[i] =~# '[({[]'
             let m = i+1
             let ind = ind + 1
-            let lastFun = 0
-            let lastReceive = 0
-            let lastHashMark = 0
-        elseif a:l[i] =~# '[)}\]]'
+            let last_fun = 0
+            let last_receive = 0
+            let last_hash_sym = 0
+        elseif a:line[i] =~# '[)}\]]'
             let m = i+1
             let ind = ind - 1
-            let lastReceive = 0
+            let last_receive = 0
         else
             let m = i+1
         endif
 
         let i = m
-
     endwhile
 
     return ind
-
 endfunction
 
 function s:FindPrevNonBlankNonComment(lnum)
     let lnum = prevnonblank(a:lnum)
     let line = getline(lnum)
-    " continue to search above if the current line begins with a '%'
+    " Continue to search above if the current line begins with a '%'
     while line =~# '^\s*%.*$'
         let lnum = prevnonblank(lnum - 1)
         if 0 == lnum
@@ -133,12 +149,20 @@ function s:FindPrevNonBlankNonComment(ln
     return lnum
 endfunction
 
-function ErlangIndent()
+" The function returns the indentation level of the line adjusted to a mutiple
+" of 'shiftwidth' option.
+"
+" lnum: line number
+" return: the indentation level of the line
+function s:GetLineIndent(lnum)
+    return (indent(a:lnum) / &sw) * &sw
+endfunction
 
-    " Find a non-blank line above the current line.
+function ErlangIndent()
+    " Find a non-blank line above the current line
     let lnum = prevnonblank(v:lnum - 1)
 
-    " Hit the start of the file, use zero indent.
+    " Hit the start of the file, use zero indent
     if lnum == 0
         return 0
     endif
@@ -146,9 +170,14 @@ function ErlangIndent()
     let prevline = getline(lnum)
     let currline = getline(v:lnum)
 
-    let ind = indent(lnum) + &sw * s:ErlangIndentAtferLine(prevline)
+    let ind_after = s:ErlangIndentAfterLine(prevline)
+    if ind_after != 0
+        let ind = s:GetLineIndent(lnum) + ind_after * &sw
+    else
+        let ind = indent(lnum) + ind_after * &sw
+    endif
 
-    " special cases:
+    " Special cases:
     if prevline =~# '^\s*\%(after\|end\)\>'
         let ind = ind + 2*&sw
     endif
@@ -158,8 +187,8 @@ function ErlangIndent()
     if currline =~# '^\s*after\>'
         let plnum = s:FindPrevNonBlankNonComment(v:lnum-1)
         if getline(plnum) =~# '^[^%]*\<receive\>\s*\%(%.*\)\=$'
+            " If the 'receive' is not in the same line as the 'after'
             let ind = ind - 1*&sw
-            " If the 'receive' is not in the same line as the 'after'
         else
             let ind = ind - 2*&sw
         endif
@@ -181,26 +210,4 @@ function ErlangIndent()
         let ind = 0
     endif
     return ind
-
 endfunction
-
-" TODO:
-" 
-" f() ->
-"     x("foo
-"         bar")
-"         ,
-"         bad_indent.
-"
-" fun
-"     init/0,
-"     bad_indent
-"
-"     #rec
-"     .field,
-" bad_indent
-"
-" case X of
-"     1 when A; B ->
-"     bad_indent
-
--- a/runtime/indent/java.vim
+++ b/runtime/indent/java.vim
@@ -1,7 +1,12 @@
 " Vim indent file
 " Language:	Java
-" Maintainer:	Toby Allsopp <toby.allsopp@peace.com> (resigned)
-" Last Change:	2005 Mar 28
+" Previous Maintainer: Toby Allsopp <toby.allsopp@peace.com>
+" Current Maintainer: Hong Xu <xuhdev@gmail.com>
+" Last Change:	2012 Jan 20
+" Version: 1.0
+" License: Same as Vim.
+" Copyright (c) 2012 Hong Xu
+" Before 2012, this file is maintained by Toby Allsopp.
 
 " Only load this indent file when no other was loaded.
 if exists("b:did_indent")
@@ -60,6 +65,13 @@ function GetJavaIndent()
 
   " find start of previous line, in case it was a continuation line
   let lnum = SkipJavaBlanksAndComments(v:lnum - 1)
+
+  " If the previous line starts with '@', we should have the same indent as
+  " the previous one
+  if getline(lnum) =~ '^\s*@\S\+\s*$'
+    return indent(lnum)
+  endif
+
   let prev = lnum
   while prev > 1
     let next_prev = SkipJavaBlanksAndComments(prev - 1)
--- a/runtime/plugin/getscriptPlugin.vim
+++ b/runtime/plugin/getscriptPlugin.vim
@@ -19,7 +19,7 @@ if &cp || exists("g:loaded_getscriptPlug
  endif
  finish
 endif
-let g:loaded_getscriptPlugin = "v33"
+let g:loaded_getscriptPlugin = "v34"
 let s:keepcpo                = &cpo
 set cpo&vim
 
--- a/runtime/plugin/tarPlugin.vim
+++ b/runtime/plugin/tarPlugin.vim
@@ -14,7 +14,7 @@
 if &cp || exists("g:loaded_tarPlugin")
  finish
 endif
-let g:loaded_tarPlugin = "v27"
+let g:loaded_tarPlugin = "v28"
 let s:keepcpo          = &cpo
 set cpo&vim
 
--- a/runtime/plugin/vimballPlugin.vim
+++ b/runtime/plugin/vimballPlugin.vim
@@ -16,7 +16,7 @@
 if &cp || exists("g:loaded_vimballPlugin")
  finish
 endif
-let g:loaded_vimballPlugin = "v34"
+let g:loaded_vimballPlugin = "v35"
 let s:keepcpo              = &cpo
 set cpo&vim
 
--- a/runtime/plugin/zipPlugin.vim
+++ b/runtime/plugin/zipPlugin.vim
@@ -1,9 +1,9 @@
 " zipPlugin.vim: Handles browsing zipfiles
 "            PLUGIN PORTION
-" Date:			Oct 05, 2007
+" Date:			Aug 15, 2011
 " Maintainer:	Charles E Campbell, Jr <NdrOchip@ScampbellPfamily.AbizM-NOSPAM>
 " License:		Vim License  (see vim's :help license)
-" Copyright:    Copyright (C) 2005,2006 Charles E. Campbell, Jr. {{{1
+" Copyright:    Copyright (C) 2005-2011 Charles E. Campbell, Jr. {{{1
 "               Permission is hereby granted to use and distribute this code,
 "               with or without modifications, provided that this copyright
 "               notice is copied with it. Like anything else that's free,
@@ -20,7 +20,7 @@
 if &cp || exists("g:loaded_zipPlugin")
  finish
 endif
-let g:loaded_zipPlugin = "v24"
+let g:loaded_zipPlugin = "v25"
 let s:keepcpo          = &cpo
 set cpo&vim
 
@@ -40,7 +40,7 @@ augroup zip
   au FileWriteCmd zipfile:*/*	call zip#Write(expand("<amatch>"))
  endif
 
- au BufReadCmd   *.zip,*.jar,*.xpi,*.war,*.ear,*.celzip		call zip#Browse(expand("<amatch>"))
+ au BufReadCmd   *.zip,*.jar,*.xpi,*.war,*.ear,*.celzip,*.oxt		call zip#Browse(expand("<amatch>"))
 augroup END
 
 " ---------------------------------------------------------------------
--- a/runtime/spell/ga/ga_IE.diff
+++ b/runtime/spell/ga/ga_IE.diff
@@ -29,7 +29,7 @@
 + # soundslike mapping from Aspell
 + # Aspell phonetics for Irish, by Kevin Scannell <scannell@slu.edu>
 + # Copyright 2002, 2003 Kevin P. Scannell, distributed under GNU GPL
-+ # version 2.0
++ # version 2.0 or the Vim license (attribution by Kevin Scannell, Jan 2012)
 + 
 + SAL followup 0                    # else breaks QU^, e.g.
 + SAL collapse_result 1             # no double letters in resulting strings
--- a/runtime/spell/gd/gd_GB.diff
+++ b/runtime/spell/gd/gd_GB.diff
@@ -25,7 +25,7 @@
 + # soundslike mapping from Aspell
 + # Aspell phonetics for Irish, by Kevin Scannell <scannell@slu.edu>
 + # Copyright 2002, 2003 Kevin P. Scannell, distributed under GNU GPL
-+ # version 2.0
++ # version 2.0 or the Vim license (attribution by Kevin Scannell, Jan 2012)
 + 
 + SAL followup 0                    # else breaks QU^, e.g.
 + SAL collapse_result 1             # no double letters in resulting strings
--- a/runtime/spell/sv/sv_SE.diff
+++ b/runtime/spell/sv/sv_SE.diff
@@ -27,7 +27,7 @@
 + # soundslike mapping from Aspell
 + # swedish_phonet.dat - Swedish phonetic transformation rules for aspell
 + # Copyright (C) 2000  Martin Norbck  <d95mback@dtek.chalmers.se>
-+ # distributed under GNU GPL
++ # distributed under GNU GPL or the Vim license, at your choice.
 + # version 0.2
 + 
 + SAL &	&
--- a/runtime/syntax/c.vim
+++ b/runtime/syntax/c.vim
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:	C
 " Maintainer:	Bram Moolenaar <Bram@vim.org>
-" Last Change:	2012 Jan 04
+" Last Change:	2012 Jan 14
 
 " Quit when a (custom) syntax file was already loaded
 if exists("b:current_syntax")
@@ -62,6 +62,25 @@ syn match	cSpecialCharacter display "L\=
 syn match	cSpecialCharacter display "'\\x\x\{1,2}'"
 syn match	cSpecialCharacter display "L'\\x\x\+'"
 
+if !exists("c_no_c11") " ISO C11
+  if exists("c_no_cformat")
+    syn region	cString		start=+\%(U\|u8\=\)"+ skip=+\\\\\|\\"+ end=+"+ contains=cSpecial,@Spell
+  else
+    syn region	cString		start=+\%(U\|u8\=\)"+ skip=+\\\\\|\\"+ end=+"+ contains=cSpecial,cFormat,@Spell
+  endif
+  syn match	cCharacter	"[Uu]'[^\\]'"
+  syn match	cCharacter	"[Uu]'[^']*'" contains=cSpecial
+  if exists("c_gnu")
+    syn match	cSpecialError	"[Uu]'\\[^'\"?\\abefnrtv]'"
+    syn match	cSpecialCharacter "[Uu]'\\['\"?\\abefnrtv]'"
+  else
+    syn match	cSpecialError	"[Uu]'\\[^'\"?\\abfnrtv]'"
+    syn match	cSpecialCharacter "[Uu]'\\['\"?\\abfnrtv]'"
+  endif
+  syn match	cSpecialCharacter display "[Uu]'\\\o\{1,3}'"
+  syn match	cSpecialCharacter display "[Uu]'\\x\x\+'"
+endif
+
 "when wanted, highlight trailing white space
 if exists("c_space_errors")
   if !exists("c_no_trail_space_error")
@@ -211,6 +230,7 @@ if !exists("c_no_c11")
   syn keyword	cStorageClass	_Noreturn noreturn
   syn keyword	cOperator	_Static_assert static_assert
   syn keyword	cStorageClass	_Thread_local thread_local
+  syn keyword   cType		char16_t char32_t
 endif
 
 if !exists("c_no_ansi") || exists("c_ansi_constants") || exists("c_gnu")
--- a/runtime/syntax/d.vim
+++ b/runtime/syntax/d.vim
@@ -2,20 +2,21 @@
 "
 " Language:     D
 " Maintainer:   Jesse Phillips <Jesse.K.Phillips+D@gmail.com>
-" Last Change:  2010 Sep 21
-" Version:      0.22
+" Last Change:  2012 Jan 11
+" Version:      0.24
 "
 " Contributors:
 "   - Jason Mills <jasonmills@nf.sympatico.ca>: original Maintainer
-"   - Kirk McDonald: version 0.17 updates, with minor modifications
-"     (http://paste.dprogramming.com/dplmb7qx?view=hidelines)
-"   - Tim Keating: patch to fix a bug in highlighting the `\` literal
-"   - Frank Benoit: Fixed a bug that caused some identifiers and numbers to highlight as octal number errors.
-"   - Shougo Matsushita <Shougo.Matsu@gmail.com>: updates for latest 2.047 highlighting
-"   - Ellery Newcomer: Fixed some highlighting bugs.
-"   - Steven N. Oliver: #! highlighting
+"   - Kirk McDonald
+"   - Tim Keating
+"   - Frank Benoit
+"   - Shougo Matsushita <Shougo.Matsu@gmail.com>
+"   - Ellery Newcomer
+"   - Steven N. Oliver
+"   - Sohgo Takeuchi
 "
-" Please email me with bugs, comments, and suggestions.
+" Please submit bugs/comments/suggestions to the github repo: 
+" https://github.com/he-the-great/d.vim
 "
 " Options:
 "   d_comment_strings - Set to highlight strings and numbers in comments.
@@ -23,34 +24,23 @@
 "   d_hl_operator_overload - Set to highlight D's specially named functions
 "   that when overloaded implement unary and binary operators (e.g. opCmp).
 "
-" Todo:
-"   - Determine a better method of sync'ing than simply setting minlines
-"   to a large number.
-"
-"   - Several keywords (e.g., in, out, inout) are both storage class and
-"   statements, depending on their context. Perhaps use pattern matching to
-"   figure out which and highlight appropriately. For now I have made such
-"   keywords storage classes so their highlighting is consistent with other
-"   keywords that are commonly used with them, but are true storage classes,
-"   such as lazy. Similarly, I made some statement keywords (e.g. body) storage
-"   classes.
-"
-"   - Mark contents of the asm statement body as special
-"
-"   - Maybe highlight the 'exit', 'failure', and 'success' parts of the
-"   scope() statement.
-"
-"   - Highlighting DDoc comments.
-"
+"   d_hl_object_types - Set to highlight some common types from object.di.
 
 " Quit when a syntax file was already loaded
 if exists("b:current_syntax")
   finish
 endif
 
+" Support cpoptions
+let s:cpo_save = &cpo
+set cpo&vim
+
+" Set the current syntax to be known as d
+let b:current_syntax = "d"
+
 " Keyword definitions
 "
-syn keyword dExternal              import package module extern
+syn keyword dExternal              import module
 syn keyword dConditional           if else switch
 syn keyword dBranch                goto break continue
 syn keyword dRepeat                while for do foreach foreach_reverse
@@ -77,21 +67,34 @@ if exists("d_hl_operator_overload")
   syn keyword dOpOverload          opCall opSlice opSliceAssign opSliceOpAssign 
   syn keyword dOpOverload          opPos opAdd_r opMul_r opAnd_r opOr_r opXor_r
   syn keyword dOpOverload          opIn opIn_r opPow opDispatch opStar opDot 
-  syn keyword dOpOverload          opApply opApplyReverse
+  syn keyword dOpOverload          opApply opApplyReverse opDollar
   syn keyword dOpOverload          opUnary opIndexUnary opSliceUnary
   syn keyword dOpOverload          opBinary opBinaryRight
 endif
 
-syn keyword dType                  void ushort int uint long ulong float
-syn keyword dType                  byte ubyte double bit char wchar ucent cent
-syn keyword dType                  short bool dchar wstring dstring
-syn keyword dType                  real ireal ifloat idouble
-syn keyword dType                  creal cfloat cdouble
+syn keyword dType                  byte ubyte short ushort int uint long ulong cent ucent
+syn keyword dType                  void bool bit
+syn keyword dType                  float double real
+syn keyword dType                  ushort int uint long ulong float
+syn keyword dType                  char wchar dchar string wstring dstring
+syn keyword dType                  ireal ifloat idouble creal cfloat cdouble
+syn keyword dType                  size_t ptrdiff_t sizediff_t equals_t hash_t
+if exists("d_hl_object_types")
+  syn keyword dType                Object Throwable AssociativeArray Error Exception
+  syn keyword dType                Interface OffsetTypeInfo TypeInfo TypeInfo_Typedef
+  syn keyword dType                TypeInfo_Enum TypeInfo_Pointer TypeInfo_Array
+  syn keyword dType                TypeInfo_StaticArray TypeInfo_AssociativeArray
+  syn keyword dType                TypeInfo_Function TypeInfo_Delegate TypeInfo_Class
+  syn keyword dType                ClassInfo TypeInfo_Interface TypeInfo_Struct
+  syn keyword dType                TypeInfo_Tuple TypeInfo_Const TypeInfo_Invariant
+  syn keyword dType                TypeInfo_Shared TypeInfo_Inout MemberInfo
+  syn keyword dType                MemberInfo_field MemberInfo_function ModuleInfo
+endif
 syn keyword dDebug                 deprecated unittest invariant
 syn keyword dExceptions            throw try catch finally
-syn keyword dScopeDecl             public protected private export
+syn keyword dScopeDecl             public protected private export package 
 syn keyword dStatement             debug return with
-syn keyword dStatement             function delegate __traits mixin macro
+syn keyword dStatement             function delegate __ctfe mixin macro
 syn keyword dStorageClass          in out inout ref lazy body
 syn keyword dStorageClass          pure nothrow
 syn keyword dStorageClass          auto static override final abstract volatile
@@ -100,15 +103,26 @@ syn keyword dStorageClass          synch
 syn keyword dPragma                pragma
 syn keyword dIdentifier            _arguments _argptr __vptr __monitor _ctor _dtor
 syn keyword dScopeIdentifier       contained exit success failure
+syn keyword dTraitsIdentifier      contained isAbstractClass isArithmetic isAssociativeArray
+syn keyword dTraitsIdentifier      contained isFinalClass isFloating isIntegral isScalar
+syn keyword dTraitsIdentifier      contained isStaticArray isUnsigned isVirtualFunction
+syn keyword dTraitsIdentifier      contained isAbstractFunction isFinalFunction isStaticFunction
+syn keyword dTraitsIdentifier      contained isRef isOut isLazy hasMember identifier getMember
+syn keyword dTraitsIdentifier      contained getOverloads getVirtualFunctions parent compiles
+syn keyword dTraitsIdentifier      contained classInstanceSize allMembers derivedMembers isSame
+syn keyword dExternIdentifier      contained Windows Pascal Java System D
 syn keyword dAttribute             contained safe trusted system
 syn keyword dAttribute             contained property disable
-syn keyword dVersionIdentifier     contained DigitalMars GNU LDC LLVM
-syn keyword dVersionIdentifier     contained X86 X86_64 Windows Win32 Win64 
-syn keyword dVersionIdentifier     contained linux Posix OSX FreeBSD
-syn keyword dVersionIdentifier     contained LittleEndian BigEndian D_Coverage
-syn keyword dVersionIdentifier     contained D_Ddoc D_InlineAsm_X86
-syn keyword dVersionIdentifier     contained D_InlineAsm_X86_64 D_LP64 D_PIC
-syn keyword dVersionIdentifier     contained unittest D_Version2 none all
+syn keyword dVersionIdentifier     contained DigitalMars GNU LDC SDC D_NET
+syn keyword dVersionIdentifier     contained X86 X86_64 ARM PPC PPC64 IA64 MIPS MIPS64 Alpha
+syn keyword dVersionIdentifier     contained SPARC SPARC64 S390 S390X HPPA HPPA64 SH SH64
+syn keyword dVersionIdentifier     contained linux Posix OSX FreeBSD Windows Win32 Win64
+syn keyword dVersionIdentifier     contained OpenBSD BSD Solaris AIX SkyOS SysV3 SysV4 Hurd
+syn keyword dVersionIdentifier     contained Cygwin MinGW
+syn keyword dVersionIdentifier     contained LittleEndian BigEndian
+syn keyword dVersionIdentifier     contained D_InlineAsm_X86 D_InlineAsm_X86_64
+syn keyword dVersionIdentifier     contained D_Version2 D_Coverage D_Ddoc D_LP64 D_PIC
+syn keyword dVersionIdentifier     contained unittest none all
 
 " Highlight the sharpbang
 syn match dSharpBang "\%^#!.*"     display
@@ -117,23 +131,38 @@ syn match dSharpBang "\%^#!.*"     displ
 syn match dAnnotation	"@[_$a-zA-Z][_$a-zA-Z0-9_]*\>" contains=dAttribute
 
 " Version Identifiers
-syn match dVersion   "[^.]version" nextgroup=dVersionInside
-syn match dVersion   "^version" nextgroup=dVersionInside
-syn match dVersionInside  "([_a-zA-Z][_a-zA-Z0-9]*\>" transparent contained contains=dVersionIdentifier
+syn match dVersion   "[^.]\<version\>"hs=s+1 nextgroup=dVersionInside
+syn match dVersion   "^\<version\>" nextgroup=dVersionInside
+syn match dVersionInside  "\s*([_a-zA-Z][_a-zA-Z0-9]*\>" transparent contained contains=dVersionIdentifier
 
 " Scope StorageClass
-syn match dStorageClass   "scope"
+syn match dStorageClass   "\<scope\>"
+
+" Traits Expression
+syn match dStatement    "\<__traits\>"
+
+" Extern Modifier
+syn match dExternal     "\<extern\>"
 
 " Scope Identifiers
-syn match dScope	"scope\s*([_a-zA-Z][_a-zA-Z0-9]*\>"he=s+5 contains=dScopeIdentifier
+syn match dScope	"\<scope\s*([_a-zA-Z][_a-zA-Z0-9]*\>"he=s+5 contains=dScopeIdentifier
+
+" Traits Identifiers
+syn match dTraits       "\<__traits\s*([_a-zA-Z][_a-zA-Z0-9]*\>"he=s+8 contains=dTraitsIdentifier
+
+" Necessary to highlight C++ in extern modifiers.
+syn match dExternIdentifier "C\(++\)\?" contained
+
+" Extern Identifiers
+syn match dExtern       "\<extern\s*([_a-zA-Z][_a-zA-Z0-9\+]*\>"he=s+6 contains=dExternIdentifier
 
 " String is a statement and a module name.
-syn match dType "^string"
-syn match dType "[^.]\s*\<string\>"ms=s+1
+syn match dType "[^.]\<string\>"ms=s+1
+syn match dType "^\<string\>"
 
 " Assert is a statement and a module name.
-syn match dAssert "^assert"
-syn match dAssert "[^.]\s*\<assert\>"ms=s+1
+syn match dAssert "[^.]\<assert\>"ms=s+1
+syn match dAssert "^\<assert\>"
 
 " dTokens is used by the token string highlighting
 syn cluster dTokens contains=dExternal,dConditional,dBranch,dRepeat,dBoolean
@@ -161,12 +190,12 @@ if exists("d_comment_strings")
   syn region dBlockCommentString	contained start=+"+ end=+"+ end=+\*/+me=s-1,he=s-1 contains=dCommentStar,dUnicode,dEscSequence,@Spell
   syn region dNestedCommentString	contained start=+"+ end=+"+ end="+"me=s-1,he=s-1 contains=dCommentPlus,dUnicode,dEscSequence,@Spell
   syn region dLineCommentString		contained start=+"+ end=+$\|"+ contains=dUnicode,dEscSequence,@Spell
-  syn region dBlockComment	start="/\*"  end="\*/" contains=dBlockCommentString,dTodo,@Spell
-  syn region dNestedComment	start="/+"  end="+/" contains=dNestedComment,dNestedCommentString,dTodo,@Spell
+  syn region dBlockComment	start="/\*"  end="\*/" contains=dBlockCommentString,dTodo,@Spell fold
+  syn region dNestedComment	start="/+"  end="+/" contains=dNestedComment,dNestedCommentString,dTodo,@Spell fold
   syn match  dLineComment	"//.*" contains=dLineCommentString,dTodo,@Spell
 else
-  syn region dBlockComment	start="/\*"  end="\*/" contains=dBlockCommentString,dTodo,@Spell
-  syn region dNestedComment	start="/+"  end="+/" contains=dNestedComment,dNestedCommentString,dTodo,@Spell
+  syn region dBlockComment	start="/\*"  end="\*/" contains=dBlockCommentString,dTodo,@Spell fold
+  syn region dNestedComment	start="/+"  end="+/" contains=dNestedComment,dNestedCommentString,dTodo,@Spell fold
   syn match  dLineComment	"//.*" contains=dLineCommentString,dTodo,@Spell
 endif
 
@@ -280,6 +309,10 @@ syn case match
 " TODO: Highlight following Integer and optional Filespec.
 syn region  dPragma start="#\s*\(line\>\)" skip="\\$" end="$"
 
+" Block
+"
+syn region dBlock	start="{" end="}" transparent fold
+
 
 " The default highlighting.
 "
@@ -330,12 +363,14 @@ hi def link dAnnotation          PreProc
 hi def link dSharpBang           PreProc
 hi def link dAttribute           StorageClass
 hi def link dIdentifier          Identifier
+hi def link dVersion             dStatement
 hi def link dVersionIdentifier   Identifier
-hi def link dVersion             dStatement
-hi def link dScopeIdentifier     dStatement
 hi def link dScope               dStorageClass
-
-let b:current_syntax = "d"
+hi def link dScopeIdentifier     Identifier
+hi def link dTraits              dStatement
+hi def link dTraitsIdentifier    Identifier
+hi def link dExtern              dExternal
+hi def link dExternIdentifier    Identifier
 
 " Marks contents of the asm statment body as special
 
@@ -464,3 +499,5 @@ syn keyword dAsmOpCode contained	pfnacc 
 syn keyword dAsmOpCode contained	pfrsqit1 	pfrsqrt 	pfsub 	pfsubr 	pi2fd
 syn keyword dAsmOpCode contained	pmulhrw 	pswapd
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
--- a/runtime/syntax/erlang.vim
+++ b/runtime/syntax/erlang.vim
@@ -1,229 +1,126 @@
 " Vim syntax file
-" Language:    erlang (ERicsson LANGuage)
-"              http://www.erlang.se
-"              http://www.erlang.org
-" Maintainer:  Csaba Hoch <csaba.hoch@gmail.com>
-" Former Maintainer:  Kreąimir Marľić (Kresimir Marzic) <kmarzic@fly.srk.fer.hr>
-" Last update: 12-Mar-2008
-" Filenames:   .erl
-
+" Language:     Erlang
+" Author:       Oscar Hellstrm <oscar@oscarh.net> (http://oscar.hellstrom.st)
+" Contributors: Ricardo Catalinas Jimnez <jimenezrick@gmail.com>
+" License:      Vim license
+" Version:      2011/09/11
 
-" There are three sets of highlighting in here:
-" One is "erlang_characters", second is "erlang_functions" and third
-" is "erlang_keywords".
-" If you want to disable keywords highlighting, put in your .vimrc:
-"       let erlang_keywords=1
-" If you want to disable erlang BIF highlighting, put in your .vimrc
-" this:
-"       let erlang_functions=1
-" If you want to disable special characters highlighting, put in
-" your .vimrc:
-"       let erlang_characters=1
-
-
-" For version 5.x: Clear all syntax items
-" For version 6.x: Quit when a syntax file was already loaded
-if version < 600
-    syntax clear
-elseif exists ("b:current_syntax")
-    finish
+if exists("b:current_syntax")
+	finish
+else
+	let b:current_syntax = "erlang"
 endif
 
-
-" Case sensitive
-syn case match
-
-
-if ! exists ("erlang_characters")
-
-    " Basic elements
-    syn match   erlangComment          "%.*$" contains=erlangAnnotation,erlangTodo
-    syn match   erlangAnnotation       " \@<=@\%(clear\|docfile\|end\|headerfile\|todo\|TODO\|type\|author\|copyright\|doc\|reference\|see\|since\|title\|version\|deprecated\|hidden\|private\|equiv\|spec\|throws\)" contained
-    syn match   erlangAnnotation       "`[^']*'" contained
-    syn keyword erlangTodo             TODO FIXME XXX contained
-    syn match   erlangModifier         "\~\a\|\\\a\|\\\\" contained
-    syn match   erlangSpecialCharacter ":\|_\|@\|\\\|\"\|\."
-    syn match   erlangSeparator        "(\|)\|{\|}\|\[\|]\||\|||\|;\|,\|?\|->\|#" contained
-    syn region  erlangString           start=+"+ skip=+\\.+ end=+"+ contains=erlangModifier
-    syn region  erlangAtom             start=+'+ skip=+\\'+ end=+'+
-
-    " Operators
-    syn match   erlangOperator         "+\|-\|\*\|\/"
-    syn keyword erlangOperator         div rem or xor bor bxor bsl bsr
-    syn keyword erlangOperator         and band not bnot andalso orelse
-    syn match   erlangOperator         "==\|/=\|=:=\|=/=\|<\|=<\|>\|>="
-    syn match   erlangOperator         "++\|--\|=\|!\|<-"
-
-    " Numbers
-    syn match   erlangNumberInteger    "\d\+" contains=erlangSeparator
-    syn match   erlangNumberFloat1     "\d\+\.\d\+" contains=erlangSeparator
-    syn match   erlangNumberFloat2     "\d\+\(\.\d\+\)\=[eE][+-]\=\d\+\(\.\d\+\)\=" contains=erlangSeparator
-    syn match   erlangNumberFloat3     "\d\+[#]\x\+" contains=erlangSeparator
-    syn match   erlangNumberHex        "$\x\+" contains=erlangSeparator
-
-    " Ignore '_' and '-' in words
-    syn match   erlangWord             "\h\+\w*"
-
-    syn match   erlangChar             /\$./
+if !exists("g:erlang_highlight_bif")
+	let g:erlang_highlight_bif = 1
 endif
 
-if ! exists ("erlang_functions")
-    " Functions call
-    syn match   erlangFCall      "\%(\w\+\s*\.\s*\)*\w\+\s*[:@]\s*\w\+"
+" Erlang is case sensitive
+syn case match
+
+" Match groups
+syn match erlangStringModifier               /\\./ contained
+syn match erlangStringModifier               /\~\%(-\?[0-9*]\+\)\?\%(\.[0-9*]\+\..\?\)\?\%(c\|f\|e\|g\|s\|w\|p\|W\|P\|B\|X\|#\|b\|+\|n\|i\)/ contained
+syn match erlangModifier                     /\$\\\?./
+
+syn match erlangInteger                      /\<\%([0-9]\+#[0-9a-fA-F]\+\|[0-9]\+\)\>/
+syn match erlangFloat                        /\<[0-9]\+\.[0-9]\+\%(e-\?[0-9]\+\)\?\>/
 
-    " build-in-functions (BIFs)
-    syn keyword erlangBIF        abs alive apply atom_to_list
-    syn keyword erlangBIF        binary_to_list binary_to_term
-    syn keyword erlangBIF        concat_binary
-    syn keyword erlangBIF        date disconnect_node
-    syn keyword erlangBIF        element erase exit
-    syn keyword erlangBIF        float float_to_list
-    syn keyword erlangBIF        get get_keys group_leader
-    syn keyword erlangBIF        halt hd
-    syn keyword erlangBIF        integer_to_list is_alive
-    syn keyword erlangBIF        length link list_to_atom list_to_binary
-    syn keyword erlangBIF        list_to_float list_to_integer list_to_pid
-    syn keyword erlangBIF        list_to_tuple load_module
-    syn keyword erlangBIF        make_ref monitor_node
-    syn keyword erlangBIF        node nodes now
-    syn keyword erlangBIF        open_port
-    syn keyword erlangBIF        pid_to_list process_flag
-    syn keyword erlangBIF        process_info process put
-    syn keyword erlangBIF        register registered round
-    syn keyword erlangBIF        self setelement size spawn
-    syn keyword erlangBIF        spawn_link split_binary statistics
-    syn keyword erlangBIF        term_to_binary throw time tl trunc
-    syn keyword erlangBIF        tuple_to_list
-    syn keyword erlangBIF        unlink unregister
-    syn keyword erlangBIF        whereis
+syn keyword erlangTodo                       TODO FIXME XXX contained
+syn match   erlangComment                    /%.*$/ contains=@Spell,erlangTodo,erlangAnnotation
+syn match   erlangAnnotation                 /\%(%\s\)\@<=@\%(author\|clear\|copyright\|deprecated\|doc\|docfile\|end\|equiv\|headerfile\|hidden\|private\|reference\|see\|since\|spec\|throws\|title\|todo\|TODO\|type\|version\)/ contained
+syn match   erlangAnnotation                 /`[^']\+'/ contained
+
+syn keyword erlangKeyword                    band bor bnot bsl bsr bxor div rem xor
+syn keyword erlangKeyword                    try catch begin receive after cond fun let query
 
-    " Other BIFs
-    syn keyword erlangBIF        atom binary constant function integer
-    syn keyword erlangBIF        list number pid ports port_close port_info
-    syn keyword erlangBIF        reference record
+syn keyword erlangConditional                case if of end
+syn keyword erlangConditional                not and or andalso orelse
+syn keyword erlangConditional                when
+
+syn keyword erlangBoolean                    true false
+
+syn keyword erlangGuard                      is_list is_alive is_atom is_binary is_bitstring is_boolean is_tuple is_number is_integer is_float is_function is_constant is_pid is_port is_reference is_record is_process_alive
 
-    " erlang:BIFs
-    syn keyword erlangBIF        check_process_code delete_module
-    syn keyword erlangBIF        get_cookie hash math module_loaded
-    syn keyword erlangBIF        preloaded processes purge_module set_cookie
-    syn keyword erlangBIF        set_node
+syn match erlangOperator                     /\/\|*\|+\|-\|++\|--/
+syn match erlangOperator                     /->\|<-\|||\||\|!\|=/
+syn match erlangOperator                     /=:=\|==\|\/=\|=\/=\|<\|>\|=<\|>=/
+syn keyword erlangOperator                   div rem
 
-    " functions of math library
-    syn keyword erlangFunction   acos asin atan atan2 cos cosh exp
-    syn keyword erlangFunction   log log10 pi pow power sin sinh sqrt
-    syn keyword erlangFunction   tan tanh
+syn region erlangString                      start=/"/ end=/"/ skip=/\\/ contains=@Spell,erlangStringModifier
 
-    " Other functions
-    syn keyword erlangFunction   call module_info parse_transform
-    syn keyword erlangFunction   undefined_function
+syn match erlangVariable                     /\<[A-Z_]\w*\>/
+syn match erlangAtom                         /\%(\%(^-\)\|#\)\@<!\<[a-z][A-Za-z0-9_]*\>\%(\s*[(:]\)\@!/
+syn match erlangAtom                         /\\\@<!'[^']*\\\@<!'/
 
-    " Modules
-    syn keyword erlangModule     error_handler
-endif
+syn match erlangRecord                       /#\w\+/
 
-if ! exists ("erlang_keywords")
-    " Constants and Directives
-    syn match   erlangDirective  "-behaviour\|-behavior"
-    syn match   erlangDirective  "-compile\|-define\|-else\|-endif\|-export\|-file"
-    syn match   erlangDirective  "-ifdef\|-ifndef\|-import\|-include_lib\|-include"
-    syn match   erlangDirective  "-module\|-record\|-undef"
-
-    syn match   erlangConstant   "-author\|-copyright\|-doc\|-vsn"
+syn match erlangTuple                        /{\|}/
+syn match erlangList                         /\[\|\]/
 
-    " Keywords
-    syn keyword erlangKeyword    after begin case catch
-    syn keyword erlangKeyword    cond end fun if
-    syn keyword erlangKeyword    let of query receive
-    syn keyword erlangKeyword    when
-    syn keyword erlangKeyword    try
+syn match erlangAttribute                    /^-\%(vsn\|author\|copyright\|compile\|deprecated\|module\|export\|import\|behaviour\|behavior\|export_type\|ignore_xref\|on_load\)\s*(\@=/
+syn match erlangInclude                      /^-include\%(_lib\)\?\s*(\@=/
+syn match erlangRecordDef                    /^-record\s*(\@=/
+syn match erlangDefine                       /^-\%(define\|undef\)\s*(\@=/
+syn match erlangPreCondit                    /^-\%(ifdef\|ifndef\|else\|endif\)\%(\s*(\@=\)\?/
 
-    " Processes
-    syn keyword erlangProcess    creation current_function dictionary
-    syn keyword erlangProcess    group_leader heap_size high initial_call
-    syn keyword erlangProcess    linked low memory_in_use message_queue
-    syn keyword erlangProcess    net_kernel node normal priority
-    syn keyword erlangProcess    reductions registered_name runnable
-    syn keyword erlangProcess    running stack_trace status timer
-    syn keyword erlangProcess    trap_exit waiting
+syn match erlangType                         /^-\%(spec\|type\)[( ]\@=/
+
+syn match erlangMacro                        /\%(-define(\)\@<=\w\+/
+syn match erlangMacro                        /?\??\w\+/
 
-    " Ports
-    syn keyword erlangPort       command count_in count_out creation in
-    syn keyword erlangPort       in_format linked node out owner packeting
+syn match erlangBitType                      /\%(\/\|-\)\@<=\%(bits\|bitstring\|binary\|integer\|float\|unit\)\>/
+syn match erlangBitSize                      /:\@<=[0-9]\+/
 
-    " Nodes
-    syn keyword erlangNode       atom_tables communicating creation
-    syn keyword erlangNode       current_gc current_reductions current_runtime
-    syn keyword erlangNode       current_wall_clock distribution_port
-    syn keyword erlangNode       entry_points error_handler friends
-    syn keyword erlangNode       garbage_collection magic_cookie magic_cookies
-    syn keyword erlangNode       module_table monitored_nodes name next_ref
-    syn keyword erlangNode       ports preloaded processes reductions
-    syn keyword erlangNode       ref_state registry runtime wall_clock
-
-    " Reserved
-    syn keyword erlangReserved   apply_lambda module_info module_lambdas
-    syn keyword erlangReserved   record record_index record_info
+syn match erlangBinary                      /<<\|>>/
 
-    " Extras
-    syn keyword erlangExtra      badarg nocookie false fun true
-
-    " Signals
-    syn keyword erlangSignal     badsig kill killed exit normal
-endif
-
-
-
-" Define the default highlighting.
-" For version 5.7 and earlier: only when not done already
-" For version 5.8 and later: only when an item doesn't have highlighting yet
-if version >= 508 || !exists ("did_erlang_inits")
-    if version < 508
-        let did_erlang_inits = 1
-        command -nargs=+ HiLink hi link <args>
-    else
-        command -nargs=+ HiLink hi def link <args>
-    endif
+" BIFs
+syn match erlangBIF                          /\%([^:0-9A-Za-z_]\|\<erlang:\)\@<=\%(abs\|apply\|atom_to_binary\|atom_to_list\|binary_part\|binary_to_atom\|binary_to_existing_atom\|binary_to_list\|binary_to_term\|bit_size\|bitstring_to_list\|byte_size\|check_process_code\|date\|delete_module\|demonitor\|disconnect_node\|element\|erase\|exit\|float\|float_to_list\|garbage_collect\|get\|get_keys\|group_leader\|hd\|integer_to_list\|iolist_size\|iolist_to_binary\|is_alive\|is_atom\|is_binary\|is_bitstring\|is_boolean\|is_float\|is_function\|is_integer\|is_list\|is_number\|is_pid\|is_port\|is_process_alive\|is_record\|is_reference\|is_tuple\|length\|link\|list_to_atom\|list_to_binary\|list_to_bitstring\|list_to_existing_atom\|list_to_float\|list_to_integer\|list_to_pid\|list_to_tuple\|load_module\|make_ref\|max\|min\|module_loaded\|monitor\|monitor_node\|node\|nodes\|now\|open_port\|pid_to_list\|port_close\|port_command\|port_connect\|port_control\|pre_loaded\|processes\|process_flag\|process_info\|purge_module\|put\|register\|registered\|round\|self\|setelement\|size\|spawn\|spawn_link\|spawn_monitor\|spawn_opt\|split_binary\|statistics\|term_to_binary\|time\|tl\|trunc\|tuple_size\|tuple_to_list\|unlink\|unregister\|whereis\)\%((\|\/[0-9]\)\@=/
+syn match erlangBIF                          /\<\%(erlang:\)\@<=\%(append_element\|bump_reductions\|cancel_timer\|decode_packet\|display\|function_exported\|fun_info\|fun_to_list\|get_cookie\|get_stacktrace\|hash\|is_builtin\|loaded\|load_nif\|localtime\|localtime_to_universaltime\|make_tuple\|memory\|monitor_node\|phash\|port_call\|port_info\|ports\|port_to_list\|process_display\|read_timer\|ref_to_list\|resume_process\|send\|send_after\|send_nosuspend\|set_cookie\|start_timer\|suspend_process\|system_flag\|system_info\|system_monitor\|system_profile\|trace\|trace_delivered\|trace_info\|trace_pattern\|universaltime\|universaltime_to_localtime\|yield\)(\@=/
+syn match erlangGBIF                         /erlang\%(:\w\)\@=/
 
-    " erlang_characters
-    HiLink erlangComment Comment
-    HiLink erlangAnnotation Special
-    HiLink erlangTodo Todo
-    HiLink erlangSpecialCharacter Special
-    HiLink erlangSeparator Normal
-    HiLink erlangModifier Special
-    HiLink erlangOperator Operator
-    HiLink erlangString String
-    HiLink erlangAtom Type
-
-    HiLink erlangNumberInteger Number
-    HiLink erlangNumberFloat1 Float
-    HiLink erlangNumberFloat2 Float
-    HiLink erlangNumberFloat3 Float
-    HiLink erlangNumberFloat4 Float
-    HiLink erlangNumberHex Number
-
-    HiLink erlangWord Normal
+" Link Erlang stuff to Vim groups
+hi link erlangTodo           Todo
+hi link erlangString         String
+hi link erlangNoSpellString  String
+hi link erlangModifier       SpecialChar
+hi link erlangStringModifier SpecialChar
+hi link erlangComment        Comment
+hi link erlangAnnotation     Special
+hi link erlangVariable       Identifier
+hi link erlangInclude        Include
+hi link erlangRecordDef      Keyword
+hi link erlangAttribute      Keyword
+hi link erlangKeyword        Keyword
+hi link erlangMacro          Macro
+hi link erlangDefine         Define
+hi link erlangPreCondit      PreCondit
+hi link erlangPreProc        PreProc
+hi link erlangDelimiter      Delimiter
+hi link erlangBitDelimiter   Normal
+hi link erlangOperator       Operator
+hi link erlangConditional    Conditional
+hi link erlangGuard          Conditional
+hi link erlangBoolean        Boolean
+hi link erlangAtom           Constant
+hi link erlangRecord         Structure
+hi link erlangInteger        Number
+hi link erlangFloat          Number
+hi link erlangFloat          Number
+hi link erlangFloat          Number
+hi link erlangFloat          Number
+hi link erlangHex            Number
+hi link erlangFun            Keyword
+hi link erlangList           Delimiter
+hi link erlangTuple          Delimiter
+hi link erlangBinary         Keyword
+hi link erlangBitVariable    Identifier
+hi link erlangBitType        Type
+hi link erlangType           Type
+hi link erlangBitSize        Number
 
-    " erlang_functions
-    HiLink erlangFCall Function
-    HiLink erlangBIF Function
-    HiLink erlangFunction Function
-    HiLink erlangModuleFunction Function
-
-    " erlang_keywords
-    HiLink erlangDirective Type
-    HiLink erlangConstant Type
-    HiLink erlangKeyword Keyword
-    HiLink erlangProcess Special
-    HiLink erlangPort Special
-    HiLink erlangNode Special
-    HiLink erlangReserved Statement
-    HiLink erlangExtra Statement
-    HiLink erlangSignal Statement
-
-    delcommand HiLink
+" Optional highlighting
+if g:erlang_highlight_bif
+	hi link erlangBIF    Keyword
+	hi link erlangGBIF   Keyword
 endif
-
-
-let b:current_syntax = "erlang"
-
--- a/runtime/syntax/fortran.vim
+++ b/runtime/syntax/fortran.vim
@@ -1,7 +1,7 @@
 " Vim syntax file
-" Language:	Fortran 2008 (and earlier versions including 2003, 95, 90, and 77)
-" Version:	0.91
-" Last Change:	2012 Jan. 02
+" Language:	Fortran 2008 (and earlier versions: 2003, 95, 90, and 77)
+" Version:	0.93
+" Last Change:	2012 Jan. 18
 " Maintainer:	Ajit J. Thakkar (ajit AT unb.ca); <http://www.unb.ca/chem/ajit/>
 " Usage:	For instructions, do :help fortran-syntax from Vim
 " Credits:
@@ -11,66 +11,48 @@
 "  Walter Dieudonn, Alexander Wagner, Roman Bertle, Charles Rendleman,
 "  Andrew Griffiths, Joe Krahn, and Hendrik Merx.
 
-" For version 5.x: Clear all syntax items
-" For version 6.x: Quit if a syntax file is already loaded
-if version < 600
-  syntax clear
-elseif exists("b:current_syntax")
+if exists("b:current_syntax")
   finish
 endif
 
 let s:cpo_save = &cpo
 set cpo&vim
 
-" let b:fortran_dialect = fortran_dialect if set correctly by user
-if exists("fortran_dialect")
-  if fortran_dialect =~ '\<\(f\(9[05]\|77\)\|elf\|F\)\>'
-    let b:fortran_dialect = matchstr(fortran_dialect,'\<\(f\(9[05]\|77\)\|elf\|F\)\>')
-  else
-    echohl WarningMsg | echo "Unknown value of fortran_dialect" | echohl None
-    let b:fortran_dialect = "unknown"
+" Choose fortran_dialect using the priority:
+" source file directive > buffer-local value > global value > default
+" try using directive in first three lines of file
+let b:fortran_retype = getline(1)." ".getline(2)." ".getline(3)
+if b:fortran_retype =~? '\<fortran_dialect\s*=\s*F\>'
+  let b:fortran_dialect = "F"
+elseif b:fortran_retype =~? '\<fortran_dialect\s*=\s*f08\>'
+  let b:fortran_dialect = "f08"
+elseif !exists("b:fortran_dialect")
+  if exists("g:fortran_dialect") && g:fortran_dialect =~# '\<F\|f08\>'
+    " try global variable
+    let b:fortran_dialect = g:fortran_dialect
+  else         " nothing found, so use default
+    let b:fortran_dialect = "f08"
   endif
-else
-  let b:fortran_dialect = "unknown"
 endif
-
-" fortran_dialect not set or set incorrectly by user,
-if b:fortran_dialect == "unknown"
-  " set b:fortran_dialect from directive in first three lines of file
-  let b:fortran_retype = getline(1)." ".getline(2)." ".getline(3)
-  if b:fortran_retype =~ '\<fortran_dialect\s*=\s*F\>'
-    let b:fortran_dialect = "F"
-  elseif b:fortran_retype =~ '\<fortran_dialect\s*=\s*elf\>'
-    let b:fortran_dialect = "elf"
-  elseif b:fortran_retype =~ '\<fortran_dialect\s*=\s*f90\>'
-    let b:fortran_dialect = "f90"
-  elseif b:fortran_retype =~ '\<fortran_dialect\s*=\s*f95\>'
-    let b:fortran_dialect = "f95"
-  elseif b:fortran_retype =~ '\<fortran_dialect\s*=\s*f77\>'
-    let b:fortran_dialect = "f77"
-  else
-    " no directive found, so assume f95
-    let b:fortran_dialect = "f95"
-  endif
-  unlet b:fortran_retype
+unlet! b:fortran_retype
+" make sure buffer-local value is not invalid
+if b:fortran_dialect !~# '\<F\|f08\>'
+  let b:fortran_dialect = "f08"
 endif
 
 " Choose between fixed and free source form if this hasn't been done yet
 if !exists("b:fortran_fixed_source")
-  if b:fortran_dialect == "elf" || b:fortran_dialect == "F"
-    " elf and F require free source form
+  if b:fortran_dialect == "F"
+    " F requires free source form
     let b:fortran_fixed_source = 0
-  elseif b:fortran_dialect == "f77"
-    " f77 requires fixed source form
-    let b:fortran_fixed_source = 1
   elseif exists("fortran_free_source")
-    " User guarantees free source form for all f90 and f95 files
+    " User guarantees free source form for all fortran files
     let b:fortran_fixed_source = 0
   elseif exists("fortran_fixed_source")
-    " User guarantees fixed source form for all f90 and f95 files
+    " User guarantees fixed source form for all fortran files
     let b:fortran_fixed_source = 1
   else
-    " f90 and f95 allow both fixed and free source form.
+    " Modern fortran still allows both free and fixed source form.
     " Assume fixed source form unless signs of free source form
     " are detected in the first five columns of the first s:lmax lines.
     " Detection becomes more accurate and time-consuming if more lines
@@ -96,29 +78,18 @@ endif
 
 syn case ignore
 
-if b:fortran_dialect !=? "f77"
-  if version >= 600
-    if b:fortran_fixed_source == 1
-      syn match fortranConstructName	"^\s\{6,}\zs\a\w*\ze\s*:"
-    else
-      syn match fortranConstructName	"^\s*\zs\a\w*\ze\s*:"
-    endif
-    if exists("fortran_more_precise")
-      syn match fortranConstructName "\(\<end\s*do\s\+\)\@<=\a\w*"
-      syn match fortranConstructName "\(\<end\s*if\s\+\)\@<=\a\w*"
-      syn match fortranConstructName "\(\<end\s*select\s\+\)\@<=\a\w*"
-    endif
-  else
-    if b:fortran_fixed_source == 1
-      syn match fortranConstructName	"^\s\{6,}\a\w*\s*:"
-    else
-      syn match fortranConstructName	"^\s*\a\w*\s*:"
-    endif
-  endif
+if b:fortran_fixed_source == 1
+  syn match fortranConstructName	"^\s\{6,}\zs\a\w*\ze\s*:"
+else
+  syn match fortranConstructName	"^\s*\zs\a\w*\ze\s*:"
+endif
+if exists("fortran_more_precise")
+  syn match fortranConstructName "\(\<end\s*do\s\+\)\@<=\a\w*"
+  syn match fortranConstructName "\(\<end\s*if\s\+\)\@<=\a\w*"
+  syn match fortranConstructName "\(\<end\s*select\s\+\)\@<=\a\w*"
 endif
 
-syn match   fortranUnitHeader	"\<end\>"
-
+syn match fortranUnitHeader	"\<end\>"
 syn match fortranType		"\<character\>"
 syn match fortranType		"\<complex\>"
 syn match fortranType		"\<integer\>"
@@ -145,7 +116,7 @@ syn match  fortranParenError   ")"
 syn match fortranOperator	"\.\s*n\=eqv\s*\."
 syn match fortranOperator	"\.\s*\(and\|or\|not\)\s*\."
 syn match fortranOperator	"\(+\|-\|/\|\*\)"
-syn match fortranTypeOb		"\<character\>\@<=\s*\*"
+syn match fortranTypeOb		"\<character\s*\*"
 
 syn match fortranBoolean	"\.\s*\(true\|false\)\s*\."
 
@@ -160,17 +131,17 @@ endif
 
 syn keyword fortranIO		access blank direct exist file fmt form formatted iostat name named nextrec number opened rec recl sequential status unformatted unit
 
-syn keyword fortran66Intrinsic		alog alog10 amax0 amax1 amin0 amin1 amod cabs ccos cexp clog csin csqrt dabs dacos dasin datan datan2 dcos dcosh ddim dexp dint dlog dlog10 dmax1 dmin1 dmod dnint dsign dsin dsinh dsqrt dtan dtanh float iabs idim idint idnint ifix isign max0 max1 min0 min1 sngl
+syn keyword fortranIntrinsicR		alog alog10 amax0 amax1 amin0 amin1 amod cabs ccos cexp clog csin csqrt dabs dacos dasin datan datan2 dcos dcosh ddim dexp dint dlog dlog10 dmax1 dmin1 dmod dnint dsign dsin dsinh dsqrt dtan dtanh float iabs idim idint idnint ifix isign max0 max1 min0 min1 sngl
 
 " Intrinsics provided by some vendors
 syn keyword fortranExtraIntrinsic	algama cdabs cdcos cdexp cdlog cdsin cdsqrt cqabs cqcos cqexp cqlog cqsin cqsqrt dcmplx dconjg derf derfc dfloat dgamma dimag dlgama iqint qabs qacos qasin qatan qatan2 qcmplx qconjg qcos qcosh qdim qerf qerfc qexp qgamma qimag qlgama qlog qlog10 qmax1 qmin1 qmod qnint qsign qsin qsinh qsqrt qtan qtanh
 
-syn keyword fortran77Intrinsic	abs acos aimag aint anint asin atan atan2 char cmplx conjg cos cosh exp ichar index int log log10 max min nint sign sin sinh sqrt tan tanh
-syn match fortran77Intrinsic	"\<len\s*[(,]"me=s+3
-syn match fortran77Intrinsic	"\<real\s*("me=s+4
+syn keyword fortranIntrinsic	abs acos aimag aint anint asin atan atan2 char cmplx conjg cos cosh exp ichar index int log log10 max min nint sign sin sinh sqrt tan tanh
+syn match fortranIntrinsic	"\<len\s*[(,]"me=s+3
+syn match fortranIntrinsic	"\<real\s*("me=s+4
 syn match fortranType		"\<implicit\s\+real"
 syn match fortranType		"^\s*real\>"
-syn match fortran90Intrinsic	"\<logical\s*("me=s+7
+syn match fortranIntrinsic	"\<logical\s*("me=s+7
 syn match fortranType		"\<implicit\s\+logical"
 syn match fortranType		"^\s*logical\>"
 
@@ -178,13 +149,13 @@ syn match fortranType		"^\s*logical\>"
 " Integers
 syn match fortranNumber	display "\<\d\+\(_\a\w*\)\=\>"
 " floating point number, without a decimal point
-syn match fortranFloatNoDec	display	"\<\d\+[deq][-+]\=\d\+\(_\a\w*\)\=\>"
+syn match fortranFloatIll	display	"\<\d\+[deq][-+]\=\d\+\(_\a\w*\)\=\>"
 " floating point number, starting with a decimal point
-syn match fortranFloatIniDec	display	"\.\d\+\([deq][-+]\=\d\+\)\=\(_\a\w*\)\=\>"
+syn match fortranFloatIll	display	"\.\d\+\([deq][-+]\=\d\+\)\=\(_\a\w*\)\=\>"
 " floating point number, no digits after decimal
-syn match fortranFloatEndDec	display	"\<\d\+\.\([deq][-+]\=\d\+\)\=\(_\a\w*\)\=\>"
+syn match fortranFloatIll	display	"\<\d\+\.\([deq][-+]\=\d\+\)\=\(_\a\w*\)\=\>"
 " floating point number, D or Q exponents
-syn match fortranFloatDExp	display	"\<\d\+\.\d\+\([dq][-+]\=\d\+\)\=\(_\a\w*\)\=\>"
+syn match fortranFloatIll	display	"\<\d\+\.\d\+\([dq][-+]\=\d\+\)\=\(_\a\w*\)\=\>"
 " floating point number
 syn match fortranFloat	display	"\<\d\+\.\d\+\(e[-+]\=\d\+\)\=\(_\a\w*\)\=\>"
 " Numbers in formats
@@ -202,76 +173,73 @@ syn match fortranLabelNumber	display	"^ 
 syn match fortranLabelNumber	display	"^   \d\d\=\s"ms=s+3,me=e-1
 syn match fortranLabelNumber	display	"^    \d\s"ms=s+4,me=e-1
 
-if version >= 600 && exists("fortran_more_precise")
+if exists("fortran_more_precise")
   " Numbers as targets
   syn match fortranTarget	display	"\(\<if\s*(.\+)\s*\)\@<=\(\d\+\s*,\s*\)\{2}\d\+\>"
   syn match fortranTarget	display	"\(\<do\s\+\)\@<=\d\+\>"
   syn match fortranTarget	display	"\(\<go\s*to\s*(\=\)\@<=\(\d\+\s*,\s*\)*\d\+\>"
 endif
 
-syn keyword fortranTypeEx	external
-syn keyword fortranIOEx		format
-syn match fortranKeywordEx	"\<continue\>"
+syn keyword fortranTypeR	external
+syn keyword fortranIOR		format
+syn match fortranKeywordR	"\<continue\>"
 syn match fortranKeyword	"^\s*\d\+\s\+continue\>"
 syn match fortranKeyword  	"\<go\s*to\>"
 syn match fortranKeywordDel  	"\<go\s*to\ze\s\+.*,\s*(.*$"
 syn match fortranKeywordOb  	"\<go\s*to\ze\s*(\d\+.*$"
-syn region fortranStringEx	start=+'+ end=+'+ contains=fortranContinueMark,fortranLeftMargin,fortranSerialNumber
-syn keyword fortran77IntrinsicEx	dim lge lgt lle llt mod
+syn region fortranStringR	start=+'+ end=+'+ contains=fortranContinueMark,fortranLeftMargin,fortranSerialNumber
+syn keyword fortranIntrinsicR	dim lge lgt lle llt mod
 syn keyword fortranKeywordDel	assign pause
 
-if b:fortran_dialect != "f77"
-
-  syn match fortranType         "\<type\>"
-  syn keyword fortranType	none
+syn match fortranType           "\<type\>"
+syn keyword fortranType	        none
 
-  syn keyword fortranStructure	private public intent optional
-  syn keyword fortranStructure	pointer target allocatable
-  syn keyword fortranStorageClass	in out
-  syn match fortranStorageClass	"\<kind\s*="me=s+4
-  syn match fortranStorageClass	"\<len\s*="me=s+3
+syn keyword fortranStructure	private public intent optional
+syn keyword fortranStructure	pointer target allocatable
+syn keyword fortranStorageClass	in out
+syn match fortranStorageClass	"\<kind\s*="me=s+4
+syn match fortranStorageClass	"\<len\s*="me=s+3
 
-  syn match fortranUnitHeader	"\<module\>"
-  syn keyword fortranUnitHeader	use only contains
-  syn keyword fortranUnitHeader	result operator assignment
-  syn match fortranUnitHeader	"\<interface\>"
-  syn match fortranUnitHeader	"\<recursive\>"
-  syn keyword fortranKeyword	allocate deallocate nullify cycle exit
-  syn match fortranConditional	"\<select\>"
-  syn keyword fortranConditional	case default where elsewhere
+syn match fortranUnitHeader	"\<module\>"
+syn keyword fortranUnitHeader	use only contains
+syn keyword fortranUnitHeader	result operator assignment
+syn match fortranUnitHeader	"\<interface\>"
+syn match fortranUnitHeader	"\<recursive\>"
+syn keyword fortranKeyword	allocate deallocate nullify cycle exit
+syn match fortranConditional	"\<select\>"
+syn keyword fortranConditional	case default where elsewhere
 
-  syn match fortranOperator	"\(\(>\|<\)=\=\|==\|/=\|=\)"
-  syn match fortranOperator	"=>"
+syn match fortranOperator	"\(\(>\|<\)=\=\|==\|/=\|=\)"
+syn match fortranOperator	"=>"
+
+syn region fortranString	start=+"+ end=+"+	contains=fortranLeftMargin,fortranContinueMark,fortranSerialNumber
+syn keyword fortranIO		pad position action delim readwrite
+syn keyword fortranIO		eor advance nml
 
-  syn region fortranString	start=+"+ end=+"+	contains=fortranLeftMargin,fortranContinueMark,fortranSerialNumber
-  syn keyword fortranIO		pad position action delim readwrite
-  syn keyword fortranIO		eor advance nml
-
-  syn keyword fortran90Intrinsic	adjustl adjustr all allocated any associated bit_size btest ceiling count cshift date_and_time digits dot_product eoshift epsilon exponent floor fraction huge iand ibclr ibits ibset ieor ior ishft ishftc lbound len_trim matmul maxexponent maxloc maxval merge minexponent minloc minval modulo mvbits nearest pack precision present product radix random_number random_seed range repeat reshape rrspacing
-  syn keyword fortran90Intrinsic	scale scan selected_int_kind selected_real_kind set_exponent shape size spacing spread sum system_clock tiny transpose trim ubound unpack verify
-  syn match fortran90Intrinsic		"\<not\>\(\s*\.\)\@!"me=s+3
-  syn match fortran90Intrinsic	"\<kind\>\s*[(,]"me=s+4
+syn keyword fortranIntrinsic	adjustl adjustr all allocated any associated bit_size btest ceiling count cshift date_and_time digits dot_product eoshift epsilon exponent floor fraction huge iand ibclr ibits ibset ieor ior ishft ishftc lbound len_trim matmul maxexponent maxloc maxval merge minexponent minloc minval modulo mvbits nearest pack precision present product radix random_number random_seed range repeat reshape rrspacing
+syn keyword fortranIntrinsic	scale scan selected_int_kind selected_real_kind set_exponent shape size spacing spread sum system_clock tiny transpose trim ubound unpack verify
+syn match fortranIntrinsic		"\<not\>\(\s*\.\)\@!"me=s+3
+syn match fortranIntrinsic	"\<kind\>\s*[(,]"me=s+4
 
-  syn match  fortranUnitHeader	"\<end\s*function"
-  syn match  fortranUnitHeader	"\<end\s*interface"
-  syn match  fortranUnitHeader	"\<end\s*module"
-  syn match  fortranUnitHeader	"\<end\s*program"
-  syn match  fortranUnitHeader	"\<end\s*subroutine"
-  syn match  fortranRepeat	"\<end\s*do"
-  syn match  fortranConditional	"\<end\s*where"
-  syn match  fortranConditional	"\<select\s*case"
-  syn match  fortranConditional	"\<end\s*select"
-  syn match  fortranType	"\<end\s*type"
-  syn match  fortranType	"\<in\s*out"
+syn match  fortranUnitHeader	"\<end\s*function"
+syn match  fortranUnitHeader	"\<end\s*interface"
+syn match  fortranUnitHeader	"\<end\s*module"
+syn match  fortranUnitHeader	"\<end\s*program"
+syn match  fortranUnitHeader	"\<end\s*subroutine"
+syn match  fortranRepeat	"\<end\s*do"
+syn match  fortranConditional	"\<end\s*where"
+syn match  fortranConditional	"\<select\s*case"
+syn match  fortranConditional	"\<end\s*select"
+syn match  fortranType	"\<end\s*type"
+syn match  fortranType	"\<in\s*out"
 
-  syn keyword fortranType	procedure
-  syn keyword fortranIOEx		namelist
-  syn keyword fortranConditionalEx	while
-  syn keyword fortran90IntrinsicEx	achar iachar transfer
+syn keyword fortranType	procedure
+syn keyword fortranIOR		namelist
+syn keyword fortranConditionalR	while
+syn keyword fortranIntrinsicR	achar iachar transfer
 
-  syn keyword fortranInclude		include
-  syn keyword fortran90StorageClassR	sequence
-endif
+syn keyword fortranInclude		include
+syn keyword fortranStorageClassR	sequence
 
 syn match   fortranConditional	"\<end\s*if"
 syn match   fortranIO		contains=fortranOperator "\<e\(nd\|rr\)\s*=\s*\d\+"
@@ -282,55 +250,53 @@ syn match fortranTypeR		display "double\
 syn match fortranTypeR		display "double\s\+complex"
 syn match fortranUnitHeaderR	display "block\s\+data"
 syn keyword fortranStorageClassR	common equivalence data
-syn keyword fortran77IntrinsicR	dble dprod
-syn match   fortran77OperatorR	"\.\s*[gl][et]\s*\."
-syn match   fortran77OperatorR	"\.\s*\(eq\|ne\)\s*\."
+syn keyword fortranIntrinsicR	dble dprod
+syn match   fortranOperatorR	"\.\s*[gl][et]\s*\."
+syn match   fortranOperatorR	"\.\s*\(eq\|ne\)\s*\."
 
-if b:fortran_dialect == "f95" || b:fortran_dialect == "F"
-  syn keyword fortranRepeat		forall
-  syn match fortranRepeat		"\<end\s*forall"
-  syn keyword fortran95Intrinsic	null cpu_time
-  syn match fortranType			"\<elemental\>"
-  syn match fortranType			"\<pure\>"
-  if exists("fortran_more_precise")
-    syn match fortranConstructName "\(\<end\s*forall\s\+\)\@<=\a\w*\>"
-  endif
+syn keyword fortranRepeat		forall
+syn match fortranRepeat		"\<end\s*forall"
+syn keyword fortranIntrinsic	null cpu_time
+syn match fortranType			"\<elemental\>"
+syn match fortranType			"\<pure\>"
+if exists("fortran_more_precise")
+  syn match fortranConstructName "\(\<end\s*forall\s\+\)\@<=\a\w*\>"
 endif
 
-if b:fortran_dialect == "f95"
+if b:fortran_dialect == "f08"
   " F2003
-  syn keyword fortran03Intrinsic        command_argument_count get_command get_command_argument get_environment_variable is_iostat_end is_iostat_eor move_alloc new_line selected_char_kind same_type_as extends_type_of
+  syn keyword fortranIntrinsic        command_argument_count get_command get_command_argument get_environment_variable is_iostat_end is_iostat_eor move_alloc new_line selected_char_kind same_type_as extends_type_of
   " ISO_C_binding
-  syn keyword fortran03Constant         c_null_char c_alert c_backspace c_form_feed c_new_line c_carriage_return c_horizontal_tab c_vertical_tab
-  syn keyword fortran03Constant         c_int c_short c_long c_long_long c_signed_char c_size_t c_int8_t c_int16_t c_int32_t c_int64_t c_int_least8_t c_int_least16_t c_int_least32_t c_int_least64_t c_int_fast8_t c_int_fast16_t c_int_fast32_t c_int_fast64_t c_intmax_t C_intptr_t c_float c_double c_long_double c_float_complex c_double_complex c_long_double_complex c_bool c_char c_null_ptr c_null_funptr
-  syn keyword fortran03Intrinsic        iso_c_binding c_loc c_funloc c_associated  c_f_pointer c_f_procpointer
-  syn keyword fortran03Type             c_ptr c_funptr
+  syn keyword fortranConstant         c_null_char c_alert c_backspace c_form_feed c_new_line c_carriage_return c_horizontal_tab c_vertical_tab
+  syn keyword fortranConstant         c_int c_short c_long c_long_long c_signed_char c_size_t c_int8_t c_int16_t c_int32_t c_int64_t c_int_least8_t c_int_least16_t c_int_least32_t c_int_least64_t c_int_fast8_t c_int_fast16_t c_int_fast32_t c_int_fast64_t c_intmax_t C_intptr_t c_float c_double c_long_double c_float_complex c_double_complex c_long_double_complex c_bool c_char c_null_ptr c_null_funptr
+  syn keyword fortranIntrinsic        iso_c_binding c_loc c_funloc c_associated  c_f_pointer c_f_procpointer
+  syn keyword fortranType             c_ptr c_funptr
   " ISO_Fortran_env
-  syn keyword fortran03Constant         iso_fortran_env character_storage_size error_unit file_storage_size input_unit iostat_end iostat_eor numeric_storage_size output_unit
+  syn keyword fortranConstant         iso_fortran_env character_storage_size error_unit file_storage_size input_unit iostat_end iostat_eor numeric_storage_size output_unit
   " IEEE_arithmetic
-  syn keyword fortran03Intrinsic        ieee_arithmetic ieee_support_underflow_control ieee_get_underflow_mode ieee_set_underflow_mode
+  syn keyword fortranIntrinsic        ieee_arithmetic ieee_support_underflow_control ieee_get_underflow_mode ieee_set_underflow_mode
 
-  syn keyword fortran03ReadWrite	flush wait
-  syn keyword fortran03IO	        decimal round iomsg
-  syn keyword fortran03Type             asynchronous nopass non_overridable pass protected volatile abstract extends import
-  syn keyword fortran03Type             non_intrinsic value bind deferred generic final enumerator
-  syn match fortran03Type               "\<class\>"
-  syn match fortran03Type               "\<associate\>"
-  syn match fortran03Type               "\<end\s*associate"
-  syn match fortran03Type               "\<enum\s*,\s*bind\s*(\s*c\s*)"
-  syn match fortran03Type               "\<end\s*enum"
-  syn match fortran03Conditional	"\<select\s*type"
-  syn match fortran03Conditional        "\<type\s*is\>"
-  syn match fortran03Conditional        "\<class\s*is\>"
-  syn match fortran03UnitHeader         "\<abstract\s*interface\>"
-  syn match fortran03Operator           "\([\|]\)"
+  syn keyword fortranReadWrite	flush wait
+  syn keyword fortranIO 	      decimal round iomsg
+  syn keyword fortranType             asynchronous nopass non_overridable pass protected volatile abstract extends import
+  syn keyword fortranType             non_intrinsic value bind deferred generic final enumerator
+  syn match fortranType               "\<class\>"
+  syn match fortranType               "\<associate\>"
+  syn match fortranType               "\<end\s*associate"
+  syn match fortranType               "\<enum\s*,\s*bind\s*(\s*c\s*)"
+  syn match fortranType               "\<end\s*enum"
+  syn match fortranConditional	"\<select\s*type"
+  syn match fortranConditional        "\<type\s*is\>"
+  syn match fortranConditional        "\<class\s*is\>"
+  syn match fortranUnitHeader         "\<abstract\s*interface\>"
+  syn match fortranOperator           "\([\|]\)"
 
   " F2008
-  syn keyword fortran08Intrinsic        acosh asinh atanh bessel_j0 bessel_j1 bessel_jn bessel_y0 bessel_y1 bessel_yn erf erfc erfc_scaled gamma log_gamma hypot norm2
-  syn keyword fortran08Intrinsic        atomic_define atomic_ref execute_command_line leadz trailz storage_size merge_bits
-  syn keyword fortran08Intrinsic        bge bgt ble blt dshiftl dshiftr findloc iall iany iparity image_index lcobound ucobound maskl maskr num_images parity popcnt poppar shifta shiftl shiftr this_image
-  syn keyword fortran08IO               newunit
-  syn keyword fortran08Type             contiguous
+  syn keyword fortranIntrinsic        acosh asinh atanh bessel_j0 bessel_j1 bessel_jn bessel_y0 bessel_y1 bessel_yn erf erfc erfc_scaled gamma log_gamma hypot norm2
+  syn keyword fortranIntrinsic        atomic_define atomic_ref execute_command_line leadz trailz storage_size merge_bits
+  syn keyword fortranIntrinsic        bge bgt ble blt dshiftl dshiftr findloc iall iany iparity image_index lcobound ucobound maskl maskr num_images parity popcnt poppar shifta shiftl shiftr this_image
+  syn keyword fortranIO               newunit
+  syn keyword fortranType             contiguous
 endif
 
 syn cluster fortranCommentGroup contains=fortranTodo
@@ -350,9 +316,7 @@ else
   syn match fortranContinueMark		display "&"
 endif
 
-if b:fortran_dialect != "f77"
-  syn match fortranComment	excludenl "!.*$" contains=@fortranCommentGroup,@spell
-endif
+syn match fortranComment	excludenl "!.*$" contains=@fortranCommentGroup,@spell
 
 "cpp is often used with Fortran
 syn match	cPreProc		"^\s*#\s*\(define\|ifdef\)\>.*"
@@ -372,7 +336,7 @@ else
   syn sync minlines=30
 endif
 
-if version >= 600 && exists("fortran_fold")
+if exists("fortran_fold")
 
   if (b:fortran_fixed_source == 1)
     syn region fortranProgram transparent fold keepend start="^\s*program\s\+\z(\a\w*\)" skip="^\([!c*]\|\s*#\).*$" excludenl end="\<end\s*\(program\(\s\+\z1\>\)\=\|$\)" contains=ALLBUT,fortranModule
@@ -416,147 +380,92 @@ if version >= 600 && exists("fortran_fol
 endif
 
 " Define the default highlighting.
-" For version 5.7 and earlier: only when not done already
-" For version 5.8 and later: only when an item doesn't have highlighting yet
-if version >= 508 || !exists("did_fortran_syn_inits")
-  if version < 508
-    let did_fortran_syn_inits = 1
-    command -nargs=+ HiLink hi link <args>
-  else
-    command -nargs=+ HiLink hi def link <args>
-  endif
+" The default highlighting differs for each dialect.
+" Transparent groups:
+" fortranParen, fortranLeftMargin
+" fortranProgram, fortranModule, fortranSubroutine, fortranFunction,
+" fortranBlockData
+" fortran77Loop, fortran90Loop, fortranIfBlock, fortranCase
+" fortranMultiCommentLines
+hi def link fortranKeyword 	Keyword
+hi def link fortranConstructName	Identifier
+hi def link fortranConditional	Conditional
+hi def link fortranRepeat	Repeat
+hi def link fortranTodo		Todo
+hi def link fortranContinueMark	Special
+hi def link fortranString	String
+hi def link fortranNumber	Number
+hi def link fortranOperator	Operator
+hi def link fortranBoolean	Boolean
+hi def link fortranLabelError	Error
+hi def link fortranObsolete	Todo
+hi def link fortranType		Type
+hi def link fortranStructure	Type
+hi def link fortranStorageClass	StorageClass
+hi def link fortranCall		Function
+hi def link fortranUnitHeader	fortranPreCondit
+hi def link fortranReadWrite	Keyword
+hi def link fortranIO		Keyword
+hi def link fortranIntrinsic	Function
+hi def link fortranConstant	Constant
 
-  " The default highlighting differs for each dialect.
-  " Transparent groups:
-  " fortranParen, fortranLeftMargin
-  " fortranProgram, fortranModule, fortranSubroutine, fortranFunction,
-  " fortranBlockData
-  " fortran77Loop, fortran90Loop, fortranIfBlock, fortranCase
-  " fortranMultiCommentLines
-  HiLink fortranKeyword 	Keyword
-  HiLink fortranConstructName	Identifier
-  HiLink fortran03Conditional	fortranConditional
-  HiLink fortranConditional	Conditional
-  HiLink fortranRepeat		Repeat
-  HiLink fortranTodo		Todo
-  if (b:fortran_fixed_source == 1)
-    HiLink fortranContinueMark	Todo
-  else
-    HiLink fortranContinueMark	Keyword
-  endif
-  HiLink fortranString		String
-  HiLink fortranNumber		Number
-  HiLink fortran03Operator	fortranOperator
-  HiLink fortranOperator	Operator
-  HiLink fortranBoolean		Boolean
-  HiLink fortranLabelError	Error
-  HiLink fortranObsolete	Todo
-  HiLink fortran03Type  	fortranType
-  HiLink fortran08Type	        fortranType
-  HiLink fortranType		Type
-  HiLink fortranStructure	Type
-  HiLink fortranStorageClass	StorageClass
-  HiLink fortranCall		Function
-  HiLink fortran03UnitHeader	fortranUnitHeader
-  HiLink fortranUnitHeader	fortranPreCondit
-  HiLink fortran03ReadWrite	fortranReadWrite
-  HiLink fortranReadWrite	Keyword
-  HiLink fortran03IO		fortranIO
-  HiLink fortran08IO		fortranIO
-  HiLink fortranIO		Keyword
-  HiLink fortran95Intrinsic	fortran90Intrinsic
-  HiLink fortran77Intrinsic	fortran90Intrinsic
-  HiLink fortran90Intrinsic	Function
-  HiLink fortran03Intrinsic	Function
-  HiLink fortran08Intrinsic	Function
-  HiLink fortran03Constant	Function
-
-  if b:fortran_dialect != "f77"
-    HiLink fortranUnitHeaderOb    Todo
-    HiLink fortranKeywordOb       Todo
-    HiLink fortranConditionalOb   Todo
-    HiLink fortranTypeOb          Todo
-    HiLink fortranKeywordDel      Todo
-  else
-    HiLink fortranUnitHeaderOb    fortranUnitHeader
-    HiLink fortranKeywordOb       fortranKeyword
-    HiLink fortranConditionalOb   fortranConditional
-    HiLink fortranTypeOb          fortranType
-    HiLink fortranKeywordDel      fortranKeyword
-  endif
+" To stop deleted & obsolescent features being highlighted as Todo items,
+" comment out the next 5 lines and uncomment the 5 lines after that
+hi def link fortranUnitHeaderOb    fortranObsolete
+hi def link fortranKeywordOb       fortranObsolete
+hi def link fortranConditionalOb   fortranObsolete
+hi def link fortranTypeOb          fortranObsolete
+hi def link fortranKeywordDel      fortranObsolete
+"hi def link fortranUnitHeaderOb    fortranUnitHeader
+"hi def link fortranKeywordOb       fortranKeyword
+"hi def link fortranConditionalOb   fortranConditional
+"hi def link fortranTypeOb          fortranType
+"hi def link fortranKeywordDel      fortranKeyword
 
-  if ( b:fortran_dialect == "elf" || b:fortran_dialect == "F" )
-    HiLink fortranKeywordOb	fortranObsolete
-    HiLink fortran66Intrinsic	fortranObsolete
-    HiLink fortran77IntrinsicR	fortranObsolete
-    HiLink fortranUnitHeaderR	fortranObsolete
-    HiLink fortranTypeR		fortranObsolete
-    HiLink fortranStorageClassR	fortranObsolete
-    HiLink fortran90StorageClassR	fortranObsolete
-    HiLink fortran77OperatorR	fortranObsolete
-    HiLink fortranInclude	fortranObsolete
-  else
-    HiLink fortranKeywordOb	fortranKeyword
-    HiLink fortran66Intrinsic	fortran90Intrinsic
-    HiLink fortran77IntrinsicR	fortran90Intrinsic
-    HiLink fortranUnitHeaderR	fortranPreCondit
-    HiLink fortranTypeR		fortranType
-    HiLink fortranStorageClassR	fortranStorageClass
-    HiLink fortran77OperatorR	fortranOperator
-    HiLink fortranInclude	Include
-    HiLink fortran90StorageClassR	fortranStorageClass
-  endif
+if b:fortran_dialect == "F"
+  hi! def link fortranIntrinsicR	fortranObsolete
+  hi! def link fortranUnitHeaderR	fortranObsolete
+  hi! def link fortranTypeR		fortranObsolete
+  hi! def link fortranStorageClassR	fortranObsolete
+  hi! def link fortranOperatorR 	fortranObsolete
+  hi! def link fortranInclude   	fortranObsolete
+  hi! def link fortranLabelNumber	fortranObsolete
+  hi! def link fortranTarget	        fortranObsolete
+  hi! def link fortranFloatIll	        fortranObsolete
+  hi! def link fortranIOR		fortranObsolete
+  hi! def link fortranKeywordR	        fortranObsolete
+  hi! def link fortranStringR	        fortranObsolete
+  hi! def link fortranConditionalR	fortranObsolete
+else
+  hi! def link fortranIntrinsicR	fortranIntrinsic
+  hi! def link fortranUnitHeaderR	fortranPreCondit
+  hi! def link fortranTypeR		fortranType
+  hi! def link fortranStorageClassR	fortranStorageClass
+  hi! def link fortranOperatorR	        fortranOperator
+  hi! def link fortranInclude	        Include
+  hi! def link fortranLabelNumber	Special
+  hi! def link fortranTarget	        Special
+  hi! def link fortranFloatIll	        fortranFloat
+  hi! def link fortranIOR		fortranIO
+  hi! def link fortranKeywordR	        fortranKeyword
+  hi! def link fortranStringR	        fortranString
+  hi! def link fortranConditionalR	fortranConditional
+endif
 
-  if ( b:fortran_dialect == "F" )
-    HiLink fortranLabelNumber	fortranObsolete
-    HiLink fortranTarget	fortranObsolete
-    HiLink fortranFormatSpec	fortranObsolete
-    HiLink fortranFloatDExp	fortranObsolete
-    HiLink fortranFloatNoDec	fortranObsolete
-    HiLink fortranFloatIniDec	fortranObsolete
-    HiLink fortranFloatEndDec	fortranObsolete
-    HiLink fortranTypeEx	fortranObsolete
-    HiLink fortranIOEx		fortranObsolete
-    HiLink fortranKeywordEx	fortranObsolete
-    HiLink fortranStringEx	fortranObsolete
-    HiLink fortran77IntrinsicEx	fortranObsolete
-    HiLink fortranUnitHeaderEx	fortranObsolete
-    HiLink fortranConditionalEx	fortranObsolete
-    HiLink fortran90IntrinsicEx	fortranObsolete
-  else
-    HiLink fortranLabelNumber	Special
-    HiLink fortranTarget	Special
-    HiLink fortranFormatSpec	Identifier
-    HiLink fortranFloatDExp	fortranFloat
-    HiLink fortranFloatNoDec	fortranFloat
-    HiLink fortranFloatIniDec	fortranFloat
-    HiLink fortranFloatEndDec	fortranFloat
-    HiLink fortranTypeEx	fortranType
-    HiLink fortranIOEx		fortranIO
-    HiLink fortranKeywordEx	fortranKeyword
-    HiLink fortranStringEx	fortranString
-    HiLink fortran77IntrinsicEx	fortran90Intrinsic
-    HiLink fortranUnitHeaderEx	fortranUnitHeader
-    HiLink fortranConditionalEx	fortranConditional
-    HiLink fortran90IntrinsicEx	fortran90Intrinsic
-  endif
+hi def link fortranFormatSpec	Identifier
+hi def link fortranFloat	Float
+hi def link fortranPreCondit	PreCondit
+hi def link cIncluded		fortranString
+hi def link cInclude		Include
+hi def link cPreProc		PreProc
+hi def link cPreCondit		PreCondit
+hi def link fortranParenError	Error
+hi def link fortranComment	Comment
+hi def link fortranSerialNumber	Todo
+hi def link fortranTab		Error
 
-  HiLink fortranFloat		Float
-  HiLink fortranPreCondit	PreCondit
-  HiLink fortranInclude		Include
-  HiLink cIncluded		fortranString
-  HiLink cInclude		Include
-  HiLink cPreProc		PreProc
-  HiLink cPreCondit		PreCondit
-  HiLink fortranParenError	Error
-  HiLink fortranComment		Comment
-  HiLink fortranSerialNumber	Todo
-  HiLink fortranTab		Error
-  " Vendor extensions
-  HiLink fortranExtraIntrinsic	Function
-
-  delcommand HiLink
-endif
+" Uncomment the next line if you use extra intrinsics provided by vendors
+"hi def link fortranExtraIntrinsic	Function
 
 let b:current_syntax = "fortran"
 
--- a/runtime/syntax/gp.vim
+++ b/runtime/syntax/gp.vim
@@ -1,7 +1,7 @@
 " Vim syntax file
-" Language:	gp (version 2.4)
+" Language:	gp (version 2.5)
 " Maintainer:	Karim Belabas <Karim.Belabas@math.u-bordeaux.fr>
-" Last change:	2007 Oct 1
+" Last change:	2012 Jan 08
 " URL:		http://pari.math.u-bordeaux.fr
 
 if version < 600
@@ -10,21 +10,30 @@ elseif exists("b:current_syntax")
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " control statements
 syntax keyword gpStatement	break return next
 syntax keyword gpConditional	if
-syntax keyword gpRepeat		until while for fordiv forprime forstep forvec
+syntax keyword gpRepeat		until while for fordiv forell forprime 
+syntax keyword gpRepeat		forsubgroup forstep forvec
 " storage class
 syntax keyword gpScope		my local global
 " defaults
-syntax keyword gpInterfaceKey	colors compatible datadir debug debugfiles
-syntax keyword gpInterfaceKey	debugmem echo factor_add_primes format help
-syntax keyword gpInterfaceKey	histsize lines log logfile new_galois_format
+syntax keyword gpInterfaceKey	breakloop colors compatible
+syntax keyword gpInterfaceKey	datadir debug debugfiles debugmem 
+syntax keyword gpInterfaceKey	echo factor_add_primes factor_proven format 
+syntax keyword gpInterfaceKey	graphcolormap graphcolors
+syntax keyword gpInterfaceKey	help histfile histsize 
+syntax keyword gpInterfaceKey	lines linewrap log logfile new_galois_format
 syntax keyword gpInterfaceKey	output parisize path prettyprinter primelimit
-syntax keyword gpInterfaceKey	prompt prompt_cont psfile realprecision secure
-syntax keyword gpInterfaceKey	seriesprecision simplify strictmatch TeXstyle timer
+syntax keyword gpInterfaceKey	prompt prompt_cont psfile 
+syntax keyword gpInterfaceKey	readline realprecision recover 
+syntax keyword gpInterfaceKey	secure seriesprecision simplify strictmatch
+syntax keyword gpInterfaceKey	TeXstyle timer
 
-syntax match   gpInterface	"^\s*\\[a-z].*"
+syntax match gpInterface	"^\s*\\[a-z].*"
 syntax keyword gpInterface	default
 syntax keyword gpInput		read input
 
@@ -79,4 +88,6 @@ if version >= 508 || !exists("did_gp_syn
 endif
 
 let b:current_syntax = "gp"
+let &cpo = s:cpo_save
+unlet s:cpo_save
 " vim: ts=8
--- a/runtime/syntax/groovy.vim
+++ b/runtime/syntax/groovy.vim
@@ -2,15 +2,15 @@
 " Language:	Groovy
 " Original Author:	Alessio Pace <billy.corgan@tiscali.it>
 " Maintainer:	Tobias Rapp <yahuxo@gmx.de>
-" Version: 	0.1.10
-" URL:	  http://www.vim.org/scripts/script.php?script_id=945	
-" Last Change:	2010 Nov 29
+" Version: 	0.1.11
+" URL:	  http://www.vim.org/scripts/script.php?script_id=945
+" Last Change:	2012 Jan 08
 
 " THE ORIGINAL AUTHOR'S NOTES:
 "
 " This is my very first vim script, I hope to have
 " done it the right way.
-" 
+"
 " I must directly or indirectly thank the author of java.vim and ruby.vim:
 " I copied from them most of the stuff :-)
 "
@@ -22,7 +22,7 @@
 " HOWTO USE IT (INSTALL) when not part of the distribution:
 "
 " 1) copy the file in the (global or user's $HOME/.vim/syntax/) syntax folder
-" 
+"
 " 2) add this line to recognize groovy files by filename extension:
 "
 " au BufNewFile,BufRead *.groovy  setf groovy
@@ -38,7 +38,7 @@
 "  endif
 "
 "  in the global scripts.vim file or in $HOME/.vim/scripts.vim
-" 
+"
 " 4) open/write a .groovy file or a groovy script :-)
 "
 " Let me know if you like it or send me patches, so that I can improve it
@@ -55,6 +55,9 @@ if !exists("main_syntax")
   let main_syntax='groovy'
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " don't use standard HiLink, it will not work with included syntax files
 if version < 508
   command! -nargs=+ GroovyHiLink hi link <args>
@@ -101,11 +104,11 @@ syn keyword groovyScopeDecl       public
 if exists("groovy_highlight_groovy_lang_ids") || exists("groovy_highlight_groovy_lang") || exists("groovy_highlight_all")
   " groovy.lang.*
   syn keyword groovyLangClass  Closure MetaMethod GroovyObject
-  
+
   syn match groovyJavaLangClass "\<System\>"
   syn keyword groovyJavaLangClass  Cloneable Comparable Runnable Serializable Boolean Byte Class Object
   syn keyword groovyJavaLangClass  Character CharSequence ClassLoader Compiler
-  " syn keyword groovyJavaLangClass  Integer Double Float Long 
+  " syn keyword groovyJavaLangClass  Integer Double Float Long
   syn keyword groovyJavaLangClass  InheritableThreadLocal Math Number Object Package Process
   syn keyword groovyJavaLangClass  Runtime RuntimePermission InheritableThreadLocal
   syn keyword groovyJavaLangClass  SecurityManager Short StrictMath StackTraceElement
@@ -159,18 +162,18 @@ syn match groovyExceptions        "\<Exc
 
 " Groovy JDK stuff
 syn keyword groovyJDKBuiltin    as def in
-syn keyword groovyJDKOperOverl  div minus plus abs round power multiply 
-syn keyword groovyJDKMethods 	each call inject sort print println 
+syn keyword groovyJDKOperOverl  div minus plus abs round power multiply
+syn keyword groovyJDKMethods 	each call inject sort print println
 syn keyword groovyJDKMethods    getAt putAt size push pop toList getText writeLine eachLine readLines
-syn keyword groovyJDKMethods    withReader withStream withWriter withPrintWriter write read leftShift 
+syn keyword groovyJDKMethods    withReader withStream withWriter withPrintWriter write read leftShift
 syn keyword groovyJDKMethods    withWriterAppend readBytes splitEachLine
-syn keyword groovyJDKMethods    newInputStream newOutputStream newPrintWriter newReader newWriter 
-syn keyword groovyJDKMethods    compareTo next previous isCase 
+syn keyword groovyJDKMethods    newInputStream newOutputStream newPrintWriter newReader newWriter
+syn keyword groovyJDKMethods    compareTo next previous isCase
 syn keyword groovyJDKMethods    times step toInteger upto any collect dump every find findAll grep
-syn keyword groovyJDKMethods    inspect invokeMethods join 
+syn keyword groovyJDKMethods    inspect invokeMethods join
 syn keyword groovyJDKMethods    getErr getIn getOut waitForOrKill
 syn keyword groovyJDKMethods    count tokenize asList flatten immutable intersect reverse reverseEach
-syn keyword groovyJDKMethods    subMap append asWritable eachByte eachLine eachFile 
+syn keyword groovyJDKMethods    subMap append asWritable eachByte eachLine eachFile
 syn cluster groovyTop add=groovyJDKBuiltin,groovyJDKOperOverl,groovyJDKMethods
 
 " no useful I think, so I comment it..
@@ -331,7 +334,7 @@ if exists("groovy_highlight_debug")
     GroovyHiLink groovyDebugSpecialCharacter DebugSpecial
     GroovyHiLink groovyDebugCharacter        DebugString
     GroovyHiLink groovyDebugParen            Debug
-  
+
     GroovyHiLink DebugString               String
     GroovyHiLink DebugSpecial              Special
     GroovyHiLink DebugBoolean              Boolean
@@ -339,7 +342,7 @@ if exists("groovy_highlight_debug")
   endif
 endif
 
-" Match all Exception classes 
+" Match all Exception classes
 syn match groovyExceptions        "\<Exception\>\|\<[A-Z]\{1,}[a-zA-Z0-9]*Exception\>"
 
 
@@ -349,7 +352,7 @@ endif
 exec "syn sync ccomment groovyComment minlines=" . groovy_minlines
 
 
-" ################### 
+" ###################
 " Groovy stuff
 " syn match groovyOperator		"|[ ,a-zA-Z0-9_*]\+|"
 
@@ -425,15 +428,15 @@ if version >= 508 || !exists("did_groovy
   GroovyHiLink groovyConstant		Constant
   GroovyHiLink groovyTypedef		Typedef
   GroovyHiLink groovyTodo		Todo
-  
+
   GroovyHiLink groovyCommentTitle	SpecialComment
   GroovyHiLink groovyDocTags		Special
   GroovyHiLink groovyDocParam		Function
   GroovyHiLink groovyCommentStar	groovyComment
-  
+
   GroovyHiLink groovyType		Type
   GroovyHiLink groovyExternal		Include
-  
+
   GroovyHiLink htmlComment		Special
   GroovyHiLink htmlCommentPart		Special
   GroovyHiLink groovySpaceError		Error
@@ -452,4 +455,7 @@ endif
 
 let b:spell_options="contained"
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
 " vim: ts=8
--- a/runtime/syntax/idl.vim
+++ b/runtime/syntax/idl.vim
@@ -2,7 +2,7 @@
 " Language:    IDL (Interface Description Language)
 " Created By:  Jody Goldberg
 " Maintainer:  Michael Geddes <vim@frog.wheelycreek.net>
-" Last Change:  Thu Apr 13 2006
+" Last Change:  2012 Jan 11
 
 
 " This is an experiment.  IDL's structure is simple enough to permit a full
@@ -17,303 +17,310 @@
 " History:
 " 2.0: Michael's new version
 " 2.1: Support for Vim 7 spell (Anduin Withers)
-"      
+"
 
 if exists("b:current_syntax")
   finish
 endif
 
-if exists("idlsyntax_showerror")
-  syn match idlError +\S+ skipwhite skipempty nextgroup=idlError
-endif
+let s:cpo_save = &cpo
+try
+  set cpo&vim
 
-syn region idlCppQuote start='\<cpp_quote\s*(' end=')' contains=idlString
+  if exists("idlsyntax_showerror")
+    syn match idlError +\S+ skipwhite skipempty nextgroup=idlError
+  endif
+
+  syn region idlCppQuote start='\<cpp_quote\s*(' end=')' contains=idlString
 
-" Misc basic
-syn match   idlId          contained "[a-zA-Z][a-zA-Z0-9_]*" skipwhite skipempty nextgroup=idlEnumComma,idlEnumNumber
-syn match   idlEnumComma   contained ","
-syn match   idlEnumNumber  contained "=" skipwhite skipempty nextgroup=idlString,idlLiteral
-syn match   idlSemiColon   contained ";"
-syn match   idlCommaArg    contained ","                      skipempty skipwhite nextgroup=idlSimpDecl
-syn region  idlArraySize1  contained start=:\[: end=:\]:      skipempty skipwhite nextgroup=idlArraySize1,idlError,idlSemiColon,idlCommaArg contains=idlArraySize1,idlLiteral
-syn match   idlSimpDecl    contained "[a-zA-Z][a-zA-Z0-9_]*"  skipempty skipwhite nextgroup=idlError,idlSemiColon,idlCommaArg,idlArraySize1
-syn region  idlString      contained start=+"+  skip=+\\\(\\\\\)*"+  end=+"+ contains=@Spell
-syn match   idlLiteral     contained "[1-9]\d*\(\.\d*\)\="
-syn match   idlLiteral     contained "0"
-syn match   idlLiteral     contained "\.\d\+"
-syn match   idlLiteral     contained "0x[0-9A-Fa-f]\+"
-syn match   idlLiteral     contained "0[0-7]\+"
-syn keyword idlLiteral     contained TRUE FALSE
+  " Misc basic
+  syn match   idlId          contained "[a-zA-Z][a-zA-Z0-9_]*" skipwhite skipempty nextgroup=idlEnumComma,idlEnumNumber
+  syn match   idlEnumComma   contained ","
+  syn match   idlEnumNumber  contained "=" skipwhite skipempty nextgroup=idlString,idlLiteral
+  syn match   idlSemiColon   contained ";"
+  syn match   idlCommaArg    contained ","                      skipempty skipwhite nextgroup=idlSimpDecl
+  syn region  idlArraySize1  contained start=:\[: end=:\]:      skipempty skipwhite nextgroup=idlArraySize1,idlError,idlSemiColon,idlCommaArg contains=idlArraySize1,idlLiteral
+  syn match   idlSimpDecl    contained "[a-zA-Z][a-zA-Z0-9_]*"  skipempty skipwhite nextgroup=idlError,idlSemiColon,idlCommaArg,idlArraySize1
+  syn region  idlString      contained start=+"+  skip=+\\\(\\\\\)*"+  end=+"+ contains=@Spell
+  syn match   idlLiteral     contained "[1-9]\d*\(\.\d*\)\="
+  syn match   idlLiteral     contained "0"
+  syn match   idlLiteral     contained "\.\d\+"
+  syn match   idlLiteral     contained "0x[0-9A-Fa-f]\+"
+  syn match   idlLiteral     contained "0[0-7]\+"
+  syn keyword idlLiteral     contained TRUE FALSE
 
-" Comments
-syn keyword idlTodo        contained TODO FIXME XXX
-syn region idlComment      start="/\*"  end="\*/" contains=idlTodo,@Spell
-syn match  idlComment      "//.*" contains=idlTodo,@Spell
-syn match  idlCommentError "\*/"
-
-" C style Preprocessor
-syn region idlIncluded    contained start=+"+  skip=+\\\(\\\\\)*"+  end=+"+
-syn match  idlIncluded    contained "<[^>]*>"
-syn match  idlInclude     "^[ \t]*#[ \t]*include\>[ \t]*["<]" contains=idlIncluded,idlString
-syn region idlPreCondit   start="^[ \t]*#[ \t]*\(if\>\|ifdef\>\|ifndef\>\|elif\>\|else\>\|endif\>\)"  skip="\\$"  end="$" contains=idlComment,idlCommentError
-syn region idlDefine      start="^[ \t]*#[ \t]*\(define\>\|undef\>\)" skip="\\$" end="$" contains=idlLiteral,idlString
+  " Comments
+  syn keyword idlTodo        contained TODO FIXME XXX
+  syn region idlComment      start="/\*"  end="\*/" contains=idlTodo,@Spell
+  syn match  idlComment      "//.*" contains=idlTodo,@Spell
+  syn match  idlCommentError "\*/"
 
-" Constants
-syn keyword idlConst    const                             skipempty skipwhite nextgroup=idlBaseType,idlBaseTypeInt
-
-" Attribute
-syn keyword idlROAttr   readonly                          skipempty skipwhite nextgroup=idlAttr
-syn keyword idlAttr     attribute                         skipempty skipwhite nextgroup=idlBaseTypeInt,idlBaseType
+  " C style Preprocessor
+  syn region idlIncluded    contained start=+"+  skip=+\\\(\\\\\)*"+  end=+"+
+  syn match  idlIncluded    contained "<[^>]*>"
+  syn match  idlInclude     "^[ \t]*#[ \t]*include\>[ \t]*["<]" contains=idlIncluded,idlString
+  syn region idlPreCondit   start="^[ \t]*#[ \t]*\(if\>\|ifdef\>\|ifndef\>\|elif\>\|else\>\|endif\>\)"  skip="\\$"  end="$" contains=idlComment,idlCommentError
+  syn region idlDefine      start="^[ \t]*#[ \t]*\(define\>\|undef\>\)" skip="\\$" end="$" contains=idlLiteral,idlString
 
-" Types
-syn region  idlD4          contained start="<" end=">"    skipempty skipwhite nextgroup=idlSimpDecl contains=idlSeqType,idlBaseTypeInt,idlBaseType,idlLiteral
-syn keyword idlSeqType     contained sequence             skipempty skipwhite nextgroup=idlD4
-syn keyword idlBaseType    contained float double char boolean octet any skipempty skipwhite nextgroup=idlSimpDecl
-syn keyword idlBaseTypeInt contained short long           skipempty skipwhite nextgroup=idlSimpDecl
-syn keyword idlBaseType    contained unsigned             skipempty skipwhite nextgroup=idlBaseTypeInt
-syn region  idlD1          contained start="<" end=">"    skipempty skipwhite nextgroup=idlSimpDecl contains=idlString,idlLiteral
-syn keyword idlBaseType    contained string               skipempty skipwhite nextgroup=idlD1,idlSimpDecl
-syn match   idlBaseType    contained "[a-zA-Z0-9_]\+[ \t]*\(::[ \t]*[a-zA-Z0-9_]\+\)*"  skipempty skipwhite nextgroup=idlSimpDecl
+  " Constants
+  syn keyword idlConst    const                             skipempty skipwhite nextgroup=idlBaseType,idlBaseTypeInt
+
+  " Attribute
+  syn keyword idlROAttr   readonly                          skipempty skipwhite nextgroup=idlAttr
+  syn keyword idlAttr     attribute                         skipempty skipwhite nextgroup=idlBaseTypeInt,idlBaseType
 
-" Modules
-syn region  idlModuleContent contained start="{" end="}"  skipempty skipwhite nextgroup=idlError,idlSemiColon contains=idlUnion,idlStruct,idlEnum,idlInterface,idlComment,idlTypedef,idlConst,idlException,idlModule
-syn match   idlModuleName  contained "[a-zA-Z0-9_]\+"     skipempty skipwhite nextgroup=idlModuleContent,idlError,idlSemiColon
-syn keyword idlModule      module                         skipempty skipwhite nextgroup=idlModuleName
-
-" Interfaces
-syn cluster idlCommentable contains=idlComment
-syn cluster idlContentCluster contains=idlUnion,idlStruct,idlEnum,idlROAttr,idlAttr,idlOp,idlOneWayOp,idlException,idlConst,idlTypedef,idlAttributes,idlErrorSquareBracket,idlErrorBracket,idlInterfaceSections
+  " Types
+  syn region  idlD4          contained start="<" end=">"    skipempty skipwhite nextgroup=idlSimpDecl contains=idlSeqType,idlBaseTypeInt,idlBaseType,idlLiteral
+  syn keyword idlSeqType     contained sequence             skipempty skipwhite nextgroup=idlD4
+  syn keyword idlBaseType    contained float double char boolean octet any skipempty skipwhite nextgroup=idlSimpDecl
+  syn keyword idlBaseTypeInt contained short long           skipempty skipwhite nextgroup=idlSimpDecl
+  syn keyword idlBaseType    contained unsigned             skipempty skipwhite nextgroup=idlBaseTypeInt
+  syn region  idlD1          contained start="<" end=">"    skipempty skipwhite nextgroup=idlSimpDecl contains=idlString,idlLiteral
+  syn keyword idlBaseType    contained string               skipempty skipwhite nextgroup=idlD1,idlSimpDecl
+  syn match   idlBaseType    contained "[a-zA-Z0-9_]\+[ \t]*\(::[ \t]*[a-zA-Z0-9_]\+\)*"  skipempty skipwhite nextgroup=idlSimpDecl
 
-syn region  idlInterfaceContent contained start="{" end="}"   skipempty skipwhite nextgroup=idlError,idlSemiColon contains=@idlContentCluster,@idlCommentable
-syn match   idlInheritFrom2 contained ","                     skipempty skipwhite nextgroup=idlInheritFrom
-syn match   idlInheritFrom contained "[a-zA-Z0-9_]\+[ \t]*\(::[ \t]*[a-zA-Z0-9_]\+\)*" skipempty skipwhite nextgroup=idlInheritFrom2,idlInterfaceContent
-syn match   idlInherit contained ":"                            skipempty skipwhite nextgroup=idlInheritFrom
-syn match   idlInterfaceName contained "[a-zA-Z0-9_]\+"       skipempty skipwhite nextgroup=idlInterfaceContent,idlInherit,idlError,idlSemiColon
-syn keyword idlInterface     interface dispinterface          skipempty skipwhite nextgroup=idlInterfaceName
-syn keyword idlInterfaceSections contained properties methods skipempty skipwhite nextgroup=idlSectionColon,idlError
-syn match   idlSectionColon contained ":"
+  " Modules
+  syn region  idlModuleContent contained start="{" end="}"  skipempty skipwhite nextgroup=idlError,idlSemiColon contains=idlUnion,idlStruct,idlEnum,idlInterface,idlComment,idlTypedef,idlConst,idlException,idlModule
+  syn match   idlModuleName  contained "[a-zA-Z0-9_]\+"     skipempty skipwhite nextgroup=idlModuleContent,idlError,idlSemiColon
+  syn keyword idlModule      module                         skipempty skipwhite nextgroup=idlModuleName
+
+  " Interfaces
+  syn cluster idlCommentable contains=idlComment
+  syn cluster idlContentCluster contains=idlUnion,idlStruct,idlEnum,idlROAttr,idlAttr,idlOp,idlOneWayOp,idlException,idlConst,idlTypedef,idlAttributes,idlErrorSquareBracket,idlErrorBracket,idlInterfaceSections
+
+  syn region  idlInterfaceContent contained start="{" end="}"   skipempty skipwhite nextgroup=idlError,idlSemiColon contains=@idlContentCluster,@idlCommentable
+  syn match   idlInheritFrom2 contained ","                     skipempty skipwhite nextgroup=idlInheritFrom
+  syn match   idlInheritFrom contained "[a-zA-Z0-9_]\+[ \t]*\(::[ \t]*[a-zA-Z0-9_]\+\)*" skipempty skipwhite nextgroup=idlInheritFrom2,idlInterfaceContent
+  syn match   idlInherit contained ":"                            skipempty skipwhite nextgroup=idlInheritFrom
+  syn match   idlInterfaceName contained "[a-zA-Z0-9_]\+"       skipempty skipwhite nextgroup=idlInterfaceContent,idlInherit,idlError,idlSemiColon
+  syn keyword idlInterface     interface dispinterface          skipempty skipwhite nextgroup=idlInterfaceName
+  syn keyword idlInterfaceSections contained properties methods skipempty skipwhite nextgroup=idlSectionColon,idlError
+  syn match   idlSectionColon contained ":"
 
 
-syn match   idlLibraryName  contained  "[a-zA-Z0-9_]\+"       skipempty skipwhite nextgroup=idlLibraryContent,idlError,idlSemiColon
-syn keyword idlLibrary      library                           skipempty skipwhite nextgroup=idlLibraryName
-syn region  idlLibraryContent contained start="{" end="}"     skipempty skipwhite nextgroup=idlError,idlSemiColon contains=@idlCommentable,idlAttributes,idlErrorSquareBracket,idlErrorBracket,idlImportlib,idlCoclass,idlTypedef,idlInterface
+  syn match   idlLibraryName  contained  "[a-zA-Z0-9_]\+"       skipempty skipwhite nextgroup=idlLibraryContent,idlError,idlSemiColon
+  syn keyword idlLibrary      library                           skipempty skipwhite nextgroup=idlLibraryName
+  syn region  idlLibraryContent contained start="{" end="}"     skipempty skipwhite nextgroup=idlError,idlSemiColon contains=@idlCommentable,idlAttributes,idlErrorSquareBracket,idlErrorBracket,idlImportlib,idlCoclass,idlTypedef,idlInterface
 
-syn keyword idlImportlib contained importlib                  skipempty skipwhite nextgroup=idlStringArg
-syn region idlStringArg contained start="(" end=")"           contains=idlString nextgroup=idlError,idlSemiColon,idlErrorBrace,idlErrorSquareBracket
+  syn keyword idlImportlib contained importlib                  skipempty skipwhite nextgroup=idlStringArg
+  syn region idlStringArg contained start="(" end=")"           contains=idlString nextgroup=idlError,idlSemiColon,idlErrorBrace,idlErrorSquareBracket
 
-syn keyword idlCoclass coclass contained                      skipempty skipwhite nextgroup=idlCoclassName
-syn match   idlCoclassName "[a-zA-Z0-9_]\+" contained         skipempty skipwhite nextgroup=idlCoclassDefinition,idlError,idlSemiColon
+  syn keyword idlCoclass coclass contained                      skipempty skipwhite nextgroup=idlCoclassName
+  syn match   idlCoclassName "[a-zA-Z0-9_]\+" contained         skipempty skipwhite nextgroup=idlCoclassDefinition,idlError,idlSemiColon
 
-syn region idlCoclassDefinition contained start="{" end="}"   contains=idlCoclassAttributes,idlInterface,idlErrorBracket,idlErrorSquareBracket skipempty skipwhite nextgroup=idlError,idlSemiColon
-syn region idlCoclassAttributes contained start=+\[+ end=+]+  skipempty skipwhite nextgroup=idlInterface contains=idlErrorBracket,idlErrorBrace,idlCoclassAttribute
-syn keyword idlCoclassAttribute contained default source
-"syn keyword idlInterface       interface                      skipempty skipwhite nextgroup=idlInterfaceStubName
+  syn region idlCoclassDefinition contained start="{" end="}"   contains=idlCoclassAttributes,idlInterface,idlErrorBracket,idlErrorSquareBracket skipempty skipwhite nextgroup=idlError,idlSemiColon
+  syn region idlCoclassAttributes contained start=+\[+ end=+]+  skipempty skipwhite nextgroup=idlInterface contains=idlErrorBracket,idlErrorBrace,idlCoclassAttribute
+  syn keyword idlCoclassAttribute contained default source
+  "syn keyword idlInterface       interface                      skipempty skipwhite nextgroup=idlInterfaceStubName
 
-syn match idlImportString       +"\f\+"+                      skipempty skipwhite nextgroup=idlError,idlSemiColon
-syn keyword idlImport           import                        skipempty skipwhite nextgroup=idlImportString
+  syn match idlImportString       +"\f\+"+                      skipempty skipwhite nextgroup=idlError,idlSemiColon
+  syn keyword idlImport           import                        skipempty skipwhite nextgroup=idlImportString
 
-syn region  idlAttributes start="\[" end="\]"                 contains=idlAttribute,idlAttributeParam,idlErrorBracket,idlErrorBrace,idlComment
-syn keyword idlAttribute contained propput propget propputref id helpstring object uuid pointer_default
-if !exists('idl_no_ms_extensions')
-syn keyword idlAttribute contained nonextensible dual version aggregatable restricted hidden noncreatable oleautomation
-endif
-syn region idlAttributeParam contained start="(" end=")"      contains=idlString,idlUuid,idlLiteral,idlErrorBrace,idlErrorSquareBracket
-" skipwhite nextgroup=idlArraySize,idlParmList contains=idlArraySize,idlLiteral
-syn match idlErrorBrace contained "}"
-syn match idlErrorBracket contained ")"
-syn match idlErrorSquareBracket contained "\]"
+  syn region  idlAttributes start="\[" end="\]"                 contains=idlAttribute,idlAttributeParam,idlErrorBracket,idlErrorBrace,idlComment
+  syn keyword idlAttribute contained propput propget propputref id helpstring object uuid pointer_default
+  if !exists('idl_no_ms_extensions')
+  syn keyword idlAttribute contained nonextensible dual version aggregatable restricted hidden noncreatable oleautomation
+  endif
+  syn region idlAttributeParam contained start="(" end=")"      contains=idlString,idlUuid,idlLiteral,idlErrorBrace,idlErrorSquareBracket
+  " skipwhite nextgroup=idlArraySize,idlParmList contains=idlArraySize,idlLiteral
+  syn match idlErrorBrace contained "}"
+  syn match idlErrorBracket contained ")"
+  syn match idlErrorSquareBracket contained "\]"
 
-syn match idlUuid         contained +[0-9a-zA-Z]\{8}-\([0-9a-zA-Z]\{4}-\)\{3}[0-9a-zA-Z]\{12}+
+  syn match idlUuid         contained +[0-9a-zA-Z]\{8}-\([0-9a-zA-Z]\{4}-\)\{3}[0-9a-zA-Z]\{12}+
+
+  " Raises
+  syn keyword idlRaises     contained raises               skipempty skipwhite nextgroup=idlRaises,idlContext,idlError,idlSemiColon
 
-" Raises
-syn keyword idlRaises     contained raises               skipempty skipwhite nextgroup=idlRaises,idlContext,idlError,idlSemiColon
-
-" Context
-syn keyword idlContext    contained context              skipempty skipwhite nextgroup=idlRaises,idlContext,idlError,idlSemiColon
+  " Context
+  syn keyword idlContext    contained context              skipempty skipwhite nextgroup=idlRaises,idlContext,idlError,idlSemiColon
 
-" Operation
-syn match   idlParmList   contained ","                  skipempty skipwhite nextgroup=idlOpParms
-syn region  idlArraySize  contained start="\[" end="\]"  skipempty skipwhite nextgroup=idlArraySize,idlParmList contains=idlArraySize,idlLiteral
-syn match   idlParmName   contained "[a-zA-Z0-9_]\+"     skipempty skipwhite nextgroup=idlParmList,idlArraySize
-syn keyword idlParmInt    contained short long           skipempty skipwhite nextgroup=idlParmName
-syn keyword idlParmType   contained unsigned             skipempty skipwhite nextgroup=idlParmInt
-syn region  idlD3         contained start="<" end=">"    skipempty skipwhite nextgroup=idlParmName contains=idlString,idlLiteral
-syn keyword idlParmType   contained string               skipempty skipwhite nextgroup=idlD3,idlParmName
-syn keyword idlParmType   contained void float double char boolean octet any    skipempty skipwhite nextgroup=idlParmName
-syn match   idlParmType   contained "[a-zA-Z0-9_]\+[ \t]*\(::[ \t]*[a-zA-Z0-9_]\+\)*" skipempty skipwhite nextgroup=idlParmName
-syn keyword idlOpParms    contained in out inout         skipempty skipwhite nextgroup=idlParmType
+  " Operation
+  syn match   idlParmList   contained ","                  skipempty skipwhite nextgroup=idlOpParms
+  syn region  idlArraySize  contained start="\[" end="\]"  skipempty skipwhite nextgroup=idlArraySize,idlParmList contains=idlArraySize,idlLiteral
+  syn match   idlParmName   contained "[a-zA-Z0-9_]\+"     skipempty skipwhite nextgroup=idlParmList,idlArraySize
+  syn keyword idlParmInt    contained short long           skipempty skipwhite nextgroup=idlParmName
+  syn keyword idlParmType   contained unsigned             skipempty skipwhite nextgroup=idlParmInt
+  syn region  idlD3         contained start="<" end=">"    skipempty skipwhite nextgroup=idlParmName contains=idlString,idlLiteral
+  syn keyword idlParmType   contained string               skipempty skipwhite nextgroup=idlD3,idlParmName
+  syn keyword idlParmType   contained void float double char boolean octet any    skipempty skipwhite nextgroup=idlParmName
+  syn match   idlParmType   contained "[a-zA-Z0-9_]\+[ \t]*\(::[ \t]*[a-zA-Z0-9_]\+\)*" skipempty skipwhite nextgroup=idlParmName
+  syn keyword idlOpParms    contained in out inout         skipempty skipwhite nextgroup=idlParmType
+
+  if !exists('idl_no_ms_extensions')
+  syn keyword idlOpParms    contained retval optional      skipempty skipwhite nextgroup=idlParmType
+    syn match idlOpParms contained +\<\(iid_is\|defaultvalue\)\s*([^)]*)+ skipempty skipwhite nextgroup=idlParamType
 
-if !exists('idl_no_ms_extensions')
-syn keyword idlOpParms    contained retval optional      skipempty skipwhite nextgroup=idlParmType
-  syn match idlOpParms contained +\<\(iid_is\|defaultvalue\)\s*([^)]*)+ skipempty skipwhite nextgroup=idlParamType
-
-  syn keyword idlVariantType  contained BSTR VARIANT VARIANT_BOOL long short unsigned double CURRENCY DATE
-  syn region idlSafeArray contained matchgroup=idlVariantType start=+SAFEARRAY(\s*+ end=+)+ contains=idlVariantType
-endif
+    syn keyword idlVariantType  contained BSTR VARIANT VARIANT_BOOL long short unsigned double CURRENCY DATE
+    syn region idlSafeArray contained matchgroup=idlVariantType start=+SAFEARRAY(\s*+ end=+)+ contains=idlVariantType
+  endif
 
-syn region  idlOpContents contained start="(" end=")"    skipempty skipwhite nextgroup=idlRaises,idlContext,idlError,idlSemiColon contains=idlOpParms,idlSafeArray,idlVariantType,@idlCommentable
-syn match   idlOpName   contained "[a-zA-Z0-9_]\+"       skipempty skipwhite nextgroup=idlOpContents
-syn keyword idlOpInt    contained short long             skipempty skipwhite nextgroup=idlOpName
-syn region  idlD2       contained start="<" end=">"      skipempty skipwhite nextgroup=idlOpName contains=idlString,idlLiteral
-syn keyword idlOp       contained unsigned               skipempty skipwhite nextgroup=idlOpInt
-syn keyword idlOp       contained string                 skipempty skipwhite nextgroup=idlD2,idlOpName
-syn keyword idlOp       contained void float double char boolean octet any  skipempty skipwhite nextgroup=idlOpName
-syn match   idlOp       contained "[a-zA-Z0-9_]\+[ \t]*\(::[ \t]*[a-zA-Z0-9_]\+\)*" skipempty skipwhite nextgroup=idlOpName
-syn keyword idlOp       contained void                   skipempty skipwhite nextgroup=idlOpName
-syn keyword idlOneWayOp contained oneway                 skipempty skipwhite nextgroup=idOp
+  syn region  idlOpContents contained start="(" end=")"    skipempty skipwhite nextgroup=idlRaises,idlContext,idlError,idlSemiColon contains=idlOpParms,idlSafeArray,idlVariantType,@idlCommentable
+  syn match   idlOpName   contained "[a-zA-Z0-9_]\+"       skipempty skipwhite nextgroup=idlOpContents
+  syn keyword idlOpInt    contained short long             skipempty skipwhite nextgroup=idlOpName
+  syn region  idlD2       contained start="<" end=">"      skipempty skipwhite nextgroup=idlOpName contains=idlString,idlLiteral
+  syn keyword idlOp       contained unsigned               skipempty skipwhite nextgroup=idlOpInt
+  syn keyword idlOp       contained string                 skipempty skipwhite nextgroup=idlD2,idlOpName
+  syn keyword idlOp       contained void float double char boolean octet any  skipempty skipwhite nextgroup=idlOpName
+  syn match   idlOp       contained "[a-zA-Z0-9_]\+[ \t]*\(::[ \t]*[a-zA-Z0-9_]\+\)*" skipempty skipwhite nextgroup=idlOpName
+  syn keyword idlOp       contained void                   skipempty skipwhite nextgroup=idlOpName
+  syn keyword idlOneWayOp contained oneway                 skipempty skipwhite nextgroup=idOp
 
-" Enum
-syn region  idlEnumContents contained start="{" end="}"  skipempty skipwhite nextgroup=idlError,idlSemiColon,idlSimpDecl contains=idlId,idlAttributes,@idlCommentable
-syn match   idlEnumName contained "[a-zA-Z0-9_]\+"       skipempty skipwhite nextgroup=idlEnumContents
-syn keyword idlEnum     enum                             skipempty skipwhite nextgroup=idlEnumName,idlEnumContents
+  " Enum
+  syn region  idlEnumContents contained start="{" end="}"  skipempty skipwhite nextgroup=idlError,idlSemiColon,idlSimpDecl contains=idlId,idlAttributes,@idlCommentable
+  syn match   idlEnumName contained "[a-zA-Z0-9_]\+"       skipempty skipwhite nextgroup=idlEnumContents
+  syn keyword idlEnum     enum                             skipempty skipwhite nextgroup=idlEnumName,idlEnumContents
+
+  " Typedef
+  syn keyword idlTypedef typedef                          skipempty skipwhite nextgroup=idlTypedefOtherTypeQualifier,idlDefBaseType,idlDefBaseTypeInt,idlDefSeqType,idlDefv1Enum,idlDefEnum,idlDefOtherType,idlDefAttributes,idlError
+
+  if !exists('idl_no_extensions')
+    syn keyword idlTypedefOtherTypeQualifier contained struct enum interface nextgroup=idlDefBaseType,idlDefBaseTypeInt,idlDefSeqType,idlDefv1Enum,idlDefEnum,idlDefOtherType,idlDefAttributes,idlError skipwhite
+
+    syn region  idlDefAttributes        contained start="\[" end="\]" contains=idlAttribute,idlAttributeParam,idlErrorBracket,idlErrorBrace skipempty skipwhite nextgroup=idlDefBaseType,idlDefBaseTypeInt,idlDefSeqType,idlDefv1Enum,idlDefEnum,idlDefOtherType,idlError
 
-" Typedef
-syn keyword idlTypedef typedef                          skipempty skipwhite nextgroup=idlTypedefOtherTypeQualifier,idlDefBaseType,idlDefBaseTypeInt,idlDefSeqType,idlDefv1Enum,idlDefEnum,idlDefOtherType,idlDefAttributes,idlError
-
-if !exists('idl_no_extensions')
-  syn keyword idlTypedefOtherTypeQualifier contained struct enum interface nextgroup=idlDefBaseType,idlDefBaseTypeInt,idlDefSeqType,idlDefv1Enum,idlDefEnum,idlDefOtherType,idlDefAttributes,idlError skipwhite
+    syn keyword idlDefBaseType      contained float double char boolean octet any  skipempty skipwhite nextgroup=idlTypedefDecl,idlError
+    syn keyword idlDefBaseTypeInt   contained short long                           skipempty skipwhite nextgroup=idlTypedefDecl,idlError
+    syn match idlDefOtherType       contained +\<\k\+\>+ skipempty                 nextgroup=idlTypedefDecl,idlError
+    " syn keyword idlDefSeqType     contained sequence                             skipempty skipwhite nextgroup=idlD4
 
-  syn region  idlDefAttributes        contained start="\[" end="\]" contains=idlAttribute,idlAttributeParam,idlErrorBracket,idlErrorBrace skipempty skipwhite nextgroup=idlDefBaseType,idlDefBaseTypeInt,idlDefSeqType,idlDefv1Enum,idlDefEnum,idlDefOtherType,idlError
+    " Enum typedef
+    syn keyword idlDefEnum          contained enum skipempty                       skipwhite nextgroup=idlDefEnumName,idlDefEnumContents
+    syn match   idlDefEnumName      contained "[a-zA-Z0-9_]\+"                     skipempty skipwhite nextgroup=idlDefEnumContents,idlTypedefDecl
+    syn region  idlDefEnumContents  contained start="{" end="}"                    skipempty skipwhite nextgroup=idlError,idlTypedefDecl contains=idlId,idlAttributes
 
-  syn keyword idlDefBaseType      contained float double char boolean octet any  skipempty skipwhite nextgroup=idlTypedefDecl,idlError
-  syn keyword idlDefBaseTypeInt   contained short long                           skipempty skipwhite nextgroup=idlTypedefDecl,idlError
-  syn match idlDefOtherType       contained +\<\k\+\>+ skipempty                 nextgroup=idlTypedefDecl,idlError
-  " syn keyword idlDefSeqType     contained sequence                             skipempty skipwhite nextgroup=idlD4
+    syn match   idlTypedefDecl      contained "[a-zA-Z0-9_]\+"                     skipempty skipwhite nextgroup=idlError,idlSemiColon
+  endif
 
-  " Enum typedef
-  syn keyword idlDefEnum          contained enum skipempty                       skipwhite nextgroup=idlDefEnumName,idlDefEnumContents
-  syn match   idlDefEnumName      contained "[a-zA-Z0-9_]\+"                     skipempty skipwhite nextgroup=idlDefEnumContents,idlTypedefDecl
-  syn region  idlDefEnumContents  contained start="{" end="}"                    skipempty skipwhite nextgroup=idlError,idlTypedefDecl contains=idlId,idlAttributes
+  " Struct
+  syn region  idlStructContent   contained start="{" end="}"   skipempty skipwhite nextgroup=idlError,idlSemiColon,idlSimpDecl contains=idlBaseType,idlBaseTypeInt,idlSeqType,@idlCommentable,idlEnum,idlUnion
+  syn match   idlStructName      contained "[a-zA-Z0-9_]\+"    skipempty skipwhite nextgroup=idlStructContent
+  syn keyword idlStruct          struct                        skipempty skipwhite nextgroup=idlStructName
 
-  syn match   idlTypedefDecl      contained "[a-zA-Z0-9_]\+"                     skipempty skipwhite nextgroup=idlError,idlSemiColon
-endif
+  " Exception
+  syn keyword idlException       exception                     skipempty skipwhite nextgroup=idlStructName
 
-" Struct
-syn region  idlStructContent   contained start="{" end="}"   skipempty skipwhite nextgroup=idlError,idlSemiColon,idlSimpDecl contains=idlBaseType,idlBaseTypeInt,idlSeqType,@idlCommentable,idlEnum,idlUnion
-syn match   idlStructName      contained "[a-zA-Z0-9_]\+"    skipempty skipwhite nextgroup=idlStructContent
-syn keyword idlStruct          struct                        skipempty skipwhite nextgroup=idlStructName
-
-" Exception
-syn keyword idlException       exception                     skipempty skipwhite nextgroup=idlStructName
+  " Union
+  syn match   idlColon            contained ":"                skipempty skipwhite nextgroup=idlCase,idlSeqType,idlBaseType,idlBaseTypeInt
+  syn region  idlCaseLabel        contained start="" skip="::" end=":"me=e-1 skipempty skipwhite nextgroup=idlColon contains=idlLiteral,idlString
+  syn keyword idlCase             contained case               skipempty skipwhite nextgroup=idlCaseLabel
+  syn keyword idlCase             contained default            skipempty skipwhite nextgroup=idlColon
+  syn region  idlUnionContent     contained start="{" end="}"  skipempty skipwhite nextgroup=idlError,idlSemiColon,idlSimpDecl contains=idlCase
+  syn region  idlSwitchType       contained start="(" end=")"  skipempty skipwhite nextgroup=idlUnionContent
+  syn keyword idlUnionSwitch      contained switch             skipempty skipwhite nextgroup=idlSwitchType
+  syn match   idlUnionName        contained "[a-zA-Z0-9_]\+"   skipempty skipwhite nextgroup=idlUnionSwitch
+  syn keyword idlUnion            union                        skipempty skipwhite nextgroup=idlUnionName
 
-" Union
-syn match   idlColon            contained ":"                skipempty skipwhite nextgroup=idlCase,idlSeqType,idlBaseType,idlBaseTypeInt
-syn region  idlCaseLabel        contained start="" skip="::" end=":"me=e-1 skipempty skipwhite nextgroup=idlColon contains=idlLiteral,idlString
-syn keyword idlCase             contained case               skipempty skipwhite nextgroup=idlCaseLabel
-syn keyword idlCase             contained default            skipempty skipwhite nextgroup=idlColon
-syn region  idlUnionContent     contained start="{" end="}"  skipempty skipwhite nextgroup=idlError,idlSemiColon,idlSimpDecl contains=idlCase
-syn region  idlSwitchType       contained start="(" end=")"  skipempty skipwhite nextgroup=idlUnionContent
-syn keyword idlUnionSwitch      contained switch             skipempty skipwhite nextgroup=idlSwitchType
-syn match   idlUnionName        contained "[a-zA-Z0-9_]\+"   skipempty skipwhite nextgroup=idlUnionSwitch
-syn keyword idlUnion            union                        skipempty skipwhite nextgroup=idlUnionName
+  if !exists('idl_no_extensions')
+    syn sync match  idlInterfaceSync grouphere idlInterfaceContent "\<\(disp\)\=interface\>\s\+\k\+\s*:\s*\k\+\_s*{" skipempty skipwhite nextgroup=idlError,idlSemiColon contains=@idlContentCluster,@idlCommentable
+    syn sync maxlines=1000 minlines=100
+  else
+    syn sync lines=200
+  endif
+  " syn sync fromstart
+
+  if !exists("did_idl_syntax_inits")
+    let did_idl_syntax_inits = 1
+    " The default methods for highlighting.  Can be overridden later
+    command -nargs=+ HiLink hi def link <args>
 
-if !exists('idl_no_extensions')
-  syn sync match  idlInterfaceSync grouphere idlInterfaceContent "\<\(disp\)\=interface\>\s\+\k\+\s*:\s*\k\+\_s*{" skipempty skipwhite nextgroup=idlError,idlSemiColon contains=@idlContentCluster,@idlCommentable
-  syn sync maxlines=1000 minlines=100
-else
-  syn sync lines=200
-endif
-" syn sync fromstart
-
-if !exists("did_idl_syntax_inits")
-  let did_idl_syntax_inits = 1
-  " The default methods for highlighting.  Can be overridden later
-  command -nargs=+ HiLink hi def link <args>
+    HiLink idlInclude             Include
+    HiLink idlPreProc             PreProc
+    HiLink idlPreCondit           PreCondit
+    HiLink idlDefine              Macro
+    HiLink idlIncluded            String
+    HiLink idlString              String
+    HiLink idlComment             Comment
+    HiLink idlTodo                Todo
+    HiLink idlLiteral             Number
+    HiLink idlUuid                Number
+    HiLink idlType                Type
+    HiLink idlVariantType         idlType
 
-  HiLink idlInclude             Include
-  HiLink idlPreProc             PreProc
-  HiLink idlPreCondit           PreCondit
-  HiLink idlDefine              Macro
-  HiLink idlIncluded            String
-  HiLink idlString              String
-  HiLink idlComment             Comment
-  HiLink idlTodo                Todo
-  HiLink idlLiteral             Number
-  HiLink idlUuid                Number
-  HiLink idlType                Type
-  HiLink idlVariantType         idlType
+    HiLink idlModule              Keyword
+    HiLink idlInterface           Keyword
+    HiLink idlEnum                Keyword
+    HiLink idlStruct              Keyword
+    HiLink idlUnion               Keyword
+    HiLink idlTypedef             Keyword
+    HiLink idlException           Keyword
+    HiLink idlTypedefOtherTypeQualifier keyword
+
+    HiLink idlModuleName          Typedef
+    HiLink idlInterfaceName       Typedef
+    HiLink idlEnumName            Typedef
+    HiLink idlStructName          Typedef
+    HiLink idlUnionName           Typedef
 
-  HiLink idlModule              Keyword
-  HiLink idlInterface           Keyword
-  HiLink idlEnum                Keyword
-  HiLink idlStruct              Keyword
-  HiLink idlUnion               Keyword
-  HiLink idlTypedef             Keyword
-  HiLink idlException           Keyword
-  HiLink idlTypedefOtherTypeQualifier keyword
-
-  HiLink idlModuleName          Typedef
-  HiLink idlInterfaceName       Typedef
-  HiLink idlEnumName            Typedef
-  HiLink idlStructName          Typedef
-  HiLink idlUnionName           Typedef
+    HiLink idlBaseTypeInt         idlType
+    HiLink idlBaseType            idlType
+    HiLink idlSeqType             idlType
+    HiLink idlD1                  Paren
+    HiLink idlD2                  Paren
+    HiLink idlD3                  Paren
+    HiLink idlD4                  Paren
+    "HiLink idlArraySize          Paren
+    "HiLink idlArraySize1         Paren
+    HiLink idlModuleContent       Paren
+    HiLink idlUnionContent        Paren
+    HiLink idlStructContent       Paren
+    HiLink idlEnumContents        Paren
+    HiLink idlInterfaceContent    Paren
 
-  HiLink idlBaseTypeInt         idlType
-  HiLink idlBaseType            idlType
-  HiLink idlSeqType             idlType
-  HiLink idlD1                  Paren
-  HiLink idlD2                  Paren
-  HiLink idlD3                  Paren
-  HiLink idlD4                  Paren
-  "HiLink idlArraySize          Paren
-  "HiLink idlArraySize1         Paren
-  HiLink idlModuleContent       Paren
-  HiLink idlUnionContent        Paren
-  HiLink idlStructContent       Paren
-  HiLink idlEnumContents        Paren
-  HiLink idlInterfaceContent    Paren
+    HiLink idlSimpDecl            Identifier
+    HiLink idlROAttr              StorageClass
+    HiLink idlAttr                Keyword
+    HiLink idlConst               StorageClass
 
-  HiLink idlSimpDecl            Identifier
-  HiLink idlROAttr              StorageClass
-  HiLink idlAttr                Keyword
-  HiLink idlConst               StorageClass
+    HiLink idlOneWayOp            StorageClass
+    HiLink idlOp                  idlType
+    HiLink idlParmType            idlType
+    HiLink idlOpName              Function
+    HiLink idlOpParms             SpecialComment
+    HiLink idlParmName            Identifier
+    HiLink idlInheritFrom         Identifier
+    HiLink idlAttribute           SpecialComment
 
-  HiLink idlOneWayOp            StorageClass
-  HiLink idlOp                  idlType
-  HiLink idlParmType            idlType
-  HiLink idlOpName              Function
-  HiLink idlOpParms             SpecialComment
-  HiLink idlParmName            Identifier
-  HiLink idlInheritFrom         Identifier
-  HiLink idlAttribute           SpecialComment
+    HiLink idlId                  Constant
+    "HiLink idlCase               Keyword
+    HiLink idlCaseLabel           Constant
 
-  HiLink idlId                  Constant
-  "HiLink idlCase               Keyword
-  HiLink idlCaseLabel           Constant
+    HiLink idlErrorBracket        Error
+    HiLink idlErrorBrace          Error
+    HiLink idlErrorSquareBracket  Error
 
-  HiLink idlErrorBracket        Error
-  HiLink idlErrorBrace          Error
-  HiLink idlErrorSquareBracket  Error
+    HiLink idlImport              Keyword
+    HiLink idlImportString        idlString
+    HiLink idlCoclassAttribute    StorageClass
+    HiLink idlLibrary             Keyword
+    HiLink idlImportlib           Keyword
+    HiLink idlCoclass             Keyword
+    HiLink idlLibraryName         Typedef
+    HiLink idlCoclassName         Typedef
+    " hi idlLibraryContent guifg=red
+    HiLink idlTypedefDecl         Typedef
+    HiLink idlDefEnum             Keyword
+    HiLink idlDefv1Enum           Keyword
+    HiLink idlDefEnumName         Typedef
+    HiLink idlDefEnumContents     Paren
+    HiLink idlDefBaseTypeInt      idlType
+    HiLink idlDefBaseType         idlType
+    HiLink idlDefSeqType          idlType
+    HiLink idlInterfaceSections   Label
 
-  HiLink idlImport              Keyword
-  HiLink idlImportString        idlString
-  HiLink idlCoclassAttribute    StorageClass
-  HiLink idlLibrary             Keyword
-  HiLink idlImportlib           Keyword
-  HiLink idlCoclass             Keyword
-  HiLink idlLibraryName         Typedef
-  HiLink idlCoclassName         Typedef
-  " hi idlLibraryContent guifg=red
-  HiLink idlTypedefDecl         Typedef
-  HiLink idlDefEnum             Keyword
-  HiLink idlDefv1Enum           Keyword
-  HiLink idlDefEnumName         Typedef
-  HiLink idlDefEnumContents     Paren
-  HiLink idlDefBaseTypeInt      idlType
-  HiLink idlDefBaseType         idlType
-  HiLink idlDefSeqType          idlType
-  HiLink idlInterfaceSections   Label
+    if exists("idlsyntax_showerror")
+      if exists("idlsyntax_showerror_soft")
+        hi default idlError guibg=#d0ffd0
+      else
+        HiLink idlError Error
+      endif
+    endif
+    delcommand HiLink
+  endif
 
-  if exists("idlsyntax_showerror")
-    if exists("idlsyntax_showerror_soft")
-      hi default idlError guibg=#d0ffd0
-    else
-      HiLink idlError Error
-    endif
-  endif
-  delcommand HiLink
-endif
-
-let b:current_syntax = "idl"
-
+  let b:current_syntax = "idl"
+finally
+  let &cpo = s:cpo_save
+  unlet s:cpo_save
+endtry
 " vim: sw=2 et
--- a/runtime/syntax/mail.vim
+++ b/runtime/syntax/mail.vim
@@ -40,7 +40,7 @@ syn match	mailHeaderKey	contained contai
 syn region	mailHeaderKey	contained contains=mailHeaderEmail,mailEmail,@mailQuoteExps,@NoSpell start="\v(^(\> ?)*)@<=(to|b?cc):" skip=",$" end="$"
 syn match	mailHeaderKey	contained contains=mailHeaderEmail,mailEmail,@NoSpell "\v(^(\> ?)*)@<=(from|reply-to):.*$" fold
 syn match	mailHeaderKey	contained contains=@NoSpell "\v(^(\> ?)*)@<=date:"
-syn match	mailSubject	contained "\v^subject:.*$" fold
+syn match	mailSubject	contained contains=@NoSpell "\v^subject:.*$" fold
 syn match	mailSubject	contained contains=@NoSpell "\v(^(\> ?)+)@<=subject:.*$"
 
 " Anything in the header between < and > is an email address
--- a/runtime/syntax/sh.vim
+++ b/runtime/syntax/sh.vim
@@ -2,8 +2,8 @@
 " Language:		shell (sh) Korn shell (ksh) bash (sh)
 " Maintainer:		Dr. Charles E. Campbell, Jr.  <NdrOchipS@PcampbellAfamily.Mbiz>
 " Previous Maintainer:	Lennart Schultz <Lennart.Schultz@ecmwf.int>
-" Last Change:		Aug 16, 2011
-" Version:		118
+" Last Change:		Dec 09, 2011
+" Version:		121
 " URL:		http://mysite.verizon.net/astronaut/vim/index.html#vimlinks_syntax
 " For options and settings, please use:      :help ft-sh-syntax
 " This file includes many ideas from ?ric Brunet (eric.brunet@ens.fr)
@@ -101,7 +101,7 @@ syn cluster shArithParenList	contains=sh
 syn cluster shArithList	contains=@shArithParenList,shParenError
 syn cluster shCaseEsacList	contains=shCaseStart,shCase,shCaseBar,shCaseIn,shComment,shDeref,shDerefSimple,shCaseCommandSub,shCaseExSingleQuote,shCaseSingleQuote,shCaseDoubleQuote,shCtrlSeq,@shErrorList,shStringSpecial,shCaseRange
 syn cluster shCaseList	contains=@shCommandSubList,shCaseEsac,shColon,shCommandSub,shComment,shDo,shEcho,shExpr,shFor,shHereDoc,shIf,shRedir,shSetList,shSource,shStatement,shVariable,shCtrlSeq
-syn cluster shColonList	contains=@shCaseList
+"syn cluster shColonList	contains=@shCaseList
 syn cluster shCommandSubList	contains=shArithmetic,shDeref,shDerefSimple,shEscape,shNumber,shOperator,shPosnParm,shExSingleQuote,shSingleQuote,shExDoubleQuote,shDoubleQuote,shStatement,shVariable,shSubSh,shAlias,shTest,shCtrlSeq,shSpecial
 syn cluster shCurlyList	contains=shNumber,shComma,shDeref,shDerefSimple,shDerefSpecial
 syn cluster shDblQuoteList	contains=shCommandSub,shDeref,shDerefSimple,shPosnParm,shCtrlSeq,shSpecial
@@ -119,10 +119,10 @@ syn cluster shHereBeginList	contains=@sh
 syn cluster shHereList	contains=shBeginHere,shHerePayload
 syn cluster shHereListDQ	contains=shBeginHere,@shDblQuoteList,shHerePayload
 syn cluster shIdList	contains=shCommandSub,shWrapLineOperator,shSetOption,shDeref,shDerefSimple,shRedir,shExSingleQuote,shExDoubleQuote,shSingleQuote,shDoubleQuote,shExpr,shCtrlSeq,shStringSpecial
-syn cluster shLoopList	contains=@shCaseList,shTestOpr,shExpr,shDblBrace,shConditional,shCaseEsac,shTest,@shErrorList,shSet
+syn cluster shIfList	contains=@shLoopList,shDblBrace,shDblParen,shFunctionKey,shFunctionOne,shFunctionTwo
+syn cluster shLoopList	contains=@shCaseList,shTestOpr,shExpr,shDblBrace,shConditional,shCaseEsac,shTest,@shErrorList,shSet,shOption
 syn cluster shSubShList	contains=@shCommandSubList,shCaseEsac,shColon,shCommandSub,shComment,shDo,shEcho,shExpr,shFor,shIf,shRedir,shSetList,shSource,shStatement,shVariable,shCtrlSeq,shOperator
 syn cluster shTestList	contains=shCharClass,shComment,shCommandSub,shDeref,shDerefSimple,shExDoubleQuote,shDoubleQuote,shExpr,shNumber,shOperator,shExSingleQuote,shSingleQuote,shTestOpr,shTest,shCtrlSeq
-
 " Echo: {{{1
 " ====
 " This one is needed INSIDE a CommandSub, so that `echo bla` be correct
@@ -143,18 +143,20 @@ endif
 
 " Error Codes: {{{1
 " ============
-syn match   shDoError "\<done\>"
-syn match   shIfError "\<fi\>"
-syn match   shInError "\<in\>"
-syn match   shCaseError ";;"
-syn match   shEsacError "\<esac\>"
-syn match   shCurlyError "}"
-syn match   shParenError ")"
-syn match   shOK	'\.\(done\|fi\|in\|esac\)'
-if exists("b:is_kornshell")
- syn match     shDTestError "]]"
+if !exists("g:sh_no_error")
+ syn match   shDoError "\<done\>"
+ syn match   shIfError "\<fi\>"
+ syn match   shInError "\<in\>"
+ syn match   shCaseError ";;"
+ syn match   shEsacError "\<esac\>"
+ syn match   shCurlyError "}"
+ syn match   shParenError ")"
+ syn match   shOK	'\.\(done\|fi\|in\|esac\)'
+ if exists("b:is_kornshell")
+  syn match     shDTestError "]]"
+ endif
+ syn match     shTestError "]"
 endif
-syn match     shTestError "]"
 
 " Options: {{{1
 " ====================
@@ -204,11 +206,11 @@ syn match   shCharClass	contained	"\[:\(
 " ======
 if (g:sh_fold_enabled % (s:sh_fold_ifdofor * 2))/s:sh_fold_ifdofor
  syn region shDo	fold transparent matchgroup=shConditional start="\<do\>" matchgroup=shConditional end="\<done\>" contains=@shLoopList
- syn region shIf	fold transparent matchgroup=shConditional start="\<if\_s" matchgroup=shConditional end="\<;\_s*then\>" end="\<fi\>"   contains=@shLoopList,shDblBrace,shDblParen,shFunctionKey,shFunctionOne,shFunctionTwo
+ syn region shIf	fold transparent matchgroup=shConditional start="\<if\_s" matchgroup=shConditional skip=+-fi\>+ end="\<;\_s*then\>" end="\<fi\>"   contains=@shIfList
  syn region shFor	fold matchgroup=shLoop start="\<for\_s" end="\<in\_s" end="\<do\>"me=e-2	contains=@shLoopList,shDblParen skipwhite nextgroup=shCurlyIn
 else
  syn region shDo	transparent matchgroup=shConditional start="\<do\>" matchgroup=shConditional end="\<done\>" contains=@shLoopList
- syn region shIf	transparent matchgroup=shConditional start="\<if\_s" matchgroup=shConditional end="\<;\_s*then\>" end="\<fi\>"   contains=@shLoopList,shDblBrace,shDblParen,shFunctionKey,shFunctionOne,shFunctionTwo
+ syn region shIf	transparent matchgroup=shConditional start="\<if\_s" matchgroup=shConditional skip=+-fi\>+ end="\<;\_s*then\>" end="\<fi\>"   contains=@shIfList
  syn region shFor	matchgroup=shLoop start="\<for\_s" end="\<in\>" end="\<do\>"me=e-2	contains=@shLoopList,shDblParen skipwhite nextgroup=shCurlyIn
 endif
 if exists("b:is_kornshell") || exists("b:is_bash")
@@ -238,7 +240,7 @@ endif
 syn keyword shCaseIn	contained skipwhite skipnl in			nextgroup=shCase,shCaseStart,shCaseBar,shComment,shCaseExSingleQuote,shCaseSingleQuote,shCaseDoubleQuote
 if exists("b:is_bash")
  syn region  shCaseExSingleQuote	matchgroup=shQuote start=+\$'+ skip=+\\\\\|\\.+ end=+'+	contains=shStringSpecial,shSpecial	skipwhite skipnl nextgroup=shCaseBar	contained
-else
+elseif !exists("g:sh_no_error")
  syn region  shCaseExSingleQuote	matchgroup=Error start=+\$'+ skip=+\\\\\|\\.+ end=+'+	contains=shStringSpecial	skipwhite skipnl nextgroup=shCaseBar	contained
 endif
 syn region  shCaseSingleQuote	matchgroup=shQuote start=+'+ end=+'+		contains=shStringSpecial		skipwhite skipnl nextgroup=shCaseBar	contained
@@ -262,7 +264,7 @@ if exists("b:is_kornshell") || exists("b
  syn region shCommandSub matchgroup=shCmdSubRegion start="\$("  skip='\\\\\|\\.' end=")"  contains=@shCommandSubList
  syn region shArithmetic matchgroup=shArithRegion  start="\$((" skip='\\\\\|\\.' end="))" contains=@shArithList
  syn match  shSkipInitWS contained	"^\s\+"
-else
+elseif !exists("g:sh_no_error")
  syn region shCommandSub matchgroup=Error start="\$(" end=")" contains=@shCommandSubList
 endif
 
@@ -284,7 +286,8 @@ endif
 syn match   shSource	"^\.\s"
 syn match   shSource	"\s\.\s"
 "syn region  shColon	start="^\s*:" end="$" end="\s#"me=e-2 contains=@shColonList
-syn region  shColon	start="^\s*\zs:" end="$" end="\s#"me=e-2
+"syn region  shColon	start="^\s*\zs:" end="$" end="\s#"me=e-2
+syn match   shColon	'^\s*\zs:'
 
 " String And Character Constants: {{{1
 "================================
@@ -296,7 +299,7 @@ endif
 if exists("b:is_bash")
  syn region  shExSingleQuote	matchgroup=shQuote start=+\$'+ skip=+\\\\\|\\.+ end=+'+	contains=shStringSpecial,shSpecial
  syn region  shExDoubleQuote	matchgroup=shQuote start=+\$"+ skip=+\\\\\|\\.\|\\"+ end=+"+	contains=@shDblQuoteList,shStringSpecial,shSpecial
-else
+elseif !exists("g:sh_no_error")
  syn region  shExSingleQuote	matchGroup=Error start=+\$'+ skip=+\\\\\|\\.+ end=+'+	contains=shStringSpecial
  syn region  shExDoubleQuote	matchGroup=Error start=+\$"+ skip=+\\\\\|\\.+ end=+"+	contains=shStringSpecial
 endif
@@ -407,7 +410,9 @@ endif
 " ========================
 syn match  shDerefSimple	"\$\%(\h\w*\|\d\)"
 syn region shDeref	matchgroup=PreProc start="\${" end="}"	contains=@shDerefList,shDerefVarArray
-syn match  shDerefWordError	"[^}$[]"	contained
+if !exists("g:sh_no_error")
+ syn match  shDerefWordError	"[^}$[]"	contained
+endif
 syn match  shDerefSimple	"\$[-#*@!?]"
 syn match  shDerefSimple	"\$\$"
 if exists("b:is_bash") || exists("b:is_kornshell")
@@ -443,7 +448,9 @@ syn region  shDerefVarArray   contained	
 "        bash : ${parameter,pattern}  Case modification
 "        bash : ${parameter,,pattern} Case modification
 syn cluster shDerefPatternList	contains=shDerefPattern,shDerefString
-syn match shDerefOpError	contained	":[[:punct:]]"
+if !exists("g:sh_no_error")
+ syn match shDerefOpError	contained	":[[:punct:]]"
+endif
 syn match  shDerefOp	contained	":\=[-=?]"	nextgroup=@shDerefPatternList
 syn match  shDerefOp	contained	":\=+"	nextgroup=@shDerefPatternList
 if exists("b:is_bash") || exists("b:is_kornshell")
@@ -480,7 +487,9 @@ syn region shParen matchgroup=shArithReg
 " ===================
 syn keyword shStatement break cd chdir continue eval exec exit kill newgrp pwd read readonly return shift test trap ulimit umask wait
 syn keyword shConditional contained elif else then
-syn keyword shCondError elif else then
+if !exists("g:sh_no_error")
+ syn keyword shCondError elif else then
+endif
 
 " Useful ksh Keywords: {{{1
 " ====================
@@ -589,20 +598,22 @@ if exists("b:is_kornshell")
   hi def link shFunctionParen		Delimiter
 endif
 
-hi def link shCaseError		Error
-hi def link shCondError		Error
-hi def link shCurlyError		Error
-hi def link shDerefError		Error
-hi def link shDerefOpError		Error
-hi def link shDerefWordError		Error
-hi def link shDoError		Error
-hi def link shEsacError		Error
-hi def link shIfError		Error
-hi def link shInError		Error
-hi def link shParenError		Error
-hi def link shTestError		Error
-if exists("b:is_kornshell")
-  hi def link shDTestError		Error
+if !exists("g:sh_no_error")
+ hi def link shCaseError		Error
+ hi def link shCondError		Error
+ hi def link shCurlyError		Error
+ hi def link shDerefError		Error
+ hi def link shDerefOpError		Error
+ hi def link shDerefWordError		Error
+ hi def link shDoError		Error
+ hi def link shEsacError		Error
+ hi def link shIfError		Error
+ hi def link shInError		Error
+ hi def link shParenError		Error
+ hi def link shTestError		Error
+ if exists("b:is_kornshell")
+   hi def link shDTestError		Error
+ endif
 endif
 
 hi def link shArithmetic		Special
--- a/runtime/syntax/tex.vim
+++ b/runtime/syntax/tex.vim
@@ -1,8 +1,8 @@
 " Vim syntax file
 " Language:	TeX
 " Maintainer:	Dr. Charles E. Campbell, Jr. <NdrchipO@ScampbellPfamily.AbizM>
-" Last Change:	Oct 12, 2011 
-" Version:	69
+" Last Change:	Jan 10, 2012
+" Version:	72
 " URL:		http://mysite.verizon.net/astronaut/vim/index.html#vimlinks_syntax
 "
 " Notes: {{{1
@@ -603,6 +603,7 @@ if has("conceal") && &enc == 'utf-8'
   let s:texMathList=[
     \ ['|'		, '‖'],
     \ ['aleph'		, 'ℵ'],
+    \ ['amalg'		, '∐'],
     \ ['angle'		, '∠'],
     \ ['approx'		, '≈'],
     \ ['ast'		, '∗'],
@@ -614,20 +615,24 @@ if has("conceal") && &enc == 'utf-8'
     \ ['because'	, '∵'],
     \ ['between'	, '≬'],
     \ ['bigcap'		, '∩'],
+    \ ['bigcirc'	, '○'],
     \ ['bigcup'		, '∪'],
     \ ['bigodot'	, '⊙'],
     \ ['bigoplus'	, '⊕'],
     \ ['bigotimes'	, '⊗'],
     \ ['bigsqcup'	, '⊔'],
     \ ['bigtriangledown', '∇'],
+    \ ['bigtriangleup'	, '∆'],
     \ ['bigvee'		, '⋁'],
     \ ['bigwedge'	, '⋀'],
     \ ['blacksquare'	, '∎'],
     \ ['bot'		, '⊥'],
+    \ ['bowtie'	        , '⋈'],
     \ ['boxdot'		, '⊡'],
     \ ['boxminus'	, '⊟'],
     \ ['boxplus'	, '⊞'],
     \ ['boxtimes'	, '⊠'],
+    \ ['bullet'	        , '•'],
     \ ['bumpeq'		, '≏'],
     \ ['Bumpeq'		, '≎'],
     \ ['cap'		, '∩'],
@@ -651,36 +656,41 @@ if has("conceal") && &enc == 'utf-8'
     \ ['curlyeqsucc'	, '⋟'],
     \ ['curlyvee'	, '⋎'],
     \ ['curlywedge'	, '⋏'],
+    \ ['dagger'	        , '†'],
     \ ['dashv'		, '⊣'],
+    \ ['ddagger'	, '‡'],
+    \ ['ddots'	        , '⋱'],
     \ ['diamond'	, '⋄'],
     \ ['diamondsuit'	, '♢'],
     \ ['div'		, '÷'],
     \ ['doteq'		, '≐'],
     \ ['doteqdot'	, '≑'],
     \ ['dotplus'	, '∔'],
+    \ ['dots'		, '…'],
     \ ['dotsb'		, '⋯'],
     \ ['dotsc'		, '…'],
-    \ ['dots'		, '…'],
     \ ['dotsi'		, '⋯'],
     \ ['dotso'		, '…'],
     \ ['doublebarwedge'	, '⩞'],
     \ ['downarrow'	, '↓'],
     \ ['Downarrow'	, '⇓'],
+    \ ['ell'		, 'ℓ'],
     \ ['emptyset'	, '∅'],
     \ ['eqcirc'		, '≖'],
     \ ['eqsim'		, '≂'],
     \ ['eqslantgtr'	, '⪖'],
     \ ['eqslantless'	, '⪕'],
     \ ['equiv'		, '≡'],
-    \ ['ell'		, 'ℓ'],
     \ ['exists'		, '∃'],
     \ ['fallingdotseq'	, '≒'],
     \ ['flat'		, '♭'],
     \ ['forall'		, '∀'],
+    \ ['frown'		, '⁔'],
     \ ['ge'		, '≥'],
     \ ['geq'		, '≥'],
     \ ['geqq'		, '≧'],
     \ ['gets'		, '←'],
+    \ ['gg'		, '⟫'],
     \ ['gneqq'		, '≩'],
     \ ['gtrdot'		, '⋗'],
     \ ['gtreqless'	, '⋛'],
@@ -700,33 +710,40 @@ if has("conceal") && &enc == 'utf-8'
     \ ['lceil'		, '⌈'],
     \ ['ldots'		, '…'],
     \ ['le'		, '≤'],
+    \ ['leadsto'	, '↝'],
+    \ ['left('		, '('],
+    \ ['left\['		, '['],
+    \ ['left\\{'	, '{'],
     \ ['leftarrow'	, '⟵'],
     \ ['Leftarrow'	, '⟸'],
     \ ['leftarrowtail'	, '↢'],
-    \ ['left('		, '('],
-    \ ['left\['		, '['],
-    \ ['left\\{'	, '{'],
+    \ ['leftharpoondown', '↽'],
+    \ ['leftharpoonup'	, '↼'],
     \ ['leftrightarrow'	, '⇔'],
+    \ ['Leftrightarrow'	, '⇔'],
     \ ['leftrightsquigarrow', '↭'],
     \ ['leftthreetimes'	, '⋋'],
     \ ['leq'		, '≤'],
+    \ ['leq'		, '≤'],
     \ ['leqq'		, '≦'],
     \ ['lessdot'	, '⋖'],
     \ ['lesseqgtr'	, '⋚'],
     \ ['lesssim'	, '≲'],
     \ ['lfloor'		, '⌊'],
+    \ ['ll'		, '≪'],
     \ ['lmoustache'     , '╭'],
     \ ['lneqq'		, '≨'],
     \ ['ltimes'		, '⋉'],
     \ ['mapsto'		, '↦'],
     \ ['measuredangle'	, '∡'],
     \ ['mid'		, '∣'],
+    \ ['models'		, '╞'],
     \ ['mp'		, '∓'],
     \ ['nabla'		, '∇'],
     \ ['natural'	, '♮'],
     \ ['ncong'		, '≇'],
+    \ ['ne'		, '≠'],
     \ ['nearrow'	, '↗'],
-    \ ['ne'		, '≠'],
     \ ['neg'		, '¬'],
     \ ['neq'		, '≠'],
     \ ['nexists'	, '∄'],
@@ -763,12 +780,13 @@ if has("conceal") && &enc == 'utf-8'
     \ ['otimes'		, '⊗'],
     \ ['owns'		, '∋'],
     \ ['P'	        , '¶'],
+    \ ['parallel'	, '║'],
     \ ['partial'	, '∂'],
     \ ['perp'		, '⊥'],
     \ ['pitchfork'	, '⋔'],
     \ ['pm'		, '±'],
+    \ ['prec'		, '≺'],
     \ ['precapprox'	, '⪷'],
-    \ ['prec'		, '≺'],
     \ ['preccurlyeq'	, '≼'],
     \ ['preceq'		, '⪯'],
     \ ['precnapprox'	, '⪹'],
@@ -780,12 +798,13 @@ if has("conceal") && &enc == 'utf-8'
     \ ['rceil'		, '⌉'],
     \ ['Re'		, 'ℜ'],
     \ ['rfloor'		, '⌋'],
+    \ ['right)'		, ')'],
+    \ ['right]'		, ']'],
+    \ ['right\\}'	, '}'],
     \ ['rightarrow'	, '⟶'],
     \ ['Rightarrow'	, '⟹'],
     \ ['rightarrowtail'	, '↣'],
-    \ ['right)'		, ')'],
-    \ ['right]'		, ']'],
-    \ ['right\\}'	, '}'],
+    \ ['rightleftharpoons', '⇌'],
     \ ['rightsquigarrow', '↝'],
     \ ['rightthreetimes', '⋌'],
     \ ['risingdotseq'	, '≓'],
@@ -796,6 +815,8 @@ if has("conceal") && &enc == 'utf-8'
     \ ['setminus'	, '∖'],
     \ ['sharp'		, '♯'],
     \ ['sim'		, '∼'],
+    \ ['simeq'		, '⋍'],
+    \ ['smile'		, '‿'],
     \ ['spadesuit'	, '♠'],
     \ ['sphericalangle'	, '∢'],
     \ ['sqcap'		, '⊓'],
@@ -804,20 +825,22 @@ if has("conceal") && &enc == 'utf-8'
     \ ['sqsubseteq'	, '⊑'],
     \ ['sqsupset'	, '⊐'],
     \ ['sqsupseteq'	, '⊒'],
+    \ ['star'		, '✫'],
     \ ['subset'		, '⊂'],
     \ ['Subset'		, '⋐'],
     \ ['subseteq'	, '⊆'],
     \ ['subseteqq'	, '⫅'],
     \ ['subsetneq'	, '⊊'],
     \ ['subsetneqq'	, '⫋'],
+    \ ['succ'		, '≻'],
     \ ['succapprox'	, '⪸'],
-    \ ['succ'		, '≻'],
     \ ['succcurlyeq'	, '≽'],
     \ ['succeq'		, '⪰'],
     \ ['succnapprox'	, '⪺'],
     \ ['succneqq'	, '⪶'],
     \ ['succsim'	, '≿'],
     \ ['sum'		, '∑'],
+    \ ['supset'		, '⊃'],
     \ ['Supset'		, '⋑'],
     \ ['supseteq'	, '⊇'],
     \ ['supseteqq'	, '⫆'],
@@ -847,12 +870,15 @@ if has("conceal") && &enc == 'utf-8'
     \ ['vDash'		, '⊨'],
     \ ['Vdash'		, '⊩'],
     \ ['vdots'		, '⋮'],
+    \ ['vee'		, '∨'],
     \ ['veebar'		, '⊻'],
-    \ ['vee'		, '∨'],
     \ ['Vvdash'		, '⊪'],
     \ ['wedge'		, '∧'],
     \ ['wp'		, '℘'],
     \ ['wr'		, '≀']]
+"    \ ['jmath'		, 'X']
+"    \ ['uminus'	, 'X']
+"    \ ['uplus'		, 'X']
   for texmath in s:texMathList
    if texmath[0] =~ '\w$'
     exe "syn match texMathSymbol '\\\\".texmath[0]."\\>' contained conceal cchar=".texmath[1]
@@ -999,6 +1025,9 @@ if has("conceal") && &enc == 'utf-8'
   call s:SuperSub('texSuperscript','\^','T','ᵀ')
   call s:SuperSub('texSuperscript','\^','U','ᵁ')
   call s:SuperSub('texSuperscript','\^','W','ᵂ')
+  call s:SuperSub('texSuperscript','\^',',','︐')
+  call s:SuperSub('texSuperscript','\^',':','︓')
+  call s:SuperSub('texSuperscript','\^',';','︔')
   call s:SuperSub('texSuperscript','\^','+','⁺')
   call s:SuperSub('texSuperscript','\^','-','⁻')
   call s:SuperSub('texSuperscript','\^','<','˂')
@@ -1023,6 +1052,7 @@ if has("conceal") && &enc == 'utf-8'
   call s:SuperSub('texSubscript','_','i','ᵢ')
   call s:SuperSub('texSubscript','_','o','ₒ')
   call s:SuperSub('texSubscript','_','u','ᵤ')
+  call s:SuperSub('texSubscript','_',',','︐')
   call s:SuperSub('texSubscript','_','+','₊')
   call s:SuperSub('texSubscript','_','-','₋')
   call s:SuperSub('texSubscript','_','/','ˏ')
@@ -1175,6 +1205,8 @@ if did_tex_syntax_inits == 1
    HiLink texGreek		texStatement
    HiLink texSuperscript	texStatement
    HiLink texSubscript		texStatement
+   HiLink texSuperscripts 	texSuperscript
+   HiLink texSubscripts 	texSubscript
    HiLink texMathSymbol		texStatement
    HiLink texMathZoneV		texMath
    HiLink texMathZoneW		texMath
--- a/runtime/syntax/upstart.vim
+++ b/runtime/syntax/upstart.vim
@@ -2,8 +2,8 @@
 " Language:	Upstart job files
 " Maintainer:	Michael Biebl <biebl@debian.org>
 "		James Hunt <james.hunt@ubuntu.com>
-" Last Change:	2011 Mar 22
-" License:	GPL v2
+" Last Change:	2012 Jan 16
+" License:	The Vim license
 " Version:	0.4
 " Remark:	Syntax highlighting for Upstart (init(8)) job files.
 "
--- a/runtime/syntax/vim.vim
+++ b/runtime/syntax/vim.vim
@@ -1,14 +1,16 @@
 " Vim syntax file
 " Language:	Vim 7.3 script
 " Maintainer:	Dr. Charles E. Campbell, Jr. <NdrOchipS@PcampbellAfamily.Mbiz>
-" Last Change:	Jul 18, 2011
-" Version:	7.3-08
+" Last Change:	Jan 11, 2012
+" Version:	7.3-13
 " Automatically generated keyword lists: {{{1
 
 " Quit when a syntax file was already loaded {{{2
 if exists("b:current_syntax")
   finish
 endif
+let s:keepcpo= &cpo
+set cpo&vim
 
 " vimTodo: contains common special-notices for comments {{{2
 " Use the vimCommentGroup cluster to add your own.
@@ -118,14 +120,14 @@ syn region vimInsert	matchgroup=vimComma
 " =======
 syn match   vimBehave	"\<be\%[have]\>" skipwhite nextgroup=vimBehaveModel,vimBehaveError
 syn keyword vimBehaveModel contained	mswin	xterm
-if !exists("g:vimsyn_noerror")
+if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_nobehaveerror")
  syn match   vimBehaveError contained	"[^ ]\+"
 endif
 
 " Filetypes {{{2
 " =========
 syn match   vimFiletype	"\<filet\%[ype]\(\s\+\I\i*\)*"	skipwhite contains=vimFTCmd,vimFTOption,vimFTError
-if !exists("g:vimsyn_noerror")
+if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_vimFTError")
  syn match   vimFTError  contained	"\I\i*"
 endif
 syn keyword vimFTCmd    contained	filet[ype]
@@ -140,7 +142,7 @@ else
  syn region  vimAugroup	start="\<aug\%[roup]\>\s\+\K\k*" end="\<aug\%[roup]\>\s\+[eE][nN][dD]\>"	contains=vimAugroupKey,vimAutoCmd,@vimAugroupList keepend
 endif
 syn match   vimAugroup	"aug\%[roup]!" contains=vimAugroupKey
-if !exists("g:vimsyn_noerror")
+if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_noaugrouperror")
  syn match   vimAugroupError	"\<aug\%[roup]\>\s\+[eE][nN][dD]\>"
 endif
 syn keyword vimAugroupKey contained	aug[roup]
@@ -152,7 +154,7 @@ syn match	vimOper	"\(==\|!=\|>=\|<=\|=\~
 syn match	vimOper	"||\|&&\|[-+.]"	skipwhite nextgroup=vimString,vimSpecFile
 syn region	vimOperParen 	oneline matchgroup=vimParenSep	start="(" end=")" contains=@vimOperGroup
 syn region	vimOperParen	oneline matchgroup=vimSep	start="{" end="}" contains=@vimOperGroup nextgroup=vimVar,vimFuncVar
-if !exists("g:vimsyn_noerror")
+if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_noopererror")
  syn match	vimOperError	")"
 endif
 
@@ -196,7 +198,7 @@ syn match	vimUserAttrb	contained	"-cou\%
 syn match	vimUserAttrb	contained	"-bang\=\>"	contains=vimOper,vimUserAttrbKey
 syn match	vimUserAttrb	contained	"-bar\>"	contains=vimOper,vimUserAttrbKey
 syn match	vimUserAttrb	contained	"-re\%[gister]\>"	contains=vimOper,vimUserAttrbKey
-if !exists("g:vimsyn_noerror")
+if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_nousercmderror")
  syn match	vimUserCmdError	contained	"\S\+\>"
 endif
 syn case ignore
@@ -269,7 +271,7 @@ syn match	vimMark	"\<norm\%[al]\s\zs'[a-
 syn match	vimMarkNumber	"[-+]\d\+"		nextgroup=vimSubst contained contains=vimOper
 syn match	vimPlainMark contained	"'[a-zA-Z0-9]"
 
-syn match	vimRegister	'[^,;[{]\zs"[a-zA-Z0-9.%#:_\-/]\ze[^a-zA-Z_":]'
+syn match	vimRegister	'[^,;[{]\zs"[a-zA-Z0-9.%#:_\-/]\ze[^a-zA-Z_":0-9]'
 syn match	vimRegister	'\<norm\s\+\zs"[a-zA-Z0-9]'
 syn match	vimRegister	'\<normal\s\+\zs"[a-zA-Z0-9]'
 syn match	vimRegister	'@"'
@@ -282,8 +284,8 @@ syn match	vimFilter contained	"^!.\{-}\(
 syn match	vimFilter contained	"\A!.\{-}\(|\|$\)"ms=s+1	contains=vimSpecFile,vimFunction,vimFuncName,vimOperParen
 
 " Complex repeats (:h complex-repeat) {{{2
-syn match	vimCmplxRepeat	'[^a-zA-Z_/\\()]q[0-9a-zA-Z"]'lc=1
-syn match	vimCmplxRepeat	'@[0-9a-z".=@:]\ze\($\|[^a-zA-Z]\)'
+syn match	vimCmplxRepeat	'[^a-zA-Z_/\\()]q[0-9a-zA-Z"]\>'lc=1
+syn match	vimCmplxRepeat	'@[0-9a-z".=@:]\ze\($\|[^a-zA-Z]\>\)'
 
 " Set command and associated set-options (vimOptions) with comment {{{2
 syn region	vimSet		matchgroup=vimCommand start="\<\%(setl\%[ocal]\|setg\%[lobal]\|se\%[t]\)\>" skip="\%(\\\\\)*\\." end="$" matchgroup=vimNotation end="<[cC][rR]>" keepend oneline contains=vimSetEqual,vimOption,vimErrSetting,vimComment,vimSetString,vimSetMod
@@ -364,7 +366,7 @@ syn match vimNotFunc	"\<if\>\|\<el\%[sei
 
 " Errors And Warnings: {{{2
 " ====================
-if !exists("g:vimsyn_noerror")
+if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimfunctionerror")
  syn match	vimFunctionError	"\s\zs[a-z0-9]\i\{-}\ze\s*("			contained contains=vimFuncKey,vimFuncBlank
 " syn match	vimFunctionError	"\s\zs\%(<[sS][iI][dD]>\|[sSgGbBwWtTlL]:\)[0-9]\i\{-}\ze\s*("	contained contains=vimFuncKey,vimFuncBlank
  syn match	vimElseIfErr	"\<else\s\+if\>"
@@ -381,7 +383,7 @@ syn match	vimNormCmds contained	".*$"
 syn match	vimGroupList	contained	"@\=[^ \t,]*"	contains=vimGroupSpecial,vimPatSep
 syn match	vimGroupList	contained	"@\=[^ \t,]*,"	nextgroup=vimGroupList contains=vimGroupSpecial,vimPatSep
 syn keyword	vimGroupSpecial	contained	ALL	ALLBUT	CONTAINED	TOP
-if !exists("g:vimsyn_noerror")
+if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimsynerror")
  syn match	vimSynError	contained	"\i\+"
  syn match	vimSynError	contained	"\i\+="	nextgroup=vimGroupList
 endif
@@ -395,7 +397,7 @@ syn cluster vimFuncBodyList add=vimSynta
 
 " Syntax: case {{{2
 syn keyword	vimSynType	contained	case	skipwhite nextgroup=vimSynCase,vimSynCaseError
-if !exists("g:vimsyn_noerror")
+if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimsyncaseerror")
  syn match	vimSynCaseError	contained	"\i\+"
 endif
 syn keyword	vimSynCase	contained	ignore	match
@@ -456,7 +458,7 @@ syn cluster vimFuncBodyList add=vimSynTy
 " Syntax: sync {{{2
 " ============
 syn keyword vimSynType	contained	sync	skipwhite	nextgroup=vimSyncC,vimSyncLines,vimSyncMatch,vimSyncError,vimSyncLinebreak,vimSyncLinecont,vimSyncRegion
-if !exists("g:vimsyn_noerror")
+if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimsyncerror")
  syn match	vimSyncError	contained	"\i\+"
 endif
 syn keyword	vimSyncC	contained	ccomment	clear	fromstart
@@ -477,6 +479,9 @@ syn match	vimIsCommand	"<Bar>\s*\a\+"	tr
 " Highlighting {{{2
 " ============
 syn cluster	vimHighlightCluster		contains=vimHiLink,vimHiClear,vimHiKeyList,vimComment
+if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimhictermerror")
+ syn match	vimHiCtermError	contained	"[^0-9]\i*"
+endif
 syn match	vimHighlight	"\<hi\%[ghlight]\>"	skipwhite nextgroup=vimHiBang,@vimHighlightCluster
 syn match	vimHiBang	contained	"!"	skipwhite nextgroup=@vimHighlightCluster
 
@@ -488,20 +493,18 @@ syn case match
 syn match	vimHiAttribList	contained	"\i\+"	contains=vimHiAttrib
 syn match	vimHiAttribList	contained	"\i\+,"he=e-1	contains=vimHiAttrib nextgroup=vimHiAttribList
 syn case ignore
-syn keyword	vimHiCtermColor	contained	black blue brown cyan darkBlue darkcyan darkgray darkgreen darkgrey darkmagenta darkred darkyellow gray green grey lightblue lightcyan lightgray lightgreen lightgrey lightmagenta lightred magenta red white yellow
+syn keyword	vimHiCtermColor	contained	black blue brown cyan darkblue darkcyan darkgray darkgreen darkgrey darkmagenta darkred darkyellow gray green grey lightblue lightcyan lightgray lightgreen lightgrey lightmagenta lightred magenta red white yellow
+syn match	vimHiCtermColor	contained	"\<color\d\{1,3}\>"
 
 syn case match
 syn match	vimHiFontname	contained	"[a-zA-Z\-*]\+"
 syn match	vimHiGuiFontname	contained	"'[a-zA-Z\-* ]\+'"
 syn match	vimHiGuiRgb	contained	"#\x\{6}"
-if !exists("g:vimsyn_noerror")
- syn match	vimHiCtermError	contained	"[^0-9]\i*"
-endif
 
 " Highlighting: hi group key=arg ... {{{2
 syn cluster	vimHiCluster contains=vimGroup,vimHiGroup,vimHiTerm,vimHiCTerm,vimHiStartStop,vimHiCtermFgBg,vimHiGui,vimHiGuiFont,vimHiGuiFgBg,vimHiKeyError,vimNotation
 syn region	vimHiKeyList	contained oneline start="\i\+" skip="\\\\\|\\|" end="$\||"	contains=@vimHiCluster
-if !exists("g:vimsyn_noerror")
+if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_vimhikeyerror")
  syn match	vimHiKeyError	contained	"\i\+="he=e-1
 endif
 syn match	vimHiTerm	contained	"\cterm="he=e-1		nextgroup=vimHiAttribList
@@ -757,7 +760,9 @@ hi def link vimFTCmd	vimCommand
 hi def link vimFTOption	vimSynType
 hi def link vimFuncKey	vimCommand
 hi def link vimGroupAdd	vimSynOption
+hi def link vimGroupName	vimGroup
 hi def link vimGroupRem	vimSynOption
+hi def link vimHiClear	vimHighlight
 hi def link vimHiCtermFgBg	vimHiTerm
 hi def link vimHiCTerm	vimHiTerm
 hi def link vimHighlight	vimCommand
@@ -872,8 +877,14 @@ hi def link vimTodo	Todo
 hi def link vimUserAttrbCmpltFunc	Special
 hi def link vimUserCmdError	Error
 hi def link vimUserFunc	Normal
+hi def link vimVar	Identifier
 hi def link vimWarn	WarningMsg
 
 " Current Syntax Variable: {{{2
 let b:current_syntax = "vim"
+
+" ---------------------------------------------------------------------
+" Cleanup: {{{1
+let &cpo = s:keepcpo
+unlet s:keepcpo
 " vim:ts=18  fdm=marker