| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | " IDL (Interactive Data Language) indent file. | 
					
						
							|  |  |  | " Language: IDL (ft=idlang) | 
					
						
							| 
									
										
										
										
											2012-05-18 21:49:28 +02:00
										 |  |  | " Last change:	2012 May 18 | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | " Maintainer: Aleksandar Jelenak <ajelenak AT yahoo.com> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " Only load this indent file when no other was loaded. | 
					
						
							|  |  |  | if exists("b:did_indent") | 
					
						
							|  |  |  |    finish | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | let b:did_indent = 1 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-18 21:49:28 +02:00
										 |  |  | setlocal indentkeys=o,O,0=endif,0=ENDIF,0=endelse,0=ENDELSE,0=endwhile,0=ENDWHILE,0=endfor,0=ENDFOR,0=endrep,0=ENDREP | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | setlocal indentexpr=GetIdlangIndent(v:lnum) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " Only define the function once. | 
					
						
							|  |  |  | if exists("*GetIdlangIndent") | 
					
						
							|  |  |  |    finish | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function GetIdlangIndent(lnum) | 
					
						
							|  |  |  |    " First non-empty line above the current line. | 
					
						
							|  |  |  |    let pnum = prevnonblank(v:lnum-1) | 
					
						
							|  |  |  |    " v:lnum is the first non-empty line -- zero indent. | 
					
						
							|  |  |  |    if pnum == 0 | 
					
						
							|  |  |  |       return 0 | 
					
						
							|  |  |  |    endif | 
					
						
							|  |  |  |    " Second non-empty line above the current line. | 
					
						
							|  |  |  |    let pnum2 = prevnonblank(pnum-1) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    " Current indent. | 
					
						
							|  |  |  |    let curind = indent(pnum) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    " Indenting of continued lines. | 
					
						
							|  |  |  |    if getline(pnum) =~ '\$\s*\(;.*\)\=$' | 
					
						
							|  |  |  |       if getline(pnum2) !~ '\$\s*\(;.*\)\=$' | 
					
						
							|  |  |  | 	 let curind = curind+&sw | 
					
						
							|  |  |  |       endif | 
					
						
							|  |  |  |    else | 
					
						
							|  |  |  |       if getline(pnum2) =~ '\$\s*\(;.*\)\=$' | 
					
						
							|  |  |  | 	 let curind = curind-&sw | 
					
						
							|  |  |  |       endif | 
					
						
							|  |  |  |    endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    " Indenting blocks of statements. | 
					
						
							|  |  |  |    if getline(v:lnum) =~? '^\s*\(endif\|endelse\|endwhile\|endfor\|endrep\)\>' | 
					
						
							|  |  |  |       if getline(pnum) =~? 'begin\>' | 
					
						
							|  |  |  |       elseif indent(v:lnum) > curind-&sw | 
					
						
							|  |  |  | 	 let curind = curind-&sw | 
					
						
							|  |  |  |       else | 
					
						
							|  |  |  | 	 return -1 | 
					
						
							|  |  |  |       endif | 
					
						
							|  |  |  |    elseif getline(pnum) =~? 'begin\>' | 
					
						
							|  |  |  |       if indent(v:lnum) < curind+&sw | 
					
						
							|  |  |  | 	 let curind = curind+&sw | 
					
						
							|  |  |  |       else | 
					
						
							|  |  |  | 	 return -1 | 
					
						
							|  |  |  |       endif | 
					
						
							|  |  |  |    endif | 
					
						
							|  |  |  |    return curind | 
					
						
							|  |  |  | endfunction | 
					
						
							|  |  |  | 
 |