hxxmlprs.h
上传用户:zhongxx05
上传日期:2007-06-06
资源大小:33641k
文件大小:6k
源码类别:

Symbian

开发平台:

C/C++

  1. /* ***** BEGIN LICENSE BLOCK ***** 
  2.  * Version: RCSL 1.0/RPSL 1.0 
  3.  *  
  4.  * Portions Copyright (c) 1995-2002 RealNetworks, Inc. All Rights Reserved. 
  5.  *      
  6.  * The contents of this file, and the files included with this file, are 
  7.  * subject to the current version of the RealNetworks Public Source License 
  8.  * Version 1.0 (the "RPSL") available at 
  9.  * http://www.helixcommunity.org/content/rpsl unless you have licensed 
  10.  * the file under the RealNetworks Community Source License Version 1.0 
  11.  * (the "RCSL") available at http://www.helixcommunity.org/content/rcsl, 
  12.  * in which case the RCSL will apply. You may also obtain the license terms 
  13.  * directly from RealNetworks.  You may not use this file except in 
  14.  * compliance with the RPSL or, if you have a valid RCSL with RealNetworks 
  15.  * applicable to this file, the RCSL.  Please see the applicable RPSL or 
  16.  * RCSL for the rights, obligations and limitations governing use of the 
  17.  * contents of the file.  
  18.  *  
  19.  * This file is part of the Helix DNA Technology. RealNetworks is the 
  20.  * developer of the Original Code and owns the copyrights in the portions 
  21.  * it created. 
  22.  *  
  23.  * This file, and the files included with this file, is distributed and made 
  24.  * available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 
  25.  * EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES, 
  26.  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS 
  27.  * FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 
  28.  * 
  29.  * Technology Compatibility Kit Test Suite(s) Location: 
  30.  *    http://www.helixcommunity.org/content/tck 
  31.  * 
  32.  * Contributor(s): 
  33.  *  
  34.  * ***** END LICENSE BLOCK ***** */ 
  35. #ifndef _HXXMLPRS_H_
  36. #define _HXXMLPRS_H_
  37. /* forward declarations */
  38. struct IHXXMLParserResponse;
  39. struct IHXBuffer;
  40. struct IHXValues;
  41. class XMLParser;
  42. class CBigByteQueue;
  43. class CHXPtrArray;
  44. class ErrorNotifier
  45. {
  46. public:
  47.     virtual HX_RESULT ErrorInLastTag(HX_RESULT Error, 
  48. const char* pErrorString, const char* pFrameString, 
  49. UINT32 ulLineNumber, UINT32 ulLinePosition) = 0;
  50. };
  51. class HXActualXMLParser
  52. {
  53. protected:
  54.     IHXXMLParserResponse* m_pResponse;
  55.     void CheckEncoding(XMLParser* pParser, IHXBuffer* pBuffer);
  56. public:
  57.     HXActualXMLParser ();
  58.     virtual ~HXActualXMLParser ();
  59.     virtual HX_RESULT Init (IHXXMLParserResponse* pResponse,
  60. const char* pEncoding) = 0;
  61.     virtual HX_RESULT Parse (IHXBuffer* pBuffer,
  62. BOOL bIsFinal) = 0;
  63.     virtual HX_RESULT GetCurrentLineNumber (REF(ULONG32) ulLineNumber) = 0;
  64.     virtual HX_RESULT GetCurrentColumnNumber (REF(ULONG32) ulColumnNumber) = 0;
  65.     virtual HX_RESULT GetCurrentByteIndex (REF(ULONG32) ulByteIndex) = 0;
  66.     virtual HX_RESULT GetCurrentErrorText (REF(IHXBuffer*) pBuffer) = 0;
  67.     virtual HX_RESULT InitErrorNotifier(ErrorNotifier* /*OUT*/ pNotifier) = 0;
  68. };
  69. class HXStrictXMLParser: public HXActualXMLParser
  70. {
  71. private:
  72.     XMLParser* m_pParser;
  73.     CBigByteQueue* m_pByteQueue;
  74.     ErrorNotifier* m_pErrorNotifier;
  75.     HX_RESULT DoParse (BOOL bIsFinal);
  76.     HX_RESULT HandleErrors(CHXPtrArray* pErrs);
  77.     HX_RESULT ConvertToHX_RESULT(UINT32 err);
  78. public:
  79.     HXStrictXMLParser ();
  80.     virtual ~HXStrictXMLParser ();
  81.     virtual HX_RESULT Init (IHXXMLParserResponse* pResponse,
  82. const char* pEncoding);
  83.     virtual HX_RESULT Parse (IHXBuffer* pBuffer,
  84. BOOL bIsFinal);
  85.     virtual HX_RESULT GetCurrentLineNumber (REF(ULONG32) ulLineNumber);
  86.     virtual HX_RESULT GetCurrentColumnNumber (REF(ULONG32) ulColumnNumber);
  87.     virtual HX_RESULT GetCurrentByteIndex (REF(ULONG32) ulByteIndex);
  88.     virtual HX_RESULT GetCurrentErrorText (REF(IHXBuffer*) pBuffer);
  89.     
  90.     virtual HX_RESULT InitErrorNotifier(ErrorNotifier* /*OUT*/ pNotifier);
  91. };
  92. class HXLooseXMLParser: public HXActualXMLParser
  93. {
  94. private:
  95.     XMLParser* m_pParser;
  96.     CBigByteQueue* m_pByteQueue;
  97.     BOOL                                m_bAllowNonXMLComments;
  98.     HX_RESULT DoParse (BOOL bIsFinal);
  99. public:
  100.     HXLooseXMLParser (BOOL bAllowNonXMLComments = FALSE);
  101.     virtual ~HXLooseXMLParser ();
  102.     virtual HX_RESULT Init (IHXXMLParserResponse* pResponse,
  103. const char* pEncoding);
  104.     virtual HX_RESULT Parse (IHXBuffer* pBuffer,
  105. BOOL bIsFinal);
  106.     virtual HX_RESULT GetCurrentLineNumber (REF(ULONG32) ulLineNumber);
  107.     virtual HX_RESULT GetCurrentColumnNumber (REF(ULONG32) ulColumnNumber);
  108.     virtual HX_RESULT GetCurrentByteIndex (REF(ULONG32) ulByteIndex);
  109.     virtual HX_RESULT GetCurrentErrorText (REF(IHXBuffer*) pBuffer);
  110.     virtual HX_RESULT InitErrorNotifier(ErrorNotifier* /*OUT*/ pNotifier) { return HXR_OK; }
  111. };
  112. class HXXMLParser: public IHXXMLParser
  113. {
  114. private:
  115.     LONG32     m_lRefCount;
  116.     IHXXMLParserResponse*     m_pResponse;
  117.     BOOL                            m_bAllowNonXMLComments;
  118.     // parser wrapper
  119.     HXActualXMLParser*     m_pParser;
  120.     virtual ~HXXMLParser     ();
  121.     PRIVATE_DESTRUCTORS_ARE_NOT_A_CRIME
  122. public:
  123.     HXXMLParser(BOOL bAllowNonXMLComments = FALSE);
  124.     /* IUnknown methods */
  125.     STDMETHOD(QueryInterface) (THIS_
  126. REFIID riid,
  127. void** ppvObj);
  128.     STDMETHOD_(ULONG32,AddRef) (THIS);
  129.     STDMETHOD_(ULONG32,Release) (THIS);
  130.     /* IHXXMLParser methods */
  131.     STDMETHOD(Init) (THIS_
  132. IHXXMLParserResponse* /*IN*/  pResponse,
  133. const char*     /*IN*/ pEncoding,
  134. BOOL     /*IN*/ bStrict);
  135.     STDMETHOD(Close) (THIS);
  136.     STDMETHOD(Parse) (THIS_
  137. IHXBuffer* /*IN*/     pBuffer,
  138. BOOL /*IN*/     bIsFinal);
  139.     STDMETHOD(GetCurrentLineNumber) (THIS_
  140. REF(ULONG32) /*OUT*/ ulLineNumber);
  141.     STDMETHOD(GetCurrentColumnNumber) (THIS_
  142. REF(ULONG32) /*OUT*/ ulColumnNumber);
  143.     STDMETHOD(GetCurrentByteIndex) (THIS_
  144. REF(ULONG32) /*OUT*/ ulByteIndex);
  145.     STDMETHOD(GetCurrentErrorText) (THIS_
  146. REF(IHXBuffer*) /*OUT*/ pBuffer);
  147.     HX_RESULT InitErrorNotifier(ErrorNotifier* /*OUT*/ pNotifier);
  148. };
  149. #endif /* _HXXMLPRS_H_ */