blob: c72032da27c8198c21eb9982ae0cb2219b8ca8a2 [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" Vim syntax file
2" Language: BASIC
3" Maintainer: Allan Kelly <allan@fruitloaf.co.uk>
Bram Moolenaarb6b046b2011-12-30 13:11:27 +01004" Last Change: 2011 Dec 25 by Thilo Six
Bram Moolenaar071d4272004-06-13 20:20:40 +00005
6" First version based on Micro$soft QBASIC circa 1989, as documented in
7" 'Learn BASIC Now' by Halvorson&Rygmyr. Microsoft Press 1989.
8" This syntax file not a complete implementation yet. Send suggestions to the
9" maintainer.
10
11" For version 5.x: Clear all syntax items
12" For version 6.x: Quit when a syntax file was already loaded
13if version < 600
14 syntax clear
15elseif exists("b:current_syntax")
16 finish
17endif
18
Bram Moolenaarb6b046b2011-12-30 13:11:27 +010019let s:cpo_save = &cpo
20set cpo&vim
21
Bram Moolenaar071d4272004-06-13 20:20:40 +000022" A bunch of useful BASIC keywords
23syn keyword basicStatement BEEP beep Beep BLOAD bload Bload BSAVE bsave Bsave
24syn keyword basicStatement CALL call Call ABSOLUTE absolute Absolute
25syn keyword basicStatement CHAIN chain Chain CHDIR chdir Chdir
26syn keyword basicStatement CIRCLE circle Circle CLEAR clear Clear
27syn keyword basicStatement CLOSE close Close CLS cls Cls COLOR color Color
28syn keyword basicStatement COM com Com COMMON common Common
29syn keyword basicStatement CONST const Const DATA data Data
30syn keyword basicStatement DECLARE declare Declare DEF def Def
31syn keyword basicStatement DEFDBL defdbl Defdbl DEFINT defint Defint
32syn keyword basicStatement DEFLNG deflng Deflng DEFSNG defsng Defsng
33syn keyword basicStatement DEFSTR defstr Defstr DIM dim Dim
34syn keyword basicStatement DO do Do LOOP loop Loop
35syn keyword basicStatement DRAW draw Draw END end End
36syn keyword basicStatement ENVIRON environ Environ ERASE erase Erase
37syn keyword basicStatement ERROR error Error EXIT exit Exit
38syn keyword basicStatement FIELD field Field FILES files Files
39syn keyword basicStatement FOR for For NEXT next Next
40syn keyword basicStatement FUNCTION function Function GET get Get
41syn keyword basicStatement GOSUB gosub Gosub GOTO goto Goto
42syn keyword basicStatement IF if If THEN then Then ELSE else Else
43syn keyword basicStatement INPUT input Input INPUT# input# Input#
44syn keyword basicStatement IOCTL ioctl Ioctl KEY key Key
45syn keyword basicStatement KILL kill Kill LET let Let
46syn keyword basicStatement LINE line Line LOCATE locate Locate
47syn keyword basicStatement LOCK lock Lock UNLOCK unlock Unlock
48syn keyword basicStatement LPRINT lprint Lprint USING using Using
49syn keyword basicStatement LSET lset Lset MKDIR mkdir Mkdir
50syn keyword basicStatement NAME name Name ON on On
51syn keyword basicStatement ERROR error Error OPEN open Open
52syn keyword basicStatement OPTION option Option BASE base Base
53syn keyword basicStatement OUT out Out PAINT paint Paint
54syn keyword basicStatement PALETTE palette Palette PCOPY pcopy Pcopy
55syn keyword basicStatement PEN pen Pen PLAY play Play
56syn keyword basicStatement PMAP pmap Pmap POKE poke Poke
57syn keyword basicStatement PRESET preset Preset PRINT print Print
58syn keyword basicStatement PRINT# print# Print# USING using Using
59syn keyword basicStatement PSET pset Pset PUT put Put
60syn keyword basicStatement RANDOMIZE randomize Randomize READ read Read
61syn keyword basicStatement REDIM redim Redim RESET reset Reset
62syn keyword basicStatement RESTORE restore Restore RESUME resume Resume
63syn keyword basicStatement RETURN return Return RMDIR rmdir Rmdir
64syn keyword basicStatement RSET rset Rset RUN run Run
65syn keyword basicStatement SEEK seek Seek SELECT select Select
66syn keyword basicStatement CASE case Case SHARED shared Shared
67syn keyword basicStatement SHELL shell Shell SLEEP sleep Sleep
68syn keyword basicStatement SOUND sound Sound STATIC static Static
69syn keyword basicStatement STOP stop Stop STRIG strig Strig
70syn keyword basicStatement SUB sub Sub SWAP swap Swap
71syn keyword basicStatement SYSTEM system System TIMER timer Timer
72syn keyword basicStatement TROFF troff Troff TRON tron Tron
73syn keyword basicStatement TYPE type Type UNLOCK unlock Unlock
74syn keyword basicStatement VIEW view View WAIT wait Wait
75syn keyword basicStatement WHILE while While WEND wend Wend
76syn keyword basicStatement WIDTH width Width WINDOW window Window
77syn keyword basicStatement WRITE write Write DATE$ date$ Date$
78syn keyword basicStatement MID$ mid$ Mid$ TIME$ time$ Time$
79
80syn keyword basicFunction ABS abs Abs ASC asc Asc
81syn keyword basicFunction ATN atn Atn CDBL cdbl Cdbl
82syn keyword basicFunction CINT cint Cint CLNG clng Clng
83syn keyword basicFunction COS cos Cos CSNG csng Csng
84syn keyword basicFunction CSRLIN csrlin Csrlin CVD cvd Cvd
85syn keyword basicFunction CVDMBF cvdmbf Cvdmbf CVI cvi Cvi
86syn keyword basicFunction CVL cvl Cvl CVS cvs Cvs
87syn keyword basicFunction CVSMBF cvsmbf Cvsmbf EOF eof Eof
88syn keyword basicFunction ERDEV erdev Erdev ERL erl Erl
89syn keyword basicFunction ERR err Err EXP exp Exp
90syn keyword basicFunction FILEATTR fileattr Fileattr FIX fix Fix
91syn keyword basicFunction FRE fre Fre FREEFILE freefile Freefile
92syn keyword basicFunction INP inp Inp INSTR instr Instr
93syn keyword basicFunction INT int Int LBOUND lbound Lbound
94syn keyword basicFunction LEN len Len LOC loc Loc
95syn keyword basicFunction LOF lof Lof LOG log Log
96syn keyword basicFunction LPOS lpos Lpos PEEK peek Peek
97syn keyword basicFunction PEN pen Pen POINT point Point
98syn keyword basicFunction POS pos Pos RND rnd Rnd
99syn keyword basicFunction SADD sadd Sadd SCREEN screen Screen
100syn keyword basicFunction SEEK seek Seek SETMEM setmem Setmem
101syn keyword basicFunction SGN sgn Sgn SIN sin Sin
102syn keyword basicFunction SPC spc Spc SQR sqr Sqr
103syn keyword basicFunction STICK stick Stick STRIG strig Strig
104syn keyword basicFunction TAB tab Tab TAN tan Tan
105syn keyword basicFunction UBOUND ubound Ubound VAL val Val
106syn keyword basicFunction VALPTR valptr Valptr VALSEG valseg Valseg
107syn keyword basicFunction VARPTR varptr Varptr VARSEG varseg Varseg
108syn keyword basicFunction CHR$ Chr$ chr$ COMMAND$ command$ Command$
109syn keyword basicFunction DATE$ date$ Date$ ENVIRON$ environ$ Environ$
110syn keyword basicFunction ERDEV$ erdev$ Erdev$ HEX$ hex$ Hex$
111syn keyword basicFunction INKEY$ inkey$ Inkey$ INPUT$ input$ Input$
112syn keyword basicFunction IOCTL$ ioctl$ Ioctl$ LCASES$ lcases$ Lcases$
113syn keyword basicFunction LAFT$ laft$ Laft$ LTRIM$ ltrim$ Ltrim$
114syn keyword basicFunction MID$ mid$ Mid$ MKDMBF$ mkdmbf$ Mkdmbf$
115syn keyword basicFunction MKD$ mkd$ Mkd$ MKI$ mki$ Mki$
116syn keyword basicFunction MKL$ mkl$ Mkl$ MKSMBF$ mksmbf$ Mksmbf$
117syn keyword basicFunction MKS$ mks$ Mks$ OCT$ oct$ Oct$
118syn keyword basicFunction RIGHT$ right$ Right$ RTRIM$ rtrim$ Rtrim$
119syn keyword basicFunction SPACE$ space$ Space$ STR$ str$ Str$
120syn keyword basicFunction STRING$ string$ String$ TIME$ time$ Time$
121syn keyword basicFunction UCASE$ ucase$ Ucase$ VARPTR$ varptr$ Varptr$
122syn keyword basicTodo contained TODO
123
124"integer number, or floating point number without a dot.
125syn match basicNumber "\<\d\+\>"
126"floating point number, with dot
127syn match basicNumber "\<\d\+\.\d*\>"
128"floating point number, starting with a dot
129syn match basicNumber "\.\d\+\>"
130
131" String and Character contstants
132syn match basicSpecial contained "\\\d\d\d\|\\."
133syn region basicString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=basicSpecial
134
135syn region basicComment start="REM" end="$" contains=basicTodo
136syn region basicComment start="^[ \t]*'" end="$" contains=basicTodo
137syn region basicLineNumber start="^\d" end="\s"
138syn match basicTypeSpecifier "[a-zA-Z0-9][\$%&!#]"ms=s+1
139" Used with OPEN statement
140syn match basicFilenumber "#\d\+"
141"syn sync ccomment basicComment
142" syn match basicMathsOperator "[<>+\*^/\\=-]"
143syn match basicMathsOperator "-\|=\|[:<>+\*^/\\]\|AND\|OR"
144
145" Define the default highlighting.
146" For version 5.7 and earlier: only when not done already
147" For version 5.8 and later: only when an item doesn't have highlighting yet
148if version >= 508 || !exists("did_basic_syntax_inits")
149 if version < 508
150 let did_basic_syntax_inits = 1
151 command -nargs=+ HiLink hi link <args>
152 else
153 command -nargs=+ HiLink hi def link <args>
154 endif
155
156 HiLink basicLabel Label
157 HiLink basicConditional Conditional
158 HiLink basicRepeat Repeat
159 HiLink basicLineNumber Comment
160 HiLink basicNumber Number
161 HiLink basicError Error
162 HiLink basicStatement Statement
163 HiLink basicString String
164 HiLink basicComment Comment
165 HiLink basicSpecial Special
166 HiLink basicTodo Todo
167 HiLink basicFunction Identifier
168 HiLink basicTypeSpecifier Type
169 HiLink basicFilenumber basicTypeSpecifier
170 "hi basicMathsOperator term=bold cterm=bold gui=bold
171
172 delcommand HiLink
173endif
174
175let b:current_syntax = "basic"
176
Bram Moolenaarb6b046b2011-12-30 13:11:27 +0100177let &cpo = s:cpo_save
178unlet s:cpo_save
Bram Moolenaar071d4272004-06-13 20:20:40 +0000179" vim: ts=8