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