diff runtime/syntax/ibasic.vim @ 1121:e63691e7c504

updated for version 7.1a
author vimboss
date Sat, 05 May 2007 17:54:07 +0000
parents
children
line wrap: on
line diff
new file mode 100644
--- /dev/null
+++ b/runtime/syntax/ibasic.vim
@@ -0,0 +1,176 @@
+" 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