" Vim compiler file
" Compiler:     ConTeXt typesetting engine
" Maintainer:   Nicola Vitacolonna <nvitacolonna@gmail.com>
" Last Change:  2016 Oct 21

if exists("current_compiler")
  finish
endif
let s:keepcpo= &cpo
set cpo&vim

" If makefile exists and we are not asked to ignore it, we use standard make
" (do not redefine makeprg)
if get(b:, 'context_ignore_makefile', get(g:, 'context_ignore_makefile', 0)) ||
      \ (!filereadable('Makefile') && !filereadable('makefile'))
  let current_compiler = 'context'
  " The following assumes that the current working directory is set to the
  " directory of the file to be typeset
  let s:makeprg = get(b:, 'context_mtxrun', get(g:, 'context_mtxrun', 'mtxrun'))
        \ . ' --script context --autogenerate --nonstopmode --synctex='
        \ . (get(b:, 'context_synctex', get(g:, 'context_synctex', 0)) ? '1' : '0')
        \ . ' ' . get(b:, 'context_extra_options', get(g:, 'context_extra_options', ''))
        \ . ' ' . shellescape(expand('%:p:t'))
  " CompilerSet makeprg=context
  execute 'CompilerSet makeprg=' .. escape(s:makeprg, ' ')
else
  let current_compiler = 'make'
endif

let b:context_errorformat = ''
      \ . '%-Popen source%.%#> %f,'
      \ . '%-Qclose source%.%#> %f,'
      \ . "%-Popen source%.%#name '%f',"
      \ . "%-Qclose source%.%#name '%f',"
      \ . '%Etex %trror%.%#mp error on line %l in file %f:%.%#,'
      \ . 'tex %trror%.%#error on line %l in file %f: %m,'
      \ . '%Elua %trror%.%#error on line %l in file %f:,'
      \ . '%+Emetapost %#> error: %#,'
      \ . '! error: %#%m,'
      \ . '%-C %#,'
      \ . '%C! %m,'
      \ . '%Z[ctxlua]%m,'
      \ . '%+C<*> %.%#,'
      \ . '%-C%.%#,'
      \ . '%Z...%m,'
      \ . '%-Zno-error,'
      \ . '%-G%.%#' " Skip remaining lines

execute 'CompilerSet errorformat=' . escape(b:context_errorformat, ' ')

let &cpo = s:keepcpo
unlet s:keepcpo
