blob: 21000b7bc43288a2c7ca92eb82bd9493fc770a04 [file] [log] [blame]
Bram Moolenaar42eeac32005-06-29 22:40:58 +00001" Vim indent file
Bram Moolenaarce001a32022-04-27 15:25:03 +01002" Language: xinetd.conf(5) configuration file
3" Maintainer: Doug Kearns <dougkearns@gmail.com>
4" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
5" Last Change: 2022 April 25
Bram Moolenaar42eeac32005-06-29 22:40:58 +00006
7if exists("b:did_indent")
8 finish
9endif
10let b:did_indent = 1
11
12setlocal indentexpr=GetXinetdIndent()
13setlocal indentkeys=0{,0},!^F,o,O
Bram Moolenaar7aa9f6a2007-05-10 18:00:30 +000014setlocal nosmartindent
Bram Moolenaar42eeac32005-06-29 22:40:58 +000015
Bram Moolenaarce001a32022-04-27 15:25:03 +010016let b:undo_indent = "setl inde< indk< si<"
17
Bram Moolenaar42eeac32005-06-29 22:40:58 +000018if exists("*GetXinetdIndent")
19 finish
20endif
Bram Moolenaar8e52a592012-05-18 21:49:28 +020021let s:keepcpo= &cpo
22set cpo&vim
Bram Moolenaar42eeac32005-06-29 22:40:58 +000023
24function s:count_braces(lnum, count_open)
25 let n_open = 0
26 let n_close = 0
27 let line = getline(a:lnum)
28 let pattern = '[{}]'
29 let i = match(line, pattern)
30 while i != -1
31 if synIDattr(synID(a:lnum, i + 1, 0), 'name') !~ 'ld\%(Comment\|String\)'
32 if line[i] == '{'
33 let n_open += 1
34 elseif line[i] == '}'
35 if n_open > 0
36 let n_open -= 1
37 else
38 let n_close += 1
39 endif
40 endif
41 endif
42 let i = match(line, pattern, i + 1)
43 endwhile
44 return a:count_open ? n_open : n_close
45endfunction
46
47function GetXinetdIndent()
48 let pnum = prevnonblank(v:lnum - 1)
49 if pnum == 0
50 return 0
51 endif
52
Bram Moolenaar036986f2017-03-16 17:41:02 +010053 return indent(pnum) + s:count_braces(pnum, 1) * shiftwidth()
54 \ - s:count_braces(v:lnum, 0) * shiftwidth()
Bram Moolenaar42eeac32005-06-29 22:40:58 +000055endfunction
Bram Moolenaar8e52a592012-05-18 21:49:28 +020056
57let &cpo = s:keepcpo
58unlet s:keepcpo