00001 //$Header: /home/ben/Mapper/c++/RCS/MapperErrorHandler.cpp,v 6.8 2002/07/09 22:50:53 ben Exp $
00002 // Copyright Benedict Adamson 2002.
00003 // This file is part of Mapper.
00004
00005 // Mapper is free software; you can redistribute it and/or modify
00006 // it under the terms of the GNU General Public License as published by
00007 // the Free Software Foundation; either version 2 of the License, or
00008 // (at your option) any later version.
00009
00010 // Mapper is distributed in the hope that it will be useful,
00011 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00012 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
00013 // GNU General Public License for more details.
00014
00015 // You should have received a copy of the GNU General Public License
00016 // along with Mapper; if not, write to the Free Software
00017 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
00018
00031 #include <fstream>
00032
00033 #include <dom/DOM_DOMException.hpp>
00034 #include <dom/DOM_Element.hpp>
00035 #include <dom/DOM_Node.hpp>
00036 #include <sax/ErrorHandler.hpp>
00037 #include <sax/SAXParseException.hpp>
00038 #include <util/PlatformUtils.hpp>
00039 #include <util/XMLString.hpp>
00040
00041 #include "DOM_output.h"
00042 #include "MapperErrorHandler.h"
00043
00044
00045
00046 MapperErrorHandler::MapperErrorHandler(
00047 const char *name
00048 )
00049 :
00050 errors( 0U ),
00051 my_name( name )
00052 {
00053 //Do nothing
00054 {//Postoncditions:
00055 assert( this->errors == 0 );
00056 assert( this->my_name == name );
00057 };
00058 }
00059
00060
00061
00062 MapperErrorHandler::~MapperErrorHandler(void)
00063 {
00064 //Do nothing
00065 }
00066
00067
00068
00069 void MapperErrorHandler::report(
00070 const string entity,
00071 const unsigned line,
00072 const unsigned column,
00073 const string &severity,
00074 const string &message
00075 ) const
00076 {
00077 if( entity.length() ){
00078 cerr << entity << ':';
00079 if( line != (unsigned)(-1) ){//sic. line number available
00080 cerr << line << ':';
00081 if( column != (unsigned)(-1) )//sic. column number available
00082 cerr << column << ':';
00083 ;
00084 };
00085 };
00086 cerr << severity << ": " << message << "\n";
00087 }
00088
00089
00090
00091 void MapperErrorHandler::report(
00092 const SAXParseException &ex,
00093 const string &severity
00094 ) const
00095 {
00096 const XMLCh *entity_SAX = ex.getSystemId();
00097 const char *entity_c = XMLString::transcode( entity_SAX );
00098 string entity;
00099 if( entity_c )
00100 entity = entity_c;
00101 else
00102 entity = "";
00103 ;
00104 const unsigned line = ex.getLineNumber();
00105 const unsigned column = ex.getColumnNumber();
00106 const char *message = XMLString::transcode( ex.getMessage() );
00107 this->report( string(entity), line, column, severity, string(message) );
00108 if( entity_c ) delete entity_c;
00109 delete message;
00110 }
00111
00112
00113
00114 void MapperErrorHandler::warning(
00115 const SAXParseException &exception
00116 )
00117 {
00118 this->report( exception, "warning" );
00119 }
00120
00121
00122
00123 void MapperErrorHandler::error(
00124 const SAXParseException &exception
00125 )
00126 {
00127 this->report( exception, "error" );
00128 this->errors++;
00129 }
00130
00131
00132
00133 void MapperErrorHandler::fatalError(
00134 const SAXParseException &exception
00135 )
00136 {
00137 this->report( exception, "error: fatal error" );
00138 this->errors++;
00139 }
00140
00141
00142
00143 void MapperErrorHandler::resetErrors(void)
00144 {
00145 this->errors = 0U;
00146 }
00147
00148
00149
00150 void MapperErrorHandler::fatalError(
00151 const DOM_DOMException &exception
00152 )
00153 {
00154 const char *message = exception.msg.transcode();
00155 this->error( message );
00156 delete message;
00157 }
00158
00159
00160
00161 void MapperErrorHandler::fatalError(
00162 const XMLException &exception
00163 )
00164 {
00165 this->errors++;
00166 char *m = XMLString::transcode( exception.getMessage() );
00167 this->report(
00168 exception.getSrcFile(),
00169 exception.getSrcLine(), (unsigned)(-1),
00170 "error (fatal)", m
00171 );
00172 delete m;
00173 }
00174
00175
00176
00177 void MapperErrorHandler::error(
00178 const error::element_error &e
00179 )
00180 {
00181 this->errors++;
00182 cerr << "error: " << e.message << "\n";
00183 DOM_output::traceback( cerr, e.element );
00184 }
00185
00186
00187
00188 void MapperErrorHandler::unexpectedError(void)
00189 {
00190 this->error( "unexpected error" );
00191 }
00192
00193
00194
00195 void MapperErrorHandler::error(
00196 const char *message
00197 )
00198 {
00199 cerr << my_name << ":error: " << message << "\n";
00200 this->errors++;
00201 }
00202
00203
00204
00205 void MapperErrorHandler::warning(
00206 const char *message
00207 )
00208 {
00209 cerr << my_name << ":warning: " << message << "\n";
00210 }
00211
00212
00213
00214 void MapperErrorHandler::badOptionArgument(
00215 const char option,
00216 const char *optarg
00217 )
00218 {
00219 cerr << my_name << ":error: bad -" << option << " option: " << optarg << "\n";
00220 this->errors++;
00221 }