" Author: Eric Van Dewoestine
"
" License: {{{
"
" Copyright (C) 2005 - 2014 Eric Van Dewoestine
"
" This program is free software: you can redistribute it and/or modify
" it under the terms of the GNU General Public License as published by
" the Free Software Foundation, either version 3 of the License, or
" (at your option) any later version.
"
" This program is distributed in the hope that it will be useful,
" but WITHOUT ANY WARRANTY; without even the implied warranty of
" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
" GNU General Public License for more details.
"
" You should have received a copy of the GNU General Public License
" along with this program. If not, see .
"
" }}}
" Script Variables {{{
let s:command_validate = '-command xml_validate -p "" -f ""'
" }}}
function! eclim#xml#validate#Validate(on_save, ...) " {{{
" Optional args:
" bang: '!' or '', where '!' indicates that we should not jump to the
" first error.
if a:on_save && (!g:EclimXmlValidate || eclim#util#WillWrittenBufferClose())
return
endif
if eclim#EclimAvailable(0)
if !eclim#project#util#IsCurrentFileInProject()
return
endif
let project = eclim#project#util#GetCurrentProjectName()
let file = eclim#project#util#GetProjectRelativeFilePath()
let command = s:command_validate
let command = substitute(command, '', project, '')
let command = substitute(command, '', file, '')
if search('xsi:schemaLocation', 'cnw')
let command .= ' -s'
endif
let result = eclim#Execute(command)
if type(result) == g:LIST_TYPE && len(result) > 0
let errors = eclim#util#ParseLocationEntries(
\ result, g:EclimValidateSortResults)
call eclim#util#SetLocationList(errors)
" bang arg supplied, but no bang, so jump to first error.
if len(a:000) > 0 && a:000[0] == ''
lfirst
endif
return 1
else
call eclim#util#ClearLocationList()
return 0
endif
else
" alternative method via xmllint
if !a:on_save && executable('xmllint')
let file = substitute(expand('%:p'), '\', '/', 'g')
call eclim#util#MakeWithCompiler('eclim_xmllint', '', file)
call eclim#display#signs#Update()
elseif !a:on_save
call eclim#util#EchoWarning("eclimd not running.")
endif
endif
return 0
endfunction " }}}
" vim:ft=vim:fdm=marker