Adding upstream version 2:9.1.1230.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
This commit is contained in:
parent
95f88d82e6
commit
0985b09abd
6270 changed files with 2000183 additions and 0 deletions
380
runtime/syntax/basic.vim
Normal file
380
runtime/syntax/basic.vim
Normal file
|
@ -0,0 +1,380 @@
|
|||
" 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:
|
Loading…
Add table
Add a link
Reference in a new issue