vim/syntax/yml2.vim
changeset 0 76005e62091d
child 1 23daf9d318ac
equal deleted inserted replaced
-1:000000000000 0:76005e62091d
       
     1 " Vim syntax file
       
     2 " Language:	YML2 generating C
       
     3 " Maintainer:	Volker Birk <vb@dingens.org>
       
     4 " Last Change:	2016 July 10
       
     5 
       
     6 " Quit when a (custom) syntax file was already loaded
       
     7 if exists("b:current_syntax")
       
     8   finish
       
     9 endif
       
    10 
       
    11 " A bunch of useful YSLT keywords
       
    12 syn keyword	cStatement	include decl operator document def param const output value indent all text with withIndent element attrib processing number sort import message debug assert operator goto break return continue asm
       
    13 syn keyword	cLabel		stylesheet estylesheet textstylesheet tstylesheet template function case default
       
    14 syn keyword	cConditional	choose when otherwise if else switch
       
    15 syn keyword	cRepeat		for foreach apply while do
       
    16 
       
    17 syn keyword	cTodo		contained TODO FIXME XXX
       
    18 
       
    19 " It's easy to accidentally add a space after a backslash that was intended
       
    20 " for line continuation.  Some compilers allow it, which makes it
       
    21 " unpredicatable and should be avoided.
       
    22 syn match	cBadContinuation contained "\\\s\+$"
       
    23 
       
    24 " cCommentGroup allows adding matches for special things in comments
       
    25 syn cluster	cCommentGroup	contains=cTodo,cBadContinuation,ymlString
       
    26 
       
    27 " String and Character constants
       
    28 " Highlight special characters (those which have a backslash) differently
       
    29 syn match	cSpecial	display contained "\\\(x\x\+\|\o\{1,3}\|.\|$\)"
       
    30 if !exists("c_no_utf")
       
    31   syn match	cSpecial	display contained "\\\(u\x\{4}\|U\x\{8}\)"
       
    32 endif
       
    33 syn region	ymlString		start=+L\=«+ skip=+\\\\\|\\"+ end=+»+ contains=cSpecial,@Spell
       
    34 if exists("c_no_cformat")
       
    35   syn region	cString		start=+L\="+ skip=+\\\\\|\\"+ end=+"+ contains=cSpecial,@Spell,ymlString
       
    36   " cCppString: same as cString, but ends at end of line
       
    37   syn region	cCppString	start=+L\="+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end='$' contains=cSpecial,@Spell,ymlString
       
    38 else
       
    39   if !exists("c_no_c99") " ISO C99
       
    40     syn match	cFormat		display "%\(\d\+\$\)\=[-+' #0*]*\(\d*\|\*\|\*\d\+\$\)\(\.\(\d*\|\*\|\*\d\+\$\)\)\=\([hlLjzt]\|ll\|hh\)\=\([aAbdiuoxXDOUfFeEgGcCsSpn]\|\[\^\=.[^]]*\]\)" contained
       
    41   else
       
    42     syn match	cFormat		display "%\(\d\+\$\)\=[-+' #0*]*\(\d*\|\*\|\*\d\+\$\)\(\.\(\d*\|\*\|\*\d\+\$\)\)\=\([hlL]\|ll\)\=\([bdiuoxXDOUfeEgGcCsSpn]\|\[\^\=.[^]]*\]\)" contained
       
    43   endif
       
    44   syn match	cFormat		display "%%" contained
       
    45   syn region	cString		start=+L\="+ skip=+\\\\\|\\"+ end=+"+ contains=cSpecial,cFormat,@Spell,ymlString
       
    46   " cCppString: same as cString, but ends at end of line
       
    47   syn region	cCppString	start=+L\="+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end='$' contains=cSpecial,cFormat,@Spell,ymlString
       
    48 endif
       
    49 
       
    50 syn match	cCharacter	"L\='[^\\]'"
       
    51 syn match	cCharacter	"L'[^']*'" contains=cSpecial
       
    52 if exists("c_gnu")
       
    53   syn match	cSpecialError	"L\='\\[^'\"?\\abefnrtv]'"
       
    54   syn match	cSpecialCharacter "L\='\\['\"?\\abefnrtv]'"
       
    55 else
       
    56   syn match	cSpecialError	"L\='\\[^'\"?\\abfnrtv]'"
       
    57   syn match	cSpecialCharacter "L\='\\['\"?\\abfnrtv]'"
       
    58 endif
       
    59 syn match	cSpecialCharacter display "L\='\\\o\{1,3}'"
       
    60 syn match	cSpecialCharacter display "'\\x\x\{1,2}'"
       
    61 syn match	cSpecialCharacter display "L'\\x\x\+'"
       
    62 
       
    63 "when wanted, highlight trailing white space
       
    64 if exists("c_space_errors")
       
    65   if !exists("c_no_trail_space_error")
       
    66     syn match	cSpaceError	display excludenl "\s\+$"
       
    67   endif
       
    68   if !exists("c_no_tab_space_error")
       
    69     syn match	cSpaceError	display " \+\t"me=e-1
       
    70   endif
       
    71 endif
       
    72 
       
    73 " This should be before cErrInParen to avoid problems with #define ({ xxx })
       
    74 if exists("c_curly_error")
       
    75   syntax match cCurlyError "}"
       
    76   syntax region	cBlock		start="{" end="}" contains=ALLBUT,cCurlyError,@cParenGroup,cErrInParen,cCppParen,cErrInBracket,cCppBracket,cCppString,@Spell fold
       
    77 else
       
    78   syntax region	cBlock		start="{" end="}" transparent fold
       
    79 endif
       
    80 
       
    81 "catch errors caused by wrong parenthesis and brackets
       
    82 " also accept <% for {, %> for }, <: for [ and :> for ] (C99)
       
    83 " But avoid matching <::.
       
    84 syn cluster	cParenGroup	contains=cParenError,cIncluded,cSpecial,cCommentSkip,cCommentString,cComment2String,@cCommentGroup,cCommentStartError,cUserCont,cUserLabel,cBitField,cOctalZero,cCppOut,cCppOut2,cCppSkip,cFormat,cNumber,cFloat,cOctal,cOctalError,cNumbersCom
       
    85 if exists("c_no_curly_error")
       
    86   syn region	cParen		transparent start='(' end=')' contains=ALLBUT,@cParenGroup,cCppParen,cCppString,@Spell
       
    87   " cCppParen: same as cParen but ends at end-of-line; used in cDefine
       
    88   syn region	cCppParen	transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@cParenGroup,cParen,cString,@Spell
       
    89   syn match	cParenError	display ")"
       
    90   syn match	cErrInParen	display contained "^[{}]\|^<%\|^%>"
       
    91 elseif exists("c_no_bracket_error")
       
    92   syn region	cParen		transparent start='(' end=')' contains=ALLBUT,@cParenGroup,cCppParen,cCppString,@Spell
       
    93   " cCppParen: same as cParen but ends at end-of-line; used in cDefine
       
    94   syn region	cCppParen	transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@cParenGroup,cParen,cString,@Spell
       
    95   syn match	cParenError	display ")"
       
    96   syn match	cErrInParen	display contained "[{}]\|<%\|%>"
       
    97 else
       
    98   syn region	cParen		transparent start='(' end=')' contains=ALLBUT,@cParenGroup,cCppParen,cErrInBracket,cCppBracket,cCppString,@Spell
       
    99   " cCppParen: same as cParen but ends at end-of-line; used in cDefine
       
   100   syn region	cCppParen	transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@cParenGroup,cErrInBracket,cParen,cBracket,cString,@Spell
       
   101   syn match	cParenError	display "[\])]"
       
   102   syn match	cErrInParen	display contained "[\]{}]\|<%\|%>"
       
   103   syn region	cBracket	transparent start='\[\|<::\@!' end=']\|:>' contains=ALLBUT,@cParenGroup,cErrInParen,cCppParen,cCppBracket,cCppString,@Spell
       
   104   " cCppBracket: same as cParen but ends at end-of-line; used in cDefine
       
   105   syn region	cCppBracket	transparent start='\[\|<::\@!' skip='\\$' excludenl end=']\|:>' end='$' contained contains=ALLBUT,@cParenGroup,cErrInParen,cParen,cBracket,cString,@Spell
       
   106   syn match	cErrInBracket	display contained "[);{}]\|<%\|%>"
       
   107 endif
       
   108 
       
   109 "integer number, or floating point number without a dot and with "f".
       
   110 syn case ignore
       
   111 syn match	cNumbers	display transparent "\<\d\|\.\d" contains=cNumber,cFloat,cOctalError,cOctal
       
   112 " Same, but without octal error (for comments)
       
   113 syn match	cNumbersCom	display contained transparent "\<\d\|\.\d" contains=cNumber,cFloat,cOctal
       
   114 syn match	cNumber		display contained "\d\+\(u\=l\{0,2}\|ll\=u\)\>"
       
   115 "hex number
       
   116 syn match	cNumber		display contained "0x\x\+\(u\=l\{0,2}\|ll\=u\)\>"
       
   117 " Flag the first zero of an octal number as something special
       
   118 syn match	cOctal		display contained "0\o\+\(u\=l\{0,2}\|ll\=u\)\>" contains=cOctalZero
       
   119 syn match	cOctalZero	display contained "\<0"
       
   120 syn match	cFloat		display contained "\d\+f"
       
   121 "floating point number, with dot, optional exponent
       
   122 syn match	cFloat		display contained "\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\="
       
   123 "floating point number, starting with a dot, optional exponent
       
   124 syn match	cFloat		display contained "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>"
       
   125 "floating point number, without dot, with exponent
       
   126 syn match	cFloat		display contained "\d\+e[-+]\=\d\+[fl]\=\>"
       
   127 if !exists("c_no_c99")
       
   128   "hexadecimal floating point number, optional leading digits, with dot, with exponent
       
   129   syn match	cFloat		display contained "0x\x*\.\x\+p[-+]\=\d\+[fl]\=\>"
       
   130   "hexadecimal floating point number, with leading digits, optional dot, with exponent
       
   131   syn match	cFloat		display contained "0x\x\+\.\=p[-+]\=\d\+[fl]\=\>"
       
   132 endif
       
   133 
       
   134 " flag an octal number with wrong digits
       
   135 syn match	cOctalError	display contained "0\o*[89]\d*"
       
   136 syn case match
       
   137 
       
   138 if exists("c_comment_strings")
       
   139   " A comment can contain cString, cCharacter and cNumber.
       
   140   " But a "*/" inside a cString in a cComment DOES end the comment!  So we
       
   141   " need to use a special type of cString: cCommentString, which also ends on
       
   142   " "*/", and sees a "*" at the start of the line as comment again.
       
   143   " Unfortunately this doesn't very well work for // type of comments :-(
       
   144   syntax match	cCommentSkip	contained "^\s*\*\($\|\s\+\)"
       
   145   syntax region cCommentString	contained start=+L\=\\\@<!"+ skip=+\\\\\|\\"+ end=+"+ end=+\*/+me=s-1 contains=cSpecial,cCommentSkip
       
   146   syntax region cComment2String	contained start=+L\=\\\@<!"+ skip=+\\\\\|\\"+ end=+"+ end="$" contains=cSpecial
       
   147   syntax region  cCommentL	start="//" skip="\\$" end="$" keepend contains=@cCommentGroup,cComment2String,cCharacter,cNumbersCom,cSpaceError,@Spell
       
   148   if exists("c_no_comment_fold")
       
   149     " Use "extend" here to have preprocessor lines not terminate halfway a
       
   150     " comment.
       
   151     syntax region cComment	matchgroup=cCommentStart start="/\*" end="\*/" contains=@cCommentGroup,cCommentStartError,cCommentString,cCharacter,cNumbersCom,cSpaceError,@Spell extend
       
   152   else
       
   153     syntax region cComment	matchgroup=cCommentStart start="/\*" end="\*/" contains=@cCommentGroup,cCommentStartError,cCommentString,cCharacter,cNumbersCom,cSpaceError,@Spell fold extend
       
   154   endif
       
   155 else
       
   156   syn region	cCommentL	start="//" skip="\\$" end="$" keepend contains=@cCommentGroup,cSpaceError,@Spell
       
   157   if exists("c_no_comment_fold")
       
   158     syn region	cComment	matchgroup=cCommentStart start="/\*" end="\*/" contains=@cCommentGroup,cCommentStartError,cSpaceError,@Spell extend
       
   159   else
       
   160     syn region	cComment	matchgroup=cCommentStart start="/\*" end="\*/" contains=@cCommentGroup,cCommentStartError,cSpaceError,@Spell fold extend
       
   161   endif
       
   162 endif
       
   163 " keep a // comment separately, it terminates a preproc. conditional
       
   164 syntax match	cCommentError	display "\*/"
       
   165 syntax match	cCommentStartError display "/\*"me=e-1 contained
       
   166 
       
   167 syn keyword	cOperator	sizeof
       
   168 if exists("c_gnu")
       
   169   syn keyword	cStatement	__asm__
       
   170   syn keyword	cOperator	typeof __real__ __imag__
       
   171 endif
       
   172 syn keyword	cType		int long short char void
       
   173 syn keyword	cType		signed unsigned float double
       
   174 if !exists("c_no_ansi") || exists("c_ansi_typedefs")
       
   175   syn keyword   cType		size_t ssize_t off_t wchar_t ptrdiff_t sig_atomic_t fpos_t
       
   176   syn keyword   cType		clock_t time_t va_list jmp_buf FILE DIR div_t ldiv_t
       
   177   syn keyword   cType		mbstate_t wctrans_t wint_t wctype_t
       
   178 endif
       
   179 if !exists("c_no_c99") " ISO C99
       
   180   syn keyword	cType		bool complex
       
   181   syn keyword	cType		int8_t int16_t int32_t int64_t
       
   182   syn keyword	cType		uint8_t uint16_t uint32_t uint64_t
       
   183   syn keyword	cType		int_least8_t int_least16_t int_least32_t int_least64_t
       
   184   syn keyword	cType		uint_least8_t uint_least16_t uint_least32_t uint_least64_t
       
   185   syn keyword	cType		int_fast8_t int_fast16_t int_fast32_t int_fast64_t
       
   186   syn keyword	cType		uint_fast8_t uint_fast16_t uint_fast32_t uint_fast64_t
       
   187   syn keyword	cType		intptr_t uintptr_t
       
   188   syn keyword	cType		intmax_t uintmax_t
       
   189 endif
       
   190 if exists("c_gnu")
       
   191   syn keyword	cType		__label__ __complex__ __volatile__
       
   192 endif
       
   193 
       
   194 syn keyword	cStructure	struct union enum typedef
       
   195 syn keyword	cStorageClass	static register auto volatile extern const
       
   196 if exists("c_gnu")
       
   197   syn keyword	cStorageClass	inline __attribute__
       
   198 endif
       
   199 if !exists("c_no_c99")
       
   200   syn keyword	cStorageClass	inline restrict
       
   201 endif
       
   202 
       
   203 if !exists("c_no_ansi") || exists("c_ansi_constants") || exists("c_gnu")
       
   204   if exists("c_gnu")
       
   205     syn keyword cConstant __GNUC__ __FUNCTION__ __PRETTY_FUNCTION__ __func__
       
   206   endif
       
   207   syn keyword cConstant __LINE__ __FILE__ __DATE__ __TIME__ __STDC__
       
   208   syn keyword cConstant __STDC_VERSION__
       
   209   syn keyword cConstant CHAR_BIT MB_LEN_MAX MB_CUR_MAX
       
   210   syn keyword cConstant UCHAR_MAX UINT_MAX ULONG_MAX USHRT_MAX
       
   211   syn keyword cConstant CHAR_MIN INT_MIN LONG_MIN SHRT_MIN
       
   212   syn keyword cConstant CHAR_MAX INT_MAX LONG_MAX SHRT_MAX
       
   213   syn keyword cConstant SCHAR_MIN SINT_MIN SLONG_MIN SSHRT_MIN
       
   214   syn keyword cConstant SCHAR_MAX SINT_MAX SLONG_MAX SSHRT_MAX
       
   215   if !exists("c_no_c99")
       
   216     syn keyword cConstant __func__
       
   217     syn keyword cConstant LLONG_MIN LLONG_MAX ULLONG_MAX
       
   218     syn keyword cConstant INT8_MIN INT16_MIN INT32_MIN INT64_MIN
       
   219     syn keyword cConstant INT8_MAX INT16_MAX INT32_MAX INT64_MAX
       
   220     syn keyword cConstant UINT8_MAX UINT16_MAX UINT32_MAX UINT64_MAX
       
   221     syn keyword cConstant INT_LEAST8_MIN INT_LEAST16_MIN INT_LEAST32_MIN INT_LEAST64_MIN
       
   222     syn keyword cConstant INT_LEAST8_MAX INT_LEAST16_MAX INT_LEAST32_MAX INT_LEAST64_MAX
       
   223     syn keyword cConstant UINT_LEAST8_MAX UINT_LEAST16_MAX UINT_LEAST32_MAX UINT_LEAST64_MAX
       
   224     syn keyword cConstant INT_FAST8_MIN INT_FAST16_MIN INT_FAST32_MIN INT_FAST64_MIN
       
   225     syn keyword cConstant INT_FAST8_MAX INT_FAST16_MAX INT_FAST32_MAX INT_FAST64_MAX
       
   226     syn keyword cConstant UINT_FAST8_MAX UINT_FAST16_MAX UINT_FAST32_MAX UINT_FAST64_MAX
       
   227     syn keyword cConstant INTPTR_MIN INTPTR_MAX UINTPTR_MAX
       
   228     syn keyword cConstant INTMAX_MIN INTMAX_MAX UINTMAX_MAX
       
   229     syn keyword cConstant PTRDIFF_MIN PTRDIFF_MAX SIG_ATOMIC_MIN SIG_ATOMIC_MAX
       
   230     syn keyword cConstant SIZE_MAX WCHAR_MIN WCHAR_MAX WINT_MIN WINT_MAX
       
   231   endif
       
   232   syn keyword cConstant FLT_RADIX FLT_ROUNDS
       
   233   syn keyword cConstant FLT_DIG FLT_MANT_DIG FLT_EPSILON
       
   234   syn keyword cConstant DBL_DIG DBL_MANT_DIG DBL_EPSILON
       
   235   syn keyword cConstant LDBL_DIG LDBL_MANT_DIG LDBL_EPSILON
       
   236   syn keyword cConstant FLT_MIN FLT_MAX FLT_MIN_EXP FLT_MAX_EXP
       
   237   syn keyword cConstant FLT_MIN_10_EXP FLT_MAX_10_EXP
       
   238   syn keyword cConstant DBL_MIN DBL_MAX DBL_MIN_EXP DBL_MAX_EXP
       
   239   syn keyword cConstant DBL_MIN_10_EXP DBL_MAX_10_EXP
       
   240   syn keyword cConstant LDBL_MIN LDBL_MAX LDBL_MIN_EXP LDBL_MAX_EXP
       
   241   syn keyword cConstant LDBL_MIN_10_EXP LDBL_MAX_10_EXP
       
   242   syn keyword cConstant HUGE_VAL CLOCKS_PER_SEC NULL
       
   243   syn keyword cConstant LC_ALL LC_COLLATE LC_CTYPE LC_MONETARY
       
   244   syn keyword cConstant LC_NUMERIC LC_TIME
       
   245   syn keyword cConstant SIG_DFL SIG_ERR SIG_IGN
       
   246   syn keyword cConstant SIGABRT SIGFPE SIGILL SIGHUP SIGINT SIGSEGV SIGTERM
       
   247   " Add POSIX signals as well...
       
   248   syn keyword cConstant SIGABRT SIGALRM SIGCHLD SIGCONT SIGFPE SIGHUP
       
   249   syn keyword cConstant SIGILL SIGINT SIGKILL SIGPIPE SIGQUIT SIGSEGV
       
   250   syn keyword cConstant SIGSTOP SIGTERM SIGTRAP SIGTSTP SIGTTIN SIGTTOU
       
   251   syn keyword cConstant SIGUSR1 SIGUSR2
       
   252   syn keyword cConstant _IOFBF _IOLBF _IONBF BUFSIZ EOF WEOF
       
   253   syn keyword cConstant FOPEN_MAX FILENAME_MAX L_tmpnam
       
   254   syn keyword cConstant SEEK_CUR SEEK_END SEEK_SET
       
   255   syn keyword cConstant TMP_MAX stderr stdin stdout
       
   256   syn keyword cConstant EXIT_FAILURE EXIT_SUCCESS RAND_MAX
       
   257   " Add POSIX errors as well
       
   258   syn keyword cConstant E2BIG EACCES EAGAIN EBADF EBADMSG EBUSY
       
   259   syn keyword cConstant ECANCELED ECHILD EDEADLK EDOM EEXIST EFAULT
       
   260   syn keyword cConstant EFBIG EILSEQ EINPROGRESS EINTR EINVAL EIO EISDIR
       
   261   syn keyword cConstant EMFILE EMLINK EMSGSIZE ENAMETOOLONG ENFILE ENODEV
       
   262   syn keyword cConstant ENOENT ENOEXEC ENOLCK ENOMEM ENOSPC ENOSYS
       
   263   syn keyword cConstant ENOTDIR ENOTEMPTY ENOTSUP ENOTTY ENXIO EPERM
       
   264   syn keyword cConstant EPIPE ERANGE EROFS ESPIPE ESRCH ETIMEDOUT EXDEV
       
   265   " math.h
       
   266   syn keyword cConstant M_E M_LOG2E M_LOG10E M_LN2 M_LN10 M_PI M_PI_2 M_PI_4
       
   267   syn keyword cConstant M_1_PI M_2_PI M_2_SQRTPI M_SQRT2 M_SQRT1_2
       
   268 endif
       
   269 if !exists("c_no_c99") " ISO C99
       
   270   syn keyword cConstant true false
       
   271 endif
       
   272 
       
   273 " Accept %: for # (C99)
       
   274 syn region      cPreCondit      start="^\s*\(%:\|#\)\s*\(if\|ifdef\|ifndef\|elif\)\>" skip="\\$" end="$"  keepend contains=cComment,cCommentL,cCppString,cCharacter,cCppParen,cParenError,cNumbers,cCommentError,cSpaceError
       
   275 syn match	cPreCondit	display "^\s*\(%:\|#\)\s*\(else\|endif\)\>"
       
   276 if !exists("c_no_if0")
       
   277   if !exists("c_no_if0_fold")
       
   278     syn region	cCppOut		start="^\s*\(%:\|#\)\s*if\s\+0\+\>" end=".\@=\|$" contains=cCppOut2 fold
       
   279   else
       
   280     syn region	cCppOut		start="^\s*\(%:\|#\)\s*if\s\+0\+\>" end=".\@=\|$" contains=cCppOut2
       
   281   endif
       
   282   syn region	cCppOut2	contained start="0" end="^\s*\(%:\|#\)\s*\(endif\>\|else\>\|elif\>\)" contains=cSpaceError,cCppSkip
       
   283   syn region	cCppSkip	contained start="^\s*\(%:\|#\)\s*\(if\>\|ifdef\>\|ifndef\>\)" skip="\\$" end="^\s*\(%:\|#\)\s*endif\>" contains=cSpaceError,cCppSkip
       
   284 endif
       
   285 syn region	cIncluded	display contained start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=ymlString
       
   286 syn match	cIncluded	display contained "<[^>]*>" contains=ymlString
       
   287 syn match	cInclude	display "^\s*\(%:\|#\)\s*include\>\s*["<]" contains=cIncluded
       
   288 "syn match cLineSkip	"\\$"
       
   289 syn cluster	cPreProcGroup	contains=cPreCondit,cIncluded,cInclude,cDefine,cErrInParen,cErrInBracket,cUserLabel,cSpecial,cOctalZero,cCppOut,cCppOut2,cCppSkip,cFormat,cNumber,cFloat,cOctal,cOctalError,cNumbersCom,cString,cCommentSkip,cCommentString,cComment2String,@cCommentGroup,cCommentStartError,cParen,cBracket,cMulti
       
   290 syn region	cDefine		start="^\s*\(%:\|#\)\s*\(define\|undef\)\>" skip="\\$" end="$" keepend contains=ALLBUT,@cPreProcGroup,@Spell
       
   291 syn region	cPreProc	start="^\s*\(%:\|#\)\s*\(pragma\>\|line\>\|warning\>\|warn\>\|error\>\)" skip="\\$" end="$" keepend contains=ALLBUT,@cPreProcGroup,@Spell
       
   292 
       
   293 " Highlight User Labels
       
   294 syn cluster	cMultiGroup	contains=cIncluded,cSpecial,cCommentSkip,cCommentString,cComment2String,@cCommentGroup,cCommentStartError,cUserCont,cUserLabel,cBitField,cOctalZero,cCppOut,cCppOut2,cCppSkip,cFormat,cNumber,cFloat,cOctal,cOctalError,cNumbersCom,cCppParen,cCppBracket,cCppString
       
   295 syn region	cMulti		transparent start='?' skip='::' end=':' contains=ALLBUT,@cMultiGroup,@Spell
       
   296 " Avoid matching foo::bar() in C++ by requiring that the next char is not ':'
       
   297 syn cluster	cLabelGroup	contains=cUserLabel
       
   298 syn match	cUserCont	display "^\s*\I\i*\s*:$" contains=@cLabelGroup
       
   299 syn match	cUserCont	display ";\s*\I\i*\s*:$" contains=@cLabelGroup
       
   300 syn match	cUserCont	display "^\s*\I\i*\s*:[^:]"me=e-1 contains=@cLabelGroup
       
   301 syn match	cUserCont	display ";\s*\I\i*\s*:[^:]"me=e-1 contains=@cLabelGroup
       
   302 
       
   303 syn match	cUserLabel	display "\I\i*" contained
       
   304 
       
   305 " Avoid recognizing most bitfields as labels
       
   306 syn match	cBitField	display "^\s*\I\i*\s*:\s*[1-9]"me=e-1 contains=cType
       
   307 syn match	cBitField	display ";\s*\I\i*\s*:\s*[1-9]"me=e-1 contains=cType
       
   308 
       
   309 if exists("c_minlines")
       
   310   let b:c_minlines = c_minlines
       
   311 else
       
   312   if !exists("c_no_if0")
       
   313     let b:c_minlines = 50	" #if 0 constructs can be long
       
   314   else
       
   315     let b:c_minlines = 15	" mostly for () constructs
       
   316   endif
       
   317 endif
       
   318 if exists("c_curly_error")
       
   319   syn sync fromstart
       
   320 else
       
   321   exec "syn sync ccomment cComment minlines=" . b:c_minlines
       
   322 endif
       
   323 
       
   324 " Define the default highlighting.
       
   325 " Only used when an item doesn't have highlighting yet
       
   326 hi def link cFormat		cSpecial
       
   327 hi def link cCppString		cString
       
   328 hi def link cCommentL		cComment
       
   329 hi def link cCommentStart	cComment
       
   330 hi def link cLabel		Label
       
   331 hi def link cUserLabel		Label
       
   332 hi def link cConditional	Conditional
       
   333 hi def link cRepeat		Repeat
       
   334 hi def link cCharacter		Character
       
   335 hi def link cSpecialCharacter	cSpecial
       
   336 hi def link cNumber		Number
       
   337 hi def link cOctal		Number
       
   338 hi def link cOctalZero		PreProc	 " link this to Error if you want
       
   339 hi def link cFloat		Float
       
   340 hi def link cOctalError		cError
       
   341 hi def link cParenError		cError
       
   342 hi def link cErrInParen		cError
       
   343 hi def link cErrInBracket	cError
       
   344 hi def link cCommentError	cError
       
   345 hi def link cCommentStartError	cError
       
   346 hi def link cSpaceError		cError
       
   347 hi def link cSpecialError	cError
       
   348 hi def link cCurlyError		cError
       
   349 hi def link cOperator		Operator
       
   350 hi def link cStructure		Structure
       
   351 hi def link cStorageClass	StorageClass
       
   352 hi def link cInclude		Include
       
   353 hi def link cPreProc		PreProc
       
   354 hi def link cDefine		Macro
       
   355 hi def link cIncluded		cString
       
   356 hi def link cError		Error
       
   357 hi def link cStatement		Statement
       
   358 hi def link cPreCondit		PreCondit
       
   359 hi def link cType		Type
       
   360 hi def link cConstant		Constant
       
   361 hi def link cCommentString	cString
       
   362 hi def link cComment2String	cString
       
   363 hi def link cCommentSkip	cComment
       
   364 hi def link cString		String
       
   365 hi def link cComment		Comment
       
   366 hi def link cSpecial		SpecialChar
       
   367 hi def link cTodo		Todo
       
   368 hi def link cBadContinuation	Error
       
   369 hi def link cCppSkip		cCppOut
       
   370 hi def link cCppOut2		cCppOut
       
   371 hi def link cCppOut		Comment
       
   372 hi def link ymlString   Operator
       
   373 let b:current_syntax = "yml2"
       
   374 
       
   375 " vim: ts=8