66 lines
1.6 KiB
C
66 lines
1.6 KiB
C
|
#ifndef NULLSOFT_XML_XMLREADER_H
|
||
|
#define NULLSOFT_XML_XMLREADER_H
|
||
|
|
||
|
#include "obj_xml.h"
|
||
|
#include <vector>
|
||
|
#include "expat.h"
|
||
|
#include "../WAT/WAT.h"
|
||
|
|
||
|
struct CallbackStruct
|
||
|
{
|
||
|
CallbackStruct(ifc_xmlreadercallback* _callback, const wchar_t* _match, bool doUpper);
|
||
|
CallbackStruct();
|
||
|
~CallbackStruct();
|
||
|
ifc_xmlreadercallback* callback;
|
||
|
wchar_t* match;
|
||
|
};
|
||
|
|
||
|
class XMLReader : public obj_xml
|
||
|
{
|
||
|
public:
|
||
|
XMLReader();
|
||
|
~XMLReader();
|
||
|
void RegisterCallback(const wchar_t* matchstr, ifc_xmlreadercallback* callback);
|
||
|
void UnregisterCallback(ifc_xmlreadercallback* callback);
|
||
|
int Open();
|
||
|
int OpenNamespace();
|
||
|
void OldFeed(void* data, size_t dataSize);
|
||
|
int Feed(void* data, size_t dataSize);
|
||
|
void Close();
|
||
|
void PushContext();
|
||
|
void PopContext();
|
||
|
void Reset();
|
||
|
void SetEncoding(const wchar_t* encoding);
|
||
|
int SetCaseSensitive();
|
||
|
|
||
|
protected:
|
||
|
RECVS_DISPATCH;
|
||
|
|
||
|
public:
|
||
|
void XMLCALL StartTag(const wchar_t* name, const wchar_t** atts);
|
||
|
void XMLCALL EndTag(const wchar_t* name);
|
||
|
void XMLCALL TextHandler(const wchar_t* s, int len);
|
||
|
|
||
|
void XMLCALL StartTag(const char* name, const char** atts);
|
||
|
void XMLCALL EndTag(const char* name);
|
||
|
void XMLCALL TextHandler(const char* s, int len);
|
||
|
|
||
|
private:
|
||
|
const wchar_t* BuildPath();
|
||
|
const wchar_t* AddPath(const wchar_t* node);
|
||
|
const wchar_t* AddPath(const char* node);
|
||
|
const wchar_t* RemovePath(const wchar_t* node);
|
||
|
const wchar_t* RemovePath(const char* node);
|
||
|
std::wstring pathString;//, pathUpper;
|
||
|
std::wstring endPathString;//, endPathUpper;
|
||
|
std::wstring currentNode;
|
||
|
|
||
|
private:
|
||
|
std::vector<CallbackStruct*> callbacks;
|
||
|
std::vector<XML_Parser> context;
|
||
|
XML_Parser parser;
|
||
|
bool case_sensitive;
|
||
|
std::wstring textCache;
|
||
|
|
||
|
};
|
||
|
#endif
|