Objective Systems, Inc.  
Home
About ASN.1
Products
Free Software
Open Source
Documents
Services
Resources
Resellers
Customers
Careers
About Us
Contact Us
 

Google


Objective Systems, Inc.

saxParser.h

00001 /*
00002  * Copyright (C) 1997-2005 by 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 __SAXPARSER_H_
00026 #define __SAXPARSER_H_
00027 
00028 #include <string.h>
00029 #ifndef _NO_EXCEPTIONS
00030 
00031 #if (defined(_HP_UX) || defined(__hpux) || defined(_HPUX_SOURCE)) && \
00032 __cplusplus >= 199707L && defined (__HP_aCC) && __HP_aCC >= 55000L
00033 /* HP-UX aCC, version 5.5 and above. Maybe, earlier versions also
00034    require new stream headers - will change if it is so. */
00035 #define __NEW_STREAM_HEADERS__ 1
00036 #endif
00037 
00038 #if defined (__NEW_STREAM_HEADERS__) || defined (_MSC_VER) || \
00039 (defined (__GNUC__) && __GNUC__ >= 3)
00040 #include <iostream>
00041 using namespace std;
00042 #else
00043 #include <iostream.h>
00044 #endif
00045 #endif // _NO_EXCEPTION
00046 #include <stdlib.h>
00047 
00048 #include "rtxersrc/asn1xer.h"
00049 #include "rtsrc/OSCInputStream.h"
00050 #include "rtxersrc/rtSAXDefs.h"
00051 
00052 #ifndef _NO_EXCEPTIONS
00053 #define OSRTSAXEXCEPTION0 throw OSRTSAXExceptionImpl ()
00054 #define OSRTSAXEXCEPTION1(str) throw OSRTSAXExceptionImpl (str)
00055 #else  // _NO_EXCEPTIONS
00056 #define OSRTSAXEXCEPTION0 { \
00057 fprintf (stderr, "Fatal Error, OSRTSAXExceptionImpl is thrown, in %s at %i\n", \
00058 __FILE__, __LINE__); \
00059 exit (-1); \
00060 }
00061 #define OSRTSAXEXCEPTION1(str) { \
00062 fprintf (stderr, "Fatal Error, OSRTSAXExceptionImpl(%s) is thrown, in %s at %i\n", \
00063 str, __FILE__, __LINE__); \
00064 exit (-1); \
00065 }
00066 #endif // _NO_EXCEPTIONS
00067 
00076 class EXTERNXER OSRTSAXException
00077 {
00078  public:
00079    virtual ~OSRTSAXException () {} 
00083    virtual const XMLCHAR* getMessage() = 0;
00084 
00085    virtual int getStatus () = 0;
00086    virtual const XMLCHAR* getSrcFileName () = 0;
00087    virtual int getSrcLineNum() = 0;
00088 };
00089 
00090 class EXTERNXER OSXMLErrorInfo {
00091  public:
00092    virtual void resetErrorInfo () = 0;
00093    virtual void setErrorInfo (int status, const char* file = 0, int line = 0) = 0;
00094    virtual int  getErrorInfo (int* status, const char** file, int* line) = 0;
00095 };
00096 
00097 class EXTERNXER OSXMLErrorHandler
00098 {
00099  public:
00100 
00114    virtual void warning(/*const SAXParseException& exception*/) = 0;
00115 
00132    virtual void error(/*const SAXParseException& exception*/) = 0;
00133 
00148    virtual void fatalError(/*const SAXParseException& exception*/) = 0;
00149    
00157    virtual void resetErrors() = 0;
00159 };
00160 
00177 class EXTERNXER OSXMLContentHandler
00178 {
00179  public:
00203    virtual void characters
00204    (
00205        const XMLCHAR* const chars,
00206        const unsigned int   length
00207    ) = 0;
00208 
00221    virtual void endElement
00222    (
00223       const XMLCHAR* const uri, 
00224       const XMLCHAR* const localname, 
00225       const XMLCHAR* const qname
00226    ) = 0;
00227 
00247    virtual void startElement
00248    (
00249       const   XMLCHAR* const  uri,
00250       const   XMLCHAR* const  localname,
00251       const   XMLCHAR* const  qname,
00252       const   XMLCHAR* const* attrs
00253    ) = 0;
00254 
00256 };
00257 
00258 class EXTERNXER OSXMLBase {
00259 protected:
00260    OSXMLBase () {}
00261 
00262    virtual ~OSXMLBase ();
00263 public:
00264    virtual void release () = 0;
00265 };
00266 
00267 #define DECLARE_XMLBASEIMP \
00268 public: void release () { delete this; }
00269 
00270 class EXTERNXER OSXMLReader : public OSXMLBase
00271 {
00272 public:
00273 
00292    virtual int parse
00293    (
00294       OSCInputStream& source
00295    ) = 0;
00296 
00300    virtual int parse
00301    (
00302        const char* const pBuffer,
00303        int               bufSize
00304    ) = 0;
00305 
00319    virtual int parse
00320    (
00321        const char* const systemId
00322    ) = 0;
00323        
00338    virtual void setContentHandler(OSXMLContentHandler* const handler) = 0;
00339 
00354    virtual void setErrorHandler(OSXMLErrorHandler* const handler) = 0;
00355 
00356    virtual void setErrorInfoHandler (OSXMLErrorInfo* const handler) = 0;
00357 };
00358 
00359 class EXTERNXER StrX {
00360  private :
00361    char* fLocalForm;
00362  public :
00363    // -----------------------------------------------------------------------
00364    //  Constructors and Destructor
00365    // -----------------------------------------------------------------------
00366    StrX (const XMLCHAR* const toTranscode);
00367    ~StrX();
00368 
00369    // -----------------------------------------------------------------------
00370    //  Getter methods
00371    // -----------------------------------------------------------------------
00372    const char* localForm() const
00373    {
00374       return fLocalForm;
00375    }
00376 
00377    operator const char* () const
00378    {
00379       return fLocalForm;
00380    }
00381 };
00382 
00383 #ifndef _NO_EXCEPTIONS
00384 inline ostream& operator<<(ostream& target, const StrX& toDump)
00385 {
00386    target << toDump.localForm();
00387    return target;
00388 }
00389 #endif // _NO_EXCEPTION
00390 
00391 // Exception implementation
00392 
00393 class EXTERNXER OSRTSAXExceptionImpl : public OSRTSAXException
00394 {
00395    DECLARE_XMLBASEIMP
00396  public:
00397    OSRTSAXExceptionImpl();
00398 
00399    OSRTSAXExceptionImpl(const char* const msg);
00400 
00401    OSRTSAXExceptionImpl(const char* const msg, 
00402       int stat_, const char* const file_, int line_);
00403 
00409    OSRTSAXExceptionImpl(int stat_, const char* file_, int line_);
00410 
00416    OSRTSAXExceptionImpl(const OSRTSAXExceptionImpl& toCopy);
00417 
00419    virtual ~OSRTSAXExceptionImpl();
00420 
00421    OSRTSAXExceptionImpl& operator=(const OSRTSAXExceptionImpl& toCopy);
00422 
00423    virtual const XMLCHAR* getMessage();
00424 
00425    virtual int getStatus () { return stat; }
00426    virtual const XMLCHAR* getSrcFileName () { return file; }
00427    virtual int getSrcLineNum() { return line; }
00428 
00429 protected :
00430    // -----------------------------------------------------------------------
00431    //  Protected data members
00432    //
00433    //  fMsg
00434    //      This is the text of the error that is being thrown.
00435    // -----------------------------------------------------------------------
00436    XMLCHAR* fMsg;
00437    int      stat;
00438    XMLCHAR* file;
00439    int      line;
00440 };
00441 
00442 class OSXMLBasePtr {
00443    OSXMLBase* mPtr;
00444  public:
00445    OSXMLBasePtr ():mPtr (0) {}
00446    OSXMLBasePtr (OSXMLBase* ptr):mPtr (ptr) {}
00447    ~OSXMLBasePtr () { if (mPtr) mPtr->release (); }
00448 
00449    operator OSXMLBase* () const  { return mPtr; }
00450 
00451    OSXMLBase* operator= (OSXMLBase* ptr) {
00452       if (mPtr) mPtr->release ();
00453       mPtr = ptr;
00454       return mPtr;
00455    }
00456 };
00457 
00458 // this function should be custom
00459 OSXMLReader* saxCreateXmlReader (ASN1CtxtPtr ctxt, 
00460                                  OSXMLContentHandler* pSaxHandler,
00461                                  OSXMLErrorInfo* pErrorInfoHandler);
00462 
00463 // common public functions
00464 EXTERNXER OSRTSAXException* createSAXException ();
00465 
00466 EXTERNXER OSRTSAXException* createSAXException (const char* const msg, int stat,
00467    const char* const fileName, int line);
00468 
00469 #endif /* __SAXPARSER_H_ */

Copyright © 1997-2005 Objective Systems,Inc.
All Rights Reserved.
This document may be distributed in any form, electronic
or otherwise, provided that it is distributed in its entirety
and that the copyright and this notice are included.

This file was last modified on 8 Sep 2005.
ASN1C XER Runtime, ASN1C v5.8x