Merged from the latest developing branch.
[MacVim.git] / runtime / indent / rst.vim
blobf936c9b2f60554da425cdcbdc150f3565ce56ee7
1 " Vim indent file
2 " Language:         reStructuredText Documentation Format
3 " Maintainer:       Nikolai Weibull <now@bitwi.se>
4 " Latest Revision:  2006-12-20
6 if exists("b:did_indent")
7   finish
8 endif
9 let b:did_indent = 1
11 setlocal indentexpr=GetRSTIndent()
12 setlocal indentkeys=!^F,o,O
13 setlocal nosmartindent
15 if exists("*GetRSTIndent")
16   finish
17 endif
19 function GetRSTIndent()
20   let lnum = prevnonblank(v:lnum - 1)
21   if lnum == 0
22     return 0
23   endif
25   let ind = indent(lnum)
26   let line = getline(lnum)
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
34   let line = getline(v:lnum - 1)
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
52   return ind
53 endfunction