" Author: Antony Lee <anntzer.lee@gmail.com>
" Description: Helper functions for reStructuredText syntax folding
" Last Modified: 2018-12-29

function s:CacheRstFold()
  if !g:rst_fold_enabled
    return
  endif

  let closure = {'header_types': {}, 'max_level': 0, 'levels': {}}
  function closure.Process(match) dict
    let curline = getcurpos()[1]
    if has_key(self.levels, curline - 1)
      " For over+under-lined headers, the regex will match both at the
      " overline and at the title itself; in that case, skip the second match.
      return
    endif
    let lines = split(a:match, '\n')
    let key = repeat(lines[-1][0], len(lines))
    if !has_key(self.header_types, key)
      let self.max_level += 1
      let self.header_types[key] = self.max_level
    endif
    let self.levels[curline] = self.header_types[key]
  endfunction
  let save_cursor = getcurpos()
  let save_mark = getpos("'[")
  silent keeppatterns %s/\v^%(%(([=`:.'"~^_*+#-])\1+\n)?.{1,2}\n([=`:.'"~^_*+#-])\2+)|%(%(([=`:.''"~^_*+#-])\3{2,}\n)?.{3,}\n([=`:.''"~^_*+#-])\4{2,})$/\=closure.Process(submatch(0))/gn
  call setpos('.', save_cursor)
  call setpos("'[", save_mark)
  let b:RstFoldCache = closure.levels
endfunction

function RstFold#GetRstFold()
  if !g:rst_fold_enabled
    return
  endif

  if !has_key(b:, 'RstFoldCache')
    call s:CacheRstFold()
  endif
  if has_key(b:RstFoldCache, v:lnum)
    return '>' . b:RstFoldCache[v:lnum]
  else
    return '='
  endif
endfunction

function RstFold#GetRstFoldText()
  if !g:rst_fold_enabled
    return
  endif

  if !has_key(b:, 'RstFoldCache')
    call s:CacheRstFold()
  endif
  let indent = repeat('  ', b:RstFoldCache[v:foldstart] - 1)
  let thisline = getline(v:foldstart)
  " For over+under-lined headers, skip the overline.
  let text = thisline =~ '^\([=`:.''"~^_*+#-]\)\1\+$' ? getline(v:foldstart + 1) : thisline
  return indent . text
endfunction
