blob: b4c6ae6feaae59c04b220d054d02a2d339f6d8d7 [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" IDL (Interactive Data Language) indent file.
2" Language: IDL (ft=idlang)
Bram Moolenaar8e52a592012-05-18 21:49:28 +02003" Last change: 2012 May 18
Bram Moolenaar071d4272004-06-13 20:20:40 +00004" 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
Bram Moolenaar8e52a592012-05-18 21:49:28 +020012setlocal indentkeys=o,O,0=endif,0=ENDIF,0=endelse,0=ENDELSE,0=endwhile,0=ENDWHILE,0=endfor,0=ENDFOR,0=endrep,0=ENDREP
Bram Moolenaar071d4272004-06-13 20:20:40 +000013
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