forked from aniani/vim
		
	
		
			
	
	
		
			177 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
		
		
			
		
	
	
			177 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
|   | " Vim syntax file | ||
|  | " Language:	ibasic | ||
|  | " Maintainer:	Mark Manning <markem@airmail.net> | ||
|  | " Originator:	Allan Kelly <Allan.Kelly@ed.ac.uk> | ||
|  | " Created:	10/1/2006 | ||
|  | " Updated:	10/21/2006 | ||
|  | " Description:  A vim file to handle the IBasic file format. | ||
|  | " Notes: | ||
|  | "	Updated by Mark Manning <markem@airmail.net> | ||
|  | "	Applied IBasic support to the already excellent support for standard | ||
|  | "	basic syntax (like QB). | ||
|  | " | ||
|  | "	First version based on Micro$soft QBASIC circa 1989, as documented in | ||
|  | "	'Learn BASIC Now' by Halvorson&Rygmyr. Microsoft Press 1989. | ||
|  | "	This syntax file not a complete implementation yet. | ||
|  | "	Send suggestions to the maintainer. | ||
|  | " | ||
|  | "	This version is based upon the commands found in IBasic (www.pyxia.com). | ||
|  | "	MEM 10/6/2006 | ||
|  | " | ||
|  | "	Quit when a (custom) syntax file was already loaded (Taken from c.vim) | ||
|  | " | ||
|  | if exists("b:current_syntax") | ||
|  |   finish | ||
|  | endif | ||
|  | " | ||
|  | "	Be sure to turn on the "case ignore" since current versions of basic | ||
|  | "	support both upper as well as lowercase letters. | ||
|  | " | ||
|  | syn case ignore | ||
|  | " | ||
|  | " A bunch of useful BASIC keywords | ||
|  | " | ||
|  | syn keyword ibasicStatement	beep bload bsave call absolute chain chdir circle | ||
|  | syn keyword ibasicStatement	clear close cls color com common const data | ||
|  | syn keyword ibasicStatement	loop draw end environ erase error exit field | ||
|  | syn keyword ibasicStatement	files function get gosub goto | ||
|  | syn keyword ibasicStatement	input input# ioctl key kill let line locate | ||
|  | syn keyword ibasicStatement	lock unlock lprint using lset mkdir name | ||
|  | syn keyword ibasicStatement	on error open option base out paint palette pcopy | ||
|  | syn keyword ibasicStatement	pen play pmap poke preset print print# using pset | ||
|  | syn keyword ibasicStatement	put randomize read redim reset restore resume | ||
|  | syn keyword ibasicStatement	return rmdir rset run seek screen | ||
|  | syn keyword ibasicStatement	shared shell sleep sound static stop strig sub | ||
|  | syn keyword ibasicStatement	swap system timer troff tron type unlock | ||
|  | syn keyword ibasicStatement	view wait width window write | ||
|  | syn keyword ibasicStatement	date$ mid$ time$ | ||
|  | " | ||
|  | "	Do the basic variables names first.  This is because it | ||
|  | "	is the most inclusive of the tests.  Later on we change | ||
|  | "	this so the identifiers are split up into the various | ||
|  | "	types of identifiers like functions, basic commands and | ||
|  | "	such. MEM 9/9/2006 | ||
|  | " | ||
|  | syn match	ibasicIdentifier			"\<[a-zA-Z_][a-zA-Z0-9_]*\>" | ||
|  | syn match	ibasicGenericFunction	"\<[a-zA-Z_][a-zA-Z0-9_]*\>\s*("me=e-1,he=e-1 | ||
|  | " | ||
|  | "	Function list | ||
|  | " | ||
|  | syn keyword ibasicBuiltInFunction	abs asc atn cdbl cint clng cos csng csrlin cvd cvdmbf | ||
|  | syn keyword ibasicBuiltInFunction	cvi cvl cvs cvsmbf eof erdev erl err exp fileattr | ||
|  | syn keyword ibasicBuiltInFunction	fix fre freefile inp instr lbound len loc lof | ||
|  | syn keyword ibasicBuiltInFunction	log lpos mod peek pen point pos rnd sadd screen seek | ||
|  | syn keyword ibasicBuiltInFunction	setmem sgn sin spc sqr stick strig tab tan ubound | ||
|  | syn keyword ibasicBuiltInFunction	val valptr valseg varptr varseg | ||
|  | syn keyword ibasicBuiltInFunction	chr\$ command$ date$ environ$ erdev$ hex$ inkey$ | ||
|  | syn keyword ibasicBuiltInFunction	input$ ioctl$ lcases$ laft$ ltrim$ mid$ mkdmbf$ mkd$ | ||
|  | syn keyword ibasicBuiltInFunction	mki$ mkl$ mksmbf$ mks$ oct$ right$ rtrim$ space$ | ||
|  | syn keyword ibasicBuiltInFunction	str$ string$ time$ ucase$ varptr$ | ||
|  | syn keyword ibasicTodo contained	TODO | ||
|  | syn cluster	ibasicFunctionCluster	contains=ibasicBuiltInFunction,ibasicGenericFunction | ||
|  | 
 | ||
|  | syn keyword Conditional	if else then elseif endif select case endselect | ||
|  | syn keyword Repeat	for do while next enddo endwhile wend | ||
|  | 
 | ||
|  | syn keyword ibasicTypeSpecifier	single double defdbl defsng | ||
|  | syn keyword ibasicTypeSpecifier	int integer uint uinteger int64 uint64 defint deflng | ||
|  | syn keyword ibasicTypeSpecifier	byte char string istring defstr | ||
|  | syn keyword ibasicDefine	dim def declare | ||
|  | " | ||
|  | "catch errors caused by wrong parenthesis | ||
|  | " | ||
|  | syn cluster	ibasicParenGroup	contains=ibasicParenError,ibasicIncluded,ibasicSpecial,ibasicTodo,ibasicUserCont,ibasicUserLabel,ibasicBitField | ||
|  | syn region	ibasicParen		transparent start='(' end=')' contains=ALLBUT,@bParenGroup | ||
|  | syn match	ibasicParenError	")" | ||
|  | syn match	ibasicInParen	contained "[{}]" | ||
|  | " | ||
|  | "integer number, or floating point number without a dot and with "f". | ||
|  | " | ||
|  | syn region	ibasicHex		start="&h" end="\W" | ||
|  | syn region	ibasicHexError	start="&h\x*[g-zG-Z]" end="\W" | ||
|  | syn match	ibasicInteger	"\<\d\+\(u\=l\=\|lu\|f\)\>" | ||
|  | " | ||
|  | "floating point number, with dot, optional exponent | ||
|  | " | ||
|  | syn match	ibasicFloat		"\<\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\=\>" | ||
|  | " | ||
|  | "floating point number, starting with a dot, optional exponent | ||
|  | " | ||
|  | syn match	ibasicFloat		"\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>" | ||
|  | " | ||
|  | "floating point number, without dot, with exponent | ||
|  | " | ||
|  | syn match	ibasicFloat		"\<\d\+e[-+]\=\d\+[fl]\=\>" | ||
|  | " | ||
|  | "hex number | ||
|  | " | ||
|  | syn match	ibasicIdentifier	"\<[a-zA-Z_][a-zA-Z0-9_]*\>" | ||
|  | syn match	ibasicFunction	"\<[a-zA-Z_][a-zA-Z0-9_]*\>\s*("me=e-1,he=e-1 | ||
|  | syn case match | ||
|  | syn match	ibasicOctalError	"\<0\o*[89]" | ||
|  | " | ||
|  | " String and Character contstants | ||
|  | " | ||
|  | syn region	ibasicString		start='"' end='"' contains=ibasicSpecial,ibasicTodo | ||
|  | syn region	ibasicString		start="'" end="'" contains=ibasicSpecial,ibasicTodo | ||
|  | " | ||
|  | "	Comments | ||
|  | " | ||
|  | syn match	ibasicSpecial	contained "\\." | ||
|  | syn region  ibasicComment	start="^rem" end="$" contains=ibasicSpecial,ibasicTodo | ||
|  | syn region  ibasicComment	start=":\s*rem" end="$" contains=ibasicSpecial,ibasicTodo | ||
|  | syn region	ibasicComment	start="\s*'" end="$" contains=ibasicSpecial,ibasicTodo | ||
|  | syn region	ibasicComment	start="^'" end="$" contains=ibasicSpecial,ibasicTodo | ||
|  | " | ||
|  | "	Now do the comments and labels | ||
|  | " | ||
|  | syn match	ibasicLabel		"^\d" | ||
|  | syn region  ibasicLineNumber	start="^\d" end="\s" | ||
|  | " | ||
|  | "	Pre-compiler options : FreeBasic | ||
|  | " | ||
|  | syn region	ibasicPreCondit	start="^\s*#\s*\(if\>\|ifdef\>\|ifndef\>\|elif\>\|else\>\|endif\>\)" skip="\\$" end="$" contains=ibasicString,ibasicCharacter,ibasicNumber,ibasicCommentError,ibasicSpaceError | ||
|  | syn match	ibasicInclude	"^\s*#\s*include\s*" | ||
|  | " | ||
|  | "	Create the clusters | ||
|  | " | ||
|  | syn cluster ibasicNumber contains=ibasicHex,ibasicInteger,ibasicFloat | ||
|  | syn cluster	ibasicError	contains=ibasicHexError | ||
|  | " | ||
|  | "	Used with OPEN statement | ||
|  | " | ||
|  | syn match   ibasicFilenumber  "#\d\+" | ||
|  | " | ||
|  | "syn sync ccomment ibasicComment | ||
|  | " | ||
|  | syn match	ibasicMathOperator	"[\+\-\=\|\*\/\>\<\%\()[\]]" contains=ibasicParen | ||
|  | " | ||
|  | " The default methods for highlighting.  Can be overridden later | ||
|  | " | ||
|  | hi def link ibasicLabel			Label | ||
|  | hi def link ibasicConditional		Conditional | ||
|  | hi def link ibasicRepeat		Repeat | ||
|  | hi def link ibasicHex			Number | ||
|  | hi def link ibasicInteger		Number | ||
|  | hi def link ibasicFloat			Number | ||
|  | hi def link ibasicError			Error | ||
|  | hi def link ibasicHexError		Error | ||
|  | hi def link ibasicStatement		Statement | ||
|  | hi def link ibasicString		String | ||
|  | hi def link ibasicComment		Comment | ||
|  | hi def link ibasicLineNumber		Comment | ||
|  | hi def link ibasicSpecial		Special | ||
|  | hi def link ibasicTodo			Todo | ||
|  | hi def link ibasicGenericFunction	Function | ||
|  | hi def link ibasicBuiltInFunction	Function | ||
|  | hi def link ibasicTypeSpecifier		Type | ||
|  | hi def link ibasicDefine		Type | ||
|  | hi def link ibasicInclude		Include | ||
|  | hi def link ibasicIdentifier		Identifier | ||
|  | hi def link ibasicFilenumber		ibasicTypeSpecifier | ||
|  | hi def link ibasicMathOperator		Operator | ||
|  | 
 | ||
|  | let b:current_syntax = "ibasic" | ||
|  | 
 | ||
|  | " vim: ts=8 |