diff options
Diffstat (limited to 'runtime/syntax/pike.vim')
-rw-r--r-- | runtime/syntax/pike.vim | 155 |
1 files changed, 155 insertions, 0 deletions
diff --git a/runtime/syntax/pike.vim b/runtime/syntax/pike.vim new file mode 100644 index 000000000..efbafd5d8 --- /dev/null +++ b/runtime/syntax/pike.vim @@ -0,0 +1,155 @@ +" Vim syntax file +" Language: Pike +" Maintainer: Francesco Chemolli <kinkie@kame.usr.dsi.unimi.it> +" Last Change: 2001 May 10 + +" For version 5.x: Clear all syntax items +" For version 6.x: Quit when a syntax file was already loaded +if version < 600 + syntax clear +elseif exists("b:current_syntax") + finish +endif + +" A bunch of useful C keywords +syn keyword pikeStatement goto break return continue +syn keyword pikeLabel case default +syn keyword pikeConditional if else switch +syn keyword pikeRepeat while for foreach do +syn keyword pikeStatement gauge destruct lambda inherit import typeof +syn keyword pikeException catch +syn keyword pikeType inline nomask private protected public static + + +syn keyword pikeTodo contained TODO FIXME XXX + +" String and Character constants +" Highlight special characters (those which have a backslash) differently +syn match pikeSpecial contained "\\[0-7][0-7][0-7]\=\|\\." +syn region pikeString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=pikeSpecial +syn match pikeCharacter "'[^\\]'" +syn match pikeSpecialCharacter "'\\.'" +syn match pikeSpecialCharacter "'\\[0-7][0-7]'" +syn match pikeSpecialCharacter "'\\[0-7][0-7][0-7]'" + +" Compound data types +syn region pikeCompoundType start='({' contains=pikeString,pikeCompoundType,pikeNumber,pikeFloat end='})' +syn region pikeCompoundType start='(\[' contains=pikeString,pikeCompoundType,pikeNumber,pikeFloat end='\])' +syn region pikeCompoundType start='(<' contains=pikeString,pikeCompoundType,pikeNumber,pikeFloat end='>)' + +"catch errors caused by wrong parenthesis +syn region pikeParen transparent start='([^{[<(]' end=')' contains=ALLBUT,pikeParenError,pikeIncluded,pikeSpecial,pikeTodo,pikeUserLabel,pikeBitField +syn match pikeParenError ")" +syn match pikeInParen contained "[^(][{}][^)]" + +"integer number, or floating point number without a dot and with "f". +syn case ignore +syn match pikeNumber "\<\d\+\(u\=l\=\|lu\|f\)\>" +"floating point number, with dot, optional exponent +syn match pikeFloat "\<\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\=\>" +"floating point number, starting with a dot, optional exponent +syn match pikeFloat "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>" +"floating point number, without dot, with exponent +syn match pikeFloat "\<\d\+e[-+]\=\d\+[fl]\=\>" +"hex number +syn match pikeNumber "\<0x[0-9a-f]\+\(u\=l\=\|lu\)\>" +"syn match pikeIdentifier "\<[a-z_][a-z0-9_]*\>" +syn case match +" flag an octal number with wrong digits +syn match pikeOctalError "\<0[0-7]*[89]" + +if exists("c_comment_strings") + " A comment can contain pikeString, pikeCharacter and pikeNumber. + " But a "*/" inside a pikeString in a pikeComment DOES end the comment! So we + " need to use a special type of pikeString: pikeCommentString, which also ends on + " "*/", and sees a "*" at the start of the line as comment again. + " Unfortunately this doesn't very well work for // type of comments :-( + syntax match pikeCommentSkip contained "^\s*\*\($\|\s\+\)" + syntax region pikeCommentString contained start=+"+ skip=+\\\\\|\\"+ end=+"+ end=+\*/+me=s-1 contains=pikeSpecial,pikeCommentSkip + syntax region pikeComment2String contained start=+"+ skip=+\\\\\|\\"+ end=+"+ end="$" contains=pikeSpecial + syntax region pikeComment start="/\*" end="\*/" contains=pikeTodo,pikeCommentString,pikeCharacter,pikeNumber,pikeFloat + syntax match pikeComment "//.*" contains=pikeTodo,pikeComment2String,pikeCharacter,pikeNumber + syntax match pikeComment "#\!.*" contains=pikeTodo,pikeComment2String,pikeCharacter,pikeNumber +else + syn region pikeComment start="/\*" end="\*/" contains=pikeTodo + syn match pikeComment "//.*" contains=pikeTodo + syn match pikeComment "#!.*" contains=pikeTodo +endif +syntax match pikeCommentError "\*/" + +syn keyword pikeOperator sizeof +syn keyword pikeType int string void float mapping array multiset mixed +syn keyword pikeType program object function + +syn region pikePreCondit start="^\s*#\s*\(if\>\|ifdef\>\|ifndef\>\|elif\>\|else\>\|endif\>\)" skip="\\$" end="$" contains=pikeComment,pikeString,pikeCharacter,pikeNumber,pikeCommentError +syn region pikeIncluded contained start=+"+ skip=+\\\\\|\\"+ end=+"+ +syn match pikeIncluded contained "<[^>]*>" +syn match pikeInclude "^\s*#\s*include\>\s*["<]" contains=pikeIncluded +"syn match pikeLineSkip "\\$" +syn region pikeDefine start="^\s*#\s*\(define\>\|undef\>\)" skip="\\$" end="$" contains=ALLBUT,pikePreCondit,pikeIncluded,pikeInclude,pikeDefine,pikeInParen +syn region pikePreProc start="^\s*#\s*\(pragma\>\|line\>\|warning\>\|warn\>\|error\>\)" skip="\\$" end="$" contains=ALLBUT,pikePreCondit,pikeIncluded,pikeInclude,pikeDefine,pikeInParen + +" Highlight User Labels +syn region pikeMulti transparent start='?' end=':' contains=ALLBUT,pikeIncluded,pikeSpecial,pikeTodo,pikeUserLabel,pikeBitField +" Avoid matching foo::bar() in C++ by requiring that the next char is not ':' +syn match pikeUserLabel "^\s*\I\i*\s*:$" +syn match pikeUserLabel ";\s*\I\i*\s*:$"ms=s+1 +syn match pikeUserLabel "^\s*\I\i*\s*:[^:]"me=e-1 +syn match pikeUserLabel ";\s*\I\i*\s*:[^:]"ms=s+1,me=e-1 + +" Avoid recognizing most bitfields as labels +syn match pikeBitField "^\s*\I\i*\s*:\s*[1-9]"me=e-1 +syn match pikeBitField ";\s*\I\i*\s*:\s*[1-9]"me=e-1 + +syn sync ccomment pikeComment minlines=10 + +" Define the default highlighting. +" For version 5.7 and earlier: only when not done already +" For version 5.8 and later: only when an item doesn't have highlighting yet +if version >= 508 || !exists("did_pike_syntax_inits") + if version < 508 + let did_pike_syntax_inits = 1 + command -nargs=+ HiLink hi link <args> + else + command -nargs=+ HiLink hi def link <args> + endif + + HiLink pikeLabel Label + HiLink pikeUserLabel Label + HiLink pikeConditional Conditional + HiLink pikeRepeat Repeat + HiLink pikeCharacter Character + HiLink pikeSpecialCharacter pikeSpecial + HiLink pikeNumber Number + HiLink pikeFloat Float + HiLink pikeOctalError pikeError + HiLink pikeParenError pikeError + HiLink pikeInParen pikeError + HiLink pikeCommentError pikeError + HiLink pikeOperator Operator + HiLink pikeInclude Include + HiLink pikePreProc PreProc + HiLink pikeDefine Macro + HiLink pikeIncluded pikeString + HiLink pikeError Error + HiLink pikeStatement Statement + HiLink pikePreCondit PreCondit + HiLink pikeType Type + HiLink pikeCommentError pikeError + HiLink pikeCommentString pikeString + HiLink pikeComment2String pikeString + HiLink pikeCommentSkip pikeComment + HiLink pikeString String + HiLink pikeComment Comment + HiLink pikeSpecial SpecialChar + HiLink pikeTodo Todo + HiLink pikeException pikeStatement + HiLink pikeCompoundType Constant + "HiLink pikeIdentifier Identifier + + delcommand HiLink +endif + +let b:current_syntax = "pike" + +" vim: ts=8 |