00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #ifndef _NSFIXUPFILTER_HPP
00015 #define _NSFIXUPFILTER_HPP
00016
00017 #include <xqilla/events/EventHandler.hpp>
00018
00019 class XPath2MemoryManager;
00020
00021 class XQILLA_API NSFixupFilter : public EventFilter
00022 {
00023 public:
00024 NSFixupFilter(EventHandler *next, XPath2MemoryManager *mm);
00025 ~NSFixupFilter();
00026
00027 virtual void startDocumentEvent(const XMLCh *documentURI, const XMLCh *encoding);
00028 virtual void endDocumentEvent();
00029 virtual void startElementEvent(const XMLCh *prefix, const XMLCh *uri, const XMLCh *localname);
00030 virtual void endElementEvent(const XMLCh *prefix, const XMLCh *uri, const XMLCh *localname,
00031 const XMLCh *typeURI, const XMLCh *typeName);
00032 virtual void attributeEvent(const XMLCh *prefix, const XMLCh *uri, const XMLCh *localname, const XMLCh *value,
00033 const XMLCh *typeURI, const XMLCh *typeName);
00034 virtual void namespaceEvent(const XMLCh *prefix, const XMLCh *uri);
00035
00036 private:
00037 struct ElemEntry {
00038 void set(const XMLCh *p, ElemEntry *pr)
00039 { prefix = p; prev = pr; }
00040
00041 const XMLCh *prefix;
00042 ElemEntry *prev;
00043 };
00044
00045 struct NSEntry {
00046 void set(const XMLCh *p, const XMLCh *u, unsigned int l, NSEntry *pr)
00047 { prefix = p; uri = u; level = l; prev = pr; }
00048
00049 const XMLCh *prefix;
00050 const XMLCh *uri;
00051 unsigned int level;
00052
00053 NSEntry *prev;
00054 };
00055
00056 NSEntry *findPrefix(const XMLCh *prefix);
00058 bool definePrefix(const XMLCh *&prefix, const XMLCh *uri, bool attr = false, bool redefine = true);
00059
00060 XPath2MemoryManager *mm_;
00061 unsigned int level_;
00062 ElemEntry *elements_;
00063 NSEntry *namespaces_;
00064 };
00065
00066 #endif