Main Page   Namespace List   Class Hierarchy   Compound List   File List   Compound Members   File Members  

tsax2sax.cpp

Go to the documentation of this file.
00001 #include "xmltk.h"
00002 
00003 
00004 class CTSAX2SAX : public ITSAXContentHandler
00005 {
00006 public:
00007     // *** IUnknownCL methods ***
00008     CL_STDMETHOD(QueryInterface) (RCLIID riid, void **ppvObj);
00009     CL_STDMETHOD_(ULONG,AddRef) ();
00010     CL_STDMETHOD_(ULONG,Release) ();
00011 
00012     // *** ITSAXContentHandler methods ***
00013     CL_STDMETHOD(startDocument) ();
00014     CL_STDMETHOD(endDocument) ();
00015     CL_STDMETHOD(startElement) (XTOKEN xtName);
00016     CL_STDMETHOD(endElement) (XTOKEN xtName);
00017     CL_STDMETHOD(attribute) (XTOKEN xtName, char *pszChars, int cchChars);
00018     CL_STDMETHOD(characters) (char *pszChars, int cchChars);
00019     CL_STDMETHOD(cdata) (char *pszChars, int cchChars);
00020     CL_STDMETHOD(extendedint) (XTOKEN xt, int iInt);
00021 
00022     CTSAX2SAX(SAXClient *psc) : m_cRef(1), m_psc(psc)
00023     {
00024     }
00025 
00026     virtual ~CTSAX2SAX()
00027     {
00028     }
00029 
00030 private:
00031 
00032 
00033     ULONG m_cRef;
00034     SAXClient *m_psc;
00035 };
00036 
00037 
00038 bool CTSAX2SAX::QueryInterface(RCLIID riid, void **ppvObj)
00039 {
00040     if (IsEqualCLIID(riid, &IID_IUnknownCL))
00041     {
00042         *ppvObj = static_cast<IUnknownCL*>(this);
00043     }
00044     else if (IsEqualCLIID(riid, &IID_ITSAXContentHandler))
00045     {
00046         *ppvObj = static_cast<ITSAXContentHandler*>(this);
00047     }
00048     else
00049     {
00050         *ppvObj = NULL;
00051         return false;
00052     }
00053     AddRef();
00054     return true;
00055 }
00056 
00057 ULONG CTSAX2SAX::AddRef()
00058 {
00059     return ++m_cRef;
00060 }
00061 
00062 ULONG CTSAX2SAX::Release()
00063 {
00064     --m_cRef;
00065     if (m_cRef > 0)
00066     {
00067         return m_cRef;
00068     }
00069     delete this;
00070     return 0;
00071 }
00072 
00073 bool CTSAX2SAX::characters(char* pszChars, int cchChars)
00074 {
00075         m_psc->HandleText(pszChars, cchChars, 0, 0, 0);
00076     return true;
00077 }
00078 
00079 bool CTSAX2SAX::cdata(char* pszChars, int cchChars)
00080 {
00081         m_psc->HandleCDATA(pszChars, cchChars, 0);
00082     return true;
00083 }
00084 
00085 bool CTSAX2SAX::extendedint(XTOKEN xt, int iInt)
00086 {
00087         STRPAIR *ppair = g_ptt->PairFromXTOKEN(xt);
00088 
00089         if (ppair->first)
00090                 m_psc->HandleText(ppair->first, strlen(ppair->first), 0, 0, 0);
00091 
00092         char sz[32];
00093         sprintf(sz, "%i", iInt);
00094         m_psc->HandleText(sz, strlen(sz), 0, 0, 0);
00095 
00096         if (ppair->second)
00097                 m_psc->HandleText(ppair->second, strlen(ppair->second), 0, 0, 0);
00098 
00099     return true;
00100 }
00101 
00102 bool CTSAX2SAX::endDocument()
00103 {
00104     // m_psc->endDocument();
00105     return true;
00106 }
00107 
00108 bool CTSAX2SAX::startDocument()
00109 {
00110     // m_psc->startDocument();
00111     return true;
00112 }
00113 
00114 bool CTSAX2SAX::endElement(XTOKEN xtName)
00115 {
00116         char *psz = g_ptt->StrFromXTOKEN(xtName);
00117         m_psc->HandleEndLabel(psz, strlen(psz), 0);
00118 
00119     return true;
00120 }
00121 
00122 bool CTSAX2SAX::startElement(XTOKEN xtName)
00123 {
00124         char *psz = g_ptt->StrFromXTOKEN(xtName);
00125         m_psc->HandleStartLabel(psz, strlen(psz), 0);
00126 
00127     return true;
00128 }
00129 
00130 bool CTSAX2SAX::attribute(XTOKEN xtName, char *pszChars, int cchChars)
00131 {
00132         char *psz = g_ptt->StrFromXTOKEN(xtName);
00133         m_psc->HandleAttribName(psz, strlen(psz), 0);
00134         m_psc->HandleAttribValue(pszChars, cchChars, 0);
00135     return true;
00136 }
00137 
00138 
00139 bool CreateTSAX2SAX(RCLIID riid, void **ppvObj, SAXClient *psc)
00140 {
00141     bool bResult = false;
00142 
00143     CTSAX2SAX *ptx = new CTSAX2SAX(psc);
00144     if (ptx)
00145     {
00146         bResult = ptx->QueryInterface(riid, ppvObj);
00147         ptx->Release();
00148     }
00149 
00150     return bResult;
00151 }

Generated on Sat Dec 22 16:01:52 2001 for XMILLforBinaryFormat by doxygen1.2.11.1 written by Dimitri van Heesch, © 1997-2001