diff options
author | Jean-Francois Mauguit <jfmauguit@mac.com> | 2024-09-24 09:03:25 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-09-24 09:03:25 -0400 |
commit | bab614c421ed7ae329d26bf028c4a3b1d2450f5a (patch) | |
tree | 12f17f78986871dd2cfb0a56e5e93b545c1ae0d0 /Src/Wasabi/api/xml/xmlreader.h | |
parent | 4bde6044fddf053f31795b9eaccdd2a5a527d21f (diff) | |
parent | 20d28e80a5c861a9d5f449ea911ab75b4f37ad0d (diff) | |
download | winamp-bab614c421ed7ae329d26bf028c4a3b1d2450f5a.tar.gz |
Merge pull request #5 from WinampDesktop/community
Merge to main
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 |