1" Vim indent file
2" Language:         reStructuredText Documentation Format
3" Maintainer:       Nikolai Weibull <now@bitwi.se>
4" Latest Revision:  2006-12-20
5
6if exists("b:did_indent")
7  finish
8endif
9let b:did_indent = 1
10
11setlocal indentexpr=GetRSTIndent()
12setlocal indentkeys=!^F,o,O
13setlocal nosmartindent
14
15if exists("*GetRSTIndent")
16  finish
17endif
18
19function GetRSTIndent()
20  let lnum = prevnonblank(v:lnum - 1)
21  if lnum == 0
22    return 0
23  endif
24
25  let ind = indent(lnum)
26  let line = getline(lnum)
27
28  if line =~ '^\s*[-*+]\s'
29    let ind = ind + 2
30  elseif line =~ '^\s*\d\+.\s'
31    let ind = ind + matchend(substitute(line, '^\s*', '', ''), '\d\+.\s\+')
32  endif
33
34  let line = getline(v:lnum - 1)
35
36  if line =~ '^\s*$'
37    execute lnum
38    call search('^\s*\%([-*+]\s\|\d\+.\s\|\.\.\|$\)', 'bW')
39    let line = getline('.')
40    if line =~ '^\s*[-*+]'
41      let ind = ind - 2
42    elseif line =~ '^\s*\d\+\.\s'
43      let ind = ind - matchend(substitute(line, '^\s*', '', ''),
44            \ '\d\+\.\s\+')
45    elseif line =~ '^\s*\.\.'
46      let ind = ind - 3
47    else
48      let ind = ind
49    endif
50  endif
51
52  return ind
53endfunction
54