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