" MIT License. Copyright (c) 2013-2021 Bailey Ling, Christian Brabandt et al.
" Plugin: https://github.com/chrisbra/NrrwRgn
" vim: et ts=2 sts=2 sw=2

scriptencoding utf-8

if !get(g:, 'loaded_nrrw_rgn', 0)
  finish
endif

function! airline#extensions#nrrwrgn#apply(...)
  if exists(":WidenRegion") == 2
    let spc = g:airline_symbols.space
    if !exists("*nrrwrgn#NrrwRgnStatus()") || empty(nrrwrgn#NrrwRgnStatus())
      call a:1.add_section('airline_a', printf('%s[Narrowed%s#%d]', spc, spc, b:nrrw_instn))
      let bufname=(get(b:, 'orig_buf', 0) ? bufname(b:orig_buf) : substitute(bufname('%'), '^Nrrwrgn_\zs.*\ze_\d\+$', submatch(0), ''))
      call a:1.add_section('airline_c', spc.bufname.spc)
      call a:1.split()
    else
      let dict=nrrwrgn#NrrwRgnStatus()
      let vmode = { 'v': 'Char ', 'V': 'Line ', '': 'Block '}
      let mode = dict.visual ? vmode[dict.visual] : vmode['V']
      let winwidth = airline#util#winwidth()
      if winwidth < 80
        let mode = mode[0]
      endif
      let title = (winwidth < 80 ? "Nrrw" : "Narrowed ")
      let multi = (winwidth < 80 ? 'M' : 'Multi')
      call a:1.add_section('airline_a', printf('[%s%s%s#%d]%s', (dict.multi ? multi : ""),
        \ title, mode, b:nrrw_instn, spc))
      let name = dict.fullname
      if name !=# '[No Name]'
        if winwidth > 100
          " need some space
          let name = fnamemodify(dict.fullname, ':~')
          if strlen(name) > 8
            " shorten name
            let name = substitute(name, '\(.\)[^/\\]*\([/\\]\)', '\1\2', 'g')
          endif
        else
          let name = fnamemodify(dict.fullname, ':t')
        endif
      endif
      let range=(dict.multi ? '' : printf("[%d-%d]", dict.start[1], dict.end[1]))
      call a:1.add_section('airline_c', printf("%s %s %s", name, range,
        \ dict.enabled ? (&encoding ==? 'utf-8'  ? "\u2713"  : '')  : '!'))
      call a:1.split()
      call a:1.add_section('airline_x', get(g:, 'airline_section_x').spc)
      call a:1.add_section('airline_y', spc.get(g:, 'airline_section_y').spc)
      call a:1.add_section('airline_z', spc.get(g:, 'airline_section_z'))
    endif
    return 1
  endif
endfunction

function! airline#extensions#nrrwrgn#init(ext)
  call a:ext.add_statusline_func('airline#extensions#nrrwrgn#apply')
endfunction
