blob: 58504929f2b2a8726504759d7badd4d4e8b3b2e9 [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" Vim indent file
Bram Moolenaar42eeac32005-06-29 22:40:58 +00002" Language: Makefile
Bram Moolenaar57657d82006-04-21 22:12:41 +00003" Maintainer: Nikolai Weibull <now@bitwi.se>
4" Latest Revision: 2006-04-19
Bram Moolenaar071d4272004-06-13 20:20:40 +00005
Bram Moolenaar071d4272004-06-13 20:20:40 +00006if exists("b:did_indent")
7 finish
8endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00009let b:did_indent = 1
10
11setlocal indentexpr=GetMakeIndent()
12setlocal indentkeys=!^F,o,O
13
Bram Moolenaar071d4272004-06-13 20:20:40 +000014if exists("*GetMakeIndent")
15 finish
16endif
17
Bram Moolenaar57657d82006-04-21 22:12:41 +000018let s:rule_rx = '^[^ \t#:][^#:]*:\{1,2}\%([^=:]\|$\)'
19let s:continuation_rx = '\\$'
20let s:assignment_rx = '^\s*\h\w*\s*+\==\s*\zs.*\\$'
Bram Moolenaar071d4272004-06-13 20:20:40 +000021
22function GetMakeIndent()
Bram Moolenaar42eeac32005-06-29 22:40:58 +000023 let lnum = v:lnum - 1
24 if lnum == 0
Bram Moolenaar071d4272004-06-13 20:20:40 +000025 return 0
26 endif
27
Bram Moolenaar42eeac32005-06-29 22:40:58 +000028 let line = getline(lnum)
Bram Moolenaar57657d82006-04-21 22:12:41 +000029 let ind = indent(lnum)
30
31 if line =~ s:rule_rx
32 return ind + &ts
33 elseif line =~ s:continuation_rx
34 while lnum > 0 && line =~ s:continuation_rx && line !~ s:assignment_rx
35 let lnum -= 1
36 let line = getline(lnum)
37 endwhile
38 if line =~ s:assignment_rx
39 call cursor(lnum, 1)
40 return search(s:assignment_rx, 'W') != 0 ? virtcol('.') - 1 : 0
41 else
42 return 0
43 endif
44 else
45 let pnum = lnum - 1
46 if pnum == 0
47 return ind
48 endif
49
50 return getline(pnum) =~ s:continuation_rx ? 0 : ind
Bram Moolenaar071d4272004-06-13 20:20:40 +000051 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +000052endfunction