| 
									
										
										
										
											2008-06-24 22:58:06 +00:00
										 |  |  | " Vim indent file | 
					
						
							|  |  |  | " Language:     tf (TinyFugue) | 
					
						
							| 
									
										
										
										
											2010-05-30 22:48:02 +02:00
										 |  |  | " Maintainer:   Christian J. Robinson <heptite@gmail.com> | 
					
						
							| 
									
										
										
										
											2017-03-05 17:04:09 +01:00
										 |  |  | " URL:          http://www.vim.org/scripts/script.php?script_id=174 | 
					
						
							|  |  |  | " Last Change:  2017 Feb 25  | 
					
						
							| 
									
										
										
										
											2008-06-24 22:58:06 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | " Only load this indent file when no other was loaded. | 
					
						
							|  |  |  | if exists("b:did_indent") | 
					
						
							|  |  |  |   finish | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | let b:did_indent = 1 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | setlocal indentexpr=GetTFIndent() | 
					
						
							|  |  |  | setlocal indentkeys-=0{,0} indentkeys-=0# indentkeys-=: | 
					
						
							|  |  |  | setlocal indentkeys+==/endif,=/then,=/else,=/done,0; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " Only define the function once: | 
					
						
							|  |  |  | if exists("*GetTFIndent") | 
					
						
							|  |  |  |   finish | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function GetTFIndent() | 
					
						
							|  |  |  | 	" Find a non-blank line above the current line: | 
					
						
							|  |  |  | 	let lnum = prevnonblank(v:lnum - 1) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	" No indent for the start of the file: | 
					
						
							|  |  |  | 	if lnum == 0 | 
					
						
							|  |  |  | 		return 0 | 
					
						
							|  |  |  | 	endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	let ind = indent(lnum) | 
					
						
							|  |  |  | 	let line = getline(lnum) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	" No indentation if the previous line didn't end with "\": | 
					
						
							|  |  |  | 	" (Could be annoying, but it lets you know if you made a mistake.) | 
					
						
							|  |  |  | 	if line !~ '\\$' | 
					
						
							|  |  |  | 		return 0 | 
					
						
							|  |  |  | 	endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if line =~ '\(/def.*\\\|/for.*\(%;\s*\)\@\<!\\\)$' | 
					
						
							| 
									
										
										
										
											2017-03-05 17:04:09 +01:00
										 |  |  | 		let ind = ind + shiftwidth() | 
					
						
							| 
									
										
										
										
											2008-06-24 22:58:06 +00:00
										 |  |  | 	elseif line =~ '\(/if\|/else\|/then\)' | 
					
						
							|  |  |  | 		if line !~ '/endif' | 
					
						
							| 
									
										
										
										
											2017-03-05 17:04:09 +01:00
										 |  |  | 			let ind = ind + shiftwidth() | 
					
						
							| 
									
										
										
										
											2008-06-24 22:58:06 +00:00
										 |  |  | 		endif | 
					
						
							|  |  |  | 	elseif line =~ '/while' | 
					
						
							|  |  |  | 		if line !~ '/done' | 
					
						
							| 
									
										
										
										
											2017-03-05 17:04:09 +01:00
										 |  |  | 			let ind = ind + shiftwidth() | 
					
						
							| 
									
										
										
										
											2008-06-24 22:58:06 +00:00
										 |  |  | 		endif | 
					
						
							|  |  |  | 	endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	let line = getline(v:lnum) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if line =~ '\(/else\|/endif\|/then\)' | 
					
						
							|  |  |  | 		if line !~ '/if' | 
					
						
							| 
									
										
										
										
											2017-03-05 17:04:09 +01:00
										 |  |  | 			let ind = ind - shiftwidth() | 
					
						
							| 
									
										
										
										
											2008-06-24 22:58:06 +00:00
										 |  |  | 		endif | 
					
						
							|  |  |  | 	elseif line =~ '/done' | 
					
						
							|  |  |  | 		if line !~ '/while' | 
					
						
							| 
									
										
										
										
											2017-03-05 17:04:09 +01:00
										 |  |  | 			let ind = ind - shiftwidth() | 
					
						
							| 
									
										
										
										
											2008-06-24 22:58:06 +00:00
										 |  |  | 		endif | 
					
						
							|  |  |  | 	endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	" Comments at the beginning of a line: | 
					
						
							|  |  |  | 	if line =~ '^\s*;' | 
					
						
							|  |  |  | 		let ind = 0 | 
					
						
							|  |  |  | 	endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return ind | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | endfunction |