mirror of
https://github.com/neovim/neovim.git
synced 2024-12-29 14:41:06 -07:00
410 lines
7.8 KiB
VimL
410 lines
7.8 KiB
VimL
|
" Vim syntax file
|
||
|
" Language: QB64
|
||
|
" Maintainer: Doug Kearns <dougkearns@gmail.com>
|
||
|
" Last Change: 2022 Jan 21
|
||
|
|
||
|
" Prelude {{{1
|
||
|
if exists("b:current_syntax")
|
||
|
finish
|
||
|
endif
|
||
|
|
||
|
let s:cpo_save = &cpo
|
||
|
set cpo&vim
|
||
|
|
||
|
" syn iskeyword set after sourcing of basic.vim
|
||
|
|
||
|
syn case ignore
|
||
|
|
||
|
let s:prefix = search('\c^\s*$NOPREFIX\>', 'n') ? '_\=' : '_'
|
||
|
|
||
|
" Statements {{{1
|
||
|
|
||
|
let s:statements =<< trim EOL " {{{2
|
||
|
acceptfiledrop
|
||
|
allowfullscreen
|
||
|
assert
|
||
|
console
|
||
|
consolecursor
|
||
|
consolefont
|
||
|
consoletitle
|
||
|
continue
|
||
|
copypalette
|
||
|
define
|
||
|
delay
|
||
|
depthbuffer
|
||
|
displayorder
|
||
|
dontblend
|
||
|
echo
|
||
|
exit\s\+\%(select\|case\)
|
||
|
finishdrop
|
||
|
freefont
|
||
|
freeimage
|
||
|
icon
|
||
|
keyclear
|
||
|
limit
|
||
|
maptriangle
|
||
|
memcopy
|
||
|
memfill
|
||
|
memfree
|
||
|
memput
|
||
|
mousehide
|
||
|
mousemove
|
||
|
mouseshow
|
||
|
printimage
|
||
|
printstring
|
||
|
putimage
|
||
|
screenclick
|
||
|
screenhide
|
||
|
screenmove
|
||
|
screenprint
|
||
|
screenshow
|
||
|
setalpha
|
||
|
sndbal
|
||
|
sndclose
|
||
|
sndlimit
|
||
|
sndloop
|
||
|
sndpause
|
||
|
sndplay
|
||
|
sndplaycopy
|
||
|
sndplayfile
|
||
|
sndraw
|
||
|
sndrawdone
|
||
|
sndsetpos
|
||
|
sndstop
|
||
|
sndvol
|
||
|
title
|
||
|
EOL
|
||
|
" }}}
|
||
|
|
||
|
for s in s:statements
|
||
|
exe 'syn match qb64Statement "\<' .. s:prefix .. s .. '\>" contained contains=qb64Underscore'
|
||
|
endfor
|
||
|
|
||
|
" Functions {{{1
|
||
|
|
||
|
let s:functions =<< trim EOL " {{{2
|
||
|
acos
|
||
|
acosh
|
||
|
alpha
|
||
|
alpha32
|
||
|
arccot
|
||
|
arccsc
|
||
|
arcsec
|
||
|
asin
|
||
|
asinh
|
||
|
atan2
|
||
|
atanh
|
||
|
axis
|
||
|
backgroundcolor
|
||
|
blue
|
||
|
blue32
|
||
|
button
|
||
|
buttonchange
|
||
|
ceil
|
||
|
cinp
|
||
|
commandcount
|
||
|
connected
|
||
|
connectionaddress
|
||
|
connectionaddress$
|
||
|
consoleinput
|
||
|
copyimage
|
||
|
cot
|
||
|
coth
|
||
|
cosh
|
||
|
csc
|
||
|
csch
|
||
|
cv
|
||
|
cwd$
|
||
|
d2g
|
||
|
d2r
|
||
|
defaultcolor
|
||
|
deflate$
|
||
|
desktopheight
|
||
|
desktopwidth
|
||
|
device$
|
||
|
deviceinput
|
||
|
devices
|
||
|
dir$
|
||
|
direxists
|
||
|
droppedfile
|
||
|
droppedfile$
|
||
|
errorline
|
||
|
errormessage$
|
||
|
exit
|
||
|
fileexists
|
||
|
fontheight
|
||
|
fontwidth
|
||
|
freetimer
|
||
|
g2d
|
||
|
g2r
|
||
|
green
|
||
|
green32
|
||
|
height
|
||
|
hypot
|
||
|
inclerrorfile$
|
||
|
inclerrorline
|
||
|
inflate$
|
||
|
instrrev
|
||
|
keyhit
|
||
|
keydown
|
||
|
lastaxis
|
||
|
lastbutton
|
||
|
lastwheel
|
||
|
loadfont
|
||
|
loadimage
|
||
|
mem
|
||
|
memelement
|
||
|
memexists
|
||
|
memimage
|
||
|
memnew
|
||
|
memsound
|
||
|
mk$
|
||
|
mousebutton
|
||
|
mouseinput
|
||
|
mousemovementx
|
||
|
mousemovementy
|
||
|
mousepipeopen
|
||
|
mousewheel
|
||
|
mousex
|
||
|
mousey
|
||
|
newimage
|
||
|
offset
|
||
|
openclient
|
||
|
os$
|
||
|
pi
|
||
|
pixelsize
|
||
|
printwidth
|
||
|
r2d
|
||
|
r2g
|
||
|
red
|
||
|
red32
|
||
|
readbit
|
||
|
resetbit
|
||
|
resizeheight
|
||
|
resizewidth
|
||
|
rgb
|
||
|
rgb32
|
||
|
rgba
|
||
|
rgba32
|
||
|
round
|
||
|
sec
|
||
|
sech
|
||
|
screenexists
|
||
|
screenimage
|
||
|
screenx
|
||
|
screeny
|
||
|
setbit
|
||
|
shellhide
|
||
|
shl
|
||
|
shr
|
||
|
sinh
|
||
|
sndcopy
|
||
|
sndgetpos
|
||
|
sndlen
|
||
|
sndopen
|
||
|
sndopenraw
|
||
|
sndpaused
|
||
|
sndplaying
|
||
|
sndrate
|
||
|
sndrawlen
|
||
|
startdir$
|
||
|
strcmp
|
||
|
stricmp
|
||
|
tanh
|
||
|
title$
|
||
|
togglebit
|
||
|
totaldroppedfiles
|
||
|
trim$
|
||
|
wheel
|
||
|
width
|
||
|
windowhandle
|
||
|
windowhasfocus
|
||
|
EOL
|
||
|
" }}}
|
||
|
|
||
|
for f in s:functions
|
||
|
exe 'syn match qb64Function "\<' .. s:prefix .. f .. '\>" contains=qb64Underscore'
|
||
|
endfor
|
||
|
|
||
|
" Functions and statements (same name) {{{1
|
||
|
|
||
|
let s:common =<< trim EOL " {{{2
|
||
|
autodisplay
|
||
|
blend
|
||
|
blink
|
||
|
capslock
|
||
|
clearcolor
|
||
|
clipboard$
|
||
|
clipboardimage
|
||
|
controlchr
|
||
|
dest
|
||
|
display
|
||
|
font
|
||
|
fullscreen
|
||
|
mapunicode
|
||
|
memget
|
||
|
numlock
|
||
|
palettecolor
|
||
|
printmode
|
||
|
resize
|
||
|
screenicon
|
||
|
scrolllock
|
||
|
source
|
||
|
EOL
|
||
|
" }}}
|
||
|
|
||
|
for c in s:common
|
||
|
exe 'syn match qb64Statement "\<' .. s:prefix .. c .. '\>" contains=qb64Underscore contained'
|
||
|
exe 'syn match qb64Function "\<' .. s:prefix .. c .. '\>" contains=qb64Underscore'
|
||
|
endfor
|
||
|
|
||
|
" Keywords {{{1
|
||
|
|
||
|
" Non-prefixed keywords {{{2
|
||
|
" TIMER FREE
|
||
|
" _DEPTH_BUFFER LOCK
|
||
|
syn keyword qb64Keyword free lock
|
||
|
|
||
|
let s:keywords =<< trim EOL " {{{2
|
||
|
all
|
||
|
anticlockwise
|
||
|
behind
|
||
|
clear
|
||
|
clip
|
||
|
console
|
||
|
dontwait
|
||
|
explicit
|
||
|
explicitarray
|
||
|
fillbackground
|
||
|
hardware
|
||
|
hardware1
|
||
|
hide
|
||
|
keepbackground
|
||
|
middle
|
||
|
none
|
||
|
off
|
||
|
only
|
||
|
onlybackground
|
||
|
ontop
|
||
|
openconnection
|
||
|
openhost
|
||
|
preserve
|
||
|
seamless
|
||
|
smooth
|
||
|
smoothshrunk
|
||
|
smoothstretched
|
||
|
software
|
||
|
squarepixels
|
||
|
stretch
|
||
|
toggle
|
||
|
EOL
|
||
|
" }}}
|
||
|
|
||
|
for k in s:keywords
|
||
|
exe 'syn match qb64Keyword "\<' .. s:prefix .. k .. '\>" contains=qb64Underscore'
|
||
|
endfor
|
||
|
|
||
|
syn match qb64Underscore "\<_" contained conceal transparent
|
||
|
|
||
|
" Source QuickBASIC syntax {{{1
|
||
|
runtime! syntax/basic.vim
|
||
|
|
||
|
" add after the BASIC syntax file is sourced so cluster already exists
|
||
|
syn cluster basicStatements add=qb64Statement,qb64Metacommand,qb64IfMetacommand
|
||
|
syn cluster basicLineIdentifier add=qb64LineLabel
|
||
|
syn cluster qb64NotTop contains=@basicNotTop,qb64Metavariable
|
||
|
|
||
|
syn iskeyword @,48-57,.,_,!,#,$,%,&,`
|
||
|
|
||
|
" Unsupported QuickBASIC features {{{1
|
||
|
" TODO: add linux only missing features
|
||
|
syn keyword qb64Unsupported alias any byval calls cdecl erdev erdev$ fileattr
|
||
|
syn keyword qb64Unsupported fre ioctl ioctl$ pen play setmem signal uevent
|
||
|
syn keyword qb64Unsupported tron troff
|
||
|
syn match qb64Unsupported "\<declare\%(\s\+\%(sub\|function\)\>\)\@="
|
||
|
syn match qb64Unsupported "\<\%(date\|time\)$\ze\s*=" " statements only
|
||
|
syn match qb64Unsupported "\<def\zs\s\+FN"
|
||
|
syn match qb64Unsupported "\<\%(exit\|end\)\s\+def\>"
|
||
|
syn match qb64Unsupported "\<width\s\+lprint\>"
|
||
|
|
||
|
" Types {{{1
|
||
|
syn keyword qb64Type _BIT _BYTE _FLOAT _INTEGER64 _MEM _OFFSET _UNSIGNED
|
||
|
|
||
|
" Type suffixes {{{1
|
||
|
if exists("basic_type_suffixes")
|
||
|
" TODO: handle leading word boundary and __+ prefix
|
||
|
syn match qb64TypeSuffix "\%(\a[[:alnum:]._]*\)\@<=\~\=`\%(\d\+\)\="
|
||
|
syn match qb64TypeSuffix "\%(\a[[:alnum:]._]*\)\@<=\~\=\%(%\|%%\|&\|&&\|%&\)"
|
||
|
syn match qb64TypeSuffix "\%(\a[[:alnum:]._]*\)\@<=\%(!\|##\|#\)"
|
||
|
syn match qb64TypeSuffix "\%(\a[[:alnum:]._]*\)\@<=$\%(\d\+\)\="
|
||
|
endif
|
||
|
|
||
|
" Numbers {{{1
|
||
|
|
||
|
" Integers
|
||
|
syn match qb64Number "-\=&b[01]\+&\>\="
|
||
|
|
||
|
syn match qb64Number "-\=\<[01]\~\=`\>"
|
||
|
syn match qb64Number "-\=\<\d\+`\d\+\>"
|
||
|
|
||
|
syn match qb64Number "-\=\<\d\+\%(%%\|&&\|%&\)\>"
|
||
|
syn match qb64Number "\<\d\+\~\%(%%\|&&\|%&\)\>"
|
||
|
|
||
|
syn match qb64Number "-\=\<&b[01]\+\%(%%\|&&\|%&\)\>"
|
||
|
syn match qb64Number "\<&b[01]\+\~\%(%%\|&&\|%&\)\>"
|
||
|
|
||
|
syn match qb64Number "-\=\<&o\=\o\+\%(%%\|&&\|%&\)\>"
|
||
|
syn match qb64Number "\<&o\=\o\+\~\%(%%\|&&\|%&\)\>"
|
||
|
|
||
|
syn match qb64Number "-\=\<&h\x\+\%(%%\|&&\|%&\)\>"
|
||
|
syn match qb64Number "\<&h\x\+\~\%(%%\|&&\|%&\)\>"
|
||
|
|
||
|
" Floats
|
||
|
syn match qb64Float "-\=\<\d\+\.\=\d*##\>"
|
||
|
syn match qb64Float "-\=\<\.\d\+##\>"
|
||
|
|
||
|
" Line numbers and labels {{{1
|
||
|
syn match qb64LineLabel "\%(_\{2,}\)\=\a[[:alnum:]._]*[[:alnum:]]\ze\s*:" nextgroup=@basicStatements skipwhite contained
|
||
|
|
||
|
" Metacommands {{{1
|
||
|
syn match qb64Metacommand contained "$NOPREFIX\>"
|
||
|
syn match qb64Metacommand contained "$ASSERTS\%(:CONSOLE\)\=\>"
|
||
|
syn match qb64Metacommand contained "$CHECKING:\%(ON\|OFF\)\>"
|
||
|
syn match qb64Metacommand contained "$COLOR:\%(0\|32\)\>"
|
||
|
syn match qb64Metacommand contained "$CONSOLE\%(:ONLY\)\=\>"
|
||
|
syn match qb64Metacommand contained "$EXEICON\s*:\s*'[^']\+'"
|
||
|
syn match qb64Metacommand contained "$ERROR\>"
|
||
|
syn match qb64Metacommand contained "$LET\>"
|
||
|
syn match qb64Metacommand contained "$RESIZE:\%(ON\|OFF\|STRETCH\|SMOOTH\)\>"
|
||
|
syn match qb64Metacommand contained "$SCREEN\%(HIDE\|SHOW\)\>"
|
||
|
syn match qb64Metacommand contained "$VERSIONINFO\s*:.*"
|
||
|
syn match qb64Metacommand contained "$VIRTUALKEYBOARD:\%(ON\|OFF\)\>"
|
||
|
|
||
|
syn region qb64IfMetacommand contained matchgroup=qb64Metacommand start="$\%(IF\|ELSEIF\)\>" end="\<THEN\>" oneline transparent contains=qb64Metavariable
|
||
|
syn match qb64Metacommand contained "$\%(ELSE\|END\s*IF\)\>"
|
||
|
|
||
|
syn keyword qb64Metavariable contained defined undefined
|
||
|
syn keyword qb64Metavariable contained windows win linux mac maxosx
|
||
|
syn keyword qb64Metavariable contained 32bit 64bit version
|
||
|
|
||
|
" Default Highlighting {{{1
|
||
|
hi def link qb64Float basicFloat
|
||
|
hi def link qb64Function Function
|
||
|
hi def link qb64Keyword Keyword
|
||
|
hi def link qb64LineLabel basicLineLabel
|
||
|
hi def link qb64Metacommand PreProc
|
||
|
hi def link qb64Metavariable Identifier
|
||
|
hi def link qb64Number basicNumber
|
||
|
hi def link qb64Statement Statement
|
||
|
hi def link qb64TypeSuffix basicTypeSuffix
|
||
|
hi def link qb64Type Type
|
||
|
hi def link qb64Unsupported Error
|
||
|
|
||
|
" Postscript {{{1
|
||
|
let b:current_syntax = "qb64"
|
||
|
|
||
|
let &cpo = s:cpo_save
|
||
|
unlet s:cpo_save
|
||
|
|
||
|
" vim: nowrap sw=2 sts=2 ts=8 noet fdm=marker:
|