00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef VCSN_XML_ERROR_HANDLER_HXX
00018 # define VCSN_XML_ERROR_HANDLER_HXX
00019
00020 # include <vaucanson/xml/error_handler.hh>
00021
00022 # include <iostream>
00023
00024 namespace vcsn
00025 {
00026 namespace xml
00027 {
00028 inline
00029 std::string
00030 myDOMErrorHandler::get_msg() const
00031 {
00032 return message;
00033 }
00034
00035 inline
00036 myDOMErrorHandler::myDOMErrorHandler(const myDOMErrorHandler& c)
00037 : DOMErrorHandler()
00038 {
00039 message = c.get_msg();
00040 error_ = c.has_error();
00041 }
00042
00043 inline
00044 bool
00045 myDOMErrorHandler::has_error() const
00046 {
00047 return error_;
00048 }
00049
00050 inline
00051 bool
00052 myDOMErrorHandler::handleError(const xercesc::DOMError& err)
00053 {
00054 using namespace xercesc;
00055 std::string msg;
00056
00057 const XMLCh* uri = err.getLocation()->getURI();
00058 if (uri) {
00059 char* str = XMLString::transcode(uri);
00060 msg += str;
00061 XMLString::release(&str);
00062 msg += ": ";
00063 }
00064
00065 std::ostringstream lo;
00066 lo << (int)(err.getLocation()->getLineNumber());
00067 msg += lo.str();
00068 msg += ", ";
00069 std::ostringstream co;
00070 co << (int)(err.getLocation()->getColumnNumber());
00071 msg += co.str();
00072 msg += ": ";
00073 const XMLCh* reason = err.getMessage();
00074 if (reason) {
00075 char* str = XMLString::transcode(reason);
00076 msg += str;
00077 XMLString::release(&str);
00078 }
00079 else
00080 msg += "no reason";
00081
00082 if (err.getSeverity() == xercesc::DOMError::DOM_SEVERITY_WARNING) {
00083 std::cerr << msg << std::endl;
00084 return true;
00085 }
00086 message = msg;
00087
00088 error_ = true;
00089 return false;
00090 }
00091 }
00092 }
00093
00094 #endif // ! VCSN_XML_ERROR_HANDLER_HXX