Ver código fonte

ENH: Allow cmXMLParser subclasses to report errors

This tells cmXMLParser to report error messages through virtual method
cmXMLParser::ReportError so that subclasses can override the default
report.
Brad King 16 anos atrás
pai
commit
d033f0d2d1
2 arquivos alterados com 13 adições e 5 exclusões
  1. 10 5
      Source/cmXMLParser.cxx
  2. 3 0
      Source/cmXMLParser.h

+ 10 - 5
Source/cmXMLParser.cxx

@@ -211,10 +211,15 @@ void cmXMLParserCharacterDataHandler(void* parser, const char* data,
 //----------------------------------------------------------------------------
 void cmXMLParser::ReportXmlParseError()
 {
-  std::cerr << "Error parsing XML in stream at line "
-    << XML_GetCurrentLineNumber(static_cast<XML_Parser>(this->Parser))
-    << ": " 
-    << XML_ErrorString(XML_GetErrorCode(
-        static_cast<XML_Parser>(this->Parser))) << std::endl;
+  XML_Parser* parser = static_cast<XML_Parser*>(this->Parser);
+  this->ReportError(XML_GetCurrentLineNumber(parser),
+                    XML_GetCurrentColumnNumber(parser),
+                    XML_ErrorString(XML_GetErrorCode(parser)));
 }
 
+//----------------------------------------------------------------------------
+void cmXMLParser::ReportError(int line, int, const char* msg)
+{
+  std::cerr << "Error parsing XML in stream at line "
+            << line << ": " << msg << std::endl;
+}

+ 3 - 0
Source/cmXMLParser.h

@@ -91,6 +91,9 @@ protected:
   //! Called by Parse to report an XML syntax error.
   virtual void ReportXmlParseError();  
 
+  /** Called by ReportXmlParseError with basic error info.  */
+  virtual void ReportError(int line, int column, const char* msg);
+
   //! Utility for convenience of subclasses.  Wraps isspace C library
   // routine.
   static int IsSpace(char c);