runtime(forth): Update syntax and ftplugin files (#12976)
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
71
runtime/ftplugin/forth.vim
Normal file
71
runtime/ftplugin/forth.vim
Normal file
@ -0,0 +1,71 @@
|
||||
" Vim filetype plugin
|
||||
" Language: Forth
|
||||
" Maintainer: Johan Kotlinski <kotlinski@gmail.com>
|
||||
" Last Change: 2023 Aug 08
|
||||
" URL: https://github.com/jkotlinski/forth.vim
|
||||
|
||||
if exists("b:did_ftplugin")
|
||||
finish
|
||||
endif
|
||||
let b:did_ftplugin = 1
|
||||
|
||||
let s:cpo_save = &cpo
|
||||
set cpo&vim
|
||||
|
||||
setlocal commentstring=\\\ %s
|
||||
setlocal comments=s:(,mb:\ ,e:),b:\\
|
||||
setlocal iskeyword=33-126,128-255
|
||||
|
||||
let s:include_patterns =<< trim EOL
|
||||
|
||||
\<\%(INCLUDE\|REQUIRE\)\>\s\+\zs\k\+\ze
|
||||
\<S"\s\+\zs[^"]*\ze"\s\+\%(INCLUDED\|REQUIRED\)\>
|
||||
EOL
|
||||
let &l:include = $'\c{ s:include_patterns[1:]->join('\|') }'
|
||||
|
||||
let s:define_patterns =<< trim EOL
|
||||
:
|
||||
[2F]\=CONSTANT
|
||||
[2F]\=VALUE
|
||||
[2F]\=VARIABLE
|
||||
BEGIN-STRUCTURE
|
||||
BUFFER:
|
||||
CODE
|
||||
CREATE
|
||||
MARKER
|
||||
SYNONYM
|
||||
EOL
|
||||
let &l:define = $'\c\<\%({ s:define_patterns->join('\|') }\)'
|
||||
|
||||
" assume consistent intra-project file extensions
|
||||
let &l:suffixesadd = "." .. expand("%:e")
|
||||
|
||||
let b:undo_ftplugin = "setl cms< com< def< inc< isk< sua<"
|
||||
|
||||
if exists("loaded_matchit") && !exists("b:match_words")
|
||||
let s:matchit_patterns =<< trim EOL
|
||||
|
||||
\<\:\%(NONAME\)\=\>:\<EXIT\>:\<;\>
|
||||
\<IF\>:\<ELSE\>:\<THEN\>
|
||||
\<\[IF]\>:\<\[ELSE]\>:\<\[THEN]\>
|
||||
\<?\=DO\>:\<LEAVE\>:\<+\=LOOP\>
|
||||
\<CASE\>:\<ENDCASE\>
|
||||
\<OF\>:\<ENDOF\>
|
||||
\<BEGIN\>:\<WHILE\>:\<\%(AGAIN\|REPEAT\|UNTIL\)\>
|
||||
\<CODE\>:\<END-CODE\>
|
||||
\<BEGIN-STRUCTURE\>:\<END-STRUCTURE\>
|
||||
EOL
|
||||
let b:match_ignorecase = 1
|
||||
let b:match_words = s:matchit_patterns[1:]->join(',')
|
||||
let b:undo_ftplugin ..= "| unlet! b:match_ignorecase b:match_words"
|
||||
endif
|
||||
|
||||
if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter")
|
||||
let b:browsefilter = "Forth Source Files (*.f *.fs *.ft *.fth *.4th)\t*.f;*.fs;*.ft;*.fth;*.4th\n" ..
|
||||
\ "All Files (*.*)\t*.*\n"
|
||||
let b:undo_ftplugin ..= " | unlet! b:browsefilter"
|
||||
endif
|
||||
|
||||
let &cpo = s:cpo_save
|
||||
unlet s:cpo_save
|
||||
unlet s:define_patterns s:include_patterns s:matchit_patterns
|
||||
Reference in New Issue
Block a user