blob: 1519865ab581589fcc61538a616b77c1199d65fd [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" IDL (Interactive Data Language) indent file.
Bram Moolenaar6e649222021-10-04 21:32:54 +01002" Language: IDL (ft=idlang)
3" Maintainer: Aleksandar Jelenak <ajelenak AT yahoo.com> (Invalid email address)
4" Doug Kearns <dougkearns@gmail.com>
Bram Moolenaarcbaff5e2022-04-08 17:45:08 +01005" Last change: 2022 Apr 06
Bram Moolenaar071d4272004-06-13 20:20:40 +00006
7" Only load this indent file when no other was loaded.
8if exists("b:did_indent")
9 finish
10endif
11let b:did_indent = 1
12
Bram Moolenaar8e52a592012-05-18 21:49:28 +020013setlocal 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 +000014
15setlocal indentexpr=GetIdlangIndent(v:lnum)
16
Bram Moolenaarcbaff5e2022-04-08 17:45:08 +010017let b:undo_indent = "setl inde< indk<"
18
Bram Moolenaar071d4272004-06-13 20:20:40 +000019" Only define the function once.
20if exists("*GetIdlangIndent")
21 finish
22endif
23
24function GetIdlangIndent(lnum)
25 " First non-empty line above the current line.
26 let pnum = prevnonblank(v:lnum-1)
27 " v:lnum is the first non-empty line -- zero indent.
28 if pnum == 0
29 return 0
30 endif
31 " Second non-empty line above the current line.
32 let pnum2 = prevnonblank(pnum-1)
33
34 " Current indent.
35 let curind = indent(pnum)
36
37 " Indenting of continued lines.
38 if getline(pnum) =~ '\$\s*\(;.*\)\=$'
39 if getline(pnum2) !~ '\$\s*\(;.*\)\=$'
Bram Moolenaar3ec574f2017-06-13 18:12:01 +020040 let curind = curind+shiftwidth()
Bram Moolenaar071d4272004-06-13 20:20:40 +000041 endif
42 else
43 if getline(pnum2) =~ '\$\s*\(;.*\)\=$'
Bram Moolenaar3ec574f2017-06-13 18:12:01 +020044 let curind = curind-shiftwidth()
Bram Moolenaar071d4272004-06-13 20:20:40 +000045 endif
46 endif
47
48 " Indenting blocks of statements.
49 if getline(v:lnum) =~? '^\s*\(endif\|endelse\|endwhile\|endfor\|endrep\)\>'
50 if getline(pnum) =~? 'begin\>'
Bram Moolenaar3ec574f2017-06-13 18:12:01 +020051 elseif indent(v:lnum) > curind-shiftwidth()
52 let curind = curind-shiftwidth()
Bram Moolenaar071d4272004-06-13 20:20:40 +000053 else
54 return -1
55 endif
56 elseif getline(pnum) =~? 'begin\>'
Bram Moolenaar3ec574f2017-06-13 18:12:01 +020057 if indent(v:lnum) < curind+shiftwidth()
58 let curind = curind+shiftwidth()
Bram Moolenaar071d4272004-06-13 20:20:40 +000059 else
60 return -1
61 endif
62 endif
63 return curind
64endfunction
65