diff options
Diffstat (limited to 'Src/Wasabi/api/xml/xmlreader.h')
-rw-r--r-- | Src/Wasabi/api/xml/xmlreader.h | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/Src/Wasabi/api/xml/xmlreader.h b/Src/Wasabi/api/xml/xmlreader.h new file mode 100644 index 00000000..b8a599d9 --- /dev/null +++ b/Src/Wasabi/api/xml/xmlreader.h @@ -0,0 +1,75 @@ +#ifndef _XMLREADER_H +#define _XMLREADER_H + +#include <bfc/ptrlist.h> +#include <bfc/string/bfcstring.h> +#include <bfc/stack.h> +#include <bfc/dispatch.h> +#include <api/xml/xmlparams.h> +#include "../xml/ifc_xmlreadercallbackI.h" +#include <api/xml/XMLAutoInclude.h> +class svc_xmlProvider; + +typedef enum { + TYPE_CLASS_CALLBACK = 1, + TYPE_STATIC_CALLBACK, +} xmlreader_callbackType; + + +class XmlReaderCallbackI +{ +public: + XmlReaderCallbackI() : handle(NULL) {} + + virtual void xmlReaderOnStartElementCallback(const wchar_t *xmltag, skin_xmlreaderparams *params) { } + virtual void xmlReaderOnEndElementCallback(const wchar_t *xmltag) { } + +private: + void *handle; +}; + + +class xmlreader_cb_struct +{ +public: + xmlreader_cb_struct(const wchar_t *m, xmlreader_callbackType t, XmlReaderCallbackI *cb) : matchstr(m), type(t), callback(cb) + { + matchstr.toupper(); + } + + StringW matchstr; + xmlreader_callbackType type; + XmlReaderCallbackI * callback; +}; + +class XmlReader : public ifc_xmlreadercallbackI +{ +public: + // matchstr is a regexp string such as "WinampAbstractionLayer/Layer[a-z]" + // or "Winamp*Layer/*/Layout" + void registerCallback(const wchar_t *matchstr, XmlReaderCallbackI *callback); + void registerCallback(const wchar_t *matchstr, void (*static_callback)(int start, const wchar_t *xmltag, skin_xmlreaderparams *params)); + + void unregisterCallback(void *callback); + + // if only_this_class param is specified, only this class will be called back + // returns 1 on success, 0 on error + int loadFile(const wchar_t *filename, const wchar_t *incpath = NULL, int isinclude = 0); + const wchar_t *getIncludePath(); + + int getNumCallbacks() { return callback_list.getNumItems(); } + +private: + void xmlReaderOnStartElementCallback(const wchar_t *xmlpath, const wchar_t *xmltag, ifc_xmlreaderparams *params); + void xmlReaderOnEndElementCallback(const wchar_t *xmlpath, const wchar_t *xmltag); + void xmlReaderOnError(int linenum, int errcode, const wchar_t *errstr); +// int doLoadFile(FILE *fp, svc_xmlProvider *svc, const wchar_t *filename, const wchar_t *incpath); + + PtrList<xmlreader_cb_struct> callback_list; + StringW includePath; +XMLAutoInclude *includer; +}; + +extern XmlReader skinXML; + +#endif |