mirror of
https://github.com/neovim/neovim.git
synced 2024-12-19 10:45:16 -07:00
662681694b
Update runtime files
0d878b95d8
381 lines
9.2 KiB
VimL
381 lines
9.2 KiB
VimL
" Vim syntax file
|
|
" Language: BASIC (QuickBASIC 4.5)
|
|
" Maintainer: Doug Kearns <dougkearns@gmail.com>
|
|
" Previous Maintainer: Allan Kelly <allan@fruitloaf.co.uk>
|
|
" Contributors: Thilo Six
|
|
" Last Change: 2022 Jun 22
|
|
|
|
" First version based on Micro$soft QBASIC circa 1989, as documented in
|
|
" 'Learn BASIC Now' by Halvorson&Rygmyr. Microsoft Press 1989.
|
|
"
|
|
" Second version attempts to match Microsoft QuickBASIC 4.5 while keeping FreeBASIC
|
|
" (-lang qb) and QB64 (excluding extensions) in mind. -- DJK
|
|
|
|
" Prelude {{{1
|
|
if exists("b:current_syntax")
|
|
finish
|
|
endif
|
|
|
|
let s:cpo_save = &cpo
|
|
set cpo&vim
|
|
|
|
syn iskeyword @,48-57,.,!,#,%,&,$
|
|
syn case ignore
|
|
|
|
" Whitespace Errors {{{1
|
|
if exists("basic_space_errors")
|
|
if !exists("basic_no_trail_space_error")
|
|
syn match basicSpaceError display excludenl "\s\+$"
|
|
endif
|
|
if !exists("basic_no_tab_space_error")
|
|
syn match basicSpaceError display " \+\t"me=e-1
|
|
endif
|
|
endif
|
|
|
|
" Comment Errors {{{1
|
|
if !exists("basic_no_comment_errors")
|
|
syn match basicCommentError "\<REM\>.*"
|
|
endif
|
|
|
|
" Not Top Cluster {{{1
|
|
syn cluster basicNotTop contains=@basicLineIdentifier,basicDataString,basicDataSeparator,basicTodo
|
|
|
|
" Statements {{{1
|
|
|
|
syn cluster basicStatements contains=basicStatement,basicDataStatement,basicMetaRemStatement,basicPutStatement,basicRemStatement
|
|
|
|
let s:statements =<< trim EOL " {{{2
|
|
beep
|
|
bload
|
|
bsave
|
|
call
|
|
calls
|
|
case
|
|
chain
|
|
chdir
|
|
circle
|
|
clear
|
|
close
|
|
cls
|
|
color
|
|
com
|
|
common
|
|
const
|
|
declare
|
|
def
|
|
def\s\+seg
|
|
defdbl
|
|
defint
|
|
deflng
|
|
defsng
|
|
defstr
|
|
dim
|
|
do
|
|
draw
|
|
elseif
|
|
end
|
|
end\s\+\%(def\|function\|if\|select\|sub\|type\)
|
|
environ
|
|
erase
|
|
error
|
|
exit\s\+\%(def\|do\|for\|function\|sub\)
|
|
field
|
|
files
|
|
for
|
|
function
|
|
get
|
|
gosub
|
|
goto
|
|
if
|
|
input
|
|
ioctl
|
|
key
|
|
kill
|
|
let
|
|
line
|
|
line\s\+input
|
|
locate
|
|
lock
|
|
loop
|
|
lprint
|
|
lset
|
|
mkdir
|
|
name
|
|
next
|
|
on
|
|
on\s\+error
|
|
on\s\+uevent
|
|
open
|
|
open\s\+com
|
|
option
|
|
out
|
|
paint
|
|
palette
|
|
palette\s\+using
|
|
pcopy
|
|
pen
|
|
pmap
|
|
poke
|
|
preset
|
|
print
|
|
pset
|
|
randomize
|
|
read
|
|
redim
|
|
reset
|
|
restore
|
|
resume
|
|
return
|
|
rmdir
|
|
rset
|
|
run
|
|
select\s\+case
|
|
shared
|
|
shell
|
|
sleep
|
|
sound
|
|
static
|
|
stop
|
|
strig
|
|
sub
|
|
swap
|
|
system
|
|
troff
|
|
tron
|
|
type
|
|
uevent
|
|
unlock
|
|
using
|
|
view
|
|
view\s\+print
|
|
wait
|
|
wend
|
|
while
|
|
width
|
|
window
|
|
write
|
|
EOL
|
|
" }}}
|
|
|
|
for s in s:statements
|
|
exe 'syn match basicStatement "\<' .. s .. '\>" contained'
|
|
endfor
|
|
|
|
syn match basicStatement "\<\%(then\|else\)\>" nextgroup=@basicStatements skipwhite
|
|
|
|
" DATA Statement
|
|
syn match basicDataSeparator "," contained
|
|
syn region basicDataStatement matchgroup=basicStatement start="\<data\>" matchgroup=basicStatementSeparator end=":\|$" contained contains=basicDataSeparator,basicDataString,basicNumber,basicFloat,basicString
|
|
|
|
if !exists("basic_no_data_fold")
|
|
syn region basicMultilineData start="^\s*\<data\>.*\n\%(^\s*\<data\>\)\@=" end="^\s*\<data\>.*\n\%(^\s*\<data\>\)\@!" contains=basicDataStatement transparent fold keepend
|
|
endif
|
|
|
|
" PUT File I/O and Graphics statements - needs special handling for graphics
|
|
" action verbs
|
|
syn match basicPutAction "\<\%(pset\|preset\|and\|or\|xor\)\>" contained
|
|
syn region basicPutStatement matchgroup=basicStatement start="\<put\>" matchgroup=basicStatementSeparator end=":\|$" contained contains=basicKeyword,basicPutAction,basicFilenumber
|
|
|
|
" Keywords {{{1
|
|
let s:keywords =<< trim EOL " {{{2
|
|
absolute
|
|
access
|
|
alias
|
|
append
|
|
as
|
|
base
|
|
binary
|
|
byval
|
|
cdecl
|
|
com
|
|
def
|
|
do
|
|
for
|
|
function
|
|
gosub
|
|
goto
|
|
input
|
|
int86old
|
|
int86xold
|
|
interrupt
|
|
interruptx
|
|
is
|
|
key
|
|
len
|
|
list
|
|
local
|
|
lock
|
|
lprint
|
|
next
|
|
off
|
|
on
|
|
output
|
|
pen
|
|
play
|
|
random
|
|
read
|
|
resume
|
|
screen
|
|
seg
|
|
shared
|
|
signal
|
|
static
|
|
step
|
|
stop
|
|
strig
|
|
sub
|
|
timer
|
|
to
|
|
until
|
|
using
|
|
while
|
|
write
|
|
EOL
|
|
" }}}
|
|
|
|
for k in s:keywords
|
|
exe 'syn match basicKeyword "\<' .. k .. '\>"'
|
|
endfor
|
|
|
|
" Functions {{{1
|
|
syn keyword basicFunction abs asc atn cdbl chr$ cint clng command$ cos csng
|
|
syn keyword basicFunction csrlin cvd cvdmbf cvi cvl cvs cvsmbf environ$ eof
|
|
syn keyword basicFunction erdev erdev$ erl err exp fileattr fix fre freefile
|
|
syn keyword basicFunction hex$ inkey$ inp input$ instr int ioctl$ left$ lbound
|
|
syn keyword basicFunction lcase$ len loc lof log lpos ltrim$ mkd$ mkdmbf$ mki$
|
|
syn keyword basicFunction mkl$ mks$ mksmbf$ oct$ peek pen point pos right$ rnd
|
|
syn keyword basicFunction rtrim$ sadd setmem sgn sin space$ spc sqr stick str$
|
|
syn keyword basicFunction strig string$ tab tan ubound ucase$ val valptr
|
|
syn keyword basicFunction valseg varptr varptr$ varseg
|
|
|
|
" Functions and statements (same name) {{{1
|
|
syn match basicStatement "\<\%(date\$\|mid\$\|play\|screen\|seek\|time\$\|timer\)\>" contained
|
|
syn match basicFunction "\<\%(date\$\|mid\$\|play\|screen\|seek\|time\$\|timer\)\>"
|
|
|
|
" Types {{{1
|
|
syn keyword basicType integer long single double string any
|
|
|
|
" Strings {{{1
|
|
|
|
" Unquoted DATA strings - anything except [:,] and leading or trailing whitespace
|
|
" Needs lower priority than numbers
|
|
syn match basicDataString "[^[:space:],:]\+\%(\s\+[^[:space:],:]\+\)*" contained
|
|
|
|
syn region basicString start=+"+ end=+"+ oneline
|
|
|
|
" Booleans {{{1
|
|
if exists("basic_booleans")
|
|
syn keyword basicBoolean true false
|
|
endif
|
|
|
|
" Numbers {{{1
|
|
|
|
" Integers
|
|
syn match basicNumber "-\=&o\=\o\+[%&]\=\>"
|
|
syn match basicNumber "-\=&h\x\+[%&]\=\>"
|
|
syn match basicNumber "-\=\<\d\+[%&]\=\>"
|
|
|
|
" Floats
|
|
syn match basicFloat "-\=\<\d\+\.\=\d*\%(\%([ed][+-]\=\d*\)\|[!#]\)\=\>"
|
|
syn match basicFloat "-\=\<\.\d\+\%(\%([ed][+-]\=\d*\)\|[!#]\)\=\>"
|
|
|
|
" Statement anchors {{{1
|
|
syn match basicLineStart "^" nextgroup=@basicStatements,@basicLineIdentifier skipwhite
|
|
syn match basicStatementSeparator ":" nextgroup=@basicStatements skipwhite
|
|
|
|
" Line numbers and labels {{{1
|
|
|
|
" QuickBASIC limits these to 65,529 and 40 chars respectively
|
|
syn match basicLineNumber "\d\+" nextgroup=@basicStatements skipwhite contained
|
|
syn match basicLineLabel "\a[[:alnum:]]*\ze\s*:" nextgroup=@basicStatements skipwhite contained
|
|
|
|
syn cluster basicLineIdentifier contains=basicLineNumber,basicLineLabel
|
|
|
|
" Line Continuation {{{1
|
|
syn match basicLineContinuation "\s*\zs_\ze\s*$"
|
|
|
|
" Type suffixes {{{1
|
|
if exists("basic_type_suffixes")
|
|
syn match basicTypeSuffix "\a[[:alnum:].]*\zs[$%&!#]"
|
|
endif
|
|
|
|
" File numbers {{{1
|
|
syn match basicFilenumber "#\d\+"
|
|
syn match basicFilenumber "#\a[[:alnum:].]*[%&!#]\="
|
|
|
|
" Operators {{{1
|
|
if exists("basic_operators")
|
|
syn match basicArithmeticOperator "[-+*/\\^]"
|
|
syn match basicRelationalOperator "<>\|<=\|>=\|[><=]"
|
|
endif
|
|
syn match basicLogicalOperator "\<\%(not\|and\|or\|xor\|eqv\|imp\)\>"
|
|
syn match basicArithmeticOperator "\<mod\>"
|
|
|
|
" Metacommands {{{1
|
|
" Note: No trailing word boundaries. Text may be freely mixed however there
|
|
" must be only leading whitespace prior to the first metacommand
|
|
syn match basicMetacommand "$INCLUDE\s*:\s*'[^']\+'" contained containedin=@basicMetaComments
|
|
syn match basicMetacommand "$\%(DYNAMIC\|STATIC\)" contained containedin=@basicMetaComments
|
|
|
|
" Comments {{{1
|
|
syn keyword basicTodo TODO FIXME XXX NOTE contained
|
|
|
|
syn region basicRemStatement matchgroup=basicStatement start="REM\>" end="$" contains=basicTodo,@Spell contained
|
|
syn region basicComment start="'" end="$" contains=basicTodo,@Spell
|
|
|
|
if !exists("basic_no_comment_fold")
|
|
syn region basicMultilineComment start="^\s*'.*\n\%(\s*'\)\@=" end="^\s*'.*\n\%(\s*'\)\@!" contains=@basicComments transparent fold keepend
|
|
endif
|
|
|
|
" Metacommands
|
|
syn region basicMetaRemStatement matchgroup=basicStatement start="REM\>\s*\$\@=" end="$" contains=basicTodo contained
|
|
syn region basicMetaComment start="'\s*\$\@=" end="$" contains=basicTodo
|
|
|
|
syn cluster basicMetaComments contains=basicMetaComment,basicMetaRemStatement
|
|
syn cluster basicComments contains=basicComment,basicMetaComment
|
|
|
|
"syn sync ccomment basicComment
|
|
|
|
" Default Highlighting {{{1
|
|
hi def link basicArithmeticOperator basicOperator
|
|
hi def link basicBoolean Boolean
|
|
hi def link basicComment Comment
|
|
hi def link basicCommentError Error
|
|
hi def link basicDataString basicString
|
|
hi def link basicFilenumber basicTypeSuffix " TODO: better group
|
|
hi def link basicFloat Float
|
|
hi def link basicFunction Function
|
|
hi def link basicKeyword Keyword
|
|
hi def link basicLineIdentifier LineNr
|
|
hi def link basicLineContinuation Special
|
|
hi def link basicLineLabel basicLineIdentifier
|
|
hi def link basicLineNumber basicLineIdentifier
|
|
hi def link basicLogicalOperator basicOperator
|
|
hi def link basicMetacommand SpecialComment
|
|
hi def link basicMetaComment Comment
|
|
hi def link basicMetaRemStatement Comment
|
|
hi def link basicNumber Number
|
|
hi def link basicOperator Operator
|
|
hi def link basicPutAction Keyword
|
|
hi def link basicRelationalOperator basicOperator
|
|
hi def link basicRemStatement Comment
|
|
hi def link basicSpaceError Error
|
|
hi def link basicStatementSeparator Special
|
|
hi def link basicStatement Statement
|
|
hi def link basicString String
|
|
hi def link basicTodo Todo
|
|
hi def link basicType Type
|
|
hi def link basicTypeSuffix Special
|
|
if exists("basic_legacy_syntax_groups")
|
|
hi def link basicTypeSpecifier Type
|
|
hi def link basicTypeSuffix basicTypeSpecifier
|
|
endif
|
|
|
|
" Postscript {{{1
|
|
let b:current_syntax = "basic"
|
|
|
|
let &cpo = s:cpo_save
|
|
unlet s:cpo_save
|
|
|
|
" vim: nowrap sw=2 sts=2 ts=8 noet fdm=marker:
|