mirror of
https://github.com/neovim/neovim.git
synced 2025-11-11 04:55:33 +00:00
vim-patch:partial:f10911e5db16 (#17248)
Update runtime files
f10911e5db
This commit is contained in:
2
runtime/autoload/dist/ft.vim
vendored
2
runtime/autoload/dist/ft.vim
vendored
@@ -1,7 +1,7 @@
|
|||||||
" Vim functions for file type detection
|
" Vim functions for file type detection
|
||||||
"
|
"
|
||||||
" Maintainer: Bram Moolenaar <Bram@vim.org>
|
" Maintainer: Bram Moolenaar <Bram@vim.org>
|
||||||
" Last Change: 2022 Jan 11
|
" Last Change: 2022 Jan 28
|
||||||
|
|
||||||
" These functions are moved here from runtime/filetype.vim to make startup
|
" These functions are moved here from runtime/filetype.vim to make startup
|
||||||
" faster.
|
" faster.
|
||||||
|
|||||||
42
runtime/autoload/freebasic.vim
Normal file
42
runtime/autoload/freebasic.vim
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
" Vim filetype plugin file
|
||||||
|
" Language: FreeBASIC
|
||||||
|
" Maintainer: Doug Kearns <dougkearns@gmail.com>
|
||||||
|
" Last Change: 2021 Mar 16
|
||||||
|
|
||||||
|
" Dialects can be one of fb, qb, fblite, or deprecated
|
||||||
|
" Precedence is forcelang > #lang > lang
|
||||||
|
function! freebasic#GetDialect() abort
|
||||||
|
if exists("g:freebasic_forcelang")
|
||||||
|
return g:freebasic_forcelang
|
||||||
|
endif
|
||||||
|
|
||||||
|
if exists("g:freebasic_lang")
|
||||||
|
let dialect = g:freebasic_lang
|
||||||
|
else
|
||||||
|
let dialect = "fb"
|
||||||
|
endif
|
||||||
|
|
||||||
|
" override with #lang directive or metacommand
|
||||||
|
|
||||||
|
let skip = "has('syntax_items') && synIDattr(synID(line('.'), col('.'), 1), 'name') =~ 'Comment$'"
|
||||||
|
let pat = '\c^\s*\%(#\s*lang\s\+\|''\s*$lang\s*:\s*\)"\([^"]*\)"'
|
||||||
|
|
||||||
|
let save_cursor = getcurpos()
|
||||||
|
call cursor(1, 1)
|
||||||
|
" let lnum = search(pat, 'n', '', '', skip) " 'skip' needs 8.2.0915
|
||||||
|
let lnum = search(pat, 'n', '', '')
|
||||||
|
call setpos('.', save_cursor)
|
||||||
|
|
||||||
|
if lnum
|
||||||
|
let word = matchlist(getline(lnum), pat)[1]
|
||||||
|
if word =~? '\%(fb\|deprecated\|fblite\|qb\)'
|
||||||
|
let dialect = word
|
||||||
|
else
|
||||||
|
echomsg "freebasic#GetDialect: Invalid lang, found '" .. word .. "' at line " .. lnum .. " " .. getline(lnum)
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
return dialect
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" vim: nowrap sw=2 sts=2 ts=8 noet fdm=marker:
|
||||||
@@ -1723,6 +1723,19 @@ exists({expr}) The result is a Number, which is |TRUE| if {expr} is
|
|||||||
For checking if a file exists use |filereadable()|.
|
For checking if a file exists use |filereadable()|.
|
||||||
|
|
||||||
The {expr} argument is a string, which contains one of these:
|
The {expr} argument is a string, which contains one of these:
|
||||||
|
varname internal variable (see
|
||||||
|
dict.key |internal-variables|). Also works
|
||||||
|
list[i] for |curly-braces-names|, |Dictionary|
|
||||||
|
entries, |List| items, etc.
|
||||||
|
Beware that evaluating an index may
|
||||||
|
cause an error message for an invalid
|
||||||
|
expression. E.g.: >
|
||||||
|
:let l = [1, 2, 3]
|
||||||
|
:echo exists("l[5]")
|
||||||
|
< 0 >
|
||||||
|
:echo exists("l[xx]")
|
||||||
|
< E121: Undefined variable: xx
|
||||||
|
0
|
||||||
&option-name Vim option (only checks if it exists,
|
&option-name Vim option (only checks if it exists,
|
||||||
not if it really works)
|
not if it really works)
|
||||||
+option-name Vim option that works.
|
+option-name Vim option that works.
|
||||||
@@ -1733,19 +1746,6 @@ exists({expr}) The result is a Number, which is |TRUE| if {expr} is
|
|||||||
or user defined function (see
|
or user defined function (see
|
||||||
|user-function|). Also works for a
|
|user-function|). Also works for a
|
||||||
variable that is a Funcref.
|
variable that is a Funcref.
|
||||||
varname internal variable (see
|
|
||||||
|internal-variables|). Also works
|
|
||||||
for |curly-braces-names|, |Dictionary|
|
|
||||||
entries, |List| items, etc. Beware
|
|
||||||
that evaluating an index may cause an
|
|
||||||
error message for an invalid
|
|
||||||
expression. E.g.: >
|
|
||||||
:let l = [1, 2, 3]
|
|
||||||
:echo exists("l[5]")
|
|
||||||
< 0 >
|
|
||||||
:echo exists("l[xx]")
|
|
||||||
< E121: Undefined variable: xx
|
|
||||||
0
|
|
||||||
:cmdname Ex command: built-in command, user
|
:cmdname Ex command: built-in command, user
|
||||||
command or command modifier |:command|.
|
command or command modifier |:command|.
|
||||||
Returns:
|
Returns:
|
||||||
|
|||||||
@@ -1121,7 +1121,7 @@ deleting the selection.)
|
|||||||
The previously selected text is put in the unnamed register. If you want to
|
The previously selected text is put in the unnamed register. If you want to
|
||||||
put the same text into a Visual selection several times you need to use
|
put the same text into a Visual selection several times you need to use
|
||||||
another register. E.g., yank the text to copy, Visually select the text to
|
another register. E.g., yank the text to copy, Visually select the text to
|
||||||
replace and use "0p . You can repeat this as many times as you like, the
|
replace and use "0p . You can repeat this as many times as you like, and the
|
||||||
unnamed register will be changed each time.
|
unnamed register will be changed each time.
|
||||||
|
|
||||||
When you use a blockwise Visual mode command and yank only a single line into
|
When you use a blockwise Visual mode command and yank only a single line into
|
||||||
|
|||||||
@@ -923,7 +923,7 @@ tag command note action in Visual mode ~
|
|||||||
before the highlighted area
|
before the highlighted area
|
||||||
|v_J| J 2 join the highlighted lines
|
|v_J| J 2 join the highlighted lines
|
||||||
|v_K| K run 'keywordprg' on the highlighted area
|
|v_K| K run 'keywordprg' on the highlighted area
|
||||||
|v_O| O Move horizontally to other corner of area.
|
|v_O| O move horizontally to other corner of area.
|
||||||
Q does not start Ex mode
|
Q does not start Ex mode
|
||||||
|v_R| R 2 delete the highlighted lines and start
|
|v_R| R 2 delete the highlighted lines and start
|
||||||
insert
|
insert
|
||||||
@@ -986,6 +986,8 @@ tag command note action in Visual mode ~
|
|||||||
|v_i{| i{ same as iB
|
|v_i{| i{ same as iB
|
||||||
|v_i}| i} same as iB
|
|v_i}| i} same as iB
|
||||||
|v_o| o move cursor to other corner of area
|
|v_o| o move cursor to other corner of area
|
||||||
|
|v_p| p replace highlighted area with register
|
||||||
|
contents; deleted text in unnamed register
|
||||||
|v_r| r 2 replace highlighted area with a character
|
|v_r| r 2 replace highlighted area with a character
|
||||||
|v_s| s 2 delete highlighted area and start insert
|
|v_s| s 2 delete highlighted area and start insert
|
||||||
|v_u| u 2 make highlighted area lowercase
|
|v_u| u 2 make highlighted area lowercase
|
||||||
|
|||||||
@@ -1220,8 +1220,8 @@ A jump table for the options with a short description can be found at |Q_op|.
|
|||||||
preferred, because it is much faster.
|
preferred, because it is much faster.
|
||||||
'charconvert' is not used when reading stdin |--|, because there is no
|
'charconvert' is not used when reading stdin |--|, because there is no
|
||||||
file to convert from. You will have to save the text in a file first.
|
file to convert from. You will have to save the text in a file first.
|
||||||
The expression must return zero or an empty string for success,
|
The expression must return zero, false or an empty string for success,
|
||||||
non-zero for failure.
|
non-zero or true for failure.
|
||||||
See |encoding-names| for possible encoding names.
|
See |encoding-names| for possible encoding names.
|
||||||
Additionally, names given in 'fileencodings' and 'fileencoding' are
|
Additionally, names given in 'fileencodings' and 'fileencoding' are
|
||||||
used.
|
used.
|
||||||
@@ -6254,10 +6254,11 @@ A jump table for the options with a short description can be found at |Q_op|.
|
|||||||
'tabstop' 'ts' number (default 8)
|
'tabstop' 'ts' number (default 8)
|
||||||
local to buffer
|
local to buffer
|
||||||
Number of spaces that a <Tab> in the file counts for. Also see
|
Number of spaces that a <Tab> in the file counts for. Also see
|
||||||
|:retab| command, and 'softtabstop' option.
|
the |:retab| command, and the 'softtabstop' option.
|
||||||
|
|
||||||
Note: Setting 'tabstop' to any other value than 8 can make your file
|
Note: Setting 'tabstop' to any other value than 8 can make your file
|
||||||
appear wrong in many places (e.g., when printing it).
|
appear wrong in many places, e.g., when printing it.
|
||||||
|
The value must be more than 0 and less than 10000.
|
||||||
|
|
||||||
There are four main ways to use tabs in Vim:
|
There are four main ways to use tabs in Vim:
|
||||||
1. Always keep 'tabstop' at 8, set 'softtabstop' and 'shiftwidth' to 4
|
1. Always keep 'tabstop' at 8, set 'softtabstop' and 'shiftwidth' to 4
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
" Vim support file to detect file types
|
" Vim support file to detect file types
|
||||||
"
|
"
|
||||||
" Maintainer: Bram Moolenaar <Bram@vim.org>
|
" Maintainer: Bram Moolenaar <Bram@vim.org>
|
||||||
" Last Change: 2022 Jan 23
|
" Last Change: 2022 Jan 29
|
||||||
|
|
||||||
" Listen very carefully, I will say this only once
|
" Listen very carefully, I will say this only once
|
||||||
if exists("did_load_filetypes")
|
if exists("did_load_filetypes")
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
" Vim filetype plugin file
|
" Vim filetype plugin file
|
||||||
" Language: BASIC
|
" Language: BASIC (QuickBASIC 4.5)
|
||||||
" Maintainer: Doug Kearns <dougkearns@gmail.com>
|
" Maintainer: Doug Kearns <dougkearns@gmail.com>
|
||||||
" Last Change: 2015 Jan 10
|
" Last Change: 2021 Mar 16
|
||||||
|
|
||||||
if exists("b:did_ftplugin")
|
if exists("b:did_ftplugin")
|
||||||
finish
|
finish
|
||||||
@@ -11,17 +11,46 @@ let b:did_ftplugin = 1
|
|||||||
let s:cpo_save = &cpo
|
let s:cpo_save = &cpo
|
||||||
set cpo&vim
|
set cpo&vim
|
||||||
|
|
||||||
setlocal comments=:REM,:'
|
setlocal comments=:REM\ ,:Rem\ ,:rem\ ,:'
|
||||||
setlocal commentstring='\ %s
|
setlocal commentstring='\ %s
|
||||||
setlocal formatoptions-=t formatoptions+=croql
|
setlocal formatoptions-=t formatoptions+=croql
|
||||||
|
|
||||||
if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter")
|
" TODO: support exit ... as middle matches?
|
||||||
let b:browsefilter = "BASIC Source Files (*.bas)\t*.bas\n" .
|
if exists("loaded_matchit") && !exists("b:match_words")
|
||||||
\ "All Files (*.*)\t*.*\n"
|
let s:line_start = '\%(^\s*\)\@<='
|
||||||
|
let s:not_end = '\%(end\s\+\)\@<!'
|
||||||
|
let s:not_end_or_exit = '\%(\%(end\|exit\)\s\+\)\@<!'
|
||||||
|
|
||||||
|
let b:match_ignorecase = 1
|
||||||
|
let b:match_words =
|
||||||
|
\ s:not_end_or_exit .. '\<def\s\+fn:\<end\s\+def\>,' ..
|
||||||
|
\ s:not_end_or_exit .. '\<function\>:\<end\s\+function\>,' ..
|
||||||
|
\ s:not_end_or_exit .. '\<sub\>:\<end\s\+sub\>,' ..
|
||||||
|
\ s:not_end .. '\<type\>:\<end\s\+type\>,' ..
|
||||||
|
\ s:not_end .. '\<select\>:\%(select\s\+\)\@<!\<case\%(\s\+\%(else\|is\)\)\=\>:\<end\s\+select\>,' ..
|
||||||
|
\ '\<do\>:\<loop\>,' ..
|
||||||
|
\ '\<for\>\%(\s\+\%(input\|output\|random\|append\|binary\)\)\@!:\<next\>,' ..
|
||||||
|
\ '\<while\>:\<wend\>,' ..
|
||||||
|
\ s:line_start .. 'if\%(.*\<then\s*\%($\|''\)\)\@=:\<\%(' .. s:line_start .. 'else\|elseif\)\>:\<end\s\+if\>,' ..
|
||||||
|
\ '\<lock\>:\<unlock\>'
|
||||||
|
|
||||||
|
let b:match_skip = 'synIDattr(synID(line("."),col("."),1),"name") =~? "comment\\|string" || ' ..
|
||||||
|
\ 'strpart(getline("."), 0, col(".") ) =~? "\\<exit\\s\\+"'
|
||||||
|
|
||||||
|
unlet s:line_start s:not_end s:not_end_or_exit
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let b:undo_ftplugin = "setl fo< com< cms< sua<" .
|
if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter")
|
||||||
\ " | unlet! b:browsefilter"
|
let b:browsefilter = "BASIC Source Files (*.bas)\t*.bas\n" ..
|
||||||
|
\ "BASIC Include Files (*.bi, *.bm)\t*.bi;*.bm\n" ..
|
||||||
|
\ "All Files (*.*)\t*.*\n"
|
||||||
|
endif
|
||||||
|
|
||||||
|
let b:undo_ftplugin = "setl fo< com< cms<" ..
|
||||||
|
\ " | unlet! b:match_ignorecase b:match_skip b:match_words" ..
|
||||||
|
\ " | unlet! b:browsefilter"
|
||||||
|
|
||||||
let &cpo = s:cpo_save
|
let &cpo = s:cpo_save
|
||||||
unlet s:cpo_save
|
unlet s:cpo_save
|
||||||
|
|
||||||
|
" vim: nowrap sw=2 sts=2 ts=8 noet fdm=marker:
|
||||||
|
|||||||
@@ -1,13 +1,65 @@
|
|||||||
" Vim filetype plugin file
|
" Vim filetype plugin file
|
||||||
" Language: FreeBasic
|
" Language: FreeBASIC
|
||||||
" Maintainer: Doug Kearns <dougkearns@gmail.com>
|
" Maintainer: Doug Kearns <dougkearns@gmail.com>
|
||||||
" Last Change: 2015 Jan 10
|
" Last Change: 2021 Mar 16
|
||||||
|
|
||||||
|
" Setup {{{1
|
||||||
if exists("b:did_ftplugin")
|
if exists("b:did_ftplugin")
|
||||||
finish
|
finish
|
||||||
endif
|
endif
|
||||||
let b:did_ftplugin = 1
|
|
||||||
|
let s:cpo_save = &cpo
|
||||||
|
set cpo&vim
|
||||||
|
|
||||||
runtime! ftplugin/basic.vim
|
runtime! ftplugin/basic.vim
|
||||||
|
|
||||||
" vim: ts=8
|
let s:dialect = freebasic#GetDialect()
|
||||||
|
|
||||||
|
" Comments {{{1
|
||||||
|
" add ''comments before 'comments
|
||||||
|
let &l:comments = "sO:*\ -,mO:*\ \ ,exO:*/,s1:/',mb:',ex:'/,:''," .. &l:comments
|
||||||
|
|
||||||
|
" Match words {{{1
|
||||||
|
if exists("loaded_matchit")
|
||||||
|
let s:not_end = '\%(end\s\+\)\@<!'
|
||||||
|
|
||||||
|
let b:match_words ..= ','
|
||||||
|
|
||||||
|
if s:dialect == 'fb'
|
||||||
|
let b:match_words ..= s:not_end .. '\<constructor\>:\<end\s\+constructor\>,' ..
|
||||||
|
\ s:not_end .. '\<destructor\>:\<end\s\+destructor\>,' ..
|
||||||
|
\ s:not_end .. '\<property\>:\<end\s\+property\>,' ..
|
||||||
|
\ s:not_end .. '\<operator\>:\<end\s\+operator\>,' ..
|
||||||
|
\ s:not_end .. '\<extern\%(\s\+"\)\@=:\<end\s\+extern\>,'
|
||||||
|
endif
|
||||||
|
|
||||||
|
if s:dialect == 'fb' || s:dialect == 'deprecated'
|
||||||
|
let b:match_words ..= s:not_end .. '\<scope\>:\<end\s\+scope\>,'
|
||||||
|
endif
|
||||||
|
|
||||||
|
if s:dialect == 'qb'
|
||||||
|
let b:match_words ..= s:not_end .. '\<__asm\>:\<end\s\+__asm\>,' ..
|
||||||
|
\ s:not_end .. '\<__union\>:\<end\s\+__union\>,' ..
|
||||||
|
\ s:not_end .. '\<__with\>:\<end\s\+__with\>,'
|
||||||
|
else
|
||||||
|
let b:match_words ..= s:not_end .. '\<asm\>:\<end\s\+asm\>,' ..
|
||||||
|
\ s:not_end .. '\<namespace\>:\<end\s\+namespace\>,' ..
|
||||||
|
\ s:not_end .. '\<union\>:\<end\s\+union\>,' ..
|
||||||
|
\ s:not_end .. '\<with\>:\<end\s\+with\>,'
|
||||||
|
endif
|
||||||
|
|
||||||
|
let b:match_words ..= s:not_end .. '\<enum\>:\<end\s\+enum\>,' ..
|
||||||
|
\ '^#\s*\%(if\|ifdef\|ifndef\)\>:^#\s*\%(else\|elseif\)\>:^#\s*endif\>,' ..
|
||||||
|
\ '^#\s*macro\>:^#\s*endmacro\>'
|
||||||
|
|
||||||
|
" skip "function = <retval>"
|
||||||
|
let b:match_skip ..= '|| strpart(getline("."), col(".") - 1) =~? "^\\<function\\s\\+="'
|
||||||
|
|
||||||
|
unlet s:not_end
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Cleanup {{{1
|
||||||
|
let &cpo = s:cpo_save
|
||||||
|
unlet s:cpo_save
|
||||||
|
|
||||||
|
" vim: nowrap sw=2 sts=2 ts=8 noet fdm=marker:
|
||||||
|
|||||||
26
runtime/ftplugin/qb64.vim
Normal file
26
runtime/ftplugin/qb64.vim
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
" Vim filetype plugin file
|
||||||
|
" Language: QB64
|
||||||
|
" Maintainer: Doug Kearns <dougkearns@gmail.com>
|
||||||
|
|
||||||
|
if exists("b:did_ftplugin")
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
let s:cpo_save = &cpo
|
||||||
|
set cpo&vim
|
||||||
|
|
||||||
|
runtime! ftplugin/basic.vim
|
||||||
|
|
||||||
|
let s:not_end = '\%(end\s\+\)\@<!'
|
||||||
|
|
||||||
|
let b:match_words ..= ',' ..
|
||||||
|
\ s:not_end .. '\<declare\>:\<end\s\+declare\>,' ..
|
||||||
|
\ '\<select\s\+everycase\>:\%(select\s\+\)\@<!\<case\%(\s\+\%(else\|is\)\)\=\>:\<end\s\+select\>,' ..
|
||||||
|
\ '$IF\>:$\%(ELSEIF\|ELSE\)\>:$END\s*IF\>'
|
||||||
|
|
||||||
|
unlet s:not_end
|
||||||
|
|
||||||
|
let &cpo = s:cpo_save
|
||||||
|
unlet s:cpo_save
|
||||||
|
|
||||||
|
" vim: nowrap sw=2 sts=2 ts=8 noet fdm=marker:
|
||||||
11
runtime/indent/basic.vim
Normal file
11
runtime/indent/basic.vim
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
" Vim indent file
|
||||||
|
" Language: BASIC (QuickBASIC 4.5)
|
||||||
|
" Maintainer: Doug Kearns <dougkearns@gmail.com>
|
||||||
|
" Last Change: 2022 Jan 24
|
||||||
|
|
||||||
|
" Only load this indent file when no other was loaded.
|
||||||
|
if exists("b:did_indent")
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
runtime! indent/vb.vim
|
||||||
11
runtime/indent/freebasic.vim
Normal file
11
runtime/indent/freebasic.vim
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
" Vim indent file
|
||||||
|
" Language: FreeBASIC
|
||||||
|
" Maintainer: Doug Kearns <dougkearns@gmail.com>
|
||||||
|
" Last Change: 2022 Jan 24
|
||||||
|
|
||||||
|
" Only load this indent file when no other was loaded.
|
||||||
|
if exists("b:did_indent")
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
runtime! indent/vb.vim
|
||||||
11
runtime/indent/qb64.vim
Normal file
11
runtime/indent/qb64.vim
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
" Vim indent file
|
||||||
|
" Language: QB64
|
||||||
|
" Maintainer: Doug Kearns <dougkearns@gmail.com>
|
||||||
|
" Last Change: 2022 Jan 24
|
||||||
|
|
||||||
|
" Only load this indent file when no other was loaded.
|
||||||
|
if exists("b:did_indent")
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
runtime! indent/vb.vim
|
||||||
@@ -763,9 +763,9 @@ fun! s:ParseSkip(str)
|
|||||||
let skip = "synIDattr(synID(line('.'),col('.'),1),'name') !~? '" ..
|
let skip = "synIDattr(synID(line('.'),col('.'),1),'name') !~? '" ..
|
||||||
\ strpart(skip,2) .. "'"
|
\ strpart(skip,2) .. "'"
|
||||||
elseif skip[0] == "r"
|
elseif skip[0] == "r"
|
||||||
let skip = "strpart(getline('.'),0,col('.'))=~'" . strpart(skip,2). "'"
|
let skip = "strpart(getline('.'),0,col('.'))=~'" .. strpart(skip,2) .. "'"
|
||||||
elseif skip[0] == "R"
|
elseif skip[0] == "R"
|
||||||
let skip = "strpart(getline('.'),0,col('.'))!~'" . strpart(skip,2). "'"
|
let skip = "strpart(getline('.'),0,col('.'))!~'" .. strpart(skip,2) .. "'"
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
return skip
|
return skip
|
||||||
|
|||||||
@@ -1,14 +1,15 @@
|
|||||||
" Vim syntax file
|
" Vim syntax file
|
||||||
" Language: BASIC
|
" Language: BASIC (QuickBASIC 4.5)
|
||||||
" Maintainer: Doug Kearns <dougkearns@gmail.com>
|
" Maintainer: Doug Kearns <dougkearns@gmail.com>
|
||||||
" Previous Maintainer: Allan Kelly <allan@fruitloaf.co.uk>
|
" Previous Maintainer: Allan Kelly <allan@fruitloaf.co.uk>
|
||||||
" Contributors: Thilo Six
|
" Contributors: Thilo Six
|
||||||
" Last Change: 2015 Jan 10
|
" Last Change: 2021 Aug 08
|
||||||
|
|
||||||
" First version based on Micro$soft QBASIC circa 1989, as documented in
|
" First version based on Micro$soft QBASIC circa 1989, as documented in
|
||||||
" 'Learn BASIC Now' by Halvorson&Rygmyr. Microsoft Press 1989.
|
" 'Learn BASIC Now' by Halvorson&Rygmyr. Microsoft Press 1989.
|
||||||
" This syntax file not a complete implementation yet. Send suggestions to the
|
"
|
||||||
" maintainer.
|
" Second version attempts to match Microsoft QuickBASIC 4.5 while keeping FreeBASIC
|
||||||
|
" (-lang qb) and QB64 (excluding extensions) in mind. -- DJK
|
||||||
|
|
||||||
" Prelude {{{1
|
" Prelude {{{1
|
||||||
if exists("b:current_syntax")
|
if exists("b:current_syntax")
|
||||||
@@ -18,154 +19,357 @@ endif
|
|||||||
let s:cpo_save = &cpo
|
let s:cpo_save = &cpo
|
||||||
set cpo&vim
|
set cpo&vim
|
||||||
|
|
||||||
" Keywords {{{1
|
syn iskeyword @,48-57,.,!,#,%,&,$
|
||||||
syn keyword basicStatement BEEP beep Beep BLOAD bload Bload BSAVE bsave Bsave
|
syn case ignore
|
||||||
syn keyword basicStatement CALL call Call ABSOLUTE absolute Absolute
|
|
||||||
syn keyword basicStatement CHAIN chain Chain CHDIR chdir Chdir
|
|
||||||
syn keyword basicStatement CIRCLE circle Circle CLEAR clear Clear
|
|
||||||
syn keyword basicStatement CLOSE close Close CLS cls Cls COLOR color Color
|
|
||||||
syn keyword basicStatement COM com Com COMMON common Common
|
|
||||||
syn keyword basicStatement CONST const Const DATA data Data
|
|
||||||
syn keyword basicStatement DECLARE declare Declare DEF def Def
|
|
||||||
syn keyword basicStatement DEFDBL defdbl Defdbl DEFINT defint Defint
|
|
||||||
syn keyword basicStatement DEFLNG deflng Deflng DEFSNG defsng Defsng
|
|
||||||
syn keyword basicStatement DEFSTR defstr Defstr DIM dim Dim
|
|
||||||
syn keyword basicStatement DO do Do LOOP loop Loop
|
|
||||||
syn keyword basicStatement DRAW draw Draw END end End
|
|
||||||
syn keyword basicStatement ENVIRON environ Environ ERASE erase Erase
|
|
||||||
syn keyword basicStatement ERROR error Error EXIT exit Exit
|
|
||||||
syn keyword basicStatement FIELD field Field FILES files Files
|
|
||||||
syn keyword basicStatement FOR for For NEXT next Next
|
|
||||||
syn keyword basicStatement FUNCTION function Function GET get Get
|
|
||||||
syn keyword basicStatement GOSUB gosub Gosub GOTO goto Goto
|
|
||||||
syn keyword basicStatement IF if If THEN then Then ELSE else Else
|
|
||||||
syn keyword basicStatement INPUT input Input INPUT# input# Input#
|
|
||||||
syn keyword basicStatement IOCTL ioctl Ioctl KEY key Key
|
|
||||||
syn keyword basicStatement KILL kill Kill LET let Let
|
|
||||||
syn keyword basicStatement LINE line Line LOCATE locate Locate
|
|
||||||
syn keyword basicStatement LOCK lock Lock UNLOCK unlock Unlock
|
|
||||||
syn keyword basicStatement LPRINT lprint Lprint USING using Using
|
|
||||||
syn keyword basicStatement LSET lset Lset MKDIR mkdir Mkdir
|
|
||||||
syn keyword basicStatement NAME name Name ON on On
|
|
||||||
syn keyword basicStatement ERROR error Error OPEN open Open
|
|
||||||
syn keyword basicStatement OPTION option Option BASE base Base
|
|
||||||
syn keyword basicStatement OUT out Out PAINT paint Paint
|
|
||||||
syn keyword basicStatement PALETTE palette Palette PCOPY pcopy Pcopy
|
|
||||||
syn keyword basicStatement PEN pen Pen PLAY play Play
|
|
||||||
syn keyword basicStatement PMAP pmap Pmap POKE poke Poke
|
|
||||||
syn keyword basicStatement PRESET preset Preset PRINT print Print
|
|
||||||
syn keyword basicStatement PRINT# print# Print# USING using Using
|
|
||||||
syn keyword basicStatement PSET pset Pset PUT put Put
|
|
||||||
syn keyword basicStatement RANDOMIZE randomize Randomize READ read Read
|
|
||||||
syn keyword basicStatement REDIM redim Redim RESET reset Reset
|
|
||||||
syn keyword basicStatement RESTORE restore Restore RESUME resume Resume
|
|
||||||
syn keyword basicStatement RETURN return Return RMDIR rmdir Rmdir
|
|
||||||
syn keyword basicStatement RSET rset Rset RUN run Run
|
|
||||||
syn keyword basicStatement SEEK seek Seek SELECT select Select
|
|
||||||
syn keyword basicStatement CASE case Case SHARED shared Shared
|
|
||||||
syn keyword basicStatement SHELL shell Shell SLEEP sleep Sleep
|
|
||||||
syn keyword basicStatement SOUND sound Sound STATIC static Static
|
|
||||||
syn keyword basicStatement STOP stop Stop STRIG strig Strig
|
|
||||||
syn keyword basicStatement SUB sub Sub SWAP swap Swap
|
|
||||||
syn keyword basicStatement SYSTEM system System TIMER timer Timer
|
|
||||||
syn keyword basicStatement TROFF troff Troff TRON tron Tron
|
|
||||||
syn keyword basicStatement TYPE type Type UNLOCK unlock Unlock
|
|
||||||
syn keyword basicStatement VIEW view View WAIT wait Wait
|
|
||||||
syn keyword basicStatement WHILE while While WEND wend Wend
|
|
||||||
syn keyword basicStatement WIDTH width Width WINDOW window Window
|
|
||||||
syn keyword basicStatement WRITE write Write DATE$ date$ Date$
|
|
||||||
syn keyword basicStatement MID$ mid$ Mid$ TIME$ time$ Time$
|
|
||||||
|
|
||||||
syn keyword basicFunction ABS abs Abs ASC asc Asc
|
" Whitespace Errors {{{1
|
||||||
syn keyword basicFunction ATN atn Atn CDBL cdbl Cdbl
|
if exists("basic_space_errors")
|
||||||
syn keyword basicFunction CINT cint Cint CLNG clng Clng
|
if !exists("basic_no_trail_space_error")
|
||||||
syn keyword basicFunction COS cos Cos CSNG csng Csng
|
syn match basicSpaceError display excludenl "\s\+$"
|
||||||
syn keyword basicFunction CSRLIN csrlin Csrlin CVD cvd Cvd
|
endif
|
||||||
syn keyword basicFunction CVDMBF cvdmbf Cvdmbf CVI cvi Cvi
|
if !exists("basic_no_tab_space_error")
|
||||||
syn keyword basicFunction CVL cvl Cvl CVS cvs Cvs
|
syn match basicSpaceError display " \+\t"me=e-1
|
||||||
syn keyword basicFunction CVSMBF cvsmbf Cvsmbf EOF eof Eof
|
endif
|
||||||
syn keyword basicFunction ERDEV erdev Erdev ERL erl Erl
|
endif
|
||||||
syn keyword basicFunction ERR err Err EXP exp Exp
|
|
||||||
syn keyword basicFunction FILEATTR fileattr Fileattr FIX fix Fix
|
" Comment Errors {{{1
|
||||||
syn keyword basicFunction FRE fre Fre FREEFILE freefile Freefile
|
if !exists("basic_no_comment_errors")
|
||||||
syn keyword basicFunction INP inp Inp INSTR instr Instr
|
syn match basicCommentError "\<REM\>.*"
|
||||||
syn keyword basicFunction INT int Int LBOUND lbound Lbound
|
endif
|
||||||
syn keyword basicFunction LEN len Len LOC loc Loc
|
|
||||||
syn keyword basicFunction LOF lof Lof LOG log Log
|
" Not Top Cluster {{{1
|
||||||
syn keyword basicFunction LPOS lpos Lpos PEEK peek Peek
|
syn cluster basicNotTop contains=@basicLineIdentifier,basicDataString,basicDataSeparator,basicTodo
|
||||||
syn keyword basicFunction PEN pen Pen POINT point Point
|
|
||||||
syn keyword basicFunction POS pos Pos RND rnd Rnd
|
" Statements {{{1
|
||||||
syn keyword basicFunction SADD sadd Sadd SCREEN screen Screen
|
|
||||||
syn keyword basicFunction SEEK seek Seek SETMEM setmem Setmem
|
syn cluster basicStatements contains=basicStatement,basicDataStatement,basicMetaRemStatement,basicPutStatement,basicRemStatement
|
||||||
syn keyword basicFunction SGN sgn Sgn SIN sin Sin
|
|
||||||
syn keyword basicFunction SPC spc Spc SQR sqr Sqr
|
let s:statements =<< trim EOL " {{{2
|
||||||
syn keyword basicFunction STICK stick Stick STRIG strig Strig
|
beep
|
||||||
syn keyword basicFunction TAB tab Tab TAN tan Tan
|
bload
|
||||||
syn keyword basicFunction UBOUND ubound Ubound VAL val Val
|
bsave
|
||||||
syn keyword basicFunction VALPTR valptr Valptr VALSEG valseg Valseg
|
call
|
||||||
syn keyword basicFunction VARPTR varptr Varptr VARSEG varseg Varseg
|
calls
|
||||||
syn keyword basicFunction CHR$ Chr$ chr$ COMMAND$ command$ Command$
|
case
|
||||||
syn keyword basicFunction DATE$ date$ Date$ ENVIRON$ environ$ Environ$
|
chain
|
||||||
syn keyword basicFunction ERDEV$ erdev$ Erdev$ HEX$ hex$ Hex$
|
chdir
|
||||||
syn keyword basicFunction INKEY$ inkey$ Inkey$ INPUT$ input$ Input$
|
circle
|
||||||
syn keyword basicFunction IOCTL$ ioctl$ Ioctl$ LCASES$ lcases$ Lcases$
|
clear
|
||||||
syn keyword basicFunction LAFT$ laft$ Laft$ LTRIM$ ltrim$ Ltrim$
|
close
|
||||||
syn keyword basicFunction MID$ mid$ Mid$ MKDMBF$ mkdmbf$ Mkdmbf$
|
cls
|
||||||
syn keyword basicFunction MKD$ mkd$ Mkd$ MKI$ mki$ Mki$
|
color
|
||||||
syn keyword basicFunction MKL$ mkl$ Mkl$ MKSMBF$ mksmbf$ Mksmbf$
|
com
|
||||||
syn keyword basicFunction MKS$ mks$ Mks$ OCT$ oct$ Oct$
|
common
|
||||||
syn keyword basicFunction RIGHT$ right$ Right$ RTRIM$ rtrim$ Rtrim$
|
const
|
||||||
syn keyword basicFunction SPACE$ space$ Space$ STR$ str$ Str$
|
declare
|
||||||
syn keyword basicFunction STRING$ string$ String$ TIME$ time$ Time$
|
def
|
||||||
syn keyword basicFunction UCASE$ ucase$ Ucase$ VARPTR$ varptr$ Varptr$
|
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
|
" Numbers {{{1
|
||||||
" Integer number, or floating point number without a dot.
|
|
||||||
syn match basicNumber "\<\d\+\>"
|
|
||||||
" Floating point number, with dot
|
|
||||||
syn match basicNumber "\<\d\+\.\d*\>"
|
|
||||||
" Floating point number, starting with a dot
|
|
||||||
syn match basicNumber "\.\d\+\>"
|
|
||||||
|
|
||||||
" String and Character constants {{{1
|
" Integers
|
||||||
syn match basicSpecial "\\\d\d\d\|\\." contained
|
syn match basicNumber "-\=&o\=\o\+[%&]\=\>"
|
||||||
syn region basicString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=basicSpecial
|
syn match basicNumber "-\=&h\x\+[%&]\=\>"
|
||||||
|
syn match basicNumber "-\=\<\d\+[%&]\=\>"
|
||||||
|
|
||||||
" Line numbers {{{1
|
" Floats
|
||||||
syn region basicLineNumber start="^\d" end="\s"
|
syn match basicFloat "-\=\<\d\+\.\=\d*\%(\%([ed][+-]\=\d*\)\|[!#]\)\=\>"
|
||||||
|
syn match basicFloat "-\=\<\.\d\+\%(\%([ed][+-]\=\d*\)\|[!#]\)\=\>"
|
||||||
|
|
||||||
" Data-type suffixes {{{1
|
" Statement anchors {{{1
|
||||||
syn match basicTypeSpecifier "[a-zA-Z0-9][$%&!#]"ms=s+1
|
syn match basicLineStart "^" nextgroup=@basicStatements,@basicLineIdentifier skipwhite
|
||||||
" Used with OPEN statement
|
syn match basicStatementSeparator ":" nextgroup=@basicStatements skipwhite
|
||||||
syn match basicFilenumber "#\d\+"
|
|
||||||
|
|
||||||
" Mathematical operators {{{1
|
" Line numbers and labels {{{1
|
||||||
" syn match basicMathsOperator "[<>+\*^/\\=-]"
|
|
||||||
syn match basicMathsOperator "-\|=\|[:<>+\*^/\\]\|AND\|OR"
|
" 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
|
" Comments {{{1
|
||||||
syn keyword basicTodo TODO FIXME XXX NOTE contained
|
syn keyword basicTodo TODO FIXME XXX NOTE contained
|
||||||
syn region basicComment start="^\s*\zsREM\>" start="\%(:\s*\)\@<=REM\>" end="$" contains=basicTodo
|
|
||||||
syn region basicComment start="'" end="$" contains=basicTodo
|
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
|
"syn sync ccomment basicComment
|
||||||
|
|
||||||
" Default Highlighting {{{1
|
" Default Highlighting {{{1
|
||||||
hi def link basicLabel Label
|
hi def link basicArithmeticOperator basicOperator
|
||||||
hi def link basicConditional Conditional
|
hi def link basicBoolean Boolean
|
||||||
hi def link basicRepeat Repeat
|
hi def link basicComment Comment
|
||||||
hi def link basicLineNumber Comment
|
hi def link basicCommentError Error
|
||||||
hi def link basicNumber Number
|
hi def link basicDataString basicString
|
||||||
hi def link basicError Error
|
hi def link basicFilenumber basicTypeSuffix " TODO: better group
|
||||||
hi def link basicStatement Statement
|
hi def link basicFloat Float
|
||||||
hi def link basicString String
|
hi def link basicFunction Identifier
|
||||||
hi def link basicComment Comment
|
hi def link basicKeyword Keyword
|
||||||
hi def link basicSpecial Special
|
hi def link basicLineIdentifier LineNr
|
||||||
hi def link basicTodo Todo
|
hi def link basicLineContinuation Special
|
||||||
hi def link basicFunction Identifier
|
hi def link basicLineLabel basicLineIdentifier
|
||||||
hi def link basicTypeSpecifier Type
|
hi def link basicLineNumber basicLineIdentifier
|
||||||
hi def link basicFilenumber basicTypeSpecifier
|
hi def link basicLogicalOperator basicOperator
|
||||||
"hi basicMathsOperator term=bold cterm=bold gui=bold
|
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
|
" Postscript {{{1
|
||||||
let b:current_syntax = "basic"
|
let b:current_syntax = "basic"
|
||||||
|
|||||||
409
runtime/syntax/qb64.vim
Normal file
409
runtime/syntax/qb64.vim
Normal file
@@ -0,0 +1,409 @@
|
|||||||
|
" 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:
|
||||||
@@ -1,8 +1,7 @@
|
|||||||
" Vim syntax file
|
" Vim syntax file
|
||||||
" This is a GENERATED FILE. Please always refer to source file at the URI below.
|
|
||||||
" Language: strace output
|
" Language: strace output
|
||||||
" Maintainer: David Necas (Yeti) <yeti@physics.muni.cz>
|
" Maintainer: David Necas (Yeti) <yeti@physics.muni.cz>
|
||||||
" Last Change: 2015-01-16
|
" Last Change: 2022 Jan 29
|
||||||
|
|
||||||
" Setup
|
" Setup
|
||||||
" quit when a syntax file was already loaded
|
" quit when a syntax file was already loaded
|
||||||
|
|||||||
Reference in New Issue
Block a user