mirror of
				https://github.com/vim/vim.git
				synced 2025-10-30 09:47:20 -04:00 
			
		
		
		
	
		
			
	
	
		
			156 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
		
		
			
		
	
	
			156 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
|   | " 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 |