| 
									
										
										
										
											2021-01-25 21:14:57 +01:00
										 |  |  | " Vim filetype plugin file | 
					
						
							| 
									
										
										
										
											2022-01-29 22:20:48 +00:00
										 |  |  | " Language:	FreeBASIC | 
					
						
							| 
									
										
										
										
											2021-01-25 21:14:57 +01:00
										 |  |  | " Maintainer:	Doug Kearns <dougkearns@gmail.com> | 
					
						
							| 
									
										
										
										
											2024-01-14 20:59:02 +01:00
										 |  |  | " Last Change:	2023 Aug 22 | 
					
						
							| 
									
										
										
										
											2021-01-25 21:14:57 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-29 22:20:48 +00:00
										 |  |  | " Setup {{{1 | 
					
						
							| 
									
										
										
										
											2021-01-25 21:14:57 +01:00
										 |  |  | if exists("b:did_ftplugin") | 
					
						
							|  |  |  |   finish | 
					
						
							|  |  |  | endif | 
					
						
							| 
									
										
										
										
											2022-01-29 22:20:48 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | let s:cpo_save = &cpo | 
					
						
							|  |  |  | set cpo&vim | 
					
						
							| 
									
										
										
										
											2021-01-25 21:14:57 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | runtime! ftplugin/basic.vim | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-29 22:20:48 +00:00
										 |  |  | 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") | 
					
						
							| 
									
										
										
										
											2022-07-01 18:45:04 +01:00
										 |  |  |   let s:line_start = '\%(^\s*\)\@<=' | 
					
						
							|  |  |  |   let s:not_end    = '\%(end\s\+\)\@<!' | 
					
						
							| 
									
										
										
										
											2022-01-29 22:20:48 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |   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\>,' .. | 
					
						
							| 
									
										
										
										
											2022-07-01 18:45:04 +01:00
										 |  |  | 		\     s:line_start .. '#\s*\%(if\|ifdef\|ifndef\)\>:' .. | 
					
						
							|  |  |  | 		\       s:line_start .. '#\s*\%(else\|elseif\)\>:' .. | 
					
						
							|  |  |  | 		\     s:line_start .. '#\s*endif\>,' .. | 
					
						
							|  |  |  | 		\     s:line_start .. '#\s*macro\>:' .. s:line_start .. '#\s*endmacro\>,' .. | 
					
						
							|  |  |  | 		\     "/':'/" | 
					
						
							| 
									
										
										
										
											2022-01-29 22:20:48 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-01 18:45:04 +01:00
										 |  |  |   " skip "function = <retval>" and "continue { do | for | while }" | 
					
						
							|  |  |  |   if s:dialect == "qb" | 
					
						
							|  |  |  |     let s:continue = "__continue" | 
					
						
							|  |  |  |   else | 
					
						
							|  |  |  |     let s:continue = "continue" | 
					
						
							|  |  |  |   endif | 
					
						
							|  |  |  |   let b:match_skip ..= ' || strpart(getline("."), col(".") - 1) =~? "^\\<function\\s\\+="' .. | 
					
						
							|  |  |  | 		  \    ' || strpart(getline("."), 0, col(".") ) =~? "\\<' .. s:continue .. '\\s\\+"' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   unlet s:not_end s:line_start | 
					
						
							|  |  |  | endif | 
					
						
							| 
									
										
										
										
											2022-01-29 22:20:48 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-01 18:45:04 +01:00
										 |  |  | if (has("gui_win32") || has("gui_gtk")) && exists("b:basic_set_browsefilter") | 
					
						
							|  |  |  |   let b:browsefilter = "FreeBASIC Source Files (*.bas)\t*.bas\n" .. | 
					
						
							| 
									
										
										
										
											2024-01-14 20:59:02 +01:00
										 |  |  | 		\      "FreeBASIC Header Files (*.bi)\t*.bi\n" | 
					
						
							|  |  |  |   if has("win32") | 
					
						
							|  |  |  |     let b:browsefilter ..= "All Files (*.*)\t*\n" | 
					
						
							|  |  |  |   else | 
					
						
							|  |  |  |     let b:browsefilter ..= "All Files (*)\t*\n" | 
					
						
							|  |  |  |   endif | 
					
						
							| 
									
										
										
										
											2022-01-29 22:20:48 +00:00
										 |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " Cleanup {{{1 | 
					
						
							|  |  |  | let &cpo = s:cpo_save | 
					
						
							| 
									
										
										
										
											2022-07-01 18:45:04 +01:00
										 |  |  | unlet s:cpo_save s:dialect | 
					
						
							| 
									
										
										
										
											2022-01-29 22:20:48 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | " vim: nowrap sw=2 sts=2 ts=8 noet fdm=marker: |