Home > Support > Documentation

rtSaxCppParser.h

00001 /*
00002  * Copyright (c) 2003-2007 Objective Systems, Inc.
00003  *
00004  * This software is furnished under a license and may be used and copied
00005  * only in accordance with the terms of such license and with the
00006  * inclusion of the above copyright notice. This software or any other
00007  * copies thereof may not be provided or otherwise made available to any
00008  * other person. No title to and ownership of the software is hereby
00009  * transferred.
00010  *
00011  * The information in this software is subject to change without notice
00012  * and should not be construed as a commitment by Objective Systems, Inc.
00013  *
00014  * PROPRIETARY NOTICE
00015  *
00016  * This software is an unpublished work subject to a confidentiality agreement
00017  * and is protected by copyright and trade secret law.  Unauthorized copying,
00018  * redistribution or other use of this work is prohibited.
00019  *
00020  * The above notice of copyright on this source code product does not indicate
00021  * any actual or intended publication of such source code.
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    // SAX Error Info handlers
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    // SAX ErrorHandler interface
00114 
00115    // void warning (const SAXParseException& exception);
00116    // void error (const SAXParseException& exception);
00117    // void fatalError (const SAXParseException& exception);
00118    // void resetErrors ();
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 /* COMPACT */
00204 #define OSCPPSAXDIAGSTART(funcName,localName)
00205 #define OSCPPSAXDIAGEND(funcName,localName)
00206 #endif
00207 
00208 #endif /* __RTSAXCPPPARSER_H_ */