summaryrefslogtreecommitdiff
path: root/runtime/syntax/ibasic.vim
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/syntax/ibasic.vim')
-rw-r--r--runtime/syntax/ibasic.vim176
1 files changed, 176 insertions, 0 deletions
diff --git a/runtime/syntax/ibasic.vim b/runtime/syntax/ibasic.vim
new file mode 100644
index 000000000..75e59419b
--- /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