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

Symbian

开发平台:

Visual C++

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