| 
									
										
										
										
											2008-07-13 17:41:49 +00:00
										 |  |  | "  Maintainer:	Paulo Moura <pmoura@logtalk.org> | 
					
						
							|  |  |  | "  Revised on:	2008.06.02 | 
					
						
							|  |  |  | "  Language:	Logtalk | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " This Logtalk indent file is a modified version of the Prolog | 
					
						
							|  |  |  | " indent file written by Gergely Kontra | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " Only load this indent file when no other was loaded. | 
					
						
							|  |  |  | if exists("b:did_indent") | 
					
						
							|  |  |  | 	finish | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | let b:did_indent = 1 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | setlocal indentexpr=GetLogtalkIndent() | 
					
						
							|  |  |  | setlocal indentkeys-=:,0# | 
					
						
							|  |  |  | setlocal indentkeys+=0%,-,0;,>,0) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " Only define the function once. | 
					
						
							|  |  |  | if exists("*GetLogtalkIndent") | 
					
						
							|  |  |  | 	finish | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function! GetLogtalkIndent() | 
					
						
							|  |  |  | 	" Find a non-blank line above the current line. | 
					
						
							|  |  |  | 	let pnum = prevnonblank(v:lnum - 1) | 
					
						
							|  |  |  | 	" Hit the start of the file, use zero indent. | 
					
						
							|  |  |  | 	if pnum == 0 | 
					
						
							|  |  |  | 		return 0 | 
					
						
							|  |  |  | 	endif | 
					
						
							|  |  |  | 	let line = getline(v:lnum) | 
					
						
							|  |  |  | 	let pline = getline(pnum) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	let ind = indent(pnum) | 
					
						
							|  |  |  | 	" Previous line was comment -> use previous line's indent | 
					
						
							|  |  |  | 	if pline =~ '^\s*%' | 
					
						
							|  |  |  | 		retu ind | 
					
						
							|  |  |  | 	endif | 
					
						
							|  |  |  | 	" Check for entity opening directive on previous line | 
					
						
							|  |  |  | 	if pline =~ '^\s*:-\s\(object\|protocol\|category\)\ze(.*,$' | 
					
						
							| 
									
										
										
										
											2017-06-13 18:12:01 +02:00
										 |  |  | 		let ind = ind + shiftwidth() | 
					
						
							| 
									
										
										
										
											2008-07-13 17:41:49 +00:00
										 |  |  | 	" Check for clause head on previous line | 
					
						
							|  |  |  | 	elseif pline =~ ':-\s*\(%.*\)\?$' | 
					
						
							| 
									
										
										
										
											2017-06-13 18:12:01 +02:00
										 |  |  | 		let ind = ind + shiftwidth() | 
					
						
							| 
									
										
										
										
											2008-07-13 17:41:49 +00:00
										 |  |  | 	" Check for entity closing directive on previous line | 
					
						
							|  |  |  | 	elseif pline =~ '^\s*:-\send_\(object\|protocol\|category\)\.\(%.*\)\?$' | 
					
						
							| 
									
										
										
										
											2017-06-13 18:12:01 +02:00
										 |  |  | 		let ind = ind - shiftwidth() | 
					
						
							| 
									
										
										
										
											2008-07-13 17:41:49 +00:00
										 |  |  | 	" Check for end of clause on previous line | 
					
						
							|  |  |  | 	elseif pline =~ '\.\s*\(%.*\)\?$' | 
					
						
							| 
									
										
										
										
											2017-06-13 18:12:01 +02:00
										 |  |  | 		let ind = ind - shiftwidth() | 
					
						
							| 
									
										
										
										
											2008-07-13 17:41:49 +00:00
										 |  |  | 	endif | 
					
						
							|  |  |  | 	" Check for opening conditional on previous line | 
					
						
							|  |  |  | 	if pline =~ '^\s*\([(;]\|->\)' && pline !~ '\.\s*\(%.*\)\?$' && pline !~ '^.*\([)][,]\s*\(%.*\)\?$\)' | 
					
						
							| 
									
										
										
										
											2017-06-13 18:12:01 +02:00
										 |  |  | 		let ind = ind + shiftwidth() | 
					
						
							| 
									
										
										
										
											2008-07-13 17:41:49 +00:00
										 |  |  | 	endif | 
					
						
							|  |  |  | 	" Check for closing an unclosed paren, or middle ; or -> | 
					
						
							|  |  |  | 	if line =~ '^\s*\([);]\|->\)' | 
					
						
							| 
									
										
										
										
											2017-06-13 18:12:01 +02:00
										 |  |  | 		let ind = ind - shiftwidth() | 
					
						
							| 
									
										
										
										
											2008-07-13 17:41:49 +00:00
										 |  |  | 	endif | 
					
						
							|  |  |  | 	return ind | 
					
						
							|  |  |  | endfunction |