looseprs.h
上传用户:dangjiwu
上传日期:2013-07-19
资源大小:42019k
文件大小:8k
源码类别:

Symbian

开发平台:

Visual C++

  1. /* ***** BEGIN LICENSE BLOCK *****
  2.  * Source last modified: $Id: looseprs.h,v 1.2.42.3 2004/07/09 01:44:07 hubbe Exp $
  3.  * 
  4.  * Portions Copyright (c) 1995-2004 RealNetworks, Inc. All Rights Reserved.
  5.  * 
  6.  * The contents of this file, and the files included with this file,
  7.  * are subject to the current version of the RealNetworks Public
  8.  * Source License (the "RPSL") available at
  9.  * http://www.helixcommunity.org/content/rpsl unless you have licensed
  10.  * the file under the current version of the RealNetworks Community
  11.  * Source License (the "RCSL") available at
  12.  * http://www.helixcommunity.org/content/rcsl, in which case the RCSL
  13.  * will apply. You may also obtain the license terms directly from
  14.  * RealNetworks.  You may not use this file except in compliance with
  15.  * the RPSL or, if you have a valid RCSL with RealNetworks applicable
  16.  * to this file, the RCSL.  Please see the applicable RPSL or RCSL for
  17.  * the rights, obligations and limitations governing use of the
  18.  * contents of the file.
  19.  * 
  20.  * Alternatively, the contents of this file may be used under the
  21.  * terms of the GNU General Public License Version 2 or later (the
  22.  * "GPL") in which case the provisions of the GPL are applicable
  23.  * instead of those above. If you wish to allow use of your version of
  24.  * this file only under the terms of the GPL, and not to allow others
  25.  * to use your version of this file under the terms of either the RPSL
  26.  * or RCSL, indicate your decision by deleting the provisions above
  27.  * and replace them with the notice and other provisions required by
  28.  * the GPL. If you do not delete the provisions above, a recipient may
  29.  * use your version of this file under the terms of any one of the
  30.  * RPSL, the RCSL or the GPL.
  31.  * 
  32.  * This file is part of the Helix DNA Technology. RealNetworks is the
  33.  * developer of the Original Code and owns the copyrights in the
  34.  * portions it created.
  35.  * 
  36.  * This file, and the files included with this file, is distributed
  37.  * and made available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY
  38.  * KIND, EITHER EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS
  39.  * ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES
  40.  * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET
  41.  * ENJOYMENT OR NON-INFRINGEMENT.
  42.  * 
  43.  * Technology Compatibility Kit Test Suite(s) Location:
  44.  *    http://www.helixcommunity.org/content/tck
  45.  * 
  46.  * Contributor(s):
  47.  * 
  48.  * ***** END LICENSE BLOCK ***** */
  49. #ifndef _XMLPARSE_H_
  50. #define _XMLPARSE_H_
  51. #include "carray.h"
  52. #include "hxstack.h"
  53. typedef enum {
  54.     GSFoundExpected,
  55.     GSNoValue,
  56.     GSValueOnly,
  57.     GSMissingQuote,
  58.     GSEndTag,
  59.     GSInvalid
  60. } GetStringResult;
  61. typedef enum {
  62.     XMLPTag,
  63.     XMLPNoClose,
  64.     XMLPNoTagType,
  65.     XMLPBadAttribute,
  66.     XMLPAttributeValueNotQuoted,
  67.     XMLPBadEndTag,
  68.     XMLPBadProcInst,
  69.     XMLPBadDirective,
  70.     XMLPDupAttribute,
  71.     XMLPCommentBeforeProcInst,
  72.     XMLPPlainText,
  73.     XMLPComment,
  74.     XMLPDirective,   // Right word?
  75.     XMLPProcInst,
  76.     XMLPNotDone
  77. } XMLParseResult;
  78. typedef enum {
  79.     XMLUnknownError,
  80.     XMLErrorNoClose,
  81.     XMLErrorBadAttribute,
  82.     XMLErrorNoValue,
  83.     XMLErrorMissingQuote,
  84.     XMLErrorBadEndTag,
  85.     XMLErrorNoTagType,
  86.     XMLErrorDupAttribute
  87.     , XMLErrorCommentBeforeProcInst
  88.     
  89.     , XMLErrorInvalidName
  90.     , XMLErrorInvalidCharInDoc
  91.     , XMLErrorTwoDashNotAllowed
  92.     , XMLErrorInvalidDecl
  93.     , XMLErrorInvalidPI
  94.     , XMLErrorInvalidPITarget
  95.     , XMLErrorInvalidCDATA
  96.     
  97.     , XMLErrorInvalidRef
  98.     , XMLErrorMissingEquals
  99.     , XMLErrorMissingReqSpace
  100.     , XMLErrorLTnotAllowed
  101.     , XMLErrorInvalidGTafter2RSQB
  102.     , XMLErrorInvalidComment
  103. } XMLErrorTag;
  104. enum {
  105.     TagType,
  106.     AttributeName,
  107.     AttributeValue,
  108.     AttributeValueNoQuote,
  109.     AttributeValueDirective
  110. };
  111. typedef enum {
  112.     XMLPlainTag,
  113.     XMLEndTag,
  114.     XMLCommentTag,
  115.     XMLProcInstTag,
  116.     XMLDirectiveTag
  117. } XMLTagType;
  118. class XMLAttribute
  119. {
  120. public:
  121.     XMLAttribute()
  122.     {
  123. name = NULL;
  124. value = NULL;
  125.     };
  126.     ~XMLAttribute()
  127.     {
  128. HX_VECTOR_DELETE(name);
  129. HX_VECTOR_DELETE(value);
  130.     };
  131.     char* name;
  132.     char* value;
  133. };
  134. class XMLError
  135. {
  136. public:
  137.     XMLError(XMLErrorTag errorTag,
  138.     INT32 lLineNumber,
  139.     INT32 lLinePosition,
  140.     const char* pErrorString,
  141.     const char* pFrameString);
  142.     ~XMLError();
  143.     char* m_pErrorString;
  144.     char* m_pFrameString;
  145.     INT32 m_lLineNumber;
  146.     INT32 m_lLinePosition;
  147.     XMLErrorTag m_errorTag;
  148. };
  149. class XMLTag
  150. {
  151. public:
  152.     XMLTag(BOOL bStrictCompliance, BOOL bStoreErrors = FALSE);
  153.     ~XMLTag();
  154.     XMLAttribute* new_attribute();
  155.     XMLAttribute* attribute(UINT32 a) { return (XMLAttribute*)m_attributes[(int)a]; };
  156.     const char*   get_attribute(const char*);
  157.     XMLTagType m_type;
  158.     char* m_name;
  159.     BOOL  m_need_close;
  160.     UINT32 elem;
  161.     UINT32 m_numAttributes;
  162.     XMLAttribute* m_cur_attribute;
  163.     CHXPtrArray m_attributes;
  164.     BOOL m_bStrictCompliance;
  165.     
  166.     CHXPtrArray* m_errs;
  167. };
  168. class XMLParser
  169. {
  170. private:
  171.     CHXStack m_pStack;
  172.     UINT32 m_comment_state;
  173.     UINT32 m_comment_get_arg;
  174.     UINT16 m_comment_pos;
  175.     BOOL m_comment_start;
  176.     BOOL m_bStrictCompliance;
  177.     char m_comment_arg[1024]; /* Flawfinder: ignore */
  178.     char m_comment_command[20]; /* Flawfinder: ignore */
  179.     UINT32 m_ulCurrentLine;
  180.     UINT32 m_ulCurrentCol;
  181.     UINT32 m_ulTagStartLine;
  182.     UINT32 m_ulTagStartCol;
  183.     XMLError* m_pLastError;
  184.     char* m_pEncoding;
  185.     BOOL        m_bAllowNonXMLComments;
  186.     BOOL m_bCommentWasFound;
  187.     BOOL m_bStoreErrors;
  188.     //This flag is always FALSE until we enable it in a future
  189.     // release at which point we will initialize it to TRUE
  190.     // and only set it to FALSE when an author or server admin
  191.     // specifically specifies that he/she wants our old
  192.     // SMIL parser to handle the (presumably poorly-authored) file.
  193.     // NOTE: as of 1/20/2000, the code to allow authors to
  194.     // force the old parser to be used is not yet written.
  195.     // In addition, rmasmil/smlparse.h/.cpp has a similar flag and
  196.     // the two need to be linked to the same value when that code
  197.     // gets written:
  198.     BOOL m_bXMLandSMIL10FullCompliance;
  199.     class XMLFrame
  200.     {
  201. XMLFrame() : elemcount(0), name(NULL) {};
  202. ~XMLFrame()
  203. {
  204.     if(name)
  205. delete [] name;
  206. };
  207. UINT32 elemcount;
  208. char*  name;
  209. friend class XMLParser;
  210.     };
  211.     char GetEscapeMacro(const char*&, const char*);
  212.     GetStringResult GetString(const char*&, const char*,
  213.       char*&, UINT32);
  214.     void FindCommentClose(const char*&, const char*, const char*);
  215.     void SetError(XMLError*& pErr, XMLErrorTag tag, INT32 lLine,
  216.  INT32 lPos, const char* pErrorText,
  217.  INT32 lErrorTextLen,
  218.  const char* pFrameText);
  219. public:
  220.     XMLParser(BOOL bStrictCompliance = FALSE,
  221.       const char* pEncoding = NULL,
  222.       BOOL bAllowNonXMLComments = FALSE);
  223.     ~XMLParser();
  224.     static HX_RESULT
  225.     GetPrologInfo(const char* pBuf,
  226.     UINT32 ulBufLen,
  227.     char*& pVersion,
  228.     char*& pEncoding);
  229.     void Reset(void);
  230.     XMLParseResult Parse(const char*& buf, UINT32 len, XMLTag*& tag, BOOL bIsFinal = TRUE);
  231.     XMLParseResult ParseTag(const char* open, const char* close, 
  232. XMLTagType ulTagType, XMLTag*& tag);
  233.     XMLParseResult ScanTag(const char* open, const char* close, XMLTag* tag);
  234.     XMLError* GetLastError() { return m_pLastError; }
  235.     UINT32 GetCurrentLineNumber()    { return m_ulCurrentLine; }
  236.     UINT32 GetCurrentColumnNumber()  { return m_ulCurrentCol; }
  237.     UINT32 GetTagStartLineNumber()   { return m_ulTagStartLine; }
  238.     UINT32 GetTagStartColumnNumber() { return m_ulTagStartCol; }
  239.     XMLFrame* m_pCurrentFrame;
  240.     void StoreErrors() { m_bStoreErrors = TRUE; }
  241.     void SetEncoding(const char* pszEncoding);
  242.     HX_RESULT GetEncoding(char*& rpszEncoding);
  243. };
  244. #endif // _XMLPARSE_H_