scriptencoding utf-8

if exists('b:current_syntax')
  finish
endif

" Ref: https://github.com/w0ng/vim-hybrid
let s:GUI_COLORS = [
      \ '#282A2E', '#A54242', '#8C9440', '#DE935F',
      \ '#5F819D', '#85678F', '#5E8D87', '#707880',
      \ '#373B41', '#CC6666', '#B5BD68', '#F0C674',
      \ '#81A2BE', '#B294BB', '#8ABEB7', '#C5C8C6',
      \]
let s:TERM_COLORS = [
      \ 0, 1, 2, 3, 4, 5, 6, 7,
      \ 8, 9, 10, 11, 12, 13, 14, 15,
      \]

syntax match GinaBlameBase /.*/ display
syntax match GinaBlameSummary /^.*\ze\<on .\{-}/ containedin=GinaBlameBase

execute printf(
      \ 'syn match GinaBlameRev /\%%(%s\|%s\)[0-9A-F]\+$/ containedin=GinaBlameBase',
      \ g:gina#command#blame#formatter#current_mark,
      \ repeat(' ', len(g:gina#command#blame#formatter#current_mark))
      \)
execute printf(
      \ 'syn match GinaBlameIndicator /%s/ containedin=GinaBlameRev',
      \ g:gina#command#blame#formatter#current_mark,
      \)
syntax match GinaBlameRevColor0  /0/ contained containedin=GinaBlameRev
syntax match GinaBlameRevColor1  /1/ contained containedin=GinaBlameRev
syntax match GinaBlameRevColor2  /2/ contained containedin=GinaBlameRev
syntax match GinaBlameRevColor3  /3/ contained containedin=GinaBlameRev
syntax match GinaBlameRevColor4  /4/ contained containedin=GinaBlameRev
syntax match GinaBlameRevColor5  /5/ contained containedin=GinaBlameRev
syntax match GinaBlameRevColor6  /6/ contained containedin=GinaBlameRev
syntax match GinaBlameRevColor7  /7/ contained containedin=GinaBlameRev
syntax match GinaBlameRevColor8  /8/ contained containedin=GinaBlameRev
syntax match GinaBlameRevColor9  /9/ contained containedin=GinaBlameRev
syntax match GinaBlameRevColor10 /A/ contained containedin=GinaBlameRev
syntax match GinaBlameRevColor11 /B/ contained containedin=GinaBlameRev
syntax match GinaBlameRevColor12 /C/ contained containedin=GinaBlameRev
syntax match GinaBlameRevColor13 /D/ contained containedin=GinaBlameRev
syntax match GinaBlameRevColor14 /E/ contained containedin=GinaBlameRev
syntax match GinaBlameRevColor15 /F/ contained containedin=GinaBlameRev

function! s:define_highlights() abort
  highlight default link GinaBlameBase Comment
  highlight default link GinaBlameSummary Statement
  highlight default link GinaBlameIndicator ErrorMsg
  for i in range(16)
    execute printf(
          \ 'highlight default %s ctermfg=%d ctermbg=%d guifg=%s guibg=%s',
          \ 'GinaBlameRevColor' . i,
          \ s:TERM_COLORS[i], s:TERM_COLORS[i],
          \ s:GUI_COLORS[i], s:GUI_COLORS[i],
          \)
  endfor
endfunction

augroup gina_syntax_blame_internal
  autocmd! * <buffer>
  autocmd ColorScheme * call s:define_highlights()
augroup END

call s:define_highlights()
let b:current_syntax = 'gina-blame'