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

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 _XMLPARSE_H_
  36. #define _XMLPARSE_H_
  37. #include "carray.h"
  38. #include "hxstack.h"
  39. typedef enum {
  40.     GSFoundExpected,
  41.     GSNoValue,
  42.     GSValueOnly,
  43.     GSMissingQuote,
  44.     GSEndTag,
  45.     GSInvalid
  46. } GetStringResult;
  47. typedef enum {
  48.     XMLPTag,
  49.     XMLPNoClose,
  50.     XMLPNoTagType,
  51.     XMLPBadAttribute,
  52.     XMLPAttributeValueNotQuoted,
  53.     XMLPBadEndTag,
  54.     XMLPBadProcInst,
  55.     XMLPBadDirective,
  56.     XMLPDupAttribute,
  57.     XMLPCommentBeforeProcInst,
  58.     XMLPPlainText,
  59.     XMLPComment,
  60.     XMLPDirective,   // Right word?
  61.     XMLPProcInst,
  62.     XMLPNotDone
  63. } XMLParseResult;
  64. typedef enum {
  65.     XMLUnknownError,
  66.     XMLErrorNoClose,
  67.     XMLErrorBadAttribute,
  68.     XMLErrorNoValue,
  69.     XMLErrorMissingQuote,
  70.     XMLErrorBadEndTag,
  71.     XMLErrorNoTagType,
  72.     XMLErrorDupAttribute
  73.     , XMLErrorCommentBeforeProcInst
  74.     
  75.     , XMLErrorInvalidName
  76.     , XMLErrorInvalidCharInDoc
  77.     , XMLErrorTwoDashNotAllowed
  78.     , XMLErrorInvalidDecl
  79.     , XMLErrorInvalidPI
  80.     , XMLErrorInvalidPITarget
  81.     , XMLErrorInvalidCDATA
  82.     
  83.     , XMLErrorInvalidRef
  84.     , XMLErrorMissingEquals
  85.     , XMLErrorMissingReqSpace
  86.     , XMLErrorLTnotAllowed
  87.     , XMLErrorInvalidGTafter2RSQB
  88.     , XMLErrorInvalidComment
  89. } XMLErrorTag;
  90. enum {
  91.     TagType,
  92.     AttributeName,
  93.     AttributeValue,
  94.     AttributeValueNoQuote,
  95.     AttributeValueDirective
  96. };
  97. typedef enum {
  98.     XMLPlainTag,
  99.     XMLEndTag,
  100.     XMLCommentTag,
  101.     XMLProcInstTag,
  102.     XMLDirectiveTag
  103. } XMLTagType;
  104. class XMLAttribute
  105. {
  106. public:
  107.     XMLAttribute()
  108.     {
  109. name = NULL;
  110. value = NULL;
  111.     };
  112.     ~XMLAttribute()
  113.     {
  114. HX_VECTOR_DELETE(name);
  115. HX_VECTOR_DELETE(value);
  116.     };
  117.     char* name;
  118.     char* value;
  119. };
  120. class XMLError
  121. {
  122. public:
  123.     XMLError(XMLErrorTag errorTag,
  124.     INT32 lLineNumber,
  125.     INT32 lLinePosition,
  126.     const char* pErrorString,
  127.     const char* pFrameString);
  128.     ~XMLError();
  129.     char* m_pErrorString;
  130.     char* m_pFrameString;
  131.     INT32 m_lLineNumber;
  132.     INT32 m_lLinePosition;
  133.     XMLErrorTag m_errorTag;
  134. };
  135. class XMLTag
  136. {
  137. public:
  138.     XMLTag(BOOL bStrictCompliance, BOOL bStoreErrors = FALSE);
  139.     ~XMLTag();
  140.     XMLAttribute* new_attribute();
  141.     XMLAttribute* attribute(UINT32 a) { return (XMLAttribute*)m_attributes[(int)a]; };
  142.     const char*   get_attribute(const char*);
  143.     XMLTagType m_type;
  144.     char* m_name;
  145.     BOOL  m_need_close;
  146.     UINT32 elem;
  147.     UINT32 m_numAttributes;
  148.     XMLAttribute* m_cur_attribute;
  149.     CHXPtrArray m_attributes;
  150.     BOOL m_bStrictCompliance;
  151.     
  152.     CHXPtrArray* m_errs;
  153. };
  154. class XMLParser
  155. {
  156. private:
  157.     CHXStack m_pStack;
  158.     UINT32 m_comment_state;
  159.     UINT32 m_comment_get_arg;
  160.     UINT16 m_comment_pos;
  161.     BOOL m_comment_start;
  162.     BOOL m_bStrictCompliance;
  163.     char m_comment_arg[1024]; /* Flawfinder: ignore */
  164.     char m_comment_command[20]; /* Flawfinder: ignore */
  165.     UINT32 m_ulCurrentLine;
  166.     UINT32 m_ulCurrentCol;
  167.     UINT32 m_ulTagStartLine;
  168.     UINT32 m_ulTagStartCol;
  169.     XMLError* m_pLastError;
  170.     char* m_pEncoding;
  171.     BOOL        m_bAllowNonXMLComments;
  172.     BOOL m_bCommentWasFound;
  173.     BOOL m_bStoreErrors;
  174.     //This flag is always FALSE until we enable it in a future
  175.     // release at which point we will initialize it to TRUE
  176.     // and only set it to FALSE when an author or server admin
  177.     // specifically specifies that he/she wants our old
  178.     // SMIL parser to handle the (presumably poorly-authored) file.
  179.     // NOTE: as of 1/20/2000, the code to allow authors to
  180.     // force the old parser to be used is not yet written.
  181.     // In addition, rmasmil/smlparse.h/.cpp has a similar flag and
  182.     // the two need to be linked to the same value when that code
  183.     // gets written:
  184.     BOOL m_bXMLandSMIL10FullCompliance;
  185.     class XMLFrame
  186.     {
  187. XMLFrame() : elemcount(0), name(NULL) {};
  188. ~XMLFrame()
  189. {
  190.     if(name)
  191. delete [] name;
  192. };
  193. UINT32 elemcount;
  194. char*  name;
  195. friend class XMLParser;
  196.     };
  197.     char GetEscapeMacro(const char*&, const char*);
  198.     GetStringResult GetString(const char*&, const char*,
  199.       char*&, UINT32);
  200.     void FindCommentClose(const char*&, const char*, const char*);
  201.     void SetError(XMLError*& pErr, XMLErrorTag tag, INT32 lLine,
  202.  INT32 lPos, const char* pErrorText,
  203.  INT32 lErrorTextLen,
  204.  const char* pFrameText);
  205. public:
  206.     XMLParser(BOOL bStrictCompliance = FALSE,
  207.       const char* pEncoding = NULL,
  208.       BOOL bAllowNonXMLComments = FALSE);
  209.     ~XMLParser();
  210.     static HX_RESULT
  211.     GetPrologInfo(const char* pBuf,
  212.     UINT32 ulBufLen,
  213.     char*& pVersion,
  214.     char*& pEncoding);
  215.     void Reset(void);
  216.     XMLParseResult Parse(const char*& buf, UINT32 len, XMLTag*& tag, BOOL bIsFinal = TRUE);
  217.     XMLParseResult ParseTag(const char* open, const char* close, 
  218. XMLTagType ulTagType, XMLTag*& tag);
  219.     XMLParseResult ScanTag(const char* open, const char* close, XMLTag* tag);
  220.     XMLError* GetLastError() { return m_pLastError; }
  221.     UINT32 GetCurrentLineNumber()    { return m_ulCurrentLine; }
  222.     UINT32 GetCurrentColumnNumber()  { return m_ulCurrentCol; }
  223.     UINT32 GetTagStartLineNumber()   { return m_ulTagStartLine; }
  224.     UINT32 GetTagStartColumnNumber() { return m_ulTagStartCol; }
  225.     XMLFrame* m_pCurrentFrame;
  226.     void StoreErrors() { m_bStoreErrors = TRUE; }
  227.     void SetEncoding(const char* pszEncoding);
  228.     HX_RESULT GetEncoding(char*& rpszEncoding);
  229. };
  230. #endif // _XMLPARSE_H_