Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

file 155 lines (136 sloc) 6.703 kb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 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
Something went wrong with that request. Please try again.