diff options
Diffstat (limited to 'runtime/syntax/ibasic.vim')
-rw-r--r-- | runtime/syntax/ibasic.vim | 176 |
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 |