" MIT License. Copyright (c) 2013 Bailey Ling.
" vim: et ts=2 sts=2 sw=2

let s:prototype = {}

function! s:prototype.split(gutter)
  let self._side = 0
  let self._line .= '%#'.self._group(self._curgroup).'#'.a:gutter
endfunction

function! s:prototype.add_section(group, contents)
  if self._curgroup != ''
    call self._highlighter.add_separator(self._group(self._curgroup), self._group(a:group), self._side)
    let self._line .= '%#'.self._group(self._curgroup).'_to_'.self._group(a:group).'#'
    let self._line .= self._side
          \ ? self._active ? g:airline_left_sep : g:airline_left_alt_sep
          \ : self._active ? g:airline_right_sep : g:airline_right_alt_sep
  endif

  let self._line .= '%#'.self._group(a:group).'#'.a:contents
  let self._curgroup = a:group
endfunction

function! s:prototype.add_raw(text)
  let self._line .= a:text
endfunction

function! s:prototype._group(group)
  return self._active ? a:group : a:group.'_inactive'
endfunction

function! s:prototype.build()
  return self._line
endfunction

function! airline#builder#new(active, highlighter)
  let builder = copy(s:prototype)
  let builder._sections = []
  let builder._active = a:active
  let builder._highlighter = a:highlighter
  let builder._side = 1
  let builder._curgroup = ''
  let builder._line = '%{airline#check_mode()}'
  return builder
endfunction