123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- " Vim indent file
- " Vim reST indent file
- " Language: reStructuredText Documentation Format
- " Maintainer: Marshall Ward <marshall.ward@gmail.com>
- " Previous Maintainer: Nikolai Weibull <now@bitwi.se>
- " Latest Revision: 2020-03-31
- if exists("b:did_indent")
- finish
- endif
- let b:did_indent = 1
- setlocal indentexpr=GetRSTIndent()
- setlocal indentkeys=!^F,o,O
- setlocal nosmartindent
- if exists("*GetRSTIndent")
- finish
- endif
- let s:itemization_pattern = '^\s*[-*+]\s'
- let s:enumeration_pattern = '^\s*\%(\d\+\|#\)\.\s\+'
- let s:note_pattern = '^\.\. '
- function! s:get_paragraph_start()
- let paragraph_mark_start = getpos("'{")[1]
- return getline(paragraph_mark_start) =~ '\S' ? paragraph_mark_start : paragraph_mark_start + 1
- endfunction
- function GetRSTIndent()
- let lnum = prevnonblank(v:lnum - 1)
- if lnum == 0
- return 0
- endif
- let ind = indent(lnum)
- let line = getline(lnum)
- let psnum = s:get_paragraph_start()
- if psnum != 0
- if getline(psnum) =~ s:note_pattern
- let ind = 3
- endif
- endif
- if line =~ s:itemization_pattern
- let ind += 2
- elseif line =~ s:enumeration_pattern
- let ind += matchend(line, s:enumeration_pattern)
- endif
- let line = getline(v:lnum - 1)
- " Indent :FIELD: lines. Don’t match if there is no text after the field or
- " if the text ends with a sent-ender.
- if line =~ '^:.\+:\s\{-1,\}\S.\+[^.!?:]$'
- return matchend(line, '^:.\{-1,}:\s\+')
- endif
- if line =~ '^\s*$'
- execute lnum
- call search('^\s*\%([-*+]\s\|\%(\d\+\|#\)\.\s\|\.\.\|$\)', 'bW')
- let line = getline('.')
- if line =~ s:itemization_pattern
- let ind -= 2
- elseif line =~ s:enumeration_pattern
- let ind -= matchend(line, s:enumeration_pattern)
- elseif line =~ '^\s*\.\.'
- let ind -= 3
- endif
- endif
- return ind
- endfunction
|