if exists('b:current_syntax') && b:current_syntax ==# 'SpaceVimREPL'
  finish
endif
let b:current_syntax = 'SpaceVimREPL'
syntax case ignore
syn match SpaceVimREPLLabel /\[REPL executable\]/
syn match SpaceVimREPLRunnerCmd /\(\[REPL executable\]\ \)\@<=.*/
hi def link SpaceVimREPLLabel String
hi def link RunnerCmd Comment
let s:shellcmd_colors =
      \ [
      \ '#6c6c6c', '#ff6666', '#66ff66', '#ffd30a',
      \ '#1e95fd', '#ff13ff', '#1bc8c8', '#c0c0c0',
      \ '#383838', '#ff4444', '#44ff44', '#ffb30a',
      \ '#6699ff', '#f820ff', '#4ae2e2', '#ffffff',
      \]
function! s:highlight_shell_cmd() abort

  let highlight_table = {
        \ '0' : ' cterm=NONE ctermfg=NONE ctermbg=NONE gui=NONE guifg=NONE guibg=NONE',
        \ '1' : ' cterm=BOLD gui=BOLD',
        \ '3' : ' cterm=ITALIC gui=ITALIC',
        \ '4' : ' cterm=UNDERLINE gui=UNDERLINE',
        \ '7' : ' cterm=REVERSE gui=REVERSE',
        \ '8' : ' ctermfg=0 ctermbg=0 guifg=#000000 guibg=#000000',
        \ '9' : ' gui=UNDERCURL',
        \ '21' : ' cterm=UNDERLINE gui=UNDERLINE',
        \ '22' : ' gui=NONE',
        \ '23' : ' gui=NONE',
        \ '24' : ' gui=NONE',
        \ '25' : ' gui=NONE',
        \ '27' : ' gui=NONE',
        \ '28' : ' ctermfg=NONE ctermbg=NONE guifg=NONE guibg=NONE',
        \ '29' : ' gui=NONE',
        \ '39' : ' ctermfg=NONE guifg=NONE',
        \ '49' : ' ctermbg=NONE guibg=NONE',
        \ '90' : ' ctermfg=245 guifg=#928374',
        \ '95' : ' ctermfg=175 guifg=#d3869b',
        \}
  for color in range(30, 37)
    " Foreground color pattern.
    let highlight_table[color] = printf(' ctermfg=%d guifg=%s',
          \ color - 30, s:shellcmd_colors[color - 30])
    for color2 in [1, 3, 4, 7]
      " Type;Foreground color pattern
      let highlight_table[color2 . ';' . color] =
            \ highlight_table[color2] . highlight_table[color]
    endfor
  endfor
  for color in range(40, 47)
    " Background color pattern.
    let highlight_table[color] = printf(' ctermbg=%d guibg=%s',
          \ color - 40, s:shellcmd_colors[color - 40])
    for color2 in range(30, 37)
      " Foreground;Background color pattern.
      let highlight_table[color2 . ';' . color] =
            \ highlight_table[color2] . highlight_table[color]
    endfor
  endfor

  syntax match SpaceVimRunner__Output_Shellcmd_Conceal
        \ contained conceal    '\e\[[0-9;]*m'
        \ containedin=SpaceVimRunner__Output_Shellcmd

  syntax match SpaceVimRunner__Output_Shellcmd_Conceal
        \ contained conceal    '\e\[?1h'
        \ containedin=SpaceVimRunner__Output_Shellcmd

  syntax match uniteSource__Output_Shellcmd_Ignore
        \ contained conceal    '\e\[?\d[hl]\|\e=\r\|\r\|\e>'
        \ containedin=SpaceVimRunner__Output_Shellcmd

  for [key, highlight] in items(highlight_table)
    let syntax_name = 'SpaceVimRunner__Output_Shellcmd_Color'
          \ . substitute(key, ';', '_', 'g')
    let syntax_command = printf('start=+\e\[0\?%sm+ end=+\ze\e[\[0*m]\|$+ ' .
          \ 'contains=SpaceVimRunner__Output_Shellcmd_Conceal ' .
          \ 'containedin=SpaceVimRunner__Output_Shellcmd oneline', key)

    execute 'syntax region' syntax_name syntax_command
    execute 'highlight' syntax_name highlight
  endfor
endfunction

call s:highlight_shell_cmd()

