SAX2/C++ interface draft [Was: Re: Request for Discussion: SAX 1.0 in C++]

Michael Fuller msf at mds.rmit.edu.au
Mon Dec 6 09:14:21 GMT 1999


On Fri, Dec 03, 1999 at 08:11:53PM -0000, Richard Anderson wrote:
> How about focusing on SAX/2, and making the first C/C++ SAX interface
> actually SAX 2 so we kill two birds with one stone ?

Good idea!

Here's a [hasty] conversion of the SAX2 Java classes into C++, 
along the lines of David and James' posted SAX 1.0/C++ headers
I've used exception specifiers for consistency with the original Java.

// SAX2Decl.h

namespace SAX
{
    class Configurable;
    class DTDHandler;
    class DocumentHandler;
    class EntityResolver;
    class ErrorHandler;
    class InputSource;
    class Parser;
    class SAXException;

    class Configurable
    {
    public:
	virtual void setFeature(SAXString featureId, bool state)
					    throw(SAXException) = 0;
	virtual bool getFeature(SAXString featureId)
					    throw(SAXException) = 0;
	virtual void setProperty(SAXString propertyId, void * value)
					    throw(SAXException) = 0;
	virtual void * getProperty(SAXString propertyId)
					    throw(SAXException) = 0;
    private:
	void operator delete (void *);
    }

    class ConfigurableParserAdapter : public Parser, public Configurable
    {
    public
	ConfigurableParserAdapter(Parser& parser);

	// SAX 1.0 methods
	void setLocale(const char * locale)		throw(SAXException);
	void setEntityResolver(EntityResolver& resolver)
       	void setDTDHandler(DTDHandler& handler)
	void setDocumentHandler(DocumentHandler& handler)
       	void setErrorHandler(ErrorHandler& handler)
	void parse(const InputSource& source)		throw(SAXException);
	void parse(SAXString systemId)			throw(SAXException);
    
	// SAX2 methods
	void setFeature(SAXString featureId, bool state) throw(SAXException);
	bool getFeature(SAXString featureId)		throw(SAXException);
	void setProperty(SAXString propertyId, void * value)
							throw(SAXException);
	void * getProperty(SAXString propertyId)	throw(SAXException);
    private:
	void operator delete (void *);
    }

    class DeclHandler
    {
    public:
	virtual void elementDecl(SAXString name, SAXString model)
						throw(SAXException) = 0;

	virtual void attributeDecl(SAXString eName,
				   SAXString aName,
				   SAXString type,
				   SAXString valueDefault,
				   SAXString value)
						throw(SAXException) = 0;

	virtual void internalEntityDecl(SAXString name, SAXString value)
						throw(SAXException) = 0;

	virtual void externalEntityDecl(SAXString name,
					SAXString publicId,
					SAXString systemId)
						throw(SAXException) = 0;
    private:
	void operator delete (void *);
    }

    class LexicalHandler
    {
    public:
	virtual void startDTD(SAXString name,
			      SAXString publicId,
			      SAXString systemId)
					throw(SAXException) = 0;
				    
	virtual void endDTD()		throw(SAXException) = 0;

	virtual void startEntity(SAXString name)
					throw(SAXException) = 0;
	virtual void endEntity(SAXString name)
					throw(SAXException) = 0;

	virtual void startCDATA()	throw(SAXException) = 0;
	virtual void endCDATA()		throw(SAXException) = 0;

	virtual void comment(const SAXChar * ch, int length)
					throw(SAXException) = 0;

    private:
	void operator delete (void *);
    }

    class NamespaceHandler
    {
    public:
	virtual void startNamespaceDeclScope(SAXString prefix, SAXString uri)
					throw(SAXException) = 0;
	virtual void endNamespaceDeclScope(SAXString prefix)
					throw(SAXException) = 0;
    private:
	void operator delete (void *);
    }

    class SAXNotRecognizedException : public SAXException
    {
    public:
	SAXNotRecognizedException(SAXString message);
    private:
	void operator delete (void *);
    }

    class SAXNotSupportedException : public SAXException
    {
    public:
	SAXNotSupportedException(SAXString message);
    private:
	void operator delete (void *);
    }
}


Michael
-- 
http://www.mds.rmit.edu.au/~msf/
Multimedia Databases Group, RMIT, Australia.

xml-dev: A list for W3C XML Developers. To post, mailto:xml-dev at ic.ac.uk
Archived as: http://www.lists.ic.ac.uk/hypermail/xml-dev/ and on CD-ROM/ISBN 981-02-3594-1
To unsubscribe, mailto:majordomo at ic.ac.uk the following message;
unsubscribe xml-dev
To subscribe to the digests, mailto:majordomo at ic.ac.uk the following message;
subscribe xml-dev-digest
List coordinator, Henry Rzepa (mailto:rzepa at ic.ac.uk)





More information about the Xml-dev mailing list