1" IDL (Interactive Data Language) indent file. 2" Language: IDL (ft=idlang) 3" Last change: 2012 May 18 4" Maintainer: Aleksandar Jelenak <ajelenak AT yahoo.com> 5 6" Only load this indent file when no other was loaded. 7if exists("b:did_indent") 8 finish 9endif 10let b:did_indent = 1 11 12setlocal indentkeys=o,O,0=endif,0=ENDIF,0=endelse,0=ENDELSE,0=endwhile,0=ENDWHILE,0=endfor,0=ENDFOR,0=endrep,0=ENDREP 13 14setlocal indentexpr=GetIdlangIndent(v:lnum) 15 16" Only define the function once. 17if exists("*GetIdlangIndent") 18 finish 19endif 20 21function GetIdlangIndent(lnum) 22 " First non-empty line above the current line. 23 let pnum = prevnonblank(v:lnum-1) 24 " v:lnum is the first non-empty line -- zero indent. 25 if pnum == 0 26 return 0 27 endif 28 " Second non-empty line above the current line. 29 let pnum2 = prevnonblank(pnum-1) 30 31 " Current indent. 32 let curind = indent(pnum) 33 34 " Indenting of continued lines. 35 if getline(pnum) =~ '\$\s*\(;.*\)\=$' 36 if getline(pnum2) !~ '\$\s*\(;.*\)\=$' 37 let curind = curind+&sw 38 endif 39 else 40 if getline(pnum2) =~ '\$\s*\(;.*\)\=$' 41 let curind = curind-&sw 42 endif 43 endif 44 45 " Indenting blocks of statements. 46 if getline(v:lnum) =~? '^\s*\(endif\|endelse\|endwhile\|endfor\|endrep\)\>' 47 if getline(pnum) =~? 'begin\>' 48 elseif indent(v:lnum) > curind-&sw 49 let curind = curind-&sw 50 else 51 return -1 52 endif 53 elseif getline(pnum) =~? 'begin\>' 54 if indent(v:lnum) < curind+&sw 55 let curind = curind+&sw 56 else 57 return -1 58 endif 59 endif 60 return curind 61endfunction 62 63