summaryrefslogtreecommitdiffstats
path: root/ftplugin/freebasic.vim
diff options
context:
space:
mode:
Diffstat (limited to 'ftplugin/freebasic.vim')
-rw-r--r--ftplugin/freebasic.vim60
1 files changed, 56 insertions, 4 deletions
diff --git a/ftplugin/freebasic.vim b/ftplugin/freebasic.vim
index d2212481..41aa2d30 100644
--- a/ftplugin/freebasic.vim
+++ b/ftplugin/freebasic.vim
@@ -3,15 +3,67 @@ if polyglot#init#is_disabled(expand('<sfile>:p'), 'freebasic', 'ftplugin/freebas
endif
" Vim filetype plugin file
-" Language: FreeBasic
+" Language: FreeBASIC
" Maintainer: Doug Kearns <dougkearns@gmail.com>
-" Last Change: 2015 Jan 10
+" Last Change: 2021 Mar 16
+" Setup {{{1
if exists("b:did_ftplugin")
finish
endif
-let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&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: