updated for version 7.0001
diff --git a/runtime/syntax/pike.vim b/runtime/syntax/pike.vim
new file mode 100644
index 0000000..efbafd5
--- /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