neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

pike.vim (21807B)


      1 " Vim syntax file
      2 " Language:		Pike
      3 " Maintainer:		Stephen R. van den Berg <srb@cuci.nl>
      4 " Maintainer of previous implementation: Francesco Chemolli <kinkie@kame.usr.dsi.unimi.it>
      5 " Last Change:		2018 Jan 28
      6 " Version:		2.9
      7 " Remark: Derived from the C-syntax; fixed several bugs in the C-syntax
      8 " Remark: and extended it with the Pike syntax.
      9 " Remark: Includes a highlighter for all Pike types of parenthesis errors.
     10 " Remark: Includes a highlighter for SQL on multiline strings.
     11 " Remark: Includes a highlighter for any embedded Autodoc format.
     12 
     13 " Quit when a (custom) syntax file was already loaded
     14 if exists("b:current_syntax")
     15  finish
     16 endif
     17 
     18 let s:cpo_save = &cpo
     19 set cpo&vim
     20 
     21 " For multiline strings, try formatting them as SQL
     22 syn include @pikeSQL <sfile>:p:h/sqloracle.vim
     23 unlet b:current_syntax
     24 
     25 " For embedded Autodoc documentation (WIP)
     26 syn include @pikeAutodoc <sfile>:p:h/autodoc.vim
     27 unlet b:current_syntax
     28 
     29 syn case match
     30 
     31 " Supports array, multiset, mapping multi-character delimiter matching
     32 " Supports rotating amongst several same-level preprocessor conditionals
     33 packadd! matchit
     34 let b:match_words = "({:}\\@1<=),(\\[:]\\@1<=),(<:>\\@1<=),^\s*#\s*\%(if\%(n\?def\)\|else\|el\%(se\)\?if\|endif\)\>"
     35 
     36 " A bunch of useful Pike keywords
     37 syn keyword	pikeDebug	gauge backtrace describe_backtrace werror _Static_assert static_assert
     38 syn keyword	pikeException	error catch throw
     39 syn keyword	pikeLabel	case default break return continue
     40 syn keyword	pikeConditional	if else switch
     41 syn keyword	pikeRepeat	while for foreach do
     42 
     43 syn keyword pikePredef RegGetKeyNames RegGetValue RegGetValues
     44 syn keyword pikePredef __automap__ __empty_program
     45 syn keyword pikePredef __handle_sprintf_format __parse_pike_type _disable_threads
     46 syn keyword pikePredef _do_call_outs _exit _gdb_breakpoint
     47 syn keyword pikePredef abs access acos acosh add_constant alarm all_constants
     48 syn keyword pikePredef array_sscanf asin asinh atan atan2 atanh atexit
     49 syn keyword pikePredef basetype call_function call_out call_out_info cd ceil
     50 syn keyword pikePredef combine_path combine_path_nt
     51 syn keyword pikePredef combine_path_unix compile copy_value cos cosh cpp crypt
     52 syn keyword pikePredef ctime decode_value delay encode_value encode_value_canonic
     53 syn keyword pikePredef enumerate errno exece exit exp file_stat file_truncate
     54 syn keyword pikePredef filesystem_stat find_call_out floor fork function_name
     55 syn keyword pikePredef function_object function_program gc
     56 syn keyword pikePredef get_active_compilation_handler get_active_error_handler
     57 syn keyword pikePredef get_all_groups get_all_users get_dir get_groups_for_user
     58 syn keyword pikePredef get_iterator get_profiling_info get_weak_flag getcwd
     59 syn keyword pikePredef getgrgid getgrnam gethrdtime gethrtime gethrvtime getpid
     60 syn keyword pikePredef getpwnam getpwuid getxattr glob gmtime has_index has_prefix
     61 syn keyword pikePredef has_suffix has_value hash hash_7_0 hash_7_4 hash_8_0
     62 syn keyword pikePredef hash_value kill limit listxattr load_module localtime
     63 syn keyword pikePredef log lower_case master max min mkdir mktime mv
     64 syn keyword pikePredef object_program pow query_num_arg random_seed
     65 syn keyword pikePredef remove_call_out removexattr replace_master rm round
     66 syn keyword pikePredef set_priority set_weak_flag setxattr sgn signal signame
     67 syn keyword pikePredef signum sin sinh sleep sort sprintf sqrt sscanf strerror
     68 syn keyword pikePredef string_filter_non_unicode string_to_unicode string_to_utf8
     69 syn keyword pikePredef tan tanh time trace types ualarm unicode_to_string
     70 syn keyword pikePredef upper_case utf8_to_string version
     71 
     72 syn keyword pikePredef write lock try_lock
     73 syn keyword pikePredef MutexKey Timestamp Date Time TimeTZ Interval Inet Range
     74 syn keyword pikePredef Null null inf nan
     75 
     76 syn keyword	pikeTodo		contained TODO FIXME XXX
     77 
     78 " Match parengroups: allows for highlighting indices of mappings and
     79 " highlighting semicolons that are out of place due to a paren imbalance
     80 syn cluster	pikePreShort	contains=pikeDefine,pikePreProc,pikeCppOutWrapper,pikeCppInWrapper,pikePreCondit,pikePreConditMatch
     81 syn cluster	pikeExprGroup	contains=pikeMappIndex,@pikeStmt,pikeNest,@pikeBadGroup,pikeSoftCast
     82 syn match	pikeWord	transparent contained /[^()'"[\]{},;:]\+/ contains=ALLBUT,@pikePreProcGroup,@pikeExprGroup
     83 syn match	pikeFirstWord	transparent display contained /^\s*#[^()'"[\]{},;:]\+/ contains=@pikePreShort
     84 syn cluster	pikeMappElm	contains=pikeMappIndex,@pikeStmt
     85 syn cluster	pikeStmt	contains=pikeFirstWord,pikeCharacter,pikeString,pikeMlString,pikeWord,pikeNest
     86 syn cluster     pikeBadGroup	contains=pikeBadPClose,pikeBadAClose,pikeBadBClose,pikeBadSPClose,pikeBadSAClose,pikeBadSBClose,pikeBadSClose,pikeBadSPAClose,pikeBadSBAClose
     87 syn match	pikeBadPClose	display contained "[}\]]"
     88 syn match	pikeBadAClose	display contained "[)\]]"
     89 syn match	pikeBadBClose	display contained "[)}]"
     90 syn match	pikeBadSPClose	display contained "[;}\]]"
     91 syn match	pikeBadSAClose	display contained "[;)\]]"
     92 syn match	pikeBadSPAClose	display contained "[;\]]"
     93 syn match	pikeBadSBAClose	display contained "[;}]"
     94 syn match	pikeBadSClose	display contained "[;)}\]]"
     95 syn region	pikeNest	transparent start="(\@1<!{" end="}" contains=@pikeStmt,pikeUserLabel,pikeBadAClose
     96 syn region	pikeNest	transparent start="\%(\<for\%(each\)\?\s\?\)\@8<!([[{<]\@!" end=")" contains=@pikeStmt,pikeBadSPClose
     97 syn region	pikeNest	transparent start="\%(\<for\%(each\)\?\s\?\)\@8<=(" end=")" contains=@pikeStmt,pikeBadPClose
     98 syn region	pikeNest	transparent start="(\@1<!\[" end="]" contains=@pikeStmt,pikeBadSBClose
     99 syn region	pikeNest	transparent start="(\zs\[" end="])" contains=@pikeMappElm,pikeBadSBAClose
    100 " For some reason specifying a matchgroup on the pikeNest below makes it
    101 " override the shorter variant; consider it a kludge, no idea why it works
    102 syn region	pikeNest	transparent matchgroup=pikeSoftCast start=%(\zs\[[ \t\v\r\n.a-zA-Z0-9_():,|]\+])\@!% end=")" contains=@pikeStmt
    103 syn region	pikeNest	transparent start="(\zs{" end="})" contains=@pikeStmt,pikeBadSPAClose
    104 syn region	pikeNest	transparent start="(\zs<" end=">)" contains=@pikeStmt,pikeBadSPClose keepend
    105 
    106 " It's easy to accidentally add a space after a backslash that was intended
    107 " for line continuation.  Some compilers allow it, which makes it
    108 " unpredictable and should be avoided.
    109 syn match	pikeBadContinuation contained "\\\s\+$"
    110 
    111 " pikeCommentGroup allows adding matches for special things in comments
    112 syn cluster	pikeCommentGroup	contains=pikeTodo,pikeBadContinuation
    113 
    114 " String and Character constants
    115 " Highlight special characters (those which have a backslash) differently
    116 syn match	pikeSpecial	display contained "\\\%(x\x*\|d\d*\|\o\+\|u\x\{4}\|U\x\{8}\|[abefnrtv]\|$\)"
    117 
    118 " ISO C11 or ISO C++ 11
    119 if !exists("c_no_cformat")
    120  " Highlight % items in strings.
    121  syn match	pikeFormat		display "%\%(\d\+\$\)\=[-+' #0*]*\%(\d*\|\*\|\*\d\+\$\)\%(\.\%(\d*\|\*\|\*\d\+\$\)\)\=\%([hlLjzt]\|ll\|hh\)\=\%([aAbdiuoxXDOUfFeEgGcCsSpn]\|\[\^\=.[^]]*\]\)" contained
    122  syn match	pikeFormat		display "%%" contained
    123  syn region 	pikeString		start=+"+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end='$' contains=pikeSpecial,pikeDelimiterDQ,pikeFormat,@Spell keepend
    124  syn region	pikeMlString	start=+#"+ skip=+\\\\\|\\"+ end=+"+ contains=pikeSpecial,pikeFormat,pikeDelimiterDQ,@Spell,pikeEmbeddedString keepend
    125 else
    126  syn region 	pikeString		start=+"+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end='$' contains=pikeSpecial,pikeDelimiterDQ,@Spell
    127  syn region	pikeMlString	transparent start=+#"+ skip=+\\\\\|\\"+ end=+"+ contains=pikeSpecial,pikeDelimiterDQ,@Spell,pikeEmbeddedString keepend
    128 endif
    129 
    130 " Use SQL-syntax highlighting in multiline string if it starts with
    131 " a standard SQL keyword
    132 syn case ignore
    133 " FIXME Use explicit newline match to cover up a bug in the regexp engine
    134 " If the kludge is not used, the match will only start unless at least a space
    135 " follows the initial doublequote on the first line (or the keyword is on
    136 " the first line).
    137 syn region	pikeEmbeddedString	contained start=+\%(#"\n\?\)\@2<=\_s*\%(SELECT\|INSERT\|UPDATE\|DELETE\|WITH\|CREATE\|DROP\|ALTER\)\>+ skip=+\\\\\|\\"+ end=+[\\#]\@1<!"+ contains=@pikeSQL,pikeBindings keepend
    138 syn case match
    139 
    140 syn match	pikeBindings	display contained ":\@1<!:\I\i*"
    141 
    142 syn match	pikeCharacter	"'[^\\']'" contains=pikeDelimiterSQ
    143 syn match	pikeCharacter	"'[^']*'" contains=pikeSpecial,pikeDelimiterSQ
    144 syn match	pikeSpecialError	"'\\[^'\"?\\abefnrtv]'"
    145 syn match	pikeDelimiterDQ	display +"+ contained
    146 syn match	pikeDelimiterSQ	display +'+ contained
    147 
    148 "when wanted, highlight trailing white space
    149 if exists("c_space_errors")
    150  if !exists("c_no_trail_space_error")
    151    syn match	pikeSpaceError	display excludenl "\s\+$"
    152  endif
    153  if !exists("c_no_tab_space_error")
    154    syn match	pikeSpaceError	display " \+\ze\t"
    155  endif
    156 endif
    157 
    158 "integer number, or floating point number without a dot and with "f".
    159 syn case ignore
    160 syn match	pikeNumbers	display transparent "\<\d\|\.\d" contains=pikeNumber,pikeFloat,pikeOctalError,pikeOctal
    161 " Same, but without octal error (for comments)
    162 syn match	pikeNumbersCom	display contained transparent "\<\d\|\.\d" contains=pikeNumber,pikeFloat,pikeOctal
    163 syn match	pikeNumber		display contained "\<\d\+\%(u\=l\{0,2}\|ll\=u\)\>"
    164 "hex number
    165 syn match	pikeNumber		display contained "\<0x\x\+\%(u\=l\{0,2}\|ll\=u\)\>"
    166 " Flag the first zero of an octal number as something special
    167 syn match	pikeOctal		display contained "\<0\o\+\%(u\=l\{0,2}\|ll\=u\)\>" contains=pikeOctalZero
    168 syn match	pikeOctalZero	display contained "\<0"
    169 "floating point number, with dot, optional exponent
    170 syn match	pikeFloat		display contained "\<\d\+\%(f\|\.[0-9.]\@!\d*\%(e[-+]\=\d\+\)\=[fl]\=\)"
    171 "floating point number, starting with a dot, optional exponent
    172 syn match	pikeFloat		display contained "[0-9.]\@1<!\.\d\+\%(e[-+]\=\d\+\)\=[fl]\=\>"
    173 "floating point number, without dot, with exponent
    174 syn match	pikeFloat		display contained "\<\d\+e[-+]\=\d\+[fl]\=\>"
    175 
    176 "hexadecimal floating point number, two variants, with exponent
    177 syn match	pikeFloat		display contained "\<0x\%(\x\+\.\?\|\x*\.\x\+\)p[-+]\=\d\+[fl]\=\>"
    178 
    179 " flag an octal number with wrong digits
    180 syn match	pikeOctalError	display contained "\<0\o*[89]\d*"
    181 syn case match
    182 
    183 if exists("c_comment_strings")
    184  " A comment can contain pikeString, pikeCharacter and pikeNumber.
    185  " But a "*/" inside a pikeString in a pikeComment DOES end the comment!  So we
    186  " need to use a special type of pikeString: pikeCommentString, which also ends on
    187  " "*/", and sees a "*" at the start of the line as comment again.
    188  " Unfortunately this doesn't very well work for // type of comments :-(
    189  syn match	pikeCommentSkip	contained "^\s*\*\%($\|\s\+\)"
    190  syn region pikeCommentString	contained start=+\\\@<!"+ skip=+\\\\\|\\"+ end=+"+ end=+\ze\*/+ contains=pikeSpecial,pikeCommentSkip
    191  syn region pikeComment2String	contained start=+\\\@<!"+ skip=+\\\\\|\\"+ end=+"+ end="$" contains=pikeSpecial
    192  syn region  pikeCommentL	start="//" skip="\\$" end="$" keepend contains=@pikeCommentGroup,pikeComment2String,pikeCharacter,pikeNumbersCom,pikeSpaceError,@Spell containedin=pikeWord,pikeFirstWord
    193  if exists("c_no_comment_fold")
    194    " Use "extend" here to have preprocessor lines not terminate halfway a
    195    " comment.
    196    syn region pikeComment	matchgroup=pikeCommentStart start="/\*" end="\*/" contains=@pikeCommentGroup,pikeCommentStartError,pikeCommentString,pikeCharacter,pikeNumbersCom,pikeSpaceError,@Spell extend containedin=pikeWord,pikeFirstWord
    197  else
    198    syn region pikeComment	matchgroup=pikeCommentStart start="/\*" end="\*/" contains=@pikeCommentGroup,pikeCommentStartError,pikeCommentString,pikeCharacter,pikeNumbersCom,pikeSpaceError,@Spell fold extend containedin=pikeWord,pikeFirstWord
    199  endif
    200 else
    201  syn region	pikeCommentL	start="//" skip="\\$" end="$" keepend contains=@pikeCommentGroup,pikeSpaceError,@Spell containedin=pikeWord,pikeFirstWord
    202  if exists("c_no_comment_fold")
    203    syn region	pikeComment	matchgroup=pikeCommentStart start="/\*" end="\*/" contains=@pikeCommentGroup,pikeCommentStartError,pikeSpaceError,@Spell extend containedin=pikeWord,pikeFirstWord
    204  else
    205    syn region	pikeComment	matchgroup=pikeCommentStart start="/\*" end="\*/" contains=@pikeCommentGroup,pikeCommentStartError,pikeSpaceError,@Spell fold extend containedin=pikeWord,pikeFirstWord
    206  endif
    207 endif
    208 " keep a // comment separately, it terminates a preproc. conditional
    209 syn match	pikeCommentError	display "\*/"
    210 syn match	pikeCommentStartError display "/\ze\*" contained
    211 
    212 syn keyword	pikeOperator	sizeof
    213 syn keyword	pikeOperator	typeof _typeof _refs
    214 syn keyword	pikeOperator	zero_type intp stringp arrayp mappingp multisetp
    215 syn keyword	pikeOperator	objectp functionp programp callablep destructedp
    216 syn keyword	pikeOperator	object_variablep undefinedp
    217 syn keyword	pikeOperator	allocate equal
    218 syn keyword	pikeOperator	aggregate aggregate_mapping aggregate_multiset
    219 syn keyword	pikeOperator	map filter search replace reverse column rows
    220 syn keyword	pikeOperator	indices values mkmapping mkmultiset m_delete sort
    221 syn keyword	pikeOperator	m_delete destruct
    222 syn keyword	pikeOperator	create _destruct _sprintf cast _encode _decode
    223 syn keyword     pikeOperator    __hash _sizeof _values _indices __INIT _equal
    224 syn keyword     pikeOperator    _is_type _m_delete _get_iterator _search
    225 syn keyword     pikeOperator    _serialize _deserialize _sqrt _types _random
    226 syn keyword     pikeOperator    _size_object
    227 
    228 syn keyword	pikeType		int void
    229 syn keyword	pikeType		float
    230 syn keyword	pikeType		bool string array mapping multiset mixed
    231 syn keyword	pikeType		object function program auto
    232 
    233 syn keyword	pikeType		this this_object this_program
    234 syn keyword	pikeType		sprintf_args sprintf_format sprintf_result
    235 syn keyword	pikeType		strict_sprintf_format
    236 
    237 syn keyword	pikeStructure		class enum typedef inherit import
    238 syn keyword	pikeTypedef		typedef
    239 syn keyword	pikeStorageClass	private protected public constant final variant
    240 syn keyword	pikeStorageClass	optional inline extern static __deprecated__ lambda
    241 
    242 syn keyword pikeConstant __LINE__ __FILE__ __DIR__ __DATE__ __TIME__
    243 syn keyword pikeConstant __AUTO_BIGNUM__ __NT__
    244 syn keyword pikeConstant __BUILD__ __COUNTER__ _MAJOR__ __MINOR__ __VERSION__
    245 syn keyword pikeConstant __REAL_BUILD__ _REAL_MAJOR__ __REAL_MINOR__
    246 syn keyword pikeConstant __REAL_VERSION__ __PIKE__ UNDEFINED
    247 
    248 " These should actually only be parsed in preprocessor conditionals
    249 syn keyword pikeCppOperator contained defined constant efun _Pragma
    250 
    251 syn keyword pikeBoolean true false
    252 
    253 syn match       pikeCppPrefix	display "^\s*\zs#\s*[a-z]\+" contained
    254 syn region	pikePreCondit	start="^\s*#\s*\%(if\%(n\?def\)\?\|el\%(se\)\?if\)\>" skip="\\$" end="$" transparent keepend contains=pikeString,pikeCharacter,pikeNumbers,pikeCommentError,pikeSpaceError,pikeCppOperator,pikeCppPrefix
    255 syn match	pikePreConditMatch	display "^\s*\zs#\s*\%(else\|endif\)\>"
    256 if !exists("c_no_if0")
    257  syn cluster	pikeCppOutInGroup	contains=pikeCppInIf,pikeCppInElse,pikeCppInElse2,pikeCppOutIf,pikeCppOutIf2,pikeCppOutElse,pikeCppInSkip,pikeCppOutSkip
    258  syn region	pikeCppOutWrapper	start="^\s*\zs#\s*if\s\+0\+\s*\%($\|//\|/\*\|&\)" end=".\@=\|$" contains=pikeCppOutIf,pikeCppOutElse,@NoSpell fold
    259  syn region	pikeCppOutIf	contained start="0\+" matchgroup=pikeCppOutWrapper end="^\s*#\s*endif\>" contains=pikeCppOutIf2,pikeCppOutElse
    260  if !exists("c_no_if0_fold")
    261    syn region	pikeCppOutIf2	contained matchgroup=pikeCppOutWrapper start="0\+" end="^\ze\s*#\s*\%(else\>\|el\%(se\)\?if\s\+\%(0\+\s*\%($\|//\|/\*\|&\)\)\@!\|endif\>\)" contains=pikeSpaceError,pikeCppOutSkip,@Spell fold
    262  else
    263    syn region	pikeCppOutIf2	contained matchgroup=pikeCppOutWrapper start="0\+" end="^\ze\s*#\s*\%(else\>\|el\%(se\)\?if\s\+\%(0\+\s*\%($\|//\|/\*\|&\)\)\@!\|endif\>\)" contains=pikeSpaceError,pikeCppOutSkip,@Spell
    264  endif
    265  syn region	pikeCppOutElse	contained matchgroup=pikeCppOutWrapper start="^\s*#\s*\%(else\|el\%(se\)\?if\)" end="^\s*#\s*endif\>" contains=TOP,pikePreCondit
    266  syn region	pikeCppInWrapper	start="^\s*\zs#\s*if\s\+0*[1-9]\d*\s*\%($\|//\|/\*\||\)" end=".\@=\|$" contains=pikeCppInIf,pikeCppInElse fold
    267  syn region	pikeCppInIf	contained matchgroup=pikeCppInWrapper start="\d\+" end="^\s*#\s*endif\>" contains=TOP,pikePreCondit
    268  if !exists("c_no_if0_fold")
    269    syn region	pikeCppInElse	contained start="^\s*#\s*\%(else\>\|el\%(se\)\?if\s\+\%(0*[1-9]\d*\s*\%($\|//\|/\*\||\)\)\@!\)" end=".\@=\|$" containedin=pikeCppInIf contains=pikeCppInElse2 fold
    270  else
    271    syn region	pikeCppInElse	contained start="^\s*#\s*\%(else\>\|el\%(se\)\?if\s\+\%(0*[1-9]\d*\s*\%($\|//\|/\*\||\)\)\@!\)" end=".\@=\|$" containedin=pikeCppInIf contains=pikeCppInElse2
    272  endif
    273  syn region	pikeCppInElse2	contained matchgroup=pikeCppInWrapper start="^\s*#\s*\%(else\|el\%(se\)\?if\)\%([^/]\|/[^/*]\)*" end="^\ze\s*#\s*endif\>" contains=pikeSpaceError,pikeCppOutSkip,@Spell
    274  syn region	pikeCppOutSkip	contained start="^\s*#\s*if\%(n\?def\)\?\>" skip="\\$" end="^\s*#\s*endif\>" contains=pikeSpaceError,pikeCppOutSkip
    275  syn region	pikeCppInSkip	contained matchgroup=pikeCppInWrapper start="^\s*#\s*\%(if\s\+\%(\d\+\s*\%($\|//\|/\*\||\|&\)\)\@!\|ifn\?def\>\)" skip="\\$" end="^\s*#\s*endif\>" containedin=pikeCppOutElse,pikeCppInIf,pikeCppInSkip contains=TOP,pikePreProc
    276 endif
    277 syn region	pikeIncluded	display contained start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=pikeDelimiterDQ keepend
    278 syn match	pikeIncluded	display contained "<[^>]*>"
    279 syn match	pikeInclude	display "^\s*\zs#\s*include\>\s*["<]" contains=pikeIncluded
    280 syn cluster	pikePreProcGroup	contains=pikeIncluded,pikeInclude,pikeEmbeddedString,pikeCppOutWrapper,pikeCppInWrapper,@pikeCppOutInGroup,pikeFormat,pikeMlString,pikeCommentStartError,@pikeBadGroup,pikeWord
    281 syn region	pikeDefine		start="^\s*\zs#\s*\%(define\|undef\)\>" skip="\\$" end="$" keepend contains=@pikeStmt,@pikeBadGroup
    282 syn region	pikePreProc	start="^\s*\zs#\s*\%(pragma\|charset\|pike\|require\|string\|line\|warning\|error\)\>" skip="\\$" end="$" transparent keepend contains=pikeString,pikeCharacter,pikeNumbers,pikeCommentError,pikeSpaceError,pikeCppOperator,pikeCppPrefix,@Spell,pikeConstant
    283 
    284 syn match	pikeAutodocReal	display contained "\%(//\|[/ \t\v]\*\|^\*\)\@2<=!.*" contains=@pikeAutodoc containedin=pikeComment,pikeCommentL
    285 syn cluster pikeCommentGroup add=pikeAutodocReal
    286 syn cluster pikePreProcGroup add=pikeAutodocReal
    287 
    288 " Highlight User Labels
    289 " Avoid matching foo::bar() in C++ by requiring that the next char is not ':'
    290 syn match	pikeUserLabel	display "\%(^\|[{};]\)\zs\I\i*\s*\ze:\%([^:]\|$\)" contained contains=NONE
    291 syn match	pikeUserLabel	display "\%(\<\%(break\|continue\)\_s\+\)\@10<=\I\i*" contained contains=NONE
    292 syn match	pikeUserLabel	display "\%(\<case\)\@5<=\s\+[^<()[\]{},;:]\+\ze::\@!" contained contains=pikeDelimiterDQ,pikeDelimiterSQ
    293 
    294 syn match	pikeMappIndex	display contained "[^<()[\]{},;:]\+\ze::\@!" contains=pikeDelimiterDQ,pikeDelimiterSQ
    295 syn match	pikeSoftCast	display contained "\[[ \t\v\r\n.a-zA-Z0-9_():,|\+]" contains=NONE
    296 
    297 if exists("c_minlines")
    298  let b:c_minlines = c_minlines
    299 else
    300  if !exists("c_no_if0")
    301    let b:c_minlines = 400	" #if 0 constructs can be long
    302  else
    303    let b:c_minlines = 200	" mostly for multiline strings
    304  endif
    305 endif
    306 exec "syn sync ccomment pikeComment minlines=" . b:c_minlines
    307 syn sync match pikeMlStringSync grouphere pikeMlString +^[^"#]\+#\"+
    308 syn sync match pikeAutodocSync grouphere pikeCommentL "^\s*//!"
    309 
    310 " Define the default highlighting.
    311 " Only used when an item doesn't have highlighting yet
    312 hi def link pikeFormat		SpecialChar
    313 hi def link pikeMlString	String
    314 hi def link pikeCommentL	Comment
    315 hi def link pikeCommentStart	Comment
    316 hi def link pikeLabel		Label
    317 hi def link pikeUserLabel	Identifier
    318 hi def link pikeConditional	Conditional
    319 hi def link pikeRepeat		Repeat
    320 hi def link pikeCharacter	Character
    321 hi def link pikeDelimiterDQ	Delimiter
    322 hi def link pikeDelimiterSQ	Delimiter
    323 hi def link pikeNumber		Number
    324 hi def link pikeOctal		Number
    325 hi def link pikeOctalZero	PreProc	 " link this to Error if you want
    326 hi def link pikeFloat		Float
    327 hi def link pikeOctalError	Error
    328 hi def link pikeCommentError	Error
    329 hi def link pikeCommentStartError	Error
    330 hi def link pikeSpaceError	Error
    331 hi def link pikeSpecialError	Error
    332 hi def link pikeOperator	Operator
    333 hi def link pikeCppOperator	Operator
    334 hi def link pikeStructure	Structure
    335 hi def link pikeTypedef		Typedef
    336 hi def link pikeStorageClass	StorageClass
    337 hi def link pikeInclude		Include
    338 hi def link pikeCppPrefix	PreCondit
    339 hi def link pikePreProc		PreProc
    340 hi def link pikeDefine		Macro
    341 hi def link pikeIncluded	String
    342 hi def link pikeError		Error
    343 hi def link pikeDebug		Debug
    344 hi def link pikeException	Exception
    345 hi def link pikeStatement	Statement
    346 hi def link pikeType		Type
    347 hi def link pikeConstant	Constant
    348 hi def link pikeBoolean		Boolean
    349 hi def link pikeCommentString	String
    350 hi def link pikeComment2String	String
    351 hi def link pikeCommentSkip	Comment
    352 hi def link pikeString		String
    353 hi def link pikeComment		Comment
    354 hi def link pikeSpecial		SpecialChar
    355 hi def link pikeTodo		Todo
    356 hi def link pikeBadContinuation	Error
    357 
    358 hi def link pikeCppInWrapper	PreCondit
    359 hi def link pikeCppOutWrapper	PreCondit
    360 hi def link pikePreConditMatch	PreCondit
    361 
    362 hi def link pikeCppOutSkip	Comment
    363 hi def link pikeCppInElse2	Comment
    364 hi def link pikeCppOutIf2	Comment
    365 hi def link pikeCppOut		Comment
    366 
    367 hi def link pikePredef		Statement
    368 hi def link pikeBindings	Identifier
    369 hi def link pikeMappIndex	Identifier
    370 hi def link pikeSoftCast	Type
    371 hi def link pikeBadGroup	Error
    372 hi def link pikeBadPClose	Error
    373 hi def link pikeBadAClose	Error
    374 hi def link pikeBadBClose	Error
    375 hi def link pikeBadSPClose	Error
    376 hi def link pikeBadSAClose	Error
    377 hi def link pikeBadSBClose	Error
    378 hi def link pikeBadSPAClose	Error
    379 hi def link pikeBadSBAClose	Error
    380 hi def link pikeBadSClose	Error
    381 
    382 let b:current_syntax = "pike"
    383 
    384 let &cpo = s:cpo_save
    385 unlet s:cpo_save
    386 " vim: ts=8