181 lines
7.0 KiB
VimL
181 lines
7.0 KiB
VimL
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'vim') == -1
|
|
|
|
" 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
|
|
|
|
endif
|