27459
|
1 " Vim syntax file
|
|
2 " Language: QB64
|
|
3 " Maintainer: Doug Kearns <dougkearns@gmail.com>
|
|
4 " Last Change: 2022 Jan 21
|
|
5
|
|
6 " Prelude {{{1
|
|
7 if exists("b:current_syntax")
|
|
8 finish
|
|
9 endif
|
|
10
|
|
11 let s:cpo_save = &cpo
|
|
12 set cpo&vim
|
|
13
|
|
14 " syn iskeyword set after sourcing of basic.vim
|
|
15
|
|
16 syn case ignore
|
|
17
|
|
18 let s:prefix = search('\c^\s*$NOPREFIX\>', 'n') ? '_\=' : '_'
|
|
19
|
|
20 " Statements {{{1
|
|
21
|
|
22 let s:statements =<< trim EOL " {{{2
|
|
23 acceptfiledrop
|
|
24 allowfullscreen
|
|
25 assert
|
|
26 console
|
|
27 consolecursor
|
|
28 consolefont
|
|
29 consoletitle
|
|
30 continue
|
|
31 copypalette
|
|
32 define
|
|
33 delay
|
|
34 depthbuffer
|
|
35 displayorder
|
|
36 dontblend
|
|
37 echo
|
|
38 exit\s\+\%(select\|case\)
|
|
39 finishdrop
|
|
40 freefont
|
|
41 freeimage
|
|
42 icon
|
|
43 keyclear
|
|
44 limit
|
|
45 maptriangle
|
|
46 memcopy
|
|
47 memfill
|
|
48 memfree
|
|
49 memput
|
|
50 mousehide
|
|
51 mousemove
|
|
52 mouseshow
|
|
53 printimage
|
|
54 printstring
|
|
55 putimage
|
|
56 screenclick
|
|
57 screenhide
|
|
58 screenmove
|
|
59 screenprint
|
|
60 screenshow
|
|
61 setalpha
|
|
62 sndbal
|
|
63 sndclose
|
|
64 sndlimit
|
|
65 sndloop
|
|
66 sndpause
|
|
67 sndplay
|
|
68 sndplaycopy
|
|
69 sndplayfile
|
|
70 sndraw
|
|
71 sndrawdone
|
|
72 sndsetpos
|
|
73 sndstop
|
|
74 sndvol
|
|
75 title
|
|
76 EOL
|
|
77 " }}}
|
|
78
|
|
79 for s in s:statements
|
|
80 exe 'syn match qb64Statement "\<' .. s:prefix .. s .. '\>" contained contains=qb64Underscore'
|
|
81 endfor
|
|
82
|
|
83 " Functions {{{1
|
|
84
|
|
85 let s:functions =<< trim EOL " {{{2
|
|
86 acos
|
|
87 acosh
|
|
88 alpha
|
|
89 alpha32
|
|
90 arccot
|
|
91 arccsc
|
|
92 arcsec
|
|
93 asin
|
|
94 asinh
|
|
95 atan2
|
|
96 atanh
|
|
97 axis
|
|
98 backgroundcolor
|
|
99 blue
|
|
100 blue32
|
|
101 button
|
|
102 buttonchange
|
|
103 ceil
|
|
104 cinp
|
|
105 commandcount
|
|
106 connected
|
|
107 connectionaddress
|
|
108 connectionaddress$
|
|
109 consoleinput
|
|
110 copyimage
|
|
111 cot
|
|
112 coth
|
|
113 cosh
|
|
114 csc
|
|
115 csch
|
|
116 cv
|
|
117 cwd$
|
|
118 d2g
|
|
119 d2r
|
|
120 defaultcolor
|
|
121 deflate$
|
|
122 desktopheight
|
|
123 desktopwidth
|
|
124 device$
|
|
125 deviceinput
|
|
126 devices
|
|
127 dir$
|
|
128 direxists
|
|
129 droppedfile
|
|
130 droppedfile$
|
|
131 errorline
|
|
132 errormessage$
|
|
133 exit
|
|
134 fileexists
|
|
135 fontheight
|
|
136 fontwidth
|
|
137 freetimer
|
|
138 g2d
|
|
139 g2r
|
|
140 green
|
|
141 green32
|
|
142 height
|
|
143 hypot
|
|
144 inclerrorfile$
|
|
145 inclerrorline
|
|
146 inflate$
|
|
147 instrrev
|
|
148 keyhit
|
|
149 keydown
|
|
150 lastaxis
|
|
151 lastbutton
|
|
152 lastwheel
|
|
153 loadfont
|
|
154 loadimage
|
|
155 mem
|
|
156 memelement
|
|
157 memexists
|
|
158 memimage
|
|
159 memnew
|
|
160 memsound
|
|
161 mk$
|
|
162 mousebutton
|
|
163 mouseinput
|
|
164 mousemovementx
|
|
165 mousemovementy
|
|
166 mousepipeopen
|
|
167 mousewheel
|
|
168 mousex
|
|
169 mousey
|
|
170 newimage
|
|
171 offset
|
|
172 openclient
|
|
173 os$
|
|
174 pi
|
|
175 pixelsize
|
|
176 printwidth
|
|
177 r2d
|
|
178 r2g
|
|
179 red
|
|
180 red32
|
|
181 readbit
|
|
182 resetbit
|
|
183 resizeheight
|
|
184 resizewidth
|
|
185 rgb
|
|
186 rgb32
|
|
187 rgba
|
|
188 rgba32
|
|
189 round
|
|
190 sec
|
|
191 sech
|
|
192 screenexists
|
|
193 screenimage
|
|
194 screenx
|
|
195 screeny
|
|
196 setbit
|
|
197 shellhide
|
|
198 shl
|
|
199 shr
|
|
200 sinh
|
|
201 sndcopy
|
|
202 sndgetpos
|
|
203 sndlen
|
|
204 sndopen
|
|
205 sndopenraw
|
|
206 sndpaused
|
|
207 sndplaying
|
|
208 sndrate
|
|
209 sndrawlen
|
|
210 startdir$
|
|
211 strcmp
|
|
212 stricmp
|
|
213 tanh
|
|
214 title$
|
|
215 togglebit
|
|
216 totaldroppedfiles
|
|
217 trim$
|
|
218 wheel
|
|
219 width
|
|
220 windowhandle
|
|
221 windowhasfocus
|
|
222 EOL
|
|
223 " }}}
|
|
224
|
|
225 for f in s:functions
|
|
226 exe 'syn match qb64Function "\<' .. s:prefix .. f .. '\>" contains=qb64Underscore'
|
|
227 endfor
|
|
228
|
|
229 " Functions and statements (same name) {{{1
|
|
230
|
|
231 let s:common =<< trim EOL " {{{2
|
|
232 autodisplay
|
|
233 blend
|
|
234 blink
|
|
235 capslock
|
|
236 clearcolor
|
|
237 clipboard$
|
|
238 clipboardimage
|
|
239 controlchr
|
|
240 dest
|
|
241 display
|
|
242 font
|
|
243 fullscreen
|
|
244 mapunicode
|
|
245 memget
|
|
246 numlock
|
|
247 palettecolor
|
|
248 printmode
|
|
249 resize
|
|
250 screenicon
|
|
251 scrolllock
|
|
252 source
|
|
253 EOL
|
|
254 " }}}
|
|
255
|
|
256 for c in s:common
|
|
257 exe 'syn match qb64Statement "\<' .. s:prefix .. c .. '\>" contains=qb64Underscore contained'
|
|
258 exe 'syn match qb64Function "\<' .. s:prefix .. c .. '\>" contains=qb64Underscore'
|
|
259 endfor
|
|
260
|
|
261 " Keywords {{{1
|
|
262
|
|
263 " Non-prefixed keywords {{{2
|
|
264 " TIMER FREE
|
|
265 " _DEPTH_BUFFER LOCK
|
|
266 syn keyword qb64Keyword free lock
|
|
267
|
|
268 let s:keywords =<< trim EOL " {{{2
|
|
269 all
|
|
270 anticlockwise
|
|
271 behind
|
|
272 clear
|
|
273 clip
|
|
274 console
|
|
275 dontwait
|
|
276 explicit
|
|
277 explicitarray
|
|
278 fillbackground
|
|
279 hardware
|
|
280 hardware1
|
|
281 hide
|
|
282 keepbackground
|
|
283 middle
|
|
284 none
|
|
285 off
|
|
286 only
|
|
287 onlybackground
|
|
288 ontop
|
|
289 openconnection
|
|
290 openhost
|
|
291 preserve
|
|
292 seamless
|
|
293 smooth
|
|
294 smoothshrunk
|
|
295 smoothstretched
|
|
296 software
|
|
297 squarepixels
|
|
298 stretch
|
|
299 toggle
|
|
300 EOL
|
|
301 " }}}
|
|
302
|
|
303 for k in s:keywords
|
|
304 exe 'syn match qb64Keyword "\<' .. s:prefix .. k .. '\>" contains=qb64Underscore'
|
|
305 endfor
|
|
306
|
|
307 syn match qb64Underscore "\<_" contained conceal transparent
|
|
308
|
|
309 " Source QuickBASIC syntax {{{1
|
|
310 runtime! syntax/basic.vim
|
|
311
|
|
312 " add after the BASIC syntax file is sourced so cluster already exists
|
|
313 syn cluster basicStatements add=qb64Statement,qb64Metacommand,qb64IfMetacommand
|
|
314 syn cluster basicLineIdentifier add=qb64LineLabel
|
|
315 syn cluster qb64NotTop contains=@basicNotTop,qb64Metavariable
|
|
316
|
|
317 syn iskeyword @,48-57,.,_,!,#,$,%,&,`
|
|
318
|
|
319 " Unsupported QuickBASIC features {{{1
|
|
320 " TODO: add linux only missing features
|
|
321 syn keyword qb64Unsupported alias any byval calls cdecl erdev erdev$ fileattr
|
|
322 syn keyword qb64Unsupported fre ioctl ioctl$ pen play setmem signal uevent
|
|
323 syn keyword qb64Unsupported tron troff
|
|
324 syn match qb64Unsupported "\<declare\%(\s\+\%(sub\|function\)\>\)\@="
|
|
325 syn match qb64Unsupported "\<\%(date\|time\)$\ze\s*=" " statements only
|
|
326 syn match qb64Unsupported "\<def\zs\s\+FN"
|
|
327 syn match qb64Unsupported "\<\%(exit\|end\)\s\+def\>"
|
|
328 syn match qb64Unsupported "\<width\s\+lprint\>"
|
|
329
|
|
330 " Types {{{1
|
|
331 syn keyword qb64Type _BIT _BYTE _FLOAT _INTEGER64 _MEM _OFFSET _UNSIGNED
|
|
332
|
|
333 " Type suffixes {{{1
|
|
334 if exists("basic_type_suffixes")
|
|
335 " TODO: handle leading word boundary and __+ prefix
|
|
336 syn match qb64TypeSuffix "\%(\a[[:alnum:]._]*\)\@<=\~\=`\%(\d\+\)\="
|
|
337 syn match qb64TypeSuffix "\%(\a[[:alnum:]._]*\)\@<=\~\=\%(%\|%%\|&\|&&\|%&\)"
|
|
338 syn match qb64TypeSuffix "\%(\a[[:alnum:]._]*\)\@<=\%(!\|##\|#\)"
|
|
339 syn match qb64TypeSuffix "\%(\a[[:alnum:]._]*\)\@<=$\%(\d\+\)\="
|
|
340 endif
|
|
341
|
|
342 " Numbers {{{1
|
|
343
|
|
344 " Integers
|
|
345 syn match qb64Number "-\=&b[01]\+&\>\="
|
|
346
|
|
347 syn match qb64Number "-\=\<[01]\~\=`\>"
|
|
348 syn match qb64Number "-\=\<\d\+`\d\+\>"
|
|
349
|
|
350 syn match qb64Number "-\=\<\d\+\%(%%\|&&\|%&\)\>"
|
|
351 syn match qb64Number "\<\d\+\~\%(%%\|&&\|%&\)\>"
|
|
352
|
|
353 syn match qb64Number "-\=\<&b[01]\+\%(%%\|&&\|%&\)\>"
|
|
354 syn match qb64Number "\<&b[01]\+\~\%(%%\|&&\|%&\)\>"
|
|
355
|
|
356 syn match qb64Number "-\=\<&o\=\o\+\%(%%\|&&\|%&\)\>"
|
|
357 syn match qb64Number "\<&o\=\o\+\~\%(%%\|&&\|%&\)\>"
|
|
358
|
|
359 syn match qb64Number "-\=\<&h\x\+\%(%%\|&&\|%&\)\>"
|
|
360 syn match qb64Number "\<&h\x\+\~\%(%%\|&&\|%&\)\>"
|
|
361
|
|
362 " Floats
|
|
363 syn match qb64Float "-\=\<\d\+\.\=\d*##\>"
|
|
364 syn match qb64Float "-\=\<\.\d\+##\>"
|
|
365
|
|
366 " Line numbers and labels {{{1
|
|
367 syn match qb64LineLabel "\%(_\{2,}\)\=\a[[:alnum:]._]*[[:alnum:]]\ze\s*:" nextgroup=@basicStatements skipwhite contained
|
|
368
|
|
369 " Metacommands {{{1
|
|
370 syn match qb64Metacommand contained "$NOPREFIX\>"
|
|
371 syn match qb64Metacommand contained "$ASSERTS\%(:CONSOLE\)\=\>"
|
|
372 syn match qb64Metacommand contained "$CHECKING:\%(ON\|OFF\)\>"
|
|
373 syn match qb64Metacommand contained "$COLOR:\%(0\|32\)\>"
|
|
374 syn match qb64Metacommand contained "$CONSOLE\%(:ONLY\)\=\>"
|
|
375 syn match qb64Metacommand contained "$EXEICON\s*:\s*'[^']\+'"
|
|
376 syn match qb64Metacommand contained "$ERROR\>"
|
|
377 syn match qb64Metacommand contained "$LET\>"
|
|
378 syn match qb64Metacommand contained "$RESIZE:\%(ON\|OFF\|STRETCH\|SMOOTH\)\>"
|
|
379 syn match qb64Metacommand contained "$SCREEN\%(HIDE\|SHOW\)\>"
|
|
380 syn match qb64Metacommand contained "$VERSIONINFO\s*:.*"
|
|
381 syn match qb64Metacommand contained "$VIRTUALKEYBOARD:\%(ON\|OFF\)\>"
|
|
382
|
|
383 syn region qb64IfMetacommand contained matchgroup=qb64Metacommand start="$\%(IF\|ELSEIF\)\>" end="\<THEN\>" oneline transparent contains=qb64Metavariable
|
|
384 syn match qb64Metacommand contained "$\%(ELSE\|END\s*IF\)\>"
|
|
385
|
|
386 syn keyword qb64Metavariable contained defined undefined
|
|
387 syn keyword qb64Metavariable contained windows win linux mac maxosx
|
|
388 syn keyword qb64Metavariable contained 32bit 64bit version
|
|
389
|
|
390 " Default Highlighting {{{1
|
|
391 hi def link qb64Float basicFloat
|
|
392 hi def link qb64Function Function
|
|
393 hi def link qb64Keyword Keyword
|
|
394 hi def link qb64LineLabel basicLineLabel
|
|
395 hi def link qb64Metacommand PreProc
|
|
396 hi def link qb64Metavariable Identifier
|
|
397 hi def link qb64Number basicNumber
|
|
398 hi def link qb64Statement Statement
|
|
399 hi def link qb64TypeSuffix basicTypeSuffix
|
|
400 hi def link qb64Type Type
|
|
401 hi def link qb64Unsupported Error
|
|
402
|
|
403 " Postscript {{{1
|
|
404 let b:current_syntax = "qb64"
|
|
405
|
|
406 let &cpo = s:cpo_save
|
|
407 unlet s:cpo_save
|
|
408
|
|
409 " vim: nowrap sw=2 sts=2 ts=8 noet fdm=marker:
|