ibasic.vim (7036B)
1 " Vim syntax file 2 " Language: ibasic 3 " Maintainer: Mark Manning <markem@airmail.net> 4 " Originator: Allan Kelly <Allan.Kelly@ed.ac.uk> 5 " Created: 10/1/2006 6 " Updated: 10/21/2006 7 " Description: A vim file to handle the IBasic file format. 8 " Notes: 9 " Updated by Mark Manning <markem@airmail.net> 10 " Applied IBasic support to the already excellent support for standard 11 " basic syntax (like QB). 12 " 13 " First version based on Micro$soft QBASIC circa 1989, as documented in 14 " 'Learn BASIC Now' by Halvorson&Rygmyr. Microsoft Press 1989. 15 " This syntax file not a complete implementation yet. 16 " Send suggestions to the maintainer. 17 " 18 " This version is based upon the commands found in IBasic (www.pyxia.com). 19 " MEM 10/6/2006 20 " 21 " Quit when a (custom) syntax file was already loaded (Taken from c.vim) 22 " 23 if exists("b:current_syntax") 24 finish 25 endif 26 " 27 " Be sure to turn on the "case ignore" since current versions of basic 28 " support both upper as well as lowercase letters. 29 " 30 syn case ignore 31 " 32 " A bunch of useful BASIC keywords 33 " 34 syn keyword ibasicStatement beep bload bsave call absolute chain chdir circle 35 syn keyword ibasicStatement clear close cls color com common const data 36 syn keyword ibasicStatement loop draw end environ erase error exit field 37 syn keyword ibasicStatement files function get gosub goto 38 syn keyword ibasicStatement input input# ioctl key kill let line locate 39 syn keyword ibasicStatement lock unlock lprint using lset mkdir name 40 syn keyword ibasicStatement on error open option base out paint palette pcopy 41 syn keyword ibasicStatement pen play pmap poke preset print print# using pset 42 syn keyword ibasicStatement put randomize read redim reset restore resume 43 syn keyword ibasicStatement return rmdir rset run seek screen 44 syn keyword ibasicStatement shared shell sleep sound static stop strig sub 45 syn keyword ibasicStatement swap system timer troff tron type unlock 46 syn keyword ibasicStatement view wait width window write 47 syn keyword ibasicStatement date$ mid$ time$ 48 " 49 " Do the basic variables names first. This is because it 50 " is the most inclusive of the tests. Later on we change 51 " this so the identifiers are split up into the various 52 " types of identifiers like functions, basic commands and 53 " such. MEM 9/9/2006 54 " 55 syn match ibasicIdentifier "\<[a-zA-Z_][a-zA-Z0-9_]*\>" 56 syn match ibasicGenericFunction "\<[a-zA-Z_][a-zA-Z0-9_]*\>\s*("me=e-1,he=e-1 57 " 58 " Function list 59 " 60 syn keyword ibasicBuiltInFunction abs asc atn cdbl cint clng cos csng csrlin cvd cvdmbf 61 syn keyword ibasicBuiltInFunction cvi cvl cvs cvsmbf eof erdev erl err exp fileattr 62 syn keyword ibasicBuiltInFunction fix fre freefile inp instr lbound len loc lof 63 syn keyword ibasicBuiltInFunction log lpos mod peek pen point pos rnd sadd screen seek 64 syn keyword ibasicBuiltInFunction setmem sgn sin spc sqr stick strig tab tan ubound 65 syn keyword ibasicBuiltInFunction val valptr valseg varptr varseg 66 syn keyword ibasicBuiltInFunction chr\$ command$ date$ environ$ erdev$ hex$ inkey$ 67 syn keyword ibasicBuiltInFunction input$ ioctl$ lcases$ laft$ ltrim$ mid$ mkdmbf$ mkd$ 68 syn keyword ibasicBuiltInFunction mki$ mkl$ mksmbf$ mks$ oct$ right$ rtrim$ space$ 69 syn keyword ibasicBuiltInFunction str$ string$ time$ ucase$ varptr$ 70 syn keyword ibasicTodo contained TODO 71 syn cluster ibasicFunctionCluster contains=ibasicBuiltInFunction,ibasicGenericFunction 72 73 syn keyword Conditional if else then elseif endif select case endselect 74 syn keyword Repeat for do while next enddo endwhile wend 75 76 syn keyword ibasicTypeSpecifier single double defdbl defsng 77 syn keyword ibasicTypeSpecifier int integer uint uinteger int64 uint64 defint deflng 78 syn keyword ibasicTypeSpecifier byte char string istring defstr 79 syn keyword ibasicDefine dim def declare 80 " 81 "catch errors caused by wrong parenthesis 82 " 83 syn cluster ibasicParenGroup contains=ibasicParenError,ibasicIncluded,ibasicSpecial,ibasicTodo,ibasicUserCont,ibasicUserLabel,ibasicBitField 84 syn region ibasicParen transparent start='(' end=')' contains=ALLBUT,@bParenGroup 85 syn match ibasicParenError ")" 86 syn match ibasicInParen contained "[{}]" 87 " 88 "integer number, or floating point number without a dot and with "f". 89 " 90 syn region ibasicHex start="&h" end="\W" 91 syn region ibasicHexError start="&h\x*[g-zG-Z]" end="\W" 92 syn match ibasicInteger "\<\d\+\(u\=l\=\|lu\|f\)\>" 93 " 94 "floating point number, with dot, optional exponent 95 " 96 syn match ibasicFloat "\<\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\=\>" 97 " 98 "floating point number, starting with a dot, optional exponent 99 " 100 syn match ibasicFloat "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>" 101 " 102 "floating point number, without dot, with exponent 103 " 104 syn match ibasicFloat "\<\d\+e[-+]\=\d\+[fl]\=\>" 105 " 106 "hex number 107 " 108 syn match ibasicIdentifier "\<[a-zA-Z_][a-zA-Z0-9_]*\>" 109 syn match ibasicFunction "\<[a-zA-Z_][a-zA-Z0-9_]*\>\s*("me=e-1,he=e-1 110 syn case match 111 syn match ibasicOctalError "\<0\o*[89]" 112 " 113 " String and Character contstants 114 " 115 syn region ibasicString start='"' end='"' contains=ibasicSpecial,ibasicTodo 116 syn region ibasicString start="'" end="'" contains=ibasicSpecial,ibasicTodo 117 " 118 " Comments 119 " 120 syn match ibasicSpecial contained "\\." 121 syn region ibasicComment start="^rem" end="$" contains=ibasicSpecial,ibasicTodo 122 syn region ibasicComment start=":\s*rem" end="$" contains=ibasicSpecial,ibasicTodo 123 syn region ibasicComment start="\s*'" end="$" contains=ibasicSpecial,ibasicTodo 124 syn region ibasicComment start="^'" end="$" contains=ibasicSpecial,ibasicTodo 125 " 126 " Now do the comments and labels 127 " 128 syn match ibasicLabel "^\d" 129 syn region ibasicLineNumber start="^\d" end="\s" 130 " 131 " Pre-compiler options : FreeBasic 132 " 133 syn region ibasicPreCondit start="^\s*#\s*\(if\>\|ifdef\>\|ifndef\>\|elif\>\|else\>\|endif\>\)" skip="\\$" end="$" contains=ibasicString,ibasicCharacter,ibasicNumber,ibasicCommentError,ibasicSpaceError 134 syn match ibasicInclude "^\s*#\s*include\s*" 135 " 136 " Create the clusters 137 " 138 syn cluster ibasicNumber contains=ibasicHex,ibasicInteger,ibasicFloat 139 syn cluster ibasicError contains=ibasicHexError 140 " 141 " Used with OPEN statement 142 " 143 syn match ibasicFilenumber "#\d\+" 144 " 145 "syn sync ccomment ibasicComment 146 " 147 syn match ibasicMathOperator "[\+\-\=\|\*\/\>\<\%\()[\]]" contains=ibasicParen 148 " 149 " The default methods for highlighting. Can be overridden later 150 " 151 hi def link ibasicLabel Label 152 hi def link ibasicConditional Conditional 153 hi def link ibasicRepeat Repeat 154 hi def link ibasicHex Number 155 hi def link ibasicInteger Number 156 hi def link ibasicFloat Number 157 hi def link ibasicError Error 158 hi def link ibasicHexError Error 159 hi def link ibasicStatement Statement 160 hi def link ibasicString String 161 hi def link ibasicComment Comment 162 hi def link ibasicLineNumber Comment 163 hi def link ibasicSpecial Special 164 hi def link ibasicTodo Todo 165 hi def link ibasicGenericFunction Function 166 hi def link ibasicBuiltInFunction Function 167 hi def link ibasicTypeSpecifier Type 168 hi def link ibasicDefine Type 169 hi def link ibasicInclude Include 170 hi def link ibasicIdentifier Identifier 171 hi def link ibasicFilenumber ibasicTypeSpecifier 172 hi def link ibasicMathOperator Operator 173 174 let b:current_syntax = "ibasic" 175 176 " vim: ts=8