| 
									
										
										
										
											2023-08-31 16:17:16 +10:00
										 |  |  | " Vim filetype plugin | 
					
						
							|  |  |  | " Language:	Forth | 
					
						
							|  |  |  | " Maintainer:	Johan Kotlinski <kotlinski@gmail.com> | 
					
						
							| 
									
										
										
										
											2023-09-16 00:47:06 +10:00
										 |  |  | " Last Change:	2023 Sep 15 | 
					
						
							| 
									
										
										
										
											2024-01-14 20:59:02 +01:00
										 |  |  | "		2024 Jan 14 by Vim Project (browsefilter) | 
					
						
							| 
									
										
										
										
											2023-08-31 16:17:16 +10:00
										 |  |  | " 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" | 
					
						
							| 
									
										
										
										
											2023-09-16 00:47:06 +10:00
										 |  |  |   unlet s:matchit_patterns | 
					
						
							| 
									
										
										
										
											2023-08-31 16:17:16 +10:00
										 |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") | 
					
						
							| 
									
										
										
										
											2024-01-14 20:59:02 +01:00
										 |  |  |   let b:browsefilter = "Forth Source Files (*.f, *.fs, *.ft, *.fth, *.4th)\t*.f;*.fs;*.ft;*.fth;*.4th\n" | 
					
						
							|  |  |  |   if has("win32") | 
					
						
							|  |  |  |     let b:browsefilter ..= "All Files (*.*)\t*\n" | 
					
						
							|  |  |  |   else | 
					
						
							|  |  |  |     let b:browsefilter ..= "All Files (*)\t*\n" | 
					
						
							|  |  |  |   endif | 
					
						
							| 
									
										
										
										
											2023-08-31 16:17:16 +10:00
										 |  |  |   let b:undo_ftplugin ..= " | unlet! b:browsefilter" | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | let &cpo = s:cpo_save | 
					
						
							|  |  |  | unlet s:cpo_save | 
					
						
							| 
									
										
										
										
											2023-09-16 00:47:06 +10:00
										 |  |  | unlet s:define_patterns s:include_patterns |