blob: 04f9f5967b16e3d3e8d580395c7afcd9a65ad570 [file] [log] [blame]
Bram Moolenaarc2065802005-11-25 19:50:52 +00001" Vim syntax file
Bram Moolenaar2f058492017-11-30 20:27:52 +01002"
3" Language: CFML (ColdFusion)
4" Author: Ernst M. van der Linden <ernst.vanderlinden@ernestoz.com>
5" License: The MIT License (MIT)
6"
7" Maintainer: Ernst M. van der Linden <ernst.vanderlinden@ernestoz.com>
8" URL: https://github.com/ernstvanderlinden/vim-coldfusion
9" Last Change: 2017 Nov 28
10"
11" Filenames: *.cfc *.cfm
Bram Moolenaarc2065802005-11-25 19:50:52 +000012
Bram Moolenaar2f058492017-11-30 20:27:52 +010013" Quit when a syntax file was already loaded.
Bram Moolenaar5e3dae82010-03-02 16:19:40 +010014if exists("b:current_syntax")
Bram Moolenaarc2065802005-11-25 19:50:52 +000015 finish
16endif
17
Bram Moolenaar2f058492017-11-30 20:27:52 +010018" Using line continuation here.
19let s:cpo_save=&cpo
20set cpo-=C
Bram Moolenaar5e3dae82010-03-02 16:19:40 +010021
Bram Moolenaar2f058492017-11-30 20:27:52 +010022sy sync fromstart
23" 20171126: disabled as we have fast computers now.
24"sy sync maxlines=2000
25sy case ignore
Bram Moolenaarc2065802005-11-25 19:50:52 +000026
Bram Moolenaar2f058492017-11-30 20:27:52 +010027" INCLUDES {{{
28sy include @sqlSyntax $VIMRUNTIME/syntax/sql.vim
29" 20161010: Disabled include html highlighting as it contains huge keywords
30" regex, so it will have impact on performance. Use own simple SGML tag
31" coloring instead.
32"runtime! syntax/html.vim
33" / INCLUDES }}}
Bram Moolenaarc2065802005-11-25 19:50:52 +000034
Bram Moolenaar2f058492017-11-30 20:27:52 +010035" NUMBER {{{
36sy match cfmlNumber
37 \ "\v<\d+>"
38" / NUMBER }}}
Bram Moolenaarc2065802005-11-25 19:50:52 +000039
Bram Moolenaar2f058492017-11-30 20:27:52 +010040" EQUAL SIGN {{{
41sy match cfmlEqualSign
42 \ "\v\="
43" / EQUAL SIGN }}}
Bram Moolenaar5e3dae82010-03-02 16:19:40 +010044
Bram Moolenaar2f058492017-11-30 20:27:52 +010045" BOOLEAN {{{
46sy match cfmlBoolean
47 \ "\v<(true|false)>"
48" / BOOLEAN }}}
Bram Moolenaar5e3dae82010-03-02 16:19:40 +010049
Bram Moolenaar2f058492017-11-30 20:27:52 +010050" HASH SURROUNDED {{{
51sy region cfmlHashSurround
52 \ keepend
53 \ oneline
54 \ start="#"
55 \ end="#"
56 \ skip="##"
57 \ contains=
58 \@cfmlOperator,
59 \@cfmlPunctuation,
60 \cfmlBoolean,
61 \cfmlCoreKeyword,
62 \cfmlCoreScope,
63 \cfmlCustomKeyword,
64 \cfmlCustomScope,
65 \cfmlEqualSign,
66 \cfmlFunctionName,
67 \cfmlNumber
68" / HASH SURROUNDED }}}
Bram Moolenaarc2065802005-11-25 19:50:52 +000069
Bram Moolenaar2f058492017-11-30 20:27:52 +010070" OPERATOR {{{
Bram Moolenaarc2065802005-11-25 19:50:52 +000071
Bram Moolenaar2f058492017-11-30 20:27:52 +010072" OPERATOR - ARITHMETIC {{{
73" +7 -7
74" ++i --i
75" i++ i--
76" + - * / %
77" += -= *= /= %=
78" ^ mod
79sy match cfmlArithmeticOperator
80 \ "\v
81 \(\+|-)\ze\d
82 \|(\+\+|--)\ze\w
83 \|\w\zs(\+\+|--)
84 \|(\s(
85 \(\+|-|\*|\/|\%){1}\={,1}
86 \|\^
87 \|mod
88 \)\s)
89 \"
90" / OPERATOR - ARITHMETIC }}}
Bram Moolenaarc2065802005-11-25 19:50:52 +000091
Bram Moolenaar2f058492017-11-30 20:27:52 +010092" OPERATOR - BOOLEAN {{{
93" not and or xor eqv imp
94" ! && ||
95sy match cfmlBooleanOperator
96 \ "\v\s
97 \(not|and|or|xor|eqv|imp
98 \|\!|\&\&|\|\|
99 \)(\s|\))
100 \|\s\!\ze\w
101 \"
102" / OPERATOR - BOOLEAN }}}
Bram Moolenaar3577c6f2008-06-24 21:16:56 +0000103
Bram Moolenaar2f058492017-11-30 20:27:52 +0100104" OPERATOR - DECISION {{{
105"is|equal|eq
106"is not|not equal|neq
107"contains|does not contain
108"greater than|gt
109"less than|lt
110"greater than or equal to|gte|ge
111"less than or equal to|lte|le
112"==|!=|>|<|>=|<=
113sy match cfmlDecisionOperator
114 \ "\v\s
115 \(is|equal|eq
116 \|is not|not equal|neq
117 \|contains|does not contain
118 \|greater than|gt
119 \|less than|lt
120 \|greater than or equal to|gte|ge
121 \|less than or equal to|lte|le
122 \|(!|\<|\>|\=){1}\=
123 \|\<
124 \|\>
125 \)\s"
126" / OPERATOR - DECISION }}}
Bram Moolenaarc2065802005-11-25 19:50:52 +0000127
Bram Moolenaar2f058492017-11-30 20:27:52 +0100128" OPERATOR - STRING {{{
129" &
130" &=
131sy match cfmlStringOperator
132 \ "\v\s\&\={,1}\s"
133" / OPERATOR - STRING }}}
Bram Moolenaarc2065802005-11-25 19:50:52 +0000134
Bram Moolenaar2f058492017-11-30 20:27:52 +0100135" OPERATOR - TERNARY {{{
136" ? :
137sy match cfmlTernaryOperator
138 \ "\v\s
139 \\?|\:
140 \\s"
141" / OPERATOR - TERNARY }}}
Bram Moolenaarc2065802005-11-25 19:50:52 +0000142
Bram Moolenaar2f058492017-11-30 20:27:52 +0100143sy cluster cfmlOperator
144 \ contains=
145 \cfmlArithmeticOperator,
146 \cfmlBooleanOperator,
147 \cfmlDecisionOperator,
148 \cfmlStringOperator,
149 \cfmlTernaryOperator
150" / OPERATOR }}}
Bram Moolenaar5e3dae82010-03-02 16:19:40 +0100151
Bram Moolenaar2f058492017-11-30 20:27:52 +0100152" PARENTHESIS {{{
153sy cluster cfmlParenthesisRegionContains
154 \ contains=
155 \@cfmlAttribute,
156 \@cfmlComment,
157 \@cfmlFlowStatement,
158 \@cfmlOperator,
159 \@cfmlPunctuation,
160 \cfmlBoolean,
161 \cfmlBrace,
162 \cfmlCoreKeyword,
163 \cfmlCoreScope,
164 \cfmlCustomKeyword,
165 \cfmlCustomScope,
166 \cfmlEqualSign,
167 \cfmlFunctionName,
168 \cfmlNumber,
169 \cfmlStorageKeyword,
170 \cfmlStorageType
Bram Moolenaarc2065802005-11-25 19:50:52 +0000171
Bram Moolenaar2f058492017-11-30 20:27:52 +0100172sy region cfmlParenthesisRegion1
173 \ extend
174 \ matchgroup=cfmlParenthesis1
175 \ transparent
176 \ start=/(/
177 \ end=/)/
178 \ contains=
179 \cfmlParenthesisRegion2,
180 \@cfmlParenthesisRegionContains
181sy region cfmlParenthesisRegion2
182 \ matchgroup=cfmlParenthesis2
183 \ transparent
184 \ start=/(/
185 \ end=/)/
186 \ contains=
187 \cfmlParenthesisRegion3,
188 \@cfmlParenthesisRegionContains
189sy region cfmlParenthesisRegion3
190 \ matchgroup=cfmlParenthesis3
191 \ transparent
192 \ start=/(/
193 \ end=/)/
194 \ contains=
195 \cfmlParenthesisRegion1,
196 \@cfmlParenthesisRegionContains
197sy cluster cfmlParenthesisRegion
198 \ contains=
199 \cfmlParenthesisRegion1,
200 \cfmlParenthesisRegion2,
201 \cfmlParenthesisRegion3
202" / PARENTHESIS }}}
Bram Moolenaarc2065802005-11-25 19:50:52 +0000203
Bram Moolenaar2f058492017-11-30 20:27:52 +0100204" BRACE {{{
205sy match cfmlBrace
206 \ "{\|}"
Bram Moolenaarc2065802005-11-25 19:50:52 +0000207
Bram Moolenaar2f058492017-11-30 20:27:52 +0100208sy region cfmlBraceRegion
209 \ extend
210 \ fold
211 \ keepend
212 \ transparent
213 \ start="{"
214 \ end="}"
215" / BRACE }}}
Bram Moolenaarc2065802005-11-25 19:50:52 +0000216
Bram Moolenaar2f058492017-11-30 20:27:52 +0100217" PUNCTUATION {{{
Bram Moolenaar5e3dae82010-03-02 16:19:40 +0100218
Bram Moolenaar2f058492017-11-30 20:27:52 +0100219" PUNCTUATION - BRACKET {{{
220sy match cfmlBracket
221 \ "\(\[\|\]\)"
222 \ contained
223" / PUNCTUATION - BRACKET }}}
Bram Moolenaarc2065802005-11-25 19:50:52 +0000224
Bram Moolenaar2f058492017-11-30 20:27:52 +0100225" PUNCTUATION - CHAR {{{
226sy match cfmlComma ","
227sy match cfmlDot "\."
228sy match cfmlSemiColon ";"
Bram Moolenaarc2065802005-11-25 19:50:52 +0000229
Bram Moolenaar2f058492017-11-30 20:27:52 +0100230" / PUNCTUATION - CHAR }}}
Bram Moolenaarc2065802005-11-25 19:50:52 +0000231
Bram Moolenaar2f058492017-11-30 20:27:52 +0100232" PUNCTUATION - QUOTE {{{
233sy region cfmlSingleQuotedValue
234 \ matchgroup=cfmlSingleQuote
235 \ start=/'/
236 \ skip=/''/
237 \ end=/'/
238 \ contains=
239 \cfmlHashSurround
Bram Moolenaar3577c6f2008-06-24 21:16:56 +0000240
Bram Moolenaar2f058492017-11-30 20:27:52 +0100241sy region cfmlDoubleQuotedValue
242 \ matchgroup=cfmlDoubleQuote
243 \ start=/"/
244 \ skip=/""/
245 \ end=/"/
246 \ contains=
247 \cfmlHashSurround
Bram Moolenaar5e3dae82010-03-02 16:19:40 +0100248
Bram Moolenaar2f058492017-11-30 20:27:52 +0100249sy cluster cfmlQuotedValue
250 \ contains=
251 \cfmlDoubleQuotedValue,
252 \cfmlSingleQuotedValue
Bram Moolenaar5e3dae82010-03-02 16:19:40 +0100253
Bram Moolenaar2f058492017-11-30 20:27:52 +0100254sy cluster cfmlQuote
255 \ contains=
256 \cfmlDoubleQuote,
257 \cfmlSingleQuote
258" / PUNCTUATION - QUOTE }}}
Bram Moolenaar5e3dae82010-03-02 16:19:40 +0100259
Bram Moolenaar2f058492017-11-30 20:27:52 +0100260sy cluster cfmlPunctuation
261 \ contains=
262 \@cfmlQuote,
263 \@cfmlQuotedValue,
264 \cfmlBracket,
265 \cfmlComma,
266 \cfmlDot,
267 \cfmlSemiColon
Bram Moolenaar5e3dae82010-03-02 16:19:40 +0100268
Bram Moolenaar2f058492017-11-30 20:27:52 +0100269" / PUNCTUATION }}}
Bram Moolenaar5e3dae82010-03-02 16:19:40 +0100270
Bram Moolenaar2f058492017-11-30 20:27:52 +0100271" TAG START AND END {{{
272" tag start
273" <cf...>
274" s^^ e
275sy region cfmlTagStart
276 \ keepend
277 \ transparent
278 \ start="\c<cf_*"
279 \ end=">"
280\ contains=
281 \@cfmlAttribute,
282 \@cfmlComment,
283 \@cfmlOperator,
284 \@cfmlParenthesisRegion,
285 \@cfmlPunctuation,
286 \@cfmlQuote,
287 \@cfmlQuotedValue,
288 \cfmlAttrEqualSign,
289 \cfmlBoolean,
290 \cfmlBrace,
291 \cfmlCoreKeyword,
292 \cfmlCoreScope,
293 \cfmlCustomKeyword,
294 \cfmlCustomScope,
295 \cfmlEqualSign,
296 \cfmlFunctionName,
297 \cfmlNumber,
298 \cfmlStorageKeyword,
299 \cfmlStorageType,
300 \cfmlTagBracket,
301 \cfmlTagName
Bram Moolenaar5e3dae82010-03-02 16:19:40 +0100302
Bram Moolenaar2f058492017-11-30 20:27:52 +0100303" tag end
304" </cf...>
305" s^^^ e
306sy match cfmlTagEnd
307 \ transparent
308 \ "\c</cf_*[^>]*>"
309 \ contains=
310 \cfmlTagBracket,
311 \cfmlTagName
Bram Moolenaarc2065802005-11-25 19:50:52 +0000312
Bram Moolenaar2f058492017-11-30 20:27:52 +0100313" tag bracket
314" </...>
315" ^^ ^
316sy match cfmlTagBracket
317 \ contained
318 \ "\(<\|>\|\/\)"
Bram Moolenaarc2065802005-11-25 19:50:52 +0000319
Bram Moolenaar2f058492017-11-30 20:27:52 +0100320" tag name
321" <cf...>
322" s^^^e
323sy match cfmlTagName
324 \ contained
325 \ "\v<\/*\zs\ccf\w*"
326" / TAG START AND END }}}
327
328" ATTRIBUTE NAME AND VALUE {{{
329sy match cfmlAttrName
330 \ contained
331 \ "\v(var\s)@<!\w+\ze\s*\=([^\=])+"
332
333sy match cfmlAttrValue
334 \ contained
335 \ "\v(\=\"*)\zs\s*\w*"
336
337sy match cfmlAttrEqualSign
338 \ contained
339 \ "\v\="
340
341sy cluster cfmlAttribute
342\ contains=
343 \@cfmlQuotedValue,
344 \cfmlAttrEqualSign,
345 \cfmlAttrName,
346 \cfmlAttrValue,
347 \cfmlCoreKeyword,
348 \cfmlCoreScope
349" / ATTRIBUTE NAME AND VALUE }}}
350
351" TAG REGION AND FOLDING {{{
352
353" CFCOMPONENT REGION AND FOLD {{{
354" <cfcomponent
355" s^^^^^^^^^^^
356" </cfcomponent>
357" ^^^^^^^^^^^^^e
358sy region cfmlComponentTagRegion
359 \ fold
360 \ keepend
361 \ transparent
362 \ start="\c<cfcomponent"
363 \ end="\c</cfcomponent>"
364
365" / CFCOMPONENT REGION AND FOLD }}}
366
367" CFFUNCTION REGION AND FOLD {{{
368" <cffunction
369" s^^^^^^^^^^
370" </cffunction>
371" ^^^^^^^^^^^^e
372sy region cfmlFunctionTagRegion
373 \ fold
374 \ keepend
375 \ transparent
376 \ start="\c<cffunction"
377 \ end="\c</cffunction>"
378" / CFFUNCTION REGION AND FOLD }}}
379
380" CFIF REGION AND FOLD {{{
381" <cfif
382" s^^^^
383" </cfif>
384" ^^^^^^e
385sy region cfmlIfTagRegion
386 \ fold
387 \ keepend
388 \ transparent
389 \ start="\c<cfif"
390 \ end="\c</cfif>"
391" / CFIF REGION AND FOLD }}}
392
393" CFLOOP REGION AND FOLD {{{
394" <cfloop
395" s^^^^^^
396" </cfloop>
397" ^^^^^^^^e
398sy region cfmlLoopTagRegion
399 \ fold
400 \ keepend
401 \ transparent
402 \ start="\c<cfloop"
403 \ end="\c</cfloop>"
404" / CFLOOP REGION AND FOLD }}}
405
406" CFOUTPUT REGION AND FOLD {{{
407" <cfoutput
408" s^^^^^^^^
409" </cfoutput>
410" ^^^^^^^^^^e
411sy region cfmlOutputTagRegion
412 \ fold
413 \ keepend
414 \ transparent
415 \ start="\c<cfoutput"
416 \ end="\c</cfoutput>"
417" / CFOUTPUT REGION AND FOLD }}}
418
419" CFQUERY REGION AND FOLD {{{
420" <cfquery
421" s^^^^^^^
422" </cfquery>
423" ^^^^^^^^^e
424 "\@cfmlSqlStatement,
425sy region cfmlQueryTagRegion
426 \ fold
427 \ keepend
428 \ transparent
429 \ start="\c<cfquery"
430 \ end="\c</cfquery>"
431 \ contains=
432 \@cfmlSqlStatement,
433 \cfmlTagStart,
434 \cfmlTagEnd,
435 \cfmlTagComment
436" / CFQUERY REGION AND FOLD }}}
437
438" SAVECONTENT REGION AND FOLD {{{
439" <savecontent
440" s^^^^^^^^^^^
441" </savecontent>
442" ^^^^^^^^^^^^^e
443sy region cfmlSavecontentTagRegion
444 \ fold
445 \ keepend
446 \ transparent
447 \ start="\c<cfsavecontent"
448 \ end="\c</cfsavecontent>"
449" / SAVECONTENT REGION AND FOLD }}}
450
451" CFSCRIPT REGION AND FOLD {{{
452" <cfscript>
453" s^^^^^^^^^
454" </cfscript>
455" ^^^^^^^^^^e
456"\cfmlCustomScope,
457sy region cfmlScriptTagRegion
458 \ fold
459 \ keepend
460 \ transparent
461 \ start="\c<cfscript>"
462 \ end="\c</cfscript>"
463 \ contains=
464 \@cfmlComment,
465 \@cfmlFlowStatement,
466 \cfmlHashSurround,
467 \@cfmlOperator,
468 \@cfmlParenthesisRegion,
469 \@cfmlPunctuation,
470 \cfmlBoolean,
471 \cfmlBrace,
472 \cfmlCoreKeyword,
473 \cfmlCoreScope,
474 \cfmlCustomKeyword,
475 \cfmlCustomScope,
476 \cfmlEqualSign,
477 \cfmlFunctionDefinition,
478 \cfmlFunctionName,
479 \cfmlNumber,
480 \cfmlOddFunction,
481 \cfmlStorageKeyword,
482 \cfmlTagEnd,
483 \cfmlTagStart
484" / CFSCRIPT REGION AND FOLD }}}
485
486" CFSWITCH REGION AND FOLD {{{
487" <cfswitch
488" s^^^^^^^^
489" </cfswitch>
490" ^^^^^^^^^^e
491sy region cfmlSwitchTagRegion
492 \ fold
493 \ keepend
494 \ transparent
495 \ start="\c<cfswitch"
496 \ end="\c</cfswitch>"
497" / CFSWITCH REGION AND FOLD }}}
498
499" CFTRANSACTION REGION AND FOLD {{{
500" <cftransaction
501" s^^^^^^^^^^^^^
502" </cftransaction>
503" ^^^^^^^^^^^^^^^e
504sy region cfmlTransactionTagRegion
505 \ fold
506 \ keepend
507 \ transparent
508 \ start="\c<cftransaction"
509 \ end="\c</cftransaction>"
510" / CFTRANSACTION REGION AND FOLD }}}
511
512" CUSTOM TAG REGION AND FOLD {{{
513" <cf_...>
514" s^^^ ^
515" </cf_...>
516" ^^^^^ e
517sy region cfmlCustomTagRegion
518 \ fold
519 \ keepend
520 \ transparent
521 \ start="\c<cf_[^>]*>"
522 \ end="\c</cf_[^>]*>"
523" / CUSTOM TAG REGION AND FOLD }}}
524
525" / TAG REGION AND FOLDING }}}
526
527" COMMENT {{{
528
529" COMMENT BLOCK {{{
530" /*...*/
531" s^ ^e
532sy region cfmlCommentBlock
533 \ keepend
534 \ start="/\*"
535 \ end="\*/"
536 \ contains=
537 \cfmlMetaData
538" / COMMENT BLOCK }}}
539
540" COMMENT LINE {{{
541" //...
542" s^
543sy match cfmlCommentLine
544 \ "\/\/.*"
545" / COMMENT LINE }}}
546
547sy cluster cfmlComment
548 \ contains=
549 \cfmlCommentBlock,
550 \cfmlCommentLine
551" / COMMENT }}}
552
553" TAG COMMENT {{{
554" <!---...--->
555" s^^^^ ^^^e
556sy region cfmlTagComment
557 \ keepend
558 \ start="<!---"
559 \ end="--->"
560 \ contains=
561 \cfmlTagComment
562" / TAG COMMENT }}}
563
564" FLOW STATEMENT {{{
565" BRANCH FLOW KEYWORD {{{
566sy keyword cfmlBranchFlowKeyword
567 \ break
568 \ continue
569 \ return
570
571" / BRANCH KEYWORD }}}
572
573" DECISION FLOW KEYWORD {{{
574sy keyword cfmlDecisionFlowKeyword
575 \ case
576 \ defaultcase
577 \ else
578 \ if
579 \ switch
580
581" / DECISION FLOW KEYWORD }}}
582
583" LOOP FLOW KEYWORD {{{
584sy keyword cfmlLoopFlowKeyword
585 \ do
586 \ for
587 \ in
588 \ while
589
590" / LOOP FLOW KEYWORD }}}
591
592" TRY FLOW KEYWORD {{{
593sy keyword cfmlTryFlowKeyword
594 \ catch
595 \ finally
596 \ rethrow
597 \ throw
598 \ try
599
600" / TRY FLOW KEYWORD }}}
601
602sy cluster cfmlFlowStatement
603 \ contains=
604 \cfmlBranchFlowKeyword,
605 \cfmlDecisionFlowKeyword,
606 \cfmlLoopFlowKeyword,
607 \cfmlTryFlowKeyword
608
609" / FLOW STATEMENT }}}
610
611" STORAGE KEYWORD {{{
612sy keyword cfmlStorageKeyword
613 \ var
614" / STORAGE KEYWORD }}}
615
616" STORAGE TYPE {{{
617sy match cfmlStorageType
618 \ contained
619 \ "\v<
620 \(any
621 \|array
622 \|binary
623 \|boolean
624 \|date
625 \|numeric
626 \|query
627 \|string
628 \|struct
629 \|uuid
630 \|void
631 \|xml
632 \){1}\ze(\s*\=)@!"
633" / STORAGE TYPE }}}
634
635" CORE KEYWORD {{{
636sy match cfmlCoreKeyword
637 \ "\v<
638 \(new
639 \|required
640 \)\ze\s"
641" / CORE KEYWORD }}}
642
643" CORE SCOPE {{{
644sy match cfmlCoreScope
645 \ "\v<
646 \(application
647 \|arguments
648 \|attributes
649 \|caller
650 \|cfcatch
651 \|cffile
652 \|cfhttp
653 \|cgi
654 \|client
655 \|cookie
656 \|form
657 \|local
658 \|request
659 \|server
660 \|session
661 \|super
662 \|this
663 \|thisTag
664 \|thread
665 \|variables
666 \|url
667 \){1}\ze(,|\.|\[|\)|\s)"
668" / CORE SCOPE }}}
669
670" SQL STATEMENT {{{
671sy cluster cfmlSqlStatement
672 \ contains=
673 \@cfmlParenthesisRegion,
674 \@cfmlQuote,
675 \@cfmlQuotedValue,
676 \@sqlSyntax,
677 \cfmlBoolean,
678 \cfmlDot,
679 \cfmlEqualSign,
680 \cfmlFunctionName,
681 \cfmlHashSurround,
682 \cfmlNumber
683" / SQL STATEMENT }}}
684
685" TAG IN SCRIPT {{{
686sy match cfmlTagNameInScript
687 \ "\vcf_*\w+\s*\ze\("
688" / TAG IN SCRIPT }}}
689
690" METADATA {{{
691sy region cfmlMetaData
692 \ contained
693 \ keepend
694 \ start="@\w\+"
695 \ end="$"
696 \ contains=
697 \cfmlMetaDataName
698
699sy match cfmlMetaDataName
700 \ contained
701 \ "@\w\+"
702" / METADATA }}}
703
704" COMPONENT DEFINITION {{{
705sy region cfmlComponentDefinition
706 \ start="component"
707 \ end="{"me=e-1
708 \ contains=
709 \@cfmlAttribute,
710 \cfmlComponentKeyword
711
712sy match cfmlComponentKeyword
713 \ contained
714 \ "\v<component>"
715" / COMPONENT DEFINITION }}}
716
717" INTERFACE DEFINITION {{{
718sy match cfmlInterfaceDefinition
719 \ "interface\s.*{"me=e-1
720 \ contains=
721 \cfmlInterfaceKeyword
722
723sy match cfmlInterfaceKeyword
724 \ contained
725 \ "\v<interface>"
726" / INTERFACE DEFINITION }}}
727
728" PROPERTY {{{
729sy region cfmlProperty
730 \ transparent
731 \ start="\v<property>"
732 \ end=";"me=e-1
733 \ contains=
734 \@cfmlQuotedValue,
735 \cfmlAttrEqualSign,
736 \cfmlAttrName,
737 \cfmlAttrValue,
738 \cfmlPropertyKeyword
739
740sy match cfmlPropertyKeyword
741 \ contained
742 \ "\v<property>"
743" / PROPERTY }}}
744
745" FUNCTION DEFINITION {{{
746sy match cfmlFunctionDefinition
747 \ "\v
748 \(<(public|private|package)\s){,1}
749 \(<
750 \(any
751 \|array
752 \|binary
753 \|boolean
754 \|date
755 \|numeric
756 \|query
757 \|string
758 \|struct
759 \|uuid
760 \|void
761 \|xml
762 \)\s){,1}
763 \<function\s\w+\s*\("me=e-1
764 \ contains=
765 \cfmlFunctionKeyword,
766 \cfmlFunctionModifier,
767 \cfmlFunctionName,
768 \cfmlFunctionReturnType
769
770" FUNCTION KEYWORD {{{
771sy match cfmlFunctionKeyword
772 \ contained
773 \ "\v<function>"
774" / FUNCTION KEYWORD }}}
775
776" FUNCTION MODIFIER {{{
777sy match cfmlFunctionModifier
778 \ contained
779 \ "\v<
780 \(public
781 \|private
782 \|package
783 \)>"
784" / FUNCTION MODIFIER }}}
785
786" FUNCTION RETURN TYPE {{{
787sy match cfmlFunctionReturnType
788 \ contained
789 \ "\v
790 \(any
791 \|array
792 \|binary
793 \|boolean
794 \|date
795 \|numeric
796 \|query
797 \|string
798 \|struct
799 \|uuid
800 \|void
801 \|xml
802 \)"
803" / FUNCTION RETURN TYPE }}}
804
805" FUNCTION NAME {{{
806" specific regex for core functions decreases performance
807" so use the same highlighting for both function types
808sy match cfmlFunctionName
809 \ "\v<(cf|if|elseif|throw)@!\w+\s*\ze\("
810" / FUNCTION NAME }}}
811
812" / FUNCTION DEFINITION }}}
813
814" ODD FUNCTION {{{
815sy region cfmlOddFunction
816 \ transparent
817 \ start="\v<
818 \(abort
819 \|exit
820 \|import
821 \|include
822 \|lock
823 \|pageencoding
824 \|param
825 \|savecontent
826 \|thread
827 \|transaction
828 \){1}"
829 \ end="\v(\{|;)"me=e-1
830 \ contains=
831 \@cfmlQuotedValue,
832 \cfmlAttrEqualSign,
833 \cfmlAttrName,
834 \cfmlAttrValue,
835 \cfmlCoreKeyword,
836 \cfmlOddFunctionKeyword,
837 \cfmlCoreScope
838
839" ODD FUNCTION KEYWORD {{{
840sy match cfmlOddFunctionKeyword
841 \ contained
842 \ "\v<
843 \(abort
844 \|exit
845 \|import
846 \|include
847 \|lock
848 \|pageencoding
849 \|param
850 \|savecontent
851 \|thread
852 \|transaction
853 \)\ze(\s|$|;)"
854" / ODD FUNCTION KEYWORD }}}
855
856" / ODD FUNCTION }}}
857
858" CUSTOM {{{
859
860" CUSTOM KEYWORD {{{
861sy match cfmlCustomKeyword
862 \ contained
863 \ "\v<
864 \(customKeyword1
865 \|customKeyword2
866 \|customKeyword3
867 \)>"
868" / CUSTOM KEYWORD }}}
869
870" CUSTOM SCOPE {{{
871sy match cfmlCustomScope
872 \ contained
873 \ "\v<
874 \(prc
875 \|rc
876 \|event
877 \|(\w+Service)
878 \){1}\ze(\.|\[)"
879" / CUSTOM SCOPE }}}
880
881" / CUSTOM }}}
882
883" SGML TAG START AND END {{{
884" SGML tag start
885" <...>
886" s^^^e
887sy region cfmlSGMLTagStart
888 \ keepend
889 \ transparent
890 \ start="\v(\<cf)@!\zs\<\w+"
891 \ end=">"
892 \ contains=
893 \@cfmlAttribute,
894 \@cfmlComment,
895 \@cfmlOperator,
896 \@cfmlParenthesisRegion,
897 \@cfmlPunctuation,
898 \@cfmlQuote,
899 \@cfmlQuotedValue,
900 \cfmlAttrEqualSign,
901 \cfmlBoolean,
902 \cfmlBrace,
903 \cfmlCoreKeyword,
904 \cfmlCoreScope,
905 \cfmlCustomKeyword,
906 \cfmlCustomScope,
907 \cfmlEqualSign,
908 \cfmlFunctionName,
909 \cfmlNumber,
910 \cfmlStorageKeyword,
911 \cfmlStorageType,
912 \cfmlTagBracket,
913 \cfmlSGMLTagName
914
915" SGML tag end
916" </...>
917" s^^^^e
918sy match cfmlSGMLTagEnd
919 \ transparent
920 \ "\v(\<\/cf)@!\zs\<\/\w+\>"
921 \ contains=
922 \cfmlTagBracket,
923 \cfmlSGMLTagName
924
925" SGML tag name
926" <...>
927" s^^^e
928sy match cfmlSGMLTagName
929 \ contained
930 \ "\v(\<\/*)\zs\w+"
931
932" / SGML TAG START AND END }}}
933
934" HIGHLIGHTING {{{
935
936hi link cfmlNumber Number
937hi link cfmlBoolean Boolean
938hi link cfmlEqualSign Keyword
939" HASH SURROUND
940hi link cfmlHash PreProc
941hi link cfmlHashSurround PreProc
942" OPERATOR
943hi link cfmlArithmeticOperator Function
944hi link cfmlBooleanOperator Function
945hi link cfmlDecisionOperator Function
946hi link cfmlStringOperator Function
947hi link cfmlTernaryOperator Function
948" PARENTHESIS
949hi link cfmlParenthesis1 Statement
950hi link cfmlParenthesis2 String
951hi link cfmlParenthesis3 Delimiter
952" BRACE
953hi link cfmlBrace PreProc
954" PUNCTUATION - BRACKET
955hi link cfmlBracket Statement
956" PUNCTUATION - CHAR
957hi link cfmlComma Comment
958hi link cfmlDot Comment
959hi link cfmlSemiColon Comment
960" PUNCTUATION - QUOTE
961hi link cfmlDoubleQuote String
962hi link cfmlDoubleQuotedValue String
963hi link cfmlSingleQuote String
964hi link cfmlSingleQuotedValue String
965" TAG START AND END
966hi link cfmlTagName Function
967hi link cfmlTagBracket Comment
968" ATTRIBUTE NAME AND VALUE
969hi link cfmlAttrName Type
970hi link cfmlAttrValue Special
971" COMMENT
972hi link cfmlCommentBlock Comment
973hi link cfmlCommentLine Comment
974hi link cfmlTagComment Comment
975" FLOW STATEMENT
976hi link cfmlDecisionFlowKeyword Conditional
977hi link cfmlLoopFlowKeyword Repeat
978hi link cfmlTryFlowKeyword Exception
979hi link cfmlBranchFlowKeyword Keyword
980" STORAGE KEYWORD
981hi link cfmlStorageKeyword Keyword
982" STORAGE TYPE
983hi link cfmlStorageType Keyword
984" CORE KEYWORD
985hi link cfmlCoreKeyword PreProc
986" CORE SCOPE
987hi link cfmlCoreScope Keyword
988" TAG IN SCRIPT
989hi link cfmlTagNameInScript Function
990" METADATA
991" meta data value = cfmlMetaData
992hi link cfmlMetaData String
993hi link cfmlMetaDataName Type
994" COMPONENT DEFINITION
995hi link cfmlComponentKeyword Keyword
996" INTERFACE DEFINITION
997hi link cfmlInterfaceKeyword Keyword
998" PROPERTY
999hi link cfmlPropertyKeyword Keyword
1000" FUNCTION DEFINITION
1001hi link cfmlFunctionKeyword Keyword
1002hi link cfmlFunctionModifier Keyword
1003hi link cfmlFunctionReturnType Keyword
1004hi link cfmlFunctionName Function
1005" ODD FUNCTION
1006hi link cfmlOddFunctionKeyword Function
1007" CUSTOM
1008hi link cfmlCustomKeyword Keyword
1009hi link cfmlCustomScope Structure
1010" SGML TAG
1011hi link cfmlSGMLTagName Ignore
1012
1013" / HIGHLIGHTING }}}
1014
1015let b:current_syntax = "cfml"
1016
1017let &cpo = s:cpo_save
1018unlet s:cpo_save