class Nokogiri::XML::Document

def wrap_with_error_handling(&block)

def wrap_with_error_handling(&block)
  error_list = []
  LibXML.xmlInitParser()
  LibXML.xmlResetLastError()
  LibXML.xmlSetStructuredErrorFunc(nil, SyntaxError.error_array_pusher(error_list))
  ptr = yield
  LibXML.xmlSetStructuredErrorFunc(nil, nil)
  if ptr.null?
    error = LibXML.xmlGetLastError()
    if error
      raise SyntaxError.wrap(error)
    else
      raise RuntimeError, "Could not parse document"
    end
  end
  document = wrap(ptr)
  document.errors = error_list
  return document
end