changeset 12968:45987b1b77dc

Update runtime files commit https://github.com/vim/vim/commit/2f0584910c0ea93966dfa7b3b0272dfb16ea6f91 Author: Bram Moolenaar <Bram@vim.org> Date: Thu Nov 30 20:27:52 2017 +0100 Update runtime files
author Christian Brabandt <cb@256bit.org>
date Thu, 30 Nov 2017 20:30:08 +0100
parents ec2cd6ab9411
children a9f6a874b64f
files runtime/doc/Makefile runtime/doc/eval.txt runtime/doc/if_cscop.txt runtime/doc/if_perl.txt runtime/doc/insert.txt runtime/doc/mbyte.txt runtime/doc/options.txt runtime/doc/tags runtime/doc/todo.txt runtime/doc/version8.txt runtime/filetype.vim runtime/ftplugin/zsh.vim runtime/syntax/cf.vim runtime/syntax/zsh.vim
diffstat 14 files changed, 1044 insertions(+), 463 deletions(-) [+]
line wrap: on
line diff
--- a/runtime/doc/Makefile
+++ b/runtime/doc/Makefile
@@ -375,6 +375,10 @@ tags.ref tags.html: tags
 perlhtml: tags $(DOCS)
 	./vim2html.pl tags $(DOCS)
 
+# Check URLs in the help with "curl".
+test_urls:
+	vim -S test_urls.vim
+
 clean:
 	-rm doctags *.html tags.ref
 
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -1,4 +1,4 @@
-*eval.txt*	For Vim version 8.0.  Last change: 2017 Nov 19
+*eval.txt*	For Vim version 8.0.  Last change: 2017 Nov 24
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -4662,11 +4662,11 @@ getqflist([{what}])					*getqflist()*
 		following string items are supported in {what}:
 			context	get the context stored with |setqflist()|
 			efm	errorformat to use when parsing "lines". If
-				not present, then the 'erroformat' option
+				not present, then the 'errorformat' option
 				value is used.
 			id	get information for the quickfix list with
 				|quickfix-ID|; zero means the id for the
-				current list or the list specifed by "nr"
+				current list or the list specified by "nr"
 			idx	index of the current entry in the list
 			items	quickfix list entries
 			lines	use 'errorformat' to extract items from a list
@@ -7695,8 +7695,9 @@ submatch({nr} [, {list}])			*submatch()*
 		When substitute() is used recursively only the submatches in
 		the current (deepest) call can be obtained.
 
-		Example: >
+		Examples: >
 			:s/\d\+/\=submatch(0) + 1/
+			:echo substitute(text, '\d\+', '\=submatch(0) + 1', '')
 <		This finds the first number in the line and adds one to it.
 		A line break is included as a newline character.
 
--- a/runtime/doc/if_cscop.txt
+++ b/runtime/doc/if_cscop.txt
@@ -1,4 +1,4 @@
-*if_cscop.txt*  For Vim version 8.0.  Last change: 2017 Jun 14
+*if_cscop.txt*  For Vim version 8.0.  Last change: 2017 Nov 23
 
 
 		  VIM REFERENCE MANUAL    by Andy Kahn
@@ -468,36 +468,18 @@ license or OS distribution), then you ca
 	http://cscope.sourceforge.net/
 This is released by SCO under the BSD license.
 
-If you want a newer version of cscope, you will probably have to buy it.
-According to the (old) nvi documentation:
-
-	You can buy version 13.3 source with an unrestricted license
-	for $400 from AT&T Software Solutions by calling +1-800-462-8146.
-
-Also you can download cscope 13.x and mlcscope 14.x (multi-lingual cscope
-which supports C, C++, Java, lex, yacc, breakpoint listing, Ingres, and SDL)
-from World-Wide Exptools Open Source packages page:
-	http://www.bell-labs.com/project/wwexptools/packages.html
-
 In Solaris 2.x, if you have the C compiler license, you will also have
 cscope.  Both are usually located under /opt/SUNWspro/bin
 
-SGI developers can also get it.  Search for Cscope on this page:
-	http://freeware.sgi.com/index-by-alpha.html
-	https://toolbox.sgi.com/toolbox/utilities/cscope/
-The second one is for those who have a password for the SGI toolbox.
-
 There is source to an older version of a cscope clone (called "cs") available
 on the net.  Due to various reasons, this is not supported with Vim.
 
 The cscope interface/support for Vim was originally written by
 Andy Kahn <ackahn@netapp.com>.  The original structure (as well as a tiny
-bit of code) was adapted from the cscope interface in nvi.  Please report
-any problems, suggestions, patches, et al., you have for the usage of
-cscope within Vim to him.
+bit of code) was adapted from the cscope interface in nvi.
 							*cscope-win32*
-For a cscope version for Win32 see:
-	http://code.google.com/p/cscope-win32/
+For a cscope version for Win32 see (seems abandonded):
+	https://code.google.com/archive/p/cscope-win32/
 
 Win32 support was added by Sergey Khorev <sergey.khorev@gmail.com>.  Contact
 him if you have Win32-specific issues.
--- a/runtime/doc/if_perl.txt
+++ b/runtime/doc/if_perl.txt
@@ -1,4 +1,4 @@
-*if_perl.txt*   For Vim version 8.0.  Last change: 2015 Oct 16
+*if_perl.txt*   For Vim version 8.0.  Last change: 2017 Nov 24
 
 
 		  VIM REFERENCE MANUAL    by Sven Verdoolaege
@@ -112,7 +112,7 @@ possible.
 Here is an overview of the functions that are available to Perl: >
 
   :perl VIM::Msg("Text")		# displays a message
-  :perl VIM::Msg("Error", "ErrorMsg")	# displays an error message
+  :perl VIM::Msg("Wrong!", "ErrorMsg")	# displays an error message
   :perl VIM::Msg("remark", "Comment")	# displays a highlighted message
   :perl VIM::SetOption("ai")		# sets a vim option
   :perl $nbuf = VIM::Buffers()		# returns the number of buffers
--- a/runtime/doc/insert.txt
+++ b/runtime/doc/insert.txt
@@ -1,4 +1,4 @@
-*insert.txt*    For Vim version 8.0.  Last change: 2017 May 30
+*insert.txt*    For Vim version 8.0.  Last change: 2017 Nov 23
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -1296,7 +1296,8 @@ it here: http://ctags.sourceforge.net/  
 For version 5.5.4 you should add a patch that adds the "typename:" field:
 	ftp://ftp.vim.org/pub/vim/unstable/patches/ctags-5.5.4.patch
 A compiled .exe for MS-Windows can be found at:
-	http://georgevreilly.com/vim/ctags.html
+	http://ctags.sourceforge.net/
+	https://github.com/universal-ctags/ctags-win32
 
 If you want to complete system functions you can do something like this.  Use
 ctags to generate a tags file for all the system header files: >
--- a/runtime/doc/mbyte.txt
+++ b/runtime/doc/mbyte.txt
@@ -1,4 +1,4 @@
-*mbyte.txt*     For Vim version 8.0.  Last change: 2016 Jul 21
+*mbyte.txt*     For Vim version 8.0.  Last change: 2017 Nov 30
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar et al.
@@ -1257,8 +1257,8 @@ Combining forms:
 ==============================================================================
 10.  Input with imactivatefunc()				*mbyte-func*
 
-Vim has |imactivatefunc()| and |imstatusfunc()|. This is useful to
-activate/deativate input method from Vim in any way, also with an external
+Vim has the 'imactivatefunc' and 'imstatusfunc' options. These are useful to
+activate/deativate the input method from Vim in any way, also with an external
 command. For example, fcitx provide fcitx-remote command: >
 
 	set iminsert=2
--- a/runtime/doc/options.txt
+++ b/runtime/doc/options.txt
@@ -1,4 +1,4 @@
-*options.txt*	For Vim version 8.0.  Last change: 2017 Nov 18
+*options.txt*	For Vim version 8.0.  Last change: 2017 Nov 26
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -4464,8 +4464,8 @@ A jump table for the options with a shor
 	match may not be found.  This is to avoid that Vim hangs while you
 	are typing the pattern.
 	The highlighting can be set with the 'i' flag in 'highlight'.
-	When 'hlsearch' is on, all matched strings are highlighted too while typing
-	a search command. See also: 'hlsearch'.
+	When 'hlsearch' is on, all matched strings are highlighted too while
+	typing a search command. See also: 'hlsearch'.
 	If you don't want turn 'hlsearch' on, but want to highlight all matches
 	while searching, you can turn on and off 'hlsearch' with autocmd.
 	Example: >
@@ -8255,7 +8255,7 @@ A jump table for the options with a shor
 	number, more intelligent detection process runs.
 	The "xterm2" value will be set if the xterm version is reported to be
 	from 95 to 276.  The "sgr" value will be set if the xterm version is
-	277 or highter and when Vim detects Mac Terminal.app or Iterm2.
+	277 or higher and when Vim detects Mac Terminal.app or iTerm2.
 	If you do not want 'ttymouse' to be set to "xterm2" or "sgr"
 	automatically, set t_RV to an empty string: >
 		:set t_RV=
--- a/runtime/doc/tags
+++ b/runtime/doc/tags
@@ -7346,6 +7346,7 @@ mbyte-encoding	mbyte.txt	/*mbyte-encodin
 mbyte-first	mbyte.txt	/*mbyte-first*
 mbyte-fonts-MSwin	mbyte.txt	/*mbyte-fonts-MSwin*
 mbyte-fonts-X11	mbyte.txt	/*mbyte-fonts-X11*
+mbyte-func	mbyte.txt	/*mbyte-func*
 mbyte-keymap	mbyte.txt	/*mbyte-keymap*
 mbyte-locale	mbyte.txt	/*mbyte-locale*
 mbyte-options	mbyte.txt	/*mbyte-options*
--- a/runtime/doc/todo.txt
+++ b/runtime/doc/todo.txt
@@ -1,4 +1,4 @@
-*todo.txt*      For Vim version 8.0.  Last change: 2017 Nov 21
+*todo.txt*      For Vim version 8.0.  Last change: 2017 Nov 29
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -35,6 +35,13 @@ entered there will not be repeated below
 							*known-bugs*
 -------------------- Known bugs and current work -----------------------
 
+Motif testgui:
+From test_options.vim:
+Found errors in Test_set_values():
+Caught exception in Test_set_values(): Vim(set):E596: Invalid font(s): guifont=fixedsys @ /home/mool/vim/vim80/src/testdir/opt_test.vim, line 1153
+
+WinBar: balloon shows up for next line
+
 No maintainer for Vietnamese translations.
 No maintainer for Simplified Chinese translations.
 
@@ -150,8 +157,17 @@ Compiler warnings (geeknik, 2017 Oct 26)
 - signed integer overflow in nfa_regatom() (#2251)
 - undefined left shift in get_string_tv() (#2250)
 
-Patch to use imactivatefunc() also without +xim feature. (Yasuhiro Matsumoto,
-2017 Nov 19, #2349)
+patch for: fix SHIFT-Insert on Windows command prompt (Yasuhiro Matsumoto,
+#2381)
+
+Patch for profile log truncating halfway a character. (ichizok, 2017 Nov 28,
+#2385)
+
+WinBar: Maximizing window causes window size to be wrong. (Lifepillar, 2017
+Nov 29, #2356)
+
+CTRL-A does not work with empty line. (Alex, #2387)
+Patch by Hirohito Higashi, 2017 Nov 29.
 
 'hlsearch' shows empty matches, which means highlighting everything.
 Don't do that.  For "foo\|" or "\v"
@@ -171,12 +187,6 @@ With foldmethod=syntax and nofoldenable 
 Using 'wildignore' also applies to literally entered file name.  Also with
 :drop (remote commands).
 
-Race condition between stat() and open() in write_viminfo(). Use open() in the
-loop and try another name instead of using a temp file. (Simon Ruderich)
-The first one, when viminfo is new, should just fail if it creating with
-O_EXCL fails.
-Also use umask instead of mch_fopen() after vim_tempname().
-
 "gvim --remote" from a directory with non-word characters changes the current
 directory (Paulo Marcel Coelho Arabic, 2017 Oct 30, #2266)
 Also see #1689.
@@ -184,6 +194,9 @@ Also see #1689.
 ml_get error when using a Python. (Yggdroot, 2017 Jun 1, #1737)
 Lemonboy can reproduce (2017 Jun 5)
 
+Patch to fix E806. (Dominique, 2017 Nov 22, #2368)
+Kazunobu Kuriyama: caused by XtSetLanguageProc().
+
 Invalid range error when using BufWinLeave for closing terminal.
 (Gabriel Barta, 2017 Nov 15, #2339)
 
@@ -208,7 +221,7 @@ 13, on issue #2320)
 
 Patch to add TextDeletePost and TextYankPost events. (Philippe Vaucher, 2011
 May 24)  Update May 26.
-Now in patch by Lemonboy, #2333  (who is Lemonboy?)
+Now in patch by Lemonboy, #2333
 
 Default install on MS-Windows should source defaults.vim.
 Ask whether to use Windows or Vim key behavior?
--- a/runtime/doc/version8.txt
+++ b/runtime/doc/version8.txt
@@ -1,4 +1,4 @@
-*version8.txt*  For Vim version 8.0.  Last change: 2017 Apr 23
+*version8.txt*  For Vim version 8.0.  Last change: 2017 Nov 24
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -15582,7 +15582,7 @@ Files:      src/json.c, src/testdir/test
 
 Patch 8.0.0181
 Problem:    When 'cursorbind' and 'cursorcolumn' are both on, the column
-            highlignt in non-current windows is wrong.
+            highlight in non-current windows is wrong.
 Solution:   Add validate_cursor(). (Masanori Misono, closes #1372)
 Files:      src/move.c
 
--- a/runtime/filetype.vim
+++ b/runtime/filetype.vim
@@ -1,7 +1,7 @@
 " Vim support file to detect file types
 "
 " Maintainer:	Bram Moolenaar <Bram@vim.org>
-" Last Change:	2017 Nov 21
+" Last Change:	2017 Nov 23
 
 " Listen very carefully, I will say this only once
 if exists("did_load_filetypes")
@@ -1878,8 +1878,8 @@ au BufNewFile,BufRead *.yy,*.yxx,*.y++		
 " Yacc or racc
 au BufNewFile,BufRead *.y			call dist#ft#FTy()
 
-" Yaml
-au BufNewFile,BufRead *.yaml,*.yml		setf yaml
+" Yaml or Raml
+au BufNewFile,BufRead *.yaml,*.yml,*.raml	setf yaml
 
 " yum conf (close enough to dosini)
 au BufNewFile,BufRead */etc/yum.conf		setf dosini
--- a/runtime/ftplugin/zsh.vim
+++ b/runtime/ftplugin/zsh.vim
@@ -2,7 +2,7 @@
 " Language:             Zsh shell script
 " Maintainer:           Christian Brabandt <cb@256bit.org>
 " Previous Maintainer:  Nikolai Weibull <now@bitwi.se>
-" Latest Revision:      2015-05-29
+" Latest Revision:      2017-11-22
 " License:              Vim (see :h license)
 " Repository:           https://github.com/chrisbra/vim-zsh
 
@@ -18,9 +18,7 @@ let b:undo_ftplugin = "setl com< cms< fo
 
 setlocal comments=:# commentstring=#\ %s formatoptions-=t formatoptions+=croql
 
-let b:match_words =
-      \   &matchpairs
-      \ . ',\<if\>:\<elif\>:\<else\>:\<fi\>'
+let b:match_words = ',\<if\>:\<elif\>:\<else\>:\<fi\>'
       \ . ',\<case\>:^\s*([^)]*):\<esac\>'
       \ . ',\<\%(select\|while\|until\|repeat\|for\%(each\)\=\)\>:\<done\>'
 let b:match_skip = 's:comment\|string\|heredoc\|subst'
--- a/runtime/syntax/cf.vim
+++ b/runtime/syntax/cf.vim
@@ -1,437 +1,1018 @@
 " Vim syntax file
-" Language:	CFML
-" Maintainer:	Toby Woodwark (toby.woodwark+vim@gmail.com)
-" Last Change:	2010-03-02
-" Filenames:	*.cfc *.cfm
-" Version:	Adobe ColdFusion 9
-" Usage:	This file contains both syntax definitions
-" 		and a list of known builtin tags, functions and keywords.
-" 		Refs - 
-" http://help.adobe.com/en_US/ColdFusion/9.0/Developing/WS8f0cc78011fffa71866534d11cdad96e4e-8000.html
-" http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec17324-8000.html
-" TODO: 
-" 		Support the limited array literal and struct literal syntax in CF8+.
-" 		Highlight namespaced tags fom cfimport.
-" 		Complete CF9+ cfscript support.
-" 		Railo support.
-" Options:
-"	d_noinclude_html - set to prevent HTML highlighting.	Use this if you are not working on HTML.
+"
+" Language:     CFML (ColdFusion)
+" Author:       Ernst M. van der Linden <ernst.vanderlinden@ernestoz.com>
+" License:      The MIT License (MIT)
+"
+" Maintainer:   Ernst M. van der Linden <ernst.vanderlinden@ernestoz.com>
+" URL:          https://github.com/ernstvanderlinden/vim-coldfusion
+" Last Change:  2017 Nov 28
+"
+" Filenames:    *.cfc *.cfm
 
-" Quit if a syntax file is already loaded.
+" Quit when a syntax file was already loaded.
 if exists("b:current_syntax")
   finish
 endif
 
-if exists("d_noinclude_html")
-  " Define alternatives to the HTML syntax file.
+" Using line continuation here.
+let s:cpo_save=&cpo
+set cpo-=C
+
+sy sync fromstart
+" 20171126: disabled as we have fast computers now.
+"sy sync maxlines=2000
+sy case ignore
+
+" INCLUDES {{{
+sy include @sqlSyntax $VIMRUNTIME/syntax/sql.vim
+" 20161010: Disabled include html highlighting as it contains huge keywords
+" regex, so it will have impact on performance.  Use own simple SGML tag
+" coloring instead.
+"runtime! syntax/html.vim
+" / INCLUDES }}}
+
+" NUMBER {{{
+sy match cfmlNumber
+    \ "\v<\d+>"
+" / NUMBER }}}
+
+" EQUAL SIGN {{{
+sy match cfmlEqualSign
+    \ "\v\="
+" / EQUAL SIGN }}}
+
+" BOOLEAN {{{
+sy match cfmlBoolean
+    \ "\v<(true|false)>"
+" / BOOLEAN }}}
+
+" HASH SURROUNDED {{{
+sy region cfmlHashSurround
+  \ keepend
+  \ oneline
+  \ start="#"
+  \ end="#"
+  \ skip="##"
+    \ contains=
+      \@cfmlOperator,
+      \@cfmlPunctuation,
+      \cfmlBoolean,
+      \cfmlCoreKeyword,
+      \cfmlCoreScope,
+      \cfmlCustomKeyword,
+      \cfmlCustomScope,
+      \cfmlEqualSign,
+      \cfmlFunctionName,
+      \cfmlNumber
+" / HASH SURROUNDED }}}
+
+" OPERATOR {{{
 
-  " Copied from html.vim - the rules for matching a CF tag match	those for HTML/SGML.
-  " CFML syntax is more permissive when it comes to superfluous <> chars.
-  syn region	htmlString	contained start=+"+ end=+"+ contains=@htmlPreproc
-  syn region	htmlString	contained start=+'+ end=+'+ contains=@htmlPreproc
-  syn match	htmlValue	contained "=[\t ]*[^'" \t>][^ \t>]*"hs=s+1	contains=@htmlPreproc
-  " Hacked htmlTag so that it only matches cf tags and not random <> chars.
-  syn region	htmlEndTag	start=+</cf+	end=+>+ contains=htmlTagN,htmlTagError
-  syn region	htmlTag		start=+<\s*cf[^/]+	end=+>+ contains=htmlTagN,htmlString,htmlArg,htmlValue,htmlTagError,@htmlPreproc,@htmlArgCluster
-  syn match	htmlTagN	contained +<\s*[-a-zA-Z0-9]\++hs=s+1 contains=htmlTagName,@htmlTagNameCluster
-  syn match	htmlTagN	contained +</\s*[-a-zA-Z0-9]\++hs=s+2 contains=htmlTagName,@htmlTagNameCluster
-  syn match	htmlTagError	contained "[^>]<"ms=s+1
-else
-  " Use all the stuff from the HTML syntax file.
-  " This means eg HTML comments are highlighted as comments, even if they include cf tags.
-  runtime! syntax/html.vim
-endif
+" OPERATOR - ARITHMETIC {{{
+" +7 -7
+" ++i --i
+" i++ i--
+" + - * / %
+" += -= *= /= %=
+" ^ mod
+sy match cfmlArithmeticOperator
+  \ "\v
+  \(\+|-)\ze\d
+  \|(\+\+|--)\ze\w
+  \|\w\zs(\+\+|--)
+  \|(\s(
+  \(\+|-|\*|\/|\%){1}\={,1}
+  \|\^
+  \|mod
+  \)\s)
+  \"
+" / OPERATOR - ARITHMETIC }}}
 
-syn sync	fromstart
-syn sync	maxlines=200
-syn case	ignore
+" OPERATOR - BOOLEAN {{{
+" not and or xor eqv imp
+" ! && ||
+sy match cfmlBooleanOperator
+  \ "\v\s
+  \(not|and|or|xor|eqv|imp
+  \|\!|\&\&|\|\|
+  \)(\s|\))
+  \|\s\!\ze\w
+  \"
+" / OPERATOR - BOOLEAN }}}
+
+" OPERATOR - DECISION {{{
+"is|equal|eq
+"is not|not equal|neq
+"contains|does not contain
+"greater than|gt
+"less than|lt
+"greater than or equal to|gte|ge
+"less than or equal to|lte|le
+"==|!=|>|<|>=|<=
+sy match cfmlDecisionOperator
+  \ "\v\s
+  \(is|equal|eq
+  \|is not|not equal|neq
+  \|contains|does not contain
+  \|greater than|gt
+  \|less than|lt
+  \|greater than or equal to|gte|ge
+  \|less than or equal to|lte|le
+  \|(!|\<|\>|\=){1}\=
+  \|\<
+  \|\>
+  \)\s"
+" / OPERATOR - DECISION }}}
+
+" OPERATOR - STRING {{{
+" &
+" &=
+sy match cfmlStringOperator
+    \ "\v\s\&\={,1}\s"
+" / OPERATOR - STRING }}}
 
-" Scopes and keywords.
-syn keyword	cfScope		contained cgi cffile cookie request caller this thistag
-syn keyword	cfScope		contained cfcatch variables application server session client form url local
-syn keyword	cfScope		contained arguments super cfhttp attributes error
-syn keyword	cfBool		contained yes no true false
+" OPERATOR - TERNARY {{{
+" ? :
+sy match cfmlTernaryOperator
+  \ "\v\s
+  \\?|\:
+  \\s"
+" / OPERATOR - TERNARY }}}
+
+sy cluster cfmlOperator
+  \ contains=
+    \cfmlArithmeticOperator,
+    \cfmlBooleanOperator,
+    \cfmlDecisionOperator,
+    \cfmlStringOperator,
+    \cfmlTernaryOperator
+" / OPERATOR }}}
+
+" PARENTHESIS {{{
+sy cluster cfmlParenthesisRegionContains
+  \ contains=
+    \@cfmlAttribute,
+    \@cfmlComment,
+    \@cfmlFlowStatement,
+    \@cfmlOperator,
+    \@cfmlPunctuation,
+    \cfmlBoolean,
+    \cfmlBrace,
+    \cfmlCoreKeyword,
+    \cfmlCoreScope,
+    \cfmlCustomKeyword,
+    \cfmlCustomScope,
+    \cfmlEqualSign,
+    \cfmlFunctionName,
+    \cfmlNumber,
+    \cfmlStorageKeyword,
+    \cfmlStorageType
 
-" Operator strings.
-" ColdFusion <=7:
-syn keyword	cfOperator		contained xor eqv and or lt le lte gt ge gte equal eq neq not is mod contains
-syn match	cfOperatorMatch		contained "+" 
-syn match	cfOperatorMatch		contained "\-"
-syn match	cfOperatorMatch		contained "[\*\/\\\^\&][\+\-\*\/\\\^\&]\@!"
-syn match	cfOperatorMatch		contained "\<\(not\_s\+\)\?equal\>"
-syn match	cfOperatorMatch		contained "\<does\_s\+not\_s\+contain\>"
-syn match	cfOperatorMatch		contained "\<\(greater\|less\)\_s\+than\(\_s\+or\_s\+equal\_s\+to\)\?\>"
-" ColdFusion 8:
-syn keyword	cfOperator		contained imp
-syn match	cfOperatorMatch		contained "[?%:!]"
-syn match	cfOperatorMatch		contained "[\+\-\*\/\&]=" 
-syn match	cfOperatorMatch		contained "++"
-syn match	cfOperatorMatch		contained "--"
-syn match	cfOperatorMatch	 	contained "&&"
-syn match	cfOperatorMatch	 	contained "||"
+sy region cfmlParenthesisRegion1
+  \ extend
+  \ matchgroup=cfmlParenthesis1
+  \ transparent
+  \ start=/(/
+  \ end=/)/
+  \ contains=
+    \cfmlParenthesisRegion2,
+    \@cfmlParenthesisRegionContains
+sy region cfmlParenthesisRegion2
+  \ matchgroup=cfmlParenthesis2
+  \ transparent
+  \ start=/(/
+  \ end=/)/
+  \ contains=
+    \cfmlParenthesisRegion3,
+    \@cfmlParenthesisRegionContains
+sy region cfmlParenthesisRegion3
+  \ matchgroup=cfmlParenthesis3
+  \ transparent
+  \ start=/(/
+  \ end=/)/
+  \ contains=
+    \cfmlParenthesisRegion1,
+    \@cfmlParenthesisRegionContains
+sy cluster cfmlParenthesisRegion
+  \ contains=
+    \cfmlParenthesisRegion1,
+    \cfmlParenthesisRegion2,
+    \cfmlParenthesisRegion3
+" / PARENTHESIS }}}
+
+" BRACE {{{
+sy match cfmlBrace
+    \ "{\|}"
 
-syn cluster	cfOperatorCluster	contains=cfOperator,cfOperatorMatch
+sy region cfmlBraceRegion
+  \ extend
+  \ fold
+  \ keepend
+  \ transparent
+  \ start="{"
+  \ end="}"
+" / BRACE }}}
+
+" PUNCTUATION {{{
+
+" PUNCTUATION - BRACKET {{{
+sy match cfmlBracket
+  \ "\(\[\|\]\)"
+  \ contained
+" / PUNCTUATION - BRACKET }}}
+
+" PUNCTUATION - CHAR {{{
+sy match cfmlComma ","
+sy match cfmlDot "\."
+sy match cfmlSemiColon ";"
+
+" / PUNCTUATION - CHAR }}}
 
-" Custom tags called with the <cf_xxx> syntax.
-syn match	cfCustomTagName		contained "\<cf_[a-zA-Z0-9_]\+\>"
-" (TODO match	namespaced tags imported using cfimport, similarly.)
+" PUNCTUATION - QUOTE {{{
+sy region cfmlSingleQuotedValue
+  \ matchgroup=cfmlSingleQuote
+  \ start=/'/
+  \ skip=/''/
+  \ end=/'/
+  \ contains=
+    \cfmlHashSurround
+
+sy region cfmlDoubleQuotedValue
+  \ matchgroup=cfmlDoubleQuote
+  \ start=/"/
+  \ skip=/""/
+  \ end=/"/
+  \ contains=
+    \cfmlHashSurround
+
+sy cluster cfmlQuotedValue
+  \ contains=
+    \cfmlDoubleQuotedValue,
+    \cfmlSingleQuotedValue
+
+sy cluster cfmlQuote
+  \ contains=
+    \cfmlDoubleQuote,
+    \cfmlSingleQuote
+" / PUNCTUATION - QUOTE }}}
 
-" Tag names.
-" ColdFusion <=7:
-syn keyword	cfTagName	contained cfabort cfapplet cfapplication cfargument cfassociate
-syn keyword	cfTagName	contained cfbreak cfcache cfcalendar cfcase cfcatch
-syn keyword	cfTagName	contained cfchart cfchartdata cfchartseries cfcol cfcollection
-syn keyword	cfTagName	contained cfcomponent cfcontent cfcookie cfdefaultcase cfdirectory
-syn keyword	cfTagName	contained cfdocument cfdocumentitem cfdocumentsection cfdump cfelse
-syn keyword	cfTagName	contained cfelseif cferror cfexecute cfexit cffile cfflush cfform
-syn keyword	cfTagName	contained cfformgroup cfformitem cfftp cffunction
-syn keyword	cfTagName	contained cfgrid cfgridcolumn cfgridrow cfgridupdate cfheader
-syn keyword	cfTagName	contained cfhtmlhead cfhttp cfhttpparam cfif cfimport
-syn keyword	cfTagName	contained cfinclude cfindex cfinput cfinsert cfinvoke cfinvokeargument
-syn keyword	cfTagName	contained cfldap cflocation cflock cflog cflogin cfloginuser cflogout
-syn keyword	cfTagName	contained cfloop cfmail cfmailparam cfmailpart cfmodule
-syn keyword	cfTagName	contained cfNTauthenticate cfobject cfobjectcache cfoutput cfparam
-syn keyword	cfTagName	contained cfpop cfprocessingdirective cfprocparam cfprocresult
-syn keyword	cfTagName	contained cfproperty cfquery cfqueryparam cfregistry cfreport
-syn keyword	cfTagName	contained cfreportparam cfrethrow cfreturn cfsavecontent cfschedule
-syn keyword	cfTagName	contained cfscript cfsearch cfselect cfservletparam cfset
-syn keyword	cfTagName	contained cfsetting cfsilent cfslider cfstoredproc cfswitch cftable
-syn keyword	cfTagName	contained cftextarea cftextinput cfthrow cftimer cftrace cftransaction
-syn keyword	cfTagName	contained cftree cftreeitem cftry cfupdate cfwddx cfxml
-" ColdFusion 8:
-syn keyword	cfTagName	contained cfajaximport cfajaxproxy cfdbinfo cfdiv cfexchangecalendar
-syn keyword	cfTagName	contained cfexchangeconnection cfexchangecontact cfexchangefilter 
-syn keyword	cfTagName	contained cfexchangemail cfexchangetask cffeed
-syn keyword	cfTagName	contained cfinterface cflayout cflayoutarea cfmenu cfmenuitem
-syn keyword	cfTagName	contained cfpdf cfpdfform cfpdfformparam cfpdfparam cfpdfsubform cfpod
-syn keyword	cfTagName	contained cfpresentation cfpresentationslide cfpresenter cfprint
-syn keyword	cfTagName	contained cfsprydataset cfthread cftooltip cfwindow cfzip cfzipparam
-" ColdFusion 9:
-syn keyword	cfTagName	contained cfcontinue cffileupload cffinally
-syn keyword	cfTagName	contained cfimage cfimap 
-syn keyword	cfTagName	contained cfmap cfmapitem cfmediaplayer cfmessagebox
-syn keyword	cfTagName	contained cfprocparam cfprogressbar
-syn keyword	cfTagName	contained cfsharepoint cfspreadsheet
+sy cluster cfmlPunctuation
+  \ contains=
+    \@cfmlQuote,
+    \@cfmlQuotedValue,
+    \cfmlBracket,
+    \cfmlComma,
+    \cfmlDot,
+    \cfmlSemiColon
+
+" / PUNCTUATION }}}
+
+" TAG START AND END {{{
+" tag start
+" <cf...>
+" s^^   e
+sy region cfmlTagStart
+  \ keepend
+  \ transparent
+  \ start="\c<cf_*"
+  \ end=">"
+\ contains=
+  \@cfmlAttribute,
+  \@cfmlComment,
+  \@cfmlOperator,
+  \@cfmlParenthesisRegion,
+  \@cfmlPunctuation,
+  \@cfmlQuote,
+  \@cfmlQuotedValue,
+  \cfmlAttrEqualSign,
+  \cfmlBoolean,
+  \cfmlBrace,
+  \cfmlCoreKeyword,
+  \cfmlCoreScope,
+  \cfmlCustomKeyword,
+  \cfmlCustomScope,
+  \cfmlEqualSign,
+  \cfmlFunctionName,
+  \cfmlNumber,
+  \cfmlStorageKeyword,
+  \cfmlStorageType,
+  \cfmlTagBracket,
+  \cfmlTagName
+
+" tag end
+" </cf...>
+" s^^^   e
+sy match cfmlTagEnd
+  \ transparent
+  \ "\c</cf_*[^>]*>"
+  \ contains=
+    \cfmlTagBracket,
+    \cfmlTagName
+
+" tag bracket
+" </...>
+" ^^   ^
+sy match cfmlTagBracket
+  \ contained
+  \ "\(<\|>\|\/\)"
+
+" tag name
+" <cf...>
+"  s^^^e
+sy match cfmlTagName
+  \ contained
+  \ "\v<\/*\zs\ccf\w*"
+" / TAG START AND END }}}
+
+" ATTRIBUTE NAME AND VALUE {{{
+sy match cfmlAttrName
+  \ contained
+  \ "\v(var\s)@<!\w+\ze\s*\=([^\=])+"
+
+sy match cfmlAttrValue
+  \ contained
+  \ "\v(\=\"*)\zs\s*\w*"
+
+sy match cfmlAttrEqualSign
+  \ contained
+  \ "\v\="
+
+sy cluster cfmlAttribute
+\ contains=
+  \@cfmlQuotedValue,
+  \cfmlAttrEqualSign,
+  \cfmlAttrName,
+  \cfmlAttrValue,
+  \cfmlCoreKeyword,
+  \cfmlCoreScope
+" / ATTRIBUTE NAME AND VALUE }}}
+
+" TAG REGION AND FOLDING {{{
+
+" CFCOMPONENT REGION AND FOLD {{{
+" <cfcomponent
+" s^^^^^^^^^^^
+" </cfcomponent>
+" ^^^^^^^^^^^^^e
+sy region cfmlComponentTagRegion
+  \ fold
+  \ keepend
+  \ transparent
+  \ start="\c<cfcomponent"
+  \ end="\c</cfcomponent>"
+
+" / CFCOMPONENT REGION AND FOLD }}}
+
+" CFFUNCTION REGION AND FOLD {{{
+" <cffunction
+" s^^^^^^^^^^
+" </cffunction>
+" ^^^^^^^^^^^^e
+sy region cfmlFunctionTagRegion
+  \ fold
+  \ keepend
+  \ transparent
+  \ start="\c<cffunction"
+  \ end="\c</cffunction>"
+" / CFFUNCTION REGION AND FOLD }}}
 
-" Tag attributes.
-" XXX Not updated for ColdFusion 8/9.
-" These are becoming a headache to maintain, so might be removed.
-syn keyword	cfArg		contained abort accept access accessible action addnewline addtoken
-syn keyword	cfArg		contained agentname align appendkey appletsource application
-syn keyword	cfArg		contained applicationtimeout applicationtoken archive
-syn keyword	cfArg		contained argumentcollection arguments asciiextensionlist
-syn keyword	cfArg		contained attachmentpath attributecollection attributes autowidth
-syn keyword	cfArg		contained backgroundvisible basetag bcc bgcolor bind bindingname
-syn keyword	cfArg		contained blockfactor body bold border branch cachedafter cachedwithin
-syn keyword	cfArg		contained casesensitive category categorytree cc cfsqltype charset
-syn keyword	cfArg		contained chartheight chartwidth checked class clientmanagement
-syn keyword	cfArg		contained clientstorage codebase colheaderalign colheaderbold
-syn keyword	cfArg		contained colheaderfont colheaderfontsize colheaderitalic colheaders
-syn keyword	cfArg		contained colheadertextcolor collection colorlist colspacing columns
-syn keyword	cfArg		contained completepath component condition connection contentid
-syn keyword	cfArg		contained context contextbytes contexthighlightbegin
-syn keyword	cfArg		contained contexthighlightend contextpassages cookiedomain criteria
-syn keyword	cfArg		contained custom1 custom2 custom3 custom4 data dataalign
-syn keyword	cfArg		contained databackgroundcolor datacollection datasource daynames
-syn keyword	cfArg		contained dbname dbserver dbtype dbvarname debug default delete
-syn keyword	cfArg		contained deletebutton deletefile delimiter delimiters description
-syn keyword	cfArg		contained destination detail directory disabled display displayname
-syn keyword	cfArg		contained disposition dn domain editable enablecab enablecfoutputonly
-syn keyword	cfArg		contained enabled encoded encryption enctype enddate endrange endtime
-syn keyword	cfArg		contained entry errorcode exception existing expand expires expireurl
-syn keyword	cfArg		contained expression extendedinfo extends extensions external
-syn keyword	cfArg		contained failifexists failto file filefield filename filter
-syn keyword	cfArg		contained firstdayofweek firstrowasheaders fixnewline font fontbold
-syn keyword	cfArg		contained fontembed fontitalic fontsize foregroundcolor format
-syn keyword	cfArg		contained formfields formula from generateuniquefilenames getasbinary
-syn keyword	cfArg		contained grid griddataalign gridlines groovecolor group
-syn keyword	cfArg		contained groupcasesensitive header headeralign headerbold headerfont
-syn keyword	cfArg		contained headerfontsize headeritalic headerlines headertextcolor
-syn keyword	cfArg		contained height highlighthref hint href hrefkey hscroll hspace html
-syn keyword	cfArg		contained htmltable id idletimeout img imgopen imgstyle index inline
-syn keyword	cfArg		contained input insert insertbutton interval isolation italic item
-syn keyword	cfArg		contained itemcolumn key keyonly label labelformat language list
-syn keyword	cfArg		contained listgroups locale localfile log loginstorage lookandfeel
-syn keyword	cfArg		contained mailerid mailto marginbottom marginleft marginright
-syn keyword	cfArg		contained margintop markersize markerstyle mask max maxlength maxrows
-syn keyword	cfArg		contained message messagenumber method mimeattach mimetype min mode
-syn keyword	cfArg		contained modifytype monthnames multipart multiple name nameconflict
-syn keyword	cfArg		contained namespace new newdirectory notsupported null numberformat
-syn keyword	cfArg		contained object omit onblur onchange onclick onerror onfocus
-syn keyword	cfArg		contained onkeydown onkeyup onload onmousedown onmouseup onreset
-syn keyword	cfArg		contained onsubmit onvalidate operation orderby orientation output
-syn keyword	cfArg		contained outputfile overwrite ownerpassword pageencoding pageheight
-syn keyword	cfArg		contained pagetype pagewidth paintstyle param_1 param_2 param_3
-syn keyword	cfArg		contained param_4 param_5 param_6 param_7 param_8 param_9 parent
-syn keyword	cfArg		contained parrent passive passthrough password path pattern
-syn keyword	cfArg		contained permissions picturebar pieslicestyle port porttypename
-syn keyword	cfArg		contained prefix preloader preservedata previouscriteria procedure
-syn keyword	cfArg		contained protocol provider providerdsn proxybypass proxypassword
-syn keyword	cfArg		contained proxyport proxyserver proxyuser publish query queryasroot
-syn keyword	cfArg		contained queryposition range rebind recurse redirect referral
-syn keyword	cfArg		contained refreshlabel remotefile replyto report requesttimeout
-syn keyword	cfArg		contained required reset resoleurl resolveurl result resultset
-syn keyword	cfArg		contained retrycount returnasbinary returncode returntype
-syn keyword	cfArg		contained returnvariable roles rotated rowheaderalign rowheaderbold
-syn keyword	cfArg		contained rowheaderfont rowheaderfontsize rowheaderitalic rowheaders
-syn keyword	cfArg		contained rowheadertextcolor rowheaderwidth rowheight scale scalefrom
-syn keyword	cfArg		contained scaleto scope scriptprotect scriptsrc secure securitycontext
-syn keyword	cfArg		contained select selectcolor selected selecteddate selectedindex
-syn keyword	cfArg		contained selectmode separator seriescolor serieslabel seriesplacement
-syn keyword	cfArg		contained server serviceport serviceportname sessionmanagement
-syn keyword	cfArg		contained sessiontimeout setclientcookies setcookie setdomaincookies
-syn keyword	cfArg		contained show3d showborder showdebugoutput showerror showlegend
-syn keyword	cfArg		contained showmarkers showxgridlines showygridlines size skin sort
-syn keyword	cfArg		contained sortascendingbutton sortcontrol sortdescendingbutton
-syn keyword	cfArg		contained sortxaxis source spoolenable sql src srcfile start startdate
-syn keyword	cfArg		contained startrange startrow starttime status statuscode statustext
-syn keyword	cfArg		contained step stoponerror style subject suggestions
-syn keyword	cfArg		contained suppresswhitespace tablename tableowner tablequalifier
-syn keyword	cfArg		contained taglib target task template text textcolor textqualifier
-syn keyword	cfArg		contained throwonerror throwonerror throwonfailure throwontimeout
-syn keyword	cfArg		contained timeout timespan tipbgcolor tipstyle title to tooltip
-syn keyword	cfArg		contained toplevelvariable transfermode type uid unit url urlpath
-syn keyword	cfArg		contained useragent username userpassword usetimezoneinfo validate
-syn keyword	cfArg		contained validateat value valuecolumn values valuesdelimiter
-syn keyword	cfArg		contained valuesdisplay var variable vertical visible vscroll vspace
-syn keyword	cfArg		contained webservice width wmode wraptext wsdlfile xaxistitle
-syn keyword	cfArg		contained xaxistype xoffset yaxistitle yaxistype yoffset
+" CFIF REGION AND FOLD {{{
+" <cfif
+" s^^^^
+" </cfif>
+" ^^^^^^e
+sy region cfmlIfTagRegion
+  \ fold
+  \ keepend
+  \ transparent
+  \ start="\c<cfif"
+  \ end="\c</cfif>"
+" / CFIF REGION AND FOLD }}}
+
+" CFLOOP REGION AND FOLD {{{
+" <cfloop
+" s^^^^^^
+" </cfloop>
+" ^^^^^^^^e
+sy region cfmlLoopTagRegion
+  \ fold
+  \ keepend
+  \ transparent
+  \ start="\c<cfloop"
+  \ end="\c</cfloop>"
+" / CFLOOP REGION AND FOLD }}}
+
+" CFOUTPUT REGION AND FOLD {{{
+" <cfoutput
+" s^^^^^^^^
+" </cfoutput>
+" ^^^^^^^^^^e
+sy region cfmlOutputTagRegion
+  \ fold
+  \ keepend
+  \ transparent
+  \ start="\c<cfoutput"
+  \ end="\c</cfoutput>"
+" / CFOUTPUT REGION AND FOLD }}}
+
+" CFQUERY REGION AND FOLD {{{
+" <cfquery
+" s^^^^^^^
+" </cfquery>
+" ^^^^^^^^^e
+        "\@cfmlSqlStatement,
+sy region cfmlQueryTagRegion
+  \ fold
+  \ keepend
+  \ transparent
+  \ start="\c<cfquery"
+  \ end="\c</cfquery>"
+  \ contains=
+    \@cfmlSqlStatement,
+    \cfmlTagStart,
+    \cfmlTagEnd,
+    \cfmlTagComment
+" / CFQUERY REGION AND FOLD }}}
+
+" SAVECONTENT REGION AND FOLD {{{
+" <savecontent
+" s^^^^^^^^^^^
+" </savecontent>
+" ^^^^^^^^^^^^^e
+sy region cfmlSavecontentTagRegion
+  \ fold
+  \ keepend
+  \ transparent
+  \ start="\c<cfsavecontent"
+  \ end="\c</cfsavecontent>"
+" / SAVECONTENT REGION AND FOLD }}}
+
+" CFSCRIPT REGION AND FOLD {{{
+" <cfscript>
+" s^^^^^^^^^
+" </cfscript>
+" ^^^^^^^^^^e
+"\cfmlCustomScope,
+sy region cfmlScriptTagRegion
+  \ fold
+  \ keepend
+  \ transparent
+  \ start="\c<cfscript>"
+  \ end="\c</cfscript>"
+  \ contains=
+    \@cfmlComment,
+    \@cfmlFlowStatement,
+    \cfmlHashSurround,
+    \@cfmlOperator,
+    \@cfmlParenthesisRegion,
+    \@cfmlPunctuation,
+    \cfmlBoolean,
+    \cfmlBrace,
+    \cfmlCoreKeyword,
+    \cfmlCoreScope,
+    \cfmlCustomKeyword,
+    \cfmlCustomScope,
+    \cfmlEqualSign,
+    \cfmlFunctionDefinition,
+    \cfmlFunctionName,
+    \cfmlNumber,
+    \cfmlOddFunction,
+    \cfmlStorageKeyword,
+    \cfmlTagEnd,
+    \cfmlTagStart
+" / CFSCRIPT REGION AND FOLD }}}
+
+" CFSWITCH REGION AND FOLD {{{
+" <cfswitch
+" s^^^^^^^^
+" </cfswitch>
+" ^^^^^^^^^^e
+sy region cfmlSwitchTagRegion
+  \ fold
+  \ keepend
+  \ transparent
+  \ start="\c<cfswitch"
+  \ end="\c</cfswitch>"
+" / CFSWITCH REGION AND FOLD }}}
+
+" CFTRANSACTION REGION AND FOLD {{{
+" <cftransaction
+" s^^^^^^^^^^^^^
+" </cftransaction>
+" ^^^^^^^^^^^^^^^e
+sy region cfmlTransactionTagRegion
+  \ fold
+  \ keepend
+  \ transparent
+  \ start="\c<cftransaction"
+  \ end="\c</cftransaction>"
+" / CFTRANSACTION REGION AND FOLD }}}
 
-" Functions.
-" ColdFusion <=7:
-syn keyword	cfFunctionName		contained ACos ASin Abs AddSOAPRequestHeader AddSOAPResponseHeader
-syn keyword	cfFunctionName		contained ArrayAppend ArrayAvg ArrayClear ArrayDeleteAt ArrayInsertAt
-syn keyword	cfFunctionName		contained ArrayIsEmpty ArrayLen ArrayMax ArrayMin ArrayNew
-syn keyword	cfFunctionName		contained ArrayPrepend ArrayResize ArraySet ArraySort ArraySum
-syn keyword	cfFunctionName		contained ArraySwap ArrayToList Asc Atn AuthenticatedContext
-syn keyword	cfFunctionName		contained AuthenticatedUser BinaryDecode BinaryEncode BitAnd
-syn keyword	cfFunctionName		contained BitMaskClear BitMaskRead BitMaskSet BitNot BitOr BitSHLN
-syn keyword	cfFunctionName		contained BitSHRN BitXor CJustify Ceiling CharsetDecode CharsetEncode
-syn keyword	cfFunctionName		contained Chr Compare CompareNoCase Cos CreateDate CreateDateTime
-syn keyword	cfFunctionName		contained CreateODBCDate CreateODBCDateTime CreateODBCTime
-syn keyword	cfFunctionName		contained CreateObject CreateTime CreateTimeSpan CreateUUID DE DateAdd
-syn keyword	cfFunctionName		contained DateCompare DateConvert DateDiff DateFormat DatePart Day
-syn keyword	cfFunctionName		contained DayOfWeek DayOfWeekAsString DayOfYear DaysInMonth DaysInYear
-syn keyword	cfFunctionName		contained DecimalFormat DecrementValue Decrypt DecryptBinary
-syn keyword	cfFunctionName		contained DeleteClientVariable DirectoryExists DollarFormat Duplicate
-syn keyword	cfFunctionName		contained Encrypt EncryptBinary Evaluate Exp ExpandPath FileExists
-syn keyword	cfFunctionName		contained Find FindNoCase FindOneOf FirstDayOfMonth Fix FormatBaseN
-syn keyword	cfFunctionName		contained GenerateSecretKey GetAuthUser GetBaseTagData GetBaseTagList
-syn keyword	cfFunctionName		contained GetBaseTemplatePath GetClientVariablesList GetContextRoot
-syn keyword	cfFunctionName		contained GetCurrentTemplatePath GetDirectoryFromPath GetEncoding
-syn keyword	cfFunctionName		contained GetException GetFileFromPath GetFunctionList
-syn keyword	cfFunctionName		contained GetGatewayHelper GetHttpRequestData GetHttpTimeString
-syn keyword	cfFunctionName		contained GetLocalHostIP
-syn keyword	cfFunctionName		contained GetLocale GetLocaleDisplayName GetMetaData GetMetricData
-syn keyword	cfFunctionName		contained GetPageContext GetProfileSections GetProfileString
-syn keyword	cfFunctionName		contained GetSOAPRequest GetSOAPRequestHeader GetSOAPResponse
-syn keyword	cfFunctionName		contained GetSOAPResponseHeader GetTempDirectory GetTempFile
-syn keyword	cfFunctionName		contained GetTickCount GetTimeZoneInfo GetToken
-syn keyword	cfFunctionName		contained HTMLCodeFormat HTMLEditFormat Hash Hour IIf IncrementValue
-syn keyword	cfFunctionName		contained InputBaseN Insert Int IsArray IsAuthenticated IsAuthorized
-syn keyword	cfFunctionName		contained IsBinary IsBoolean IsCustomFunction IsDate IsDebugMode
-syn keyword	cfFunctionName		contained IsDefined
-syn keyword	cfFunctionName		contained IsLeapYear IsLocalHost IsNumeric
-syn keyword	cfFunctionName		contained IsNumericDate IsObject IsProtected IsQuery IsSOAPRequest
-syn keyword	cfFunctionName		contained IsSimpleValue IsStruct IsUserInRole IsValid IsWDDX IsXML
-syn keyword	cfFunctionName		contained IsXmlAttribute IsXmlDoc IsXmlElem IsXmlNode IsXmlRoot
-syn keyword	cfFunctionName		contained JSStringFormat JavaCast LCase LJustify LSCurrencyFormat
-syn keyword	cfFunctionName		contained LSDateFormat LSEuroCurrencyFormat LSIsCurrency LSIsDate
-syn keyword	cfFunctionName		contained LSIsNumeric LSNumberFormat LSParseCurrency LSParseDateTime
-syn keyword	cfFunctionName		contained LSParseEuroCurrency LSParseNumber LSTimeFormat LTrim Left
-syn keyword	cfFunctionName		contained Len ListAppend ListChangeDelims ListContains
-syn keyword	cfFunctionName		contained ListContainsNoCase ListDeleteAt ListFind ListFindNoCase
-syn keyword	cfFunctionName		contained ListFirst ListGetAt ListInsertAt ListLast ListLen
-syn keyword	cfFunctionName		contained ListPrepend ListQualify ListRest ListSetAt ListSort
-syn keyword	cfFunctionName		contained ListToArray ListValueCount ListValueCountNoCase Log Log10
-syn keyword	cfFunctionName		contained Max Mid Min Minute Month MonthAsString Now NumberFormat
-syn keyword	cfFunctionName		contained ParagraphFormat ParseDateTime Pi
-syn keyword	cfFunctionName		contained PreserveSingleQuotes Quarter QueryAddColumn QueryAddRow
-syn keyword	cfFunctionName		contained QueryNew QuerySetCell QuotedValueList REFind REFindNoCase
-syn keyword	cfFunctionName		contained REReplace REReplaceNoCase RJustify RTrim Rand RandRange
-syn keyword	cfFunctionName		contained Randomize ReleaseComObject RemoveChars RepeatString Replace
-syn keyword	cfFunctionName		contained ReplaceList ReplaceNoCase Reverse Right Round Second
-syn keyword	cfFunctionName		contained SendGatewayMessage SetEncoding SetLocale SetProfileString
-syn keyword	cfFunctionName		contained SetVariable Sgn Sin SpanExcluding SpanIncluding Sqr StripCR
-syn keyword	cfFunctionName		contained StructAppend StructClear StructCopy StructCount StructDelete
-syn keyword	cfFunctionName		contained StructFind StructFindKey StructFindValue StructGet
-syn keyword	cfFunctionName		contained StructInsert StructIsEmpty StructKeyArray StructKeyExists
-syn keyword	cfFunctionName		contained StructKeyList StructNew StructSort StructUpdate Tan
-syn keyword	cfFunctionName		contained TimeFormat ToBase64 ToBinary ToScript ToString Trim UCase
-syn keyword	cfFunctionName		contained URLDecode URLEncodedFormat URLSessionFormat Val ValueList
-syn keyword	cfFunctionName		contained Week Wrap WriteOutput XmlChildPos XmlElemNew XmlFormat
-syn keyword	cfFunctionName		contained XmlGetNodeType XmlNew XmlParse XmlSearch XmlTransform
-syn keyword	cfFunctionName		contained XmlValidate Year YesNoFormat
-" ColdFusion 8:
-syn keyword	cfFunctionName		contained AjaxLink AjaxOnLoad ArrayIsDefined BinaryDecode BinaryEncode CharsetDecode CharsetEncode 
-syn keyword	cfFunctionName		contained DecryptBinary DeserializeJSON DotNetToCFType EncryptBinary FileClose FileCopy FileDelete
-syn keyword	cfFunctionName		contained FileIsEOF FileMove FileOpen FileRead FileReadBinary FileReadLine FileSetAccessMode FileSetAttribute
-syn keyword	cfFunctionName		contained FileSetLastModified FileWrite GenerateSecretKey GetGatewayHelper GetAuthUser GetComponentMetaData
-syn keyword	cfFunctionName		contained GetContextRoot GetEncoding GetFileInfo GetLocaleDisplayName GetLocalHostIP GetMetaData
-syn keyword	cfFunctionName		contained GetPageContext GetPrinterInfo GetProfileSections GetReadableImageFormats GetSOAPRequest
-syn keyword	cfFunctionName		contained GetSOAPRequestHeader GetSOAPResponse GetSOAPResponseHeader GetUserRoles GetWriteableImageFormats
-syn keyword	cfFunctionName		contained ImageAddBorder ImageBlur ImageClearRect ImageCopy ImageCrop ImageDrawArc ImageDrawBeveledRect
-syn keyword	cfFunctionName		contained ImageDrawCubicCurve ImageDrawPoint ImageDrawLine ImageDrawLines ImageDrawOval
-syn keyword	cfFunctionName		contained ImageDrawQuadraticCurve ImageDrawRect ImageDrawRoundRect ImageDrawText ImageFlip ImageGetBlob
-syn keyword	cfFunctionName		contained ImageGetBufferedImage ImageGetEXIFMetadata ImageGetEXIFTag ImageGetHeight ImageGetIPTCMetadata
-syn keyword	cfFunctionName		contained ImageGetIPTCTag ImageGetWidth ImageGrayscale ImageInfo ImageNegative ImageNew ImageOverlay
-syn keyword	cfFunctionName		contained ImagePaste ImageRead ImageReadBase64 ImageResize ImageRotate ImageRotateDrawingAxis ImageScaleToFit 
-" ColdFusion 9:
-syn keyword	cfFunctionName		contained ApplicationStop ArrayContains ArrayDelete ArrayFind ArrayFindNoCase IsSpreadsheetFile
-syn keyword	cfFunctionName		contained IsSpreadsheetObject FileSkipBytes Location ObjectLoad SpreadsheetFormatColumn
-syn keyword	cfFunctionName		contained SpreadsheetFormatColumns SpreadsheetFormatRow SpreadsheetFormatRows SpreadsheetGetCellComment
-syn keyword	cfFunctionName		contained CacheGetAllIds CacheGetMetadata CacheGetProperties CacheGet CachePut ObjectSave ORMClearSession
-syn keyword	cfFunctionName		contained ORMCloseSession ORMEvictQueries ORMEvictCollection SpreadsheetGetCellFormula SpreadsheetGetCellValue
-syn keyword	cfFunctionName		contained SpreadsheetInfo SpreadsheetMergeCells SpreadsheetNew CacheRemove CacheSetProperties DirectoryCreate
-syn keyword	cfFunctionName		contained DirectoryDelete DirectoryExists ORMEvictEntity ORMEvictQueries ORMExecuteQuery ORMFlush
-syn keyword	cfFunctionName		contained ORMGetSession SpreadsheetRead SpreadsheetReadBinary SpreadsheetSetActiveSheetNumber
-syn keyword	cfFunctionName		contained SpreadsheetSetCellComment SpreadsheetSetCellFormula DirectoryList DirectoryRename EntityDelete
-syn keyword	cfFunctionName		contained EntityLoad EntityLoadByExample ORMGetSessionFactory ORMReload ObjectEquals SpreadsheetAddColumn
-syn keyword	cfFunctionName		contained SpreadsheetAddFreezePane SpreadsheetSetCellValue SpreadsheetSetActiveSheet SpreadsheetSetFooter
-syn keyword	cfFunctionName		contained SpreadsheetSetHeader SpreadsheetSetColumnWidth EntityLoadByPK EntityMerge EntityNew EntityReload
-syn keyword	cfFunctionName		contained EntitySave SpreadsheetAddImage SpreadsheetAddInfo SpreadsheetAddRow SpreadsheetAddRows
-syn keyword	cfFunctionName		contained SpreadsheetAddSplitPane SpreadsheetShiftColumns SpreadsheetShiftRows SpreadsheetSetRowHeight
-syn keyword	cfFunctionName		contained SpreadsheetWrite Trace FileDelete FileSeek FileWriteLine GetFunctionCalledName GetVFSMetaData IsIPv6
-syn keyword	cfFunctionName		contained IsNull SpreadsheetCreateSheet SpreadsheetDeleteColumn SpreadsheetDeleteColumns SpreadsheetDeleteRow
-syn keyword	cfFunctionName		contained SpreadsheetDeleteRows SpreadsheetFormatCell TransactionCommit TransactionRollback
-syn keyword	cfFunctionName		contained TransactionSetSavePoint ThreadTerminate ThreadJoin Throw Writedump Writelog 
+" CUSTOM TAG REGION AND FOLD {{{
+" <cf_...>
+" s^^^   ^
+" </cf_...>
+" ^^^^^   e
+sy region cfmlCustomTagRegion
+  \ fold
+  \ keepend
+  \ transparent
+  \ start="\c<cf_[^>]*>"
+  \ end="\c</cf_[^>]*>"
+" / CUSTOM TAG REGION AND FOLD }}}
+
+" / TAG REGION AND FOLDING }}}
+
+" COMMENT {{{
+
+" COMMENT BLOCK {{{
+" /*...*/
+" s^   ^e
+sy region cfmlCommentBlock
+  \ keepend
+  \ start="/\*"
+  \ end="\*/"
+  \ contains=
+    \cfmlMetaData
+" / COMMENT BLOCK }}}
+
+" COMMENT LINE {{{
+" //...
+" s^
+sy match cfmlCommentLine
+        \ "\/\/.*"
+" / COMMENT LINE }}}
+
+sy cluster cfmlComment
+  \ contains=
+    \cfmlCommentBlock,
+    \cfmlCommentLine
+" / COMMENT }}}
+
+" TAG COMMENT {{{
+" <!---...--->
+" s^^^^   ^^^e
+sy region cfmlTagComment
+  \ keepend
+    \ start="<!---"
+    \ end="--->"
+    \ contains=
+      \cfmlTagComment
+" / TAG COMMENT }}}
+
+" FLOW STATEMENT {{{
+" BRANCH FLOW KEYWORD {{{
+sy keyword cfmlBranchFlowKeyword
+  \ break
+  \ continue
+  \ return
+
+" / BRANCH KEYWORD }}}
+
+" DECISION FLOW KEYWORD {{{
+sy keyword cfmlDecisionFlowKeyword
+  \ case
+  \ defaultcase
+  \ else
+  \ if
+  \ switch
+
+" / DECISION FLOW KEYWORD }}}
+
+" LOOP FLOW KEYWORD {{{
+sy keyword cfmlLoopFlowKeyword
+  \ do
+  \ for
+  \ in
+  \ while
+
+" / LOOP FLOW KEYWORD }}}
+
+" TRY FLOW KEYWORD {{{
+sy keyword cfmlTryFlowKeyword
+  \ catch
+  \ finally
+  \ rethrow
+  \ throw
+  \ try
+
+" / TRY FLOW KEYWORD }}}
+
+sy cluster cfmlFlowStatement
+  \ contains=
+    \cfmlBranchFlowKeyword,
+    \cfmlDecisionFlowKeyword,
+    \cfmlLoopFlowKeyword,
+    \cfmlTryFlowKeyword
+
+" / FLOW STATEMENT }}}
+
+" STORAGE KEYWORD {{{
+sy keyword cfmlStorageKeyword
+    \ var
+" / STORAGE KEYWORD }}}
 
-" Deprecated or obsoleted tags and functions.
-syn keyword	cfDeprecatedTag		contained cfauthenticate cfimpersonate cfgraph cfgraphdata
-syn keyword	cfDeprecatedTag		contained cfservlet cfservletparam cftextinput
-syn keyword	cfDeprecatedTag		contained cfinternaladminsecurity cfnewinternaladminsecurity
-syn keyword	cfDeprecatedFunction	contained GetK2ServerDocCount GetK2ServerDocCountLimit GetTemplatePath
-syn keyword	cfDeprecatedFunction	contained IsK2ServerABroker IsK2ServerDocCountExceeded IsK2ServerOnline
-syn keyword	cfDeprecatedFunction	contained ParameterExists AuthenticatedContext AuthenticatedUser
-syn keyword	cfDeprecatedFunction	contained isAuthenticated isAuthorized isProtected
+" STORAGE TYPE {{{
+sy match cfmlStorageType
+  \ contained
+  \ "\v<
+    \(any
+    \|array
+    \|binary
+    \|boolean
+    \|date
+    \|numeric
+    \|query
+    \|string
+    \|struct
+    \|uuid
+    \|void
+    \|xml
+  \){1}\ze(\s*\=)@!"
+" / STORAGE TYPE }}}
+
+" CORE KEYWORD {{{
+sy match cfmlCoreKeyword
+  \ "\v<
+    \(new
+    \|required
+    \)\ze\s"
+" / CORE KEYWORD }}}
+
+" CORE SCOPE {{{
+sy match cfmlCoreScope
+  \ "\v<
+    \(application
+    \|arguments
+    \|attributes
+    \|caller
+    \|cfcatch
+    \|cffile
+    \|cfhttp
+    \|cgi
+    \|client
+    \|cookie
+    \|form
+    \|local
+    \|request
+    \|server
+    \|session
+    \|super
+    \|this
+    \|thisTag
+    \|thread
+    \|variables
+    \|url
+    \){1}\ze(,|\.|\[|\)|\s)"
+" / CORE SCOPE }}}
 
-" Add to the HTML clusters.
-syn cluster	htmlTagNameCluster	add=cfTagName,cfCustomTagName,cfDeprecatedTag
-syn cluster	htmlArgCluster		add=cfArg,cfHashRegion,cfScope
-syn cluster	htmlPreproc		add=cfHashRegion
+" SQL STATEMENT {{{
+sy cluster cfmlSqlStatement
+  \ contains=
+    \@cfmlParenthesisRegion,
+    \@cfmlQuote,
+    \@cfmlQuotedValue,
+    \@sqlSyntax,
+    \cfmlBoolean,
+    \cfmlDot,
+    \cfmlEqualSign,
+    \cfmlFunctionName,
+    \cfmlHashSurround,
+    \cfmlNumber
+" / SQL STATEMENT }}}
+
+" TAG IN SCRIPT {{{
+sy match cfmlTagNameInScript
+    \ "\vcf_*\w+\s*\ze\("
+" / TAG IN SCRIPT }}}
+
+" METADATA {{{
+sy region cfmlMetaData
+  \ contained
+  \ keepend
+  \ start="@\w\+"
+  \ end="$"
+  \ contains=
+    \cfmlMetaDataName
+
+sy match cfmlMetaDataName
+    \ contained
+    \ "@\w\+"
+" / METADATA }}}
 
-syn cluster	cfExpressionCluster	contains=cfFunctionName,cfScope,@cfOperatorCluster,cfScriptStringD,cfScriptStringS,cfScriptNumber,cfBool,cfComment
+" COMPONENT DEFINITION {{{
+sy region cfmlComponentDefinition
+  \ start="component"
+  \ end="{"me=e-1
+  \ contains=
+    \@cfmlAttribute,
+    \cfmlComponentKeyword
+
+sy match cfmlComponentKeyword
+  \ contained
+  \ "\v<component>"
+" / COMPONENT DEFINITION }}}
+
+" INTERFACE DEFINITION {{{
+sy match cfmlInterfaceDefinition
+  \ "interface\s.*{"me=e-1
+  \ contains=
+    \cfmlInterfaceKeyword
 
-" Evaluation; skip strings ( this helps with cases like nested IIf() )
-"		containedin to add to the TOP of cfOutputRegion.
-syn region	cfHashRegion		start=+#+ skip=+"[^"]*"\|'[^']*'+ end=+#+ contained containedin=cfOutputRegion contains=@cfExpressionCluster,cfScriptParenError
+sy match cfmlInterfaceKeyword
+    \ contained
+    \ "\v<interface>"
+" / INTERFACE DEFINITION }}}
+
+" PROPERTY {{{
+sy region cfmlProperty
+  \ transparent
+  \ start="\v<property>"
+  \ end=";"me=e-1
+  \ contains=
+    \@cfmlQuotedValue,
+    \cfmlAttrEqualSign,
+    \cfmlAttrName,
+    \cfmlAttrValue,
+    \cfmlPropertyKeyword
+
+sy match cfmlPropertyKeyword
+        \ contained
+        \ "\v<property>"
+" / PROPERTY }}}
 
-" Hashmarks are significant inside cfoutput tags.
-" cfoutput tags may be nested indefinitely.
-syn region	cfOutputRegion		matchgroup=NONE transparent start=+<cfoutput>+ end=+</cfoutput>+ contains=TOP
+" FUNCTION DEFINITION {{{
+sy match cfmlFunctionDefinition
+  \ "\v
+    \(<(public|private|package)\s){,1}
+    \(<
+      \(any
+      \|array
+      \|binary
+      \|boolean
+      \|date
+      \|numeric
+      \|query
+      \|string
+      \|struct
+      \|uuid
+      \|void
+      \|xml
+    \)\s){,1}
+  \<function\s\w+\s*\("me=e-1
+  \ contains=
+    \cfmlFunctionKeyword,
+    \cfmlFunctionModifier,
+    \cfmlFunctionName,
+    \cfmlFunctionReturnType
+
+" FUNCTION KEYWORD {{{
+sy match cfmlFunctionKeyword
+  \ contained
+  \ "\v<function>"
+" / FUNCTION KEYWORD }}}
 
-" <cfset>, <cfif>, <cfelseif>, <cfreturn> are analogous to hashmarks (implicit
-" evaluation) and have 'var'
-syn region	cfSetRegion		start="<cfset\>" start="<cfreturn\>" start="<cfelseif\>" start="<cfif\>" end='>' keepend contains=@cfExpressionCluster,cfSetLHSRegion,cfSetTagEnd,cfScriptStatement
-syn region	cfSetLHSRegion		contained start="<cfreturn" start="<cfelseif" start="<cfif" start="<cfset" end="." keepend contains=cfTagName,htmlTag
-syn match	cfSetTagEnd		contained '>'
+" FUNCTION MODIFIER {{{
+sy match cfmlFunctionModifier
+  \ contained
+    \ "\v<
+    \(public
+    \|private
+    \|package
+    \)>"
+" / FUNCTION MODIFIER }}}
 
-" CF comments: similar to SGML comments, but can be nested.
-syn region	cfComment		start='<!---' end='--->' contains=cfCommentTodo,cfComment
-syn keyword	cfCommentTodo		contained TODO FIXME XXX TBD WTF 
+" FUNCTION RETURN TYPE {{{
+sy match cfmlFunctionReturnType
+  \ contained
+    \ "\v
+    \(any
+    \|array
+    \|binary
+    \|boolean
+    \|date
+    \|numeric
+    \|query
+    \|string
+    \|struct
+    \|uuid
+    \|void
+    \|xml
+    \)"
+" / FUNCTION RETURN TYPE }}}
+
+" FUNCTION NAME {{{
+" specific regex for core functions decreases performance
+" so use the same highlighting for both function types
+sy match cfmlFunctionName
+    \ "\v<(cf|if|elseif|throw)@!\w+\s*\ze\("
+" / FUNCTION NAME }}}
 
-" CFscript 
-" TODO better support for new component/function def syntax
-" TODO better support for 'new'
-" TODO highlight metadata (@ ...) inside comments.
-syn match	cfScriptLineComment	contained "\/\/.*$" contains=cfCommentTodo
-syn region	cfScriptComment		contained start="/\*"	end="\*/" contains=cfCommentTodo
-syn match	cfScriptBraces		contained "[{}]"
-syn keyword	cfScriptStatement	contained return var
-" in CF, quotes are escaped by doubling
-syn region	cfScriptStringD		contained start=+"+	skip=+\\\\\|""+	end=+"+	extend contains=@htmlPreproc,cfHashRegion
-syn region	cfScriptStringS		contained start=+'+	skip=+\\\\\|''+	end=+'+	extend contains=@htmlPreproc,cfHashRegion
-syn match	cfScriptNumber		contained "\<\d\+\>"
-syn keyword	cfScriptConditional	contained if else
-syn keyword	cfScriptRepeat		contained while for in
-syn keyword	cfScriptBranch		contained break switch case default try catch continue finally
-syn keyword	cfScriptKeyword		contained function
-" argumentCollection is a special argument to function calls
-syn keyword	cfScriptSpecial		contained argumentcollection
-" ColdFusion 9:
-syn keyword	cfScriptStatement	contained new import
-" CFscript equivalents of some tags
-syn keyword	cfScriptKeyword		contained abort component exit import include
-syn keyword	cfScriptKeyword		contained interface param pageencoding property rethrow thread transaction
-" function/component syntax
-syn keyword	cfScriptSpecial		contained required extends
+" / FUNCTION DEFINITION }}}
+
+" ODD FUNCTION {{{
+sy region cfmlOddFunction
+  \ transparent
+  \ start="\v<
+    \(abort
+    \|exit
+    \|import
+    \|include
+    \|lock
+    \|pageencoding
+    \|param
+    \|savecontent
+    \|thread
+    \|transaction
+    \){1}"
+  \ end="\v(\{|;)"me=e-1
+  \ contains=
+    \@cfmlQuotedValue,
+    \cfmlAttrEqualSign,
+    \cfmlAttrName,
+    \cfmlAttrValue,
+    \cfmlCoreKeyword,
+    \cfmlOddFunctionKeyword,
+    \cfmlCoreScope
 
+" ODD FUNCTION KEYWORD {{{
+sy match cfmlOddFunctionKeyword
+  \ contained
+    \ "\v<
+    \(abort
+    \|exit
+    \|import
+    \|include
+    \|lock
+    \|pageencoding
+    \|param
+    \|savecontent
+    \|thread
+    \|transaction
+    \)\ze(\s|$|;)"
+" / ODD FUNCTION KEYWORD }}}
 
-syn cluster	cfScriptCluster	contains=cfScriptParen,cfScriptLineComment,cfScriptComment,cfScriptStringD,cfScriptStringS,cfScriptFunction,cfScriptNumber,cfScriptRegexpString,cfScriptBoolean,cfScriptBraces,cfHashRegion,cfFunctionName,cfDeprecatedFunction,cfScope,@cfOperatorCluster,cfScriptConditional,cfScriptRepeat,cfScriptBranch,@cfExpressionCluster,cfScriptStatement,cfScriptSpecial,cfScriptKeyword
+" / ODD FUNCTION }}}
+
+" CUSTOM {{{
 
-" Errors caused by wrong parenthesis; skip strings
-syn region	cfScriptParen	contained transparent skip=+"[^"]*"\|'[^']*'+ start=+(+ end=+)+ contains=@cfScriptCluster
-syn match	cfScrParenError	contained +)+
+" CUSTOM KEYWORD {{{
+sy match cfmlCustomKeyword
+  \ contained
+    \ "\v<
+    \(customKeyword1
+    \|customKeyword2
+    \|customKeyword3
+    \)>"
+" / CUSTOM KEYWORD }}}
 
-syn region	cfscriptBlock	matchgroup=NONE start="<cfscript>"	end="<\/cfscript>"me=s-1 keepend contains=@cfScriptCluster,cfscriptTag,cfScrParenError
-syn region	cfscriptTag	contained start='<cfscript' end='>' keepend contains=cfTagName,htmlTag
-
-" CFML
-syn cluster	cfmlCluster	contains=cfComment,@htmlTagNameCluster,@htmlPreproc,cfSetRegion,cfscriptBlock,cfOutputRegion
+" CUSTOM SCOPE {{{
+sy match cfmlCustomScope
+  \ contained
+    \ "\v<
+    \(prc
+    \|rc
+    \|event
+    \|(\w+Service)
+    \){1}\ze(\.|\[)"
+" / CUSTOM SCOPE }}}
 
-" cfquery = sql syntax
-if exists("b:current_syntax")
-  unlet b:current_syntax
-endif
-syn include @cfSql $VIMRUNTIME/syntax/sql.vim
-unlet b:current_syntax
-syn region	cfqueryTag	contained start=+<cfquery+ end=+>+ keepend contains=cfTagName,htmlTag
-syn region	cfSqlregion	start=+<cfquery\_[^>]*>+ keepend end=+</cfquery>+me=s-1 matchgroup=NONE contains=@cfSql,cfComment,@htmlTagNameCluster,cfqueryTag,cfHashRegion
-
-" Define the highlighting.
+" / CUSTOM }}}
 
-if exists("d_noinclude_html")
-  " The default html-style highlighting copied from html.vim.
-  hi def link htmlTag		Function
-  hi def link htmlEndTag		Identifier
-  hi def link htmlArg		Type
-  hi def link htmlTagName		htmlStatement
-  hi def link htmlValue		String
-  hi def link htmlPreProc		PreProc
-  hi def link htmlString		String
-  hi def link htmlStatement	Statement
-  hi def link htmlValue		String
-  hi def link htmlTagError		htmlError
-  hi def link htmlError		Error
-endif
+" SGML TAG START AND END {{{
+" SGML tag start
+" <...>
+" s^^^e
+sy region cfmlSGMLTagStart
+  \ keepend
+  \ transparent
+  \ start="\v(\<cf)@!\zs\<\w+"
+  \ end=">"
+  \ contains=
+    \@cfmlAttribute,
+    \@cfmlComment,
+    \@cfmlOperator,
+    \@cfmlParenthesisRegion,
+    \@cfmlPunctuation,
+    \@cfmlQuote,
+    \@cfmlQuotedValue,
+    \cfmlAttrEqualSign,
+    \cfmlBoolean,
+    \cfmlBrace,
+    \cfmlCoreKeyword,
+    \cfmlCoreScope,
+    \cfmlCustomKeyword,
+    \cfmlCustomScope,
+    \cfmlEqualSign,
+    \cfmlFunctionName,
+    \cfmlNumber,
+    \cfmlStorageKeyword,
+    \cfmlStorageType,
+    \cfmlTagBracket,
+    \cfmlSGMLTagName
+
+" SGML tag end
+" </...>
+" s^^^^e
+sy match cfmlSGMLTagEnd
+  \ transparent
+  \ "\v(\<\/cf)@!\zs\<\/\w+\>"
+  \ contains=
+    \cfmlTagBracket,
+    \cfmlSGMLTagName
+
+" SGML tag name
+" <...>
+" s^^^e
+sy match cfmlSGMLTagName
+  \ contained
+  \ "\v(\<\/*)\zs\w+"
+
+" / SGML TAG START AND END }}}
+
+" HIGHLIGHTING {{{
 
-hi def link cfTagName		Statement
-hi def link cfCustomTagName	Statement
-hi def link cfArg			Type
-hi def link cfFunctionName		Function
-hi def link cfHashRegion		PreProc
-hi def link cfComment		Comment
-hi def link cfCommentTodo		Todo
-hi def link cfOperator		Operator
-hi def link cfOperatorMatch	Operator
-hi def link cfScope		Title
-hi def link cfBool			Constant
-
-hi def link cfscriptBlock		Special
-hi def link cfscriptTag		htmlTag
-hi def link cfSetRegion		PreProc
-hi def link cfSetLHSRegion		htmlTag
-hi def link cfSetTagEnd		htmlTag
+hi link cfmlNumber Number
+hi link cfmlBoolean Boolean
+hi link cfmlEqualSign Keyword
+" HASH SURROUND
+hi link cfmlHash PreProc
+hi link cfmlHashSurround PreProc
+" OPERATOR
+hi link cfmlArithmeticOperator Function
+hi link cfmlBooleanOperator Function
+hi link cfmlDecisionOperator Function
+hi link cfmlStringOperator Function
+hi link cfmlTernaryOperator Function
+" PARENTHESIS
+hi link cfmlParenthesis1 Statement
+hi link cfmlParenthesis2 String
+hi link cfmlParenthesis3 Delimiter
+" BRACE
+hi link cfmlBrace PreProc
+" PUNCTUATION - BRACKET
+hi link cfmlBracket Statement
+" PUNCTUATION - CHAR
+hi link cfmlComma Comment
+hi link cfmlDot Comment
+hi link cfmlSemiColon Comment
+" PUNCTUATION - QUOTE
+hi link cfmlDoubleQuote String
+hi link cfmlDoubleQuotedValue String
+hi link cfmlSingleQuote String
+hi link cfmlSingleQuotedValue String
+" TAG START AND END
+hi link cfmlTagName Function
+hi link cfmlTagBracket Comment
+" ATTRIBUTE NAME AND VALUE
+hi link cfmlAttrName Type
+hi link cfmlAttrValue Special
+" COMMENT
+hi link cfmlCommentBlock Comment
+hi link cfmlCommentLine Comment
+hi link cfmlTagComment Comment
+" FLOW STATEMENT
+hi link cfmlDecisionFlowKeyword Conditional
+hi link cfmlLoopFlowKeyword Repeat
+hi link cfmlTryFlowKeyword Exception
+hi link cfmlBranchFlowKeyword Keyword
+" STORAGE KEYWORD
+hi link cfmlStorageKeyword Keyword
+" STORAGE TYPE
+hi link cfmlStorageType Keyword
+" CORE KEYWORD
+hi link cfmlCoreKeyword PreProc
+" CORE SCOPE
+hi link cfmlCoreScope Keyword
+" TAG IN SCRIPT
+hi link cfmlTagNameInScript Function
+" METADATA
+" meta data value = cfmlMetaData
+hi link cfmlMetaData String
+hi link cfmlMetaDataName Type
+" COMPONENT DEFINITION
+hi link cfmlComponentKeyword Keyword
+" INTERFACE DEFINITION
+hi link cfmlInterfaceKeyword Keyword
+" PROPERTY
+hi link cfmlPropertyKeyword Keyword
+" FUNCTION DEFINITION
+hi link cfmlFunctionKeyword Keyword
+hi link cfmlFunctionModifier Keyword
+hi link cfmlFunctionReturnType Keyword
+hi link cfmlFunctionName Function
+" ODD FUNCTION
+hi link cfmlOddFunctionKeyword Function
+" CUSTOM
+hi link cfmlCustomKeyword Keyword
+hi link cfmlCustomScope Structure
+" SGML TAG
+hi link cfmlSGMLTagName Ignore
 
-hi def link cfScriptLineComment	Comment
-hi def link cfScriptComment	Comment
-hi def link cfScriptStringS	String
-hi def link cfScriptStringD	String
-hi def link cfScriptNumber		cfScriptValue
-hi def link cfScriptConditional	Conditional
-hi def link cfScriptRepeat		Repeat
-hi def link cfScriptBranch		Conditional
-hi def link cfScriptSpecial	Type
-hi def link cfScriptStatement	Statement
-hi def link cfScriptBraces		Function
-hi def link cfScriptKeyword	Function
-hi def link cfScriptError		Error
-hi def link cfDeprecatedTag	Error
-hi def link cfDeprecatedFunction	Error
-hi def link cfScrParenError	cfScriptError
+" / HIGHLIGHTING }}}
 
-hi def link cfqueryTag		htmlTag
+let b:current_syntax = "cfml"
 
-let b:current_syntax = "cf"
-
-" vim: nowrap sw=2 ts=8 noet
+let &cpo = s:cpo_save
+unlet s:cpo_save
--- a/runtime/syntax/zsh.vim
+++ b/runtime/syntax/zsh.vim
@@ -2,7 +2,7 @@
 " Language:             Zsh shell script
 " Maintainer:           Christian Brabandt <cb@256bit.org>
 " Previous Maintainer:  Nikolai Weibull <now@bitwi.se>
-" Latest Revision:      2017-07-11
+" Latest Revision:      2017-11-22
 " License:              Vim (see :h license)
 " Repository:           https://github.com/chrisbra/vim-zsh
 
@@ -324,9 +324,9 @@ syn match   zshOption /
       \ \%(\%(\<no_\?\)\?vi\>\)\|
       \ \%(\%(\<no_\?\)\?warncreateglobal\>\)\|\%(\%(no_\?\)\?warn_create_global\>\)\|
       \ \%(\%(\<no_\?\)\?xtrace\>\)\|
-      \ \%(\%(\<no_\?\)\?zle\>\)/ nextgroup=zshOption skipwhite contained
+      \ \%(\%(\<no_\?\)\?zle\>\)/ nextgroup=zshOption,zshComment skipwhite contained
 
-syn keyword zshTypes            float integer local typeset declare private
+syn keyword zshTypes            float integer local typeset declare private readonly
 
 " XXX: this may be too much
 " syn match   zshSwitches         '\s\zs--\=[a-zA-Z0-9-]\+'