xref: /vim-8.2.3635/runtime/indent/idlang.vim (revision 2bf24176)
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