#ifdef SYSTEM_EXPAT
# include <expat.h>
#else
-# include "xmlparse.h"
+# include "sg_expat.h"
#endif
#include <fstream>
#include <iostream>
using std::ifstream;
-
+using std::istream;
+using std::string;
\f
////////////////////////////////////////////////////////////////////////
}
-\f
+//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+void XMLVisitor::savePosition(void)
+{
+ if (parser) {
+ column = XML_GetCurrentColumnNumber(parser);
+ line = XML_GetCurrentLineNumber(parser);
+ }
+}
+
////////////////////////////////////////////////////////////////////////
// Attribute list wrapper for Expat.
////////////////////////////////////////////////////////////////////////
-class ExpatAtts : public XMLAttributes
-{
-public:
- ExpatAtts (const char ** atts) : _atts(atts) {}
-
- virtual int size () const;
- virtual const char * getName (int i) const;
- virtual const char * getValue (int i) const;
-
-private:
- const char ** _atts;
-};
-
int
ExpatAtts::size () const
{
return _atts[i*2+1];
}
+const char *
+ExpatAtts::getValue (const char * name) const
+{
+ return XMLAttributes::getValue(name);
+}
\f
////////////////////////////////////////////////////////////////////////
static void
start_element (void * userData, const char * name, const char ** atts)
{
+ VISITOR.savePosition();
VISITOR.startElement(name, ExpatAtts(atts));
}
static void
end_element (void * userData, const char * name)
{
+ VISITOR.savePosition();
VISITOR.endElement(name);
}
static void
character_data (void * userData, const char * s, int len)
{
+ VISITOR.savePosition();
VISITOR.data(s, len);
}
const char * target,
const char * data)
{
+ VISITOR.savePosition();
VISITOR.pi(target, data);
}
XML_SetCharacterDataHandler(parser, character_data);
XML_SetProcessingInstructionHandler(parser, processing_instruction);
+ visitor.setParser(parser);
+ visitor.setPath(path);
visitor.startXML();
char buf[16384];
XML_GetCurrentLineNumber(parser),
XML_GetCurrentColumnNumber(parser)),
"SimGear XML Parser");
+ visitor.setParser(0);
XML_ParserFree(parser);
throw ex;
}
XML_GetCurrentLineNumber(parser),
XML_GetCurrentColumnNumber(parser)),
"SimGear XML Parser");
+ visitor.setParser(0);
XML_ParserFree(parser);
throw ex;
}
XML_GetCurrentLineNumber(parser),
XML_GetCurrentColumnNumber(parser)),
"SimGear XML Parser");
+ visitor.setParser(0);
XML_ParserFree(parser);
throw ex;
}
+ visitor.setParser(0);
XML_ParserFree(parser);
visitor.endXML();
}