blob: 7402e8688ef4a83196ef2297258cca7ba2580718 [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" IDL (Interactive Data Language) indent file.
2" Language: IDL (ft=idlang)
Bram Moolenaar3ec574f2017-06-13 18:12:01 +02003" Last change: 2017 Jun 13
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*\(;.*\)\=$'
Bram Moolenaar3ec574f2017-06-13 18:12:01 +020037 let curind = curind+shiftwidth()
Bram Moolenaar071d4272004-06-13 20:20:40 +000038 endif
39 else
40 if getline(pnum2) =~ '\$\s*\(;.*\)\=$'
Bram Moolenaar3ec574f2017-06-13 18:12:01 +020041 let curind = curind-shiftwidth()
Bram Moolenaar071d4272004-06-13 20:20:40 +000042 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\>'
Bram Moolenaar3ec574f2017-06-13 18:12:01 +020048 elseif indent(v:lnum) > curind-shiftwidth()
49 let curind = curind-shiftwidth()
Bram Moolenaar071d4272004-06-13 20:20:40 +000050 else
51 return -1
52 endif
53 elseif getline(pnum) =~? 'begin\>'
Bram Moolenaar3ec574f2017-06-13 18:12:01 +020054 if indent(v:lnum) < curind+shiftwidth()
55 let curind = curind+shiftwidth()
Bram Moolenaar071d4272004-06-13 20:20:40 +000056 else
57 return -1
58 endif
59 endif
60 return curind
61endfunction
62