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

Symbian

开发平台:

C/C++

  1. /* ***** BEGIN LICENSE BLOCK ***** 
  2.  * Version: RCSL 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 RealNetworks Community Source License 
  8.  * Version 1.0 (the "License"). You may not use this file except in 
  9.  * compliance with the License executed by both you and RealNetworks.  You 
  10.  * may obtain a copy of the License at  
  11.  * http://www.helixcommunity.org/content/rcsl.  You may also obtain a 
  12.  * copy of the License by contacting RealNetworks directly.  Please see the 
  13.  * License for the rights, obligations and limitations governing use of the 
  14.  * contents of the file. 
  15.  *  
  16.  * This file is part of the Helix DNA Technology. RealNetworks is the 
  17.  * developer of the Original Code and owns the copyrights in the portions 
  18.  * it created. 
  19.  *  
  20.  * This file, and the files included with this file, is distributed and made 
  21.  * available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 
  22.  * EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES, 
  23.  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS 
  24.  * FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.  
  25.  * 
  26.  * Technology Compatibility Kit Test Suite(s) Location: 
  27.  *    http://www.helixcommunity.org/content/tck 
  28.  * 
  29.  * Contributor(s): 
  30.  *  
  31.  * ***** END LICENSE BLOCK ***** */ 
  32. #ifndef _XMLCONV_H_
  33. #define _XMLCONV_H_
  34. #include "growingq.h"
  35. /****************************************************************************
  36.  *  $Id: xmlesc.h,v 1.5 2003/11/21 20:13:14 bobclark Exp $
  37.  *
  38.  *  NAME: xmlesc.h
  39.  *
  40.  *  CLASS
  41.  *  CEscapeXMLtoHTML
  42.  *
  43.  *  DESCRIPTION:
  44.  *      The declaration for a class that escapes all the XML characters
  45.  *      that are not printable in HTML.  A IHXBuffer is passed into the
  46.  *      class on throgh the Convert Method.  This is a pure virtual 
  47.  *      class. The CheckTag, and OnTag functions must be implemented by 
  48.  *      a child class.
  49.  *
  50.  ***************************************************************************/
  51. // XXXJHUG - I can't find a max tag length in the XML specs - this works
  52. // with everything we parse so far.
  53. const UINT32 MAXTAGLEN = 128;
  54. class CEscapeXMLtoHTML 
  55. {
  56. public:
  57.     /*_______________________________________________________________________
  58.      *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  59.      *  CEscapeXMLtoHTML(pServerUrl, pOurPath)
  60.      *
  61.      *  PARAMETERS:
  62.      *     pServerUrl Full url to the server including the template file.
  63.      *     pOurPath The Relative path of the file currently being parsed
  64.      * no ending /
  65.      *     bMangleLinks    - to mangle or not
  66.      *     bUseStyles     - output in styles or regular HTML
  67.      *     pHotTags     - The tags that we will call OnTag For.
  68.      *     pDefaultView    - The default viewsource to use for remote rstp
  69.      *       links ":port/viewmount/viewfile"
  70.      *_______________________________________________________________________
  71.      *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  72.     CEscapeXMLtoHTML(IHXValues* pOptions, const char** pHotTags);
  73.     
  74.     /*_______________________________________________________________________
  75.      *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  76.      *  ~CEscapeXMLtoHTML()
  77.      *_______________________________________________________________________
  78.      *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  79.     virtual ~CEscapeXMLtoHTML();
  80.     
  81.     /*_______________________________________________________________________
  82.      *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  83.      *  Convert(pXMLsrc)
  84.      *
  85.      *  PARAMETERS:
  86.      *     pXMLsrc Pointer to a IHXBuffer containing the src of xml to
  87.      * be converted
  88.      * RETURNS
  89.      *     A new IHXBuffer containing the parsed XML data ready to be 
  90.      *     displayed in an HTML browser.
  91.      *_______________________________________________________________________
  92.      *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  93.     STDMETHOD(Convert)(THIS_ IHXBuffer* pBufIn, REF(IHXBuffer*) pOutBuffer);
  94.     
  95.     /*_______________________________________________________________________
  96.      *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  97.      *  StatesEnum
  98.      *
  99.      * DESCRIPTION:
  100.      * enum descibing the different stages of the Parse Function
  101.      *_______________________________________________________________________
  102.      *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  103.     enum StatesEnum { IN_CONTENT
  104.         , IN_DOC_TYPE_DEC
  105.         , IN_DOC_TYPE_DEC_TAG
  106.         , IN_CDATA
  107. , ABOUT_TO_BEGIN_TAG
  108. , IN_BEGIN_TAG
  109. , IN_TAG
  110. , BEGIN_ATTRIBUTE_VALUE
  111. , IN_QUOTED_ATTRIBUTE_VALUE
  112. , IN_BROKEN_QUOTED_ATTRIBUTE_VALUE
  113. , IN_UNQUOTED_ATTRIBUTE_VALUE
  114. , IN_COMMENT
  115. , IN_AMPERSAND_THINGY 
  116.     };
  117. protected:
  118.     /*_______________________________________________________________________
  119.      *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  120.      *  struct DataObject
  121.      *
  122.      * DESCRIPTION:
  123.      * structure that defines the state of the Parse function
  124.      *_______________________________________________________________________
  125.      *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  126.     class DataObject {
  127.     public:
  128. DataObject() : state(IN_CONTENT), bInBrokenXML(FALSE), 
  129.     bPushChar(FALSE), tag_index(0), bInProcessingInstructions(FALSE),
  130.     bInInternalComment(FALSE), bInDataSection(FALSE), cQuote('') {}
  131. StatesEnum state;
  132. BOOL bInBrokenXML;
  133. BOOL bPushChar;
  134. char tag[MAXTAGLEN]; /* Flawfinder: ignore */
  135. UINT32 tag_index;
  136. BOOL bInProcessingInstructions;
  137. BOOL bInInternalComment;
  138. BOOL bInDataSection;
  139. char cQuote;
  140.     };
  141.     /*_______________________________________________________________________
  142.      *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  143.      *  PURE VIRTUAL FUNCTION
  144.      * OnTag(cp, pObj, queue)
  145.      *
  146.      *  PARAMETERS:
  147.      *
  148.      * cp Pointer to a character string.  It points to the first
  149.      * letter of the tag name that we want to do special stuff to
  150.      *  ulLen Length to end of cp so we don't overrun the buffer
  151.      * pObj The current state of the Parse Function, this can be used
  152.      * to continue parsing.
  153.      * queue The queue to push the output to.
  154.      *
  155.      *  DESCRIPTION:
  156.      *     This method is implemented by a specialized class to take care of
  157.      *     a tag that returned true from the CheckTag call.  It returns how
  158.      *     many characters it ate off the cp.
  159.      *     This function can recursivly call the parse function to keep the
  160.      *     formatting consistant.
  161.      *
  162.      *  RETURNS
  163.      *     UINT32
  164.      * number of characters used off cp, thus the position can be
  165.      * adjusted after the function returns
  166.      *_______________________________________________________________________
  167.      *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  168.     virtual UINT32 OnTag(const UCHAR* cp, UINT32 ulLen, DataObject* pObj,
  169.     CBigByteGrowingQueue* queue) = 0;
  170.     /*_______________________________________________________________________
  171.      *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  172.      *  PURE VIRTUAL FUNCTION
  173.      * PushHeader(queue)
  174.      *
  175.      *  PARAMETERS:
  176.      * queue The queue to push the output to.
  177.      *
  178.      *  DESCRIPTION:
  179.      *     This method is implemented by classes that are derived from us.
  180.      * It allows the class to output type specific information before the
  181.      *  Actual XML source is presented.
  182.      *
  183.      *  RETURNS
  184.      *     void
  185.      *_______________________________________________________________________
  186.      *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  187.     virtual void PushHeader(CBigByteGrowingQueue* queue) = 0;
  188.     /*_______________________________________________________________________
  189.      *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  190.      * PushCommonHeader(queue)
  191.      *
  192.      *  PARAMETERS:
  193.      * queue The queue to push the output to.
  194.      *
  195.      *  DESCRIPTION:
  196.      *     This method outputs the common information for files.  It usually
  197.      * should be called from PushHeader after the file specific information
  198.      * has been queued.
  199.      *
  200.      *  RETURNS
  201.      *     void
  202.      *_______________________________________________________________________
  203.      *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  204.     void PushCommonHeader(CBigByteGrowingQueue* queue);
  205.     /*_______________________________________________________________________
  206.      *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  207.      *  Parse(pIn, ulLen, pQueue, pObj)
  208.      *
  209.      *  PARAMETERS:
  210.      *
  211.      * pIn The string to be parsed.
  212.      * ulLen How far to parse through pIn
  213.      * pQueue The output Queue to push onto
  214.      * pObj The state object.  This is used to start the queue from a
  215.      * given state.
  216.      *
  217.      *  DESCRIPTION:
  218.      *
  219.      *     This function walks through the string one character at a time.
  220.      *     Every tag is checked with the CheckTag(...) function to see if it
  221.      *     needs special attention.  If so the OnTag(...) function is 
  222.      *     called.  This function will be implemented in a child class that
  223.      *     will replace the tag with parsed imput returning how far along 
  224.      *     pIn it made it.
  225.      *
  226.      *     This function is designed such that Inherited classes can
  227.      *     recusivly call it to parse thier stream from the given state.
  228.      *
  229.      *  RETURNS
  230.      *     void
  231.      *_______________________________________________________________________
  232.      *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  233.     void Parse(const UCHAR* pIn, UINT32 ulLen, CBigByteGrowingQueue* pQueue,
  234.      DataObject* pObj);
  235.     /*_______________________________________________________________________
  236.      *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  237.      *  WrapAttributeWithHREF (cp, pObj, pQueue, pAttribute)
  238.      *
  239.      *  PARAMETERS:
  240.      *
  241.      *  cp Pointer to a character string.  It points to the first
  242.      * letter of the tag name that we want to do special stuff to
  243.      *  ulLen Length to end of cp so we don't overrun the buffer
  244.      *  pObj The current state of the Parse Function, this can be used
  245.      * to continue parsing.
  246.      *  queue The queue to push the output to.
  247.      *  pAttribute The attribute we want to wrap.
  248.      *
  249.      *  DESCRIPTION:
  250.      *     This method will take the given cp and wrap the given attribute
  251.      * with an HREF.  It will be used by Inherited classes in their OnTag
  252.      * Function
  253.      *
  254.      *  RETURNS
  255.      * UINT32
  256.      *     number of characters used off cp, thus the position can be
  257.      *     adjusted after the function returns
  258.      *_______________________________________________________________________
  259.      *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  260.     UINT32 WrapAttributeWithHREF(const UCHAR* cp,
  261. UINT32 ulLen, DataObject* pObj, CBigByteGrowingQueue* pQueue,
  262. const char* pAttribute);
  263. #ifdef HYPER_LINKING_HREFS_XML
  264.     UINT32 LinkHREF(const UCHAR* cp,
  265. UINT32 ulLen, DataObject* pObj, CBigByteGrowingQueue* pQueue);
  266. #endif
  267. /*___________________________________________________________________________
  268.  *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  269.  * Helper Methods:  These methods are used to help witht the implentation of
  270.  *     OnTag function
  271.  *___________________________________________________________________________
  272.  *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  273.     BOOL m_bMangleLinks;
  274.     
  275.     char* m_pOurPath;
  276.     char* m_pFileName;
  277.     char* m_pRamGen;
  278.     ULONG32 m_ulModDate;
  279.     ULONG32 m_ulFileSize;
  280. private:
  281.     /*_______________________________________________________________________
  282.      *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  283.      * CheckTag(pObj)
  284.      *
  285.      *  PARAMETERS:
  286.      * pObj The State object.  It contains the tag name.
  287.      *
  288.      *  DESCRIPTION:
  289.      *     This method checks cp to see if it is the start of a tag we are
  290.      *     looking
  291.      *  RETURNS
  292.      *     BOOL
  293.      * TRUE if we want OnTag called, or FALSE if we will ignor this
  294.      * tag
  295.      *_______________________________________________________________________
  296.      *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  297.     BOOL CheckTag(DataObject* pObj);
  298.     
  299.     BOOL PushOpenningHREF(const UCHAR* cp, CBigByteGrowingQueue* pQueue, char cEndQuote);
  300.     void PushEndingHREF(CBigByteGrowingQueue* pQueue);
  301.     UINT32 PushMangledDisplayedPath(const UCHAR* cp, 
  302.     CBigByteGrowingQueue* pQueue, char cEndQuote);
  303.     char* EncryptParameter(char* pPath);
  304.     UCHAR* GetParameter(const UCHAR* cp, UINT32 ulNameLen, BOOL bFullPath = FALSE);
  305.     void BeginColorTag (CBigByteGrowingQueue* qu, DataObject *pObj);
  306.     void EndColorTag (CBigByteGrowingQueue* qu, DataObject *pObj);
  307.     const char** m_pEscapeStrings;
  308.     const char** m_pHotTags;
  309.     
  310.     char* m_pDefaultView;
  311.     char* m_pServerUrl;
  312.     
  313.     enum m_enumTags
  314.     {
  315. BeginTagMarkup,
  316. EndTagMarkup,
  317. BeginTagNameMarkup,
  318. EndTagNameMarkup,
  319. BeginAttributeValueMarkup,
  320. EndAttributeValueMarkup,
  321. BeginBrokenAttributeMarkup,
  322. EndBrokenAttributeMarkup,
  323. BeginCommentMarkup,
  324. EndCommentMarkup,
  325. BeginAmpersandThingyMarkup,
  326. EndAmpersandThingyMarkup,
  327. BeginHREF,
  328.         EndHREF,
  329.         BeginProcessingInstructions,
  330.         EndProcessingInstructions,
  331.         BeginCDATA,
  332.         EndCDATA,
  333.         BeginDTD,
  334.         EndDTD
  335.     };
  336.     static const char* const m_pDefaultTags[20];
  337.     static const char* const m_pStyleTags[20];
  338. };
  339. #endif // _XMLCONV_H_