rtSaxCppParser.h
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef __RTSAXCPPPARSER_H_
00026 #define __RTSAXCPPPARSER_H_
00027
00028 #include <string.h>
00029 #include <stdlib.h>
00030
00031 #include "rtxsrc/rtxErrCodes.h"
00032 #include "rtxsrc/OSRTContext.h"
00033 #include "rtxmlsrc/rtSaxCppParserIF.h"
00034 #include "rtxmlsrc/osrtxml.h"
00035 #include "rtxmlsrc/rtSaxDefs.h"
00036
00037 class EXTERNXML OSXMLBasePtr {
00038 OSXMLBase* mPtr;
00039 public:
00040 OSXMLBasePtr ():mPtr (0) {}
00041 OSXMLBasePtr (OSXMLBase* ptr):mPtr (ptr) {}
00042 ~OSXMLBasePtr () { if (mPtr) mPtr->release (); }
00043
00044 operator OSXMLBase* () const { return mPtr; }
00045
00046 OSXMLBase* operator= (OSXMLBase* ptr) {
00047 if (mPtr) mPtr->release ();
00048 mPtr = ptr;
00049 return mPtr;
00050 }
00051 };
00052
00060 class EXTERNXML OSXMLDefaultHandler : public OSXMLDefaultHandlerIF
00061 {
00062 protected:
00063 OSRTCtxtPtr mpContext;
00064 const OSUTF8CHAR* mpElemName;
00065 OSINT32 mLevel;
00066 OSINT16 mStartLevel;
00067 OSINT16 mReqElemCnt;
00068 OSINT16 mCurrElemIdx;
00069 OSINT16 mState;
00070
00071 struct EXTERNXML ErrorInfo {
00072 int stat;
00073 const char* file;
00074 int line;
00075
00076 inline ErrorInfo ():stat (0),file (0), line (0) {}
00077 } errorInfo;
00078
00079 public:
00080 OSXMLDefaultHandler (OSRTContext* pContext,
00081 const OSUTF8CHAR* elemName = 0, OSINT32 level = 0) :
00082 mpContext (pContext),
00083 mpElemName(elemName), mLevel(level),
00084 mStartLevel (0), mReqElemCnt (0), mCurrElemIdx(0), mState (0)
00085 { }
00086
00087 virtual ~OSXMLDefaultHandler () {}
00088
00089 virtual int startElement
00090 (const OSUTF8CHAR* const uri,
00091 const OSUTF8CHAR* const localname,
00092 const OSUTF8CHAR* const qname,
00093 const OSUTF8CHAR* const* attrs);
00094
00095 virtual int characters
00096 (const OSUTF8CHAR* const chars, unsigned int length);
00097
00098 virtual int endElement
00099 (const OSUTF8CHAR* const uri,
00100 const OSUTF8CHAR* const localname,
00101 const OSUTF8CHAR* const qname);
00102
00103 virtual void startDocument();
00104 virtual void endDocument ();
00105
00106 virtual int finalize ();
00107
00108
00109 virtual void resetErrorInfo ();
00110 virtual void setErrorInfo (int status, const char* file = 0, int line = 0);
00111 virtual int getErrorInfo (int* status, const char** file, int* line);
00112
00113
00114
00115
00116
00117
00118
00119
00126 inline OSINT16 getState() { return mState; }
00127
00128 virtual void init (int level = 0) {
00129 mState = 0; mLevel = (OSINT16)level;
00130 }
00131
00132 void setElemName (const OSUTF8CHAR* elemName) {
00133 mpElemName = elemName;
00134 }
00135
00136 inline OSBOOL isComplete () { return (mLevel <= mStartLevel); }
00137
00138 #ifndef _COMPACT
00139 void traceStartElement (const char* funcName, const OSUTF8CHAR* localName);
00140 void traceEndElement (const char* funcName, const OSUTF8CHAR* localName);
00141 #else
00142 inline void traceStartElement
00143 (const char* funcName, const OSUTF8CHAR* localName) {}
00144 inline void traceEndElement
00145 (const char* funcName, const OSUTF8CHAR* localName) {}
00146 #endif
00147 } ;
00148
00149 class EXTERNXML OSXMLDefaultHandlerPtr {
00150 OSXMLDefaultHandler* mPtr;
00151 public:
00152 inline OSXMLDefaultHandlerPtr ():mPtr (0) {}
00153 inline OSXMLDefaultHandlerPtr (OSXMLDefaultHandler* ptr):mPtr (ptr) {}
00154 inline ~OSXMLDefaultHandlerPtr () { delete mPtr; }
00155
00156 inline operator OSXMLDefaultHandler* () { return mPtr; }
00157 inline operator const OSXMLDefaultHandler* () const { return mPtr; }
00158 inline OSXMLDefaultHandler* operator-> () const { return mPtr; }
00159
00160 inline OSXMLDefaultHandler* operator= (OSXMLDefaultHandler* ptr) {
00161 delete mPtr;
00162 mPtr = ptr;
00163 return mPtr;
00164 }
00165 inline int operator == (const OSXMLDefaultHandler* ptr) const
00166 { return ptr == mPtr; }
00167 inline int operator != (const OSXMLDefaultHandler* ptr) const
00168 { return ptr != mPtr; }
00169 inline int operator ! () const { return mPtr == 0; }
00170
00171 friend int operator != (const void* ptr, const OSXMLDefaultHandlerPtr& ptr2);
00172 friend int operator == (const void* ptr, const OSXMLDefaultHandlerPtr& ptr2);
00173 } ;
00174
00175 inline int operator != (const void* ptr, const OSXMLDefaultHandlerPtr& ptr2)
00176 { return ptr != (const void*)ptr2.mPtr; }
00177
00178 inline int operator == (const void* ptr, const OSXMLDefaultHandlerPtr& ptr2)
00179 { return ptr == (const void*)ptr2.mPtr; }
00180
00181 class EXTERNXML OSXMLParserCtxt : public OSXMLParserCtxtIF {
00182 OSRTCtxtPtr mpContext;
00183
00184 public:
00185 OSXMLParserCtxt (OSRTContext *pContext);
00186
00187 virtual OSRTInputStreamIF* createInputStream ();
00188 virtual OSRTInputStreamIF* createFileInputStream
00189 (const char* const filename);
00190 virtual OSRTInputStreamIF* createMemoryInputStream
00191 (OSOCTET* pMemBuf, size_t bufSize);
00192 virtual OSCTXT* getContext ();
00193 virtual const OSUTF8CHAR* parseQName (const OSUTF8CHAR* const qname);
00194 } ;
00195
00196 #ifndef _COMPACT
00197 #define OSCPPSAXDIAGSTART(funcName,localName) \
00198 traceStartElement (funcName, localName)
00199
00200 #define OSCPPSAXDIAGEND(funcName,localName) \
00201 traceEndElement (funcName, localName)
00202
00203 #else
00204 #define OSCPPSAXDIAGSTART(funcName,localName)
00205 #define OSCPPSAXDIAGEND(funcName,localName)
00206 #endif
00207
00208 #endif