InputSource.hpp
上传用户:zhuqijet
上传日期:2013-06-25
资源大小:10074k
文件大小:15k
源码类别:

词法分析

开发平台:

Visual C++

  1. /*
  2.  * The Apache Software License, Version 1.1
  3.  *
  4.  * Copyright (c) 1999-2000 The Apache Software Foundation.  All rights
  5.  * reserved.
  6.  *
  7.  * Redistribution and use in source and binary forms, with or without
  8.  * modification, are permitted provided that the following conditions
  9.  * are met:
  10.  *
  11.  * 1. Redistributions of source code must retain the above copyright
  12.  *    notice, this list of conditions and the following disclaimer.
  13.  *
  14.  * 2. Redistributions in binary form must reproduce the above copyright
  15.  *    notice, this list of conditions and the following disclaimer in
  16.  *    the documentation and/or other materials provided with the
  17.  *    distribution.
  18.  *
  19.  * 3. The end-user documentation included with the redistribution,
  20.  *    if any, must include the following acknowledgment:
  21.  *       "This product includes software developed by the
  22.  *        Apache Software Foundation (http://www.apache.org/)."
  23.  *    Alternately, this acknowledgment may appear in the software itself,
  24.  *    if and wherever such third-party acknowledgments normally appear.
  25.  *
  26.  * 4. The names "Xerces" and "Apache Software Foundation" must
  27.  *    not be used to endorse or promote products derived from this
  28.  *    software without prior written permission. For written
  29.  *    permission, please contact apache@apache.org.
  30.  *
  31.  * 5. Products derived from this software may not be called "Apache",
  32.  *    nor may "Apache" appear in their name, without prior written
  33.  *    permission of the Apache Software Foundation.
  34.  *
  35.  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  36.  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  37.  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  38.  * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
  39.  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  40.  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  41.  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  42.  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  43.  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  44.  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  45.  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  46.  * SUCH DAMAGE.
  47.  * ====================================================================
  48.  *
  49.  * This software consists of voluntary contributions made by many
  50.  * individuals on behalf of the Apache Software Foundation, and was
  51.  * originally based on software copyright (c) 1999, International
  52.  * Business Machines, Inc., http://www.ibm.com .  For more information
  53.  * on the Apache Software Foundation, please see
  54.  * <http://www.apache.org/>.
  55.  */
  56. /*
  57.  * $Log: InputSource.hpp,v $
  58.  * Revision 1.7  2003/05/16 21:36:59  knoaman
  59.  * Memory manager implementation: Modify constructors to pass in the memory manager.
  60.  *
  61.  * Revision 1.6  2003/05/15 18:27:05  knoaman
  62.  * Partial implementation of the configurable memory manager.
  63.  *
  64.  * Revision 1.5  2003/03/07 18:10:06  tng
  65.  * Return a reference instead of void for operator=
  66.  *
  67.  * Revision 1.4  2002/11/04 14:56:26  tng
  68.  * C++ Namespace Support.
  69.  *
  70.  * Revision 1.3  2002/09/30 18:26:18  tng
  71.  * Since the derived class Wrapper4DOMInputSource has overwritten the set/getEncoding, SystemId, PublicId ... etc., these functions has to be virtual for them to work.
  72.  *
  73.  * Revision 1.2  2002/02/20 18:17:01  tng
  74.  * [Bug 5977] Warnings on generating apiDocs.
  75.  *
  76.  * Revision 1.1.1.1  2002/02/01 22:22:08  peiyongz
  77.  * sane_include
  78.  *
  79.  * Revision 1.10  2001/11/21 16:14:32  tng
  80.  * Schema: New method InputSource::get/setIssueFatalErrorIfNotFound to tell the parser whether to issue fatal error or not if cannot find it (the InputSource).  This is required for schema processing as it shouldn't be a fatal error if the schema is not found.
  81.  *
  82.  * Revision 1.9  2000/03/02 19:54:35  roddey
  83.  * This checkin includes many changes done while waiting for the
  84.  * 1.1.0 code to be finished. I can't list them all here, but a list is
  85.  * available elsewhere.
  86.  *
  87.  * Revision 1.8  2000/02/24 20:12:55  abagchi
  88.  * Swat for removing Log from API docs
  89.  *
  90.  * Revision 1.7  2000/02/12 03:42:21  rahulj
  91.  * Fixed DOC++ documentation formatting errors.
  92.  *
  93.  * Revision 1.6  2000/02/12 03:31:55  rahulj
  94.  * Removed duplicate CVS Log entries.
  95.  *
  96.  * Revision 1.5  2000/02/12 01:27:19  aruna1
  97.  * Documentation updated
  98.  *
  99.  * Revision 1.4  2000/02/09 02:15:28  abagchi
  100.  * Documented destructor
  101.  *
  102.  * Revision 1.3  2000/02/06 07:47:58  rahulj
  103.  * Year 2K copyright swat.
  104.  *
  105.  * Revision 1.2  2000/01/12 00:15:39  roddey
  106.  * Changes to deal with multiply nested, relative pathed, entities and to deal
  107.  * with the new URL class changes.
  108.  *
  109.  * Revision 1.1.1.1  1999/11/09 01:07:46  twl
  110.  * Initial checkin
  111.  *
  112.  * Revision 1.2  1999/11/08 20:45:01  rahul
  113.  * Swat for adding in Product name and CVS comment log variable.
  114.  *
  115.  */
  116. #ifndef INPUTSOURCE_HPP
  117. #define INPUTSOURCE_HPP
  118. #include <xercesc/util/PlatformUtils.hpp>
  119. XERCES_CPP_NAMESPACE_BEGIN
  120. class BinInputStream;
  121. /**
  122.   * A single input source for an XML entity.
  123.   *
  124.   * <p>This class encapsulates information about an input source in a
  125.   * single object, which may include a public identifier or a system
  126.   * identifier</p>
  127.   *
  128.   * <p>There are two places that the application will deliver this input
  129.   * source to the parser: as the argument to the Parser::parse method, or as
  130.   * the return value of the EntityResolver::resolveEntity method.</p>
  131.   *
  132.   * <p>InputSource is never used directly, but is the base class for a number
  133.   * of derived classes for particular types of input sources. Derivatives are
  134.   * provided (in the internal/ directory) for URL input sources, memory buffer
  135.   * input sources, and so on.</p>
  136.   *
  137.   * <p>When it is time to parse the input described by an input source, it
  138.   * will be asked to create a binary stream for that source. That stream will
  139.   * be used to input the data of the source. The derived class provides the
  140.   * implementation of the makeStream() method, and provides a type of stream
  141.   * of the correct type for the input source it represents.
  142.   *
  143.   * <p>An InputSource object belongs to the application: the parser never
  144.   * modifies them in any way. They are always passed by const reference so
  145.   * the parser will make a copy of any input sources that it must keep
  146.   * around beyond the call.</p>
  147.   *
  148.   * @see Parser#parse
  149.   * @see EntityResolver#resolveEntity
  150.   */
  151. class SAX_EXPORT InputSource : public XMemory
  152. {
  153. public:
  154.     // -----------------------------------------------------------------------
  155.     //  All constructors are hidden, just the destructor is available
  156.     // -----------------------------------------------------------------------
  157.     /** @name Destructor */
  158.     //@{
  159.   /**
  160.     * Destructor
  161.     *
  162.     */
  163.     virtual ~InputSource();
  164.     //@}
  165.     // -----------------------------------------------------------------------
  166.     /** @name Virtual input source interface */
  167.     //@{
  168.   /**
  169.     * Makes the byte stream for this input source.
  170.     *
  171.     * <p>The derived class must create and return a binary input stream of an
  172.     * appropriate type for its kind of data source. The returned stream must
  173.     * be dynamically allocated and becomes the parser's property.
  174.     * </p>
  175.     *
  176.     * @see BinInputStream
  177.     */
  178.     virtual BinInputStream* makeStream() const = 0;
  179.     //@}
  180.     // -----------------------------------------------------------------------
  181.     /** @name Getter methods */
  182.     //@{
  183.   /**
  184.     * An input source can be set to force the parser to assume a particular
  185.     * encoding for the data that input source reprsents, via the setEncoding()
  186.     * method. This method returns name of the encoding that is to be forced.
  187.     * If the encoding has never been forced, it returns a null pointer.
  188.     *
  189.     * @return The forced encoding, or null if none was supplied.
  190.     * @see #setEncoding
  191.     */
  192.     virtual const XMLCh* getEncoding() const;
  193.   /**
  194.     * Get the public identifier for this input source.
  195.     *
  196.     * @return The public identifier, or null if none was supplied.
  197.     * @see #setPublicId
  198.     */
  199.     virtual const XMLCh* getPublicId() const;
  200.   /**
  201.     * Get the system identifier for this input source.
  202.     *
  203.     * <p>If the system ID is a URL, it will be fully resolved.</p>
  204.     *
  205.     * @return The system identifier.
  206.     * @see #setSystemId
  207.     */
  208.     virtual const XMLCh* getSystemId() const;
  209.   /**
  210.     * Get the flag that indicates if the parser should issue fatal error if this input source
  211.     * is not found.
  212.     *
  213.     * @return True if the parser should issue fatal error if this input source is not found.
  214.     *         False if the parser issue warning message instead.
  215.     * @see #setIssueFatalErrorIfNotFound
  216.     */
  217.     virtual const bool getIssueFatalErrorIfNotFound() const;
  218.     MemoryManager* getMemoryManager() const;
  219.     //@}
  220.     // -----------------------------------------------------------------------
  221.     /** @name Setter methods */
  222.     //@{
  223.   /**
  224.     * Set the encoding which will be required for use with the XML text read
  225.     * via a stream opened by this input source.
  226.     *
  227.     * <p>This is usually not set, allowing the encoding to be sensed in the
  228.     * usual XML way. However, in some cases, the encoding in the file is known
  229.     * to be incorrect because of intermediate transcoding, for instance
  230.     * encapsulation within a MIME document.
  231.     *
  232.     * @param encodingStr The name of the encoding to force.
  233.     */
  234.     virtual void setEncoding(const XMLCh* const encodingStr);
  235.   /**
  236.     * Set the public identifier for this input source.
  237.     *
  238.     * <p>The public identifier is always optional: if the application writer
  239.     * includes one, it will be provided as part of the location information.</p>
  240.     *
  241.     * @param publicId The public identifier as a string.
  242.     * @see Locator#getPublicId
  243.     * @see SAXParseException#getPublicId
  244.     * @see #getPublicId
  245.     */
  246.     virtual void setPublicId(const XMLCh* const publicId);
  247.   /**
  248.     * Set the system identifier for this input source.
  249.     *
  250.     * <p>Set the system identifier for this input source.
  251.     *
  252.     * </p>The system id is always required. The public id may be used to map
  253.     * to another system id, but the system id must always be present as a fall
  254.     * back.
  255.     *
  256.     * <p>If the system ID is a URL, it must be fully resolved.</p>
  257.     *
  258.     * @param systemId The system identifier as a string.
  259.     * @see #getSystemId
  260.     * @see Locator#getSystemId
  261.     * @see SAXParseException#getSystemId
  262.     */
  263.     virtual void setSystemId(const XMLCh* const systemId);
  264.   /**
  265.     * Indicates if the parser should issue fatal error if this input source
  266.     * is not found.  If set to false, the parser issue warning message instead.
  267.     *
  268.     * @param  flag True if the parser should issue fatal error if this input source is not found.
  269.     *               If set to false, the parser issue warning message instead.  (Default: true)
  270.     *
  271.     * @see #getIssueFatalErrorIfNotFound
  272.     */
  273.     virtual void setIssueFatalErrorIfNotFound(const bool flag);
  274.     //@}
  275. protected :
  276.     // -----------------------------------------------------------------------
  277.     //  Hidden constructors
  278.     // -----------------------------------------------------------------------
  279.     /** @name Constructors and Destructor */
  280.     //@{
  281.     /** Default constructor */
  282.     InputSource(MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager);
  283.     /** Constructor with a system identifier as XMLCh type.
  284.       * @param systemId The system identifier (URI).
  285.       */
  286.     InputSource(const XMLCh* const systemId,
  287.                 MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager);
  288.     /** Constructor with a system and public identifiers
  289.       * @param systemId The system identifier (URI).
  290.       * @param publicId The public identifier as in the entity definition.
  291.       */
  292.     InputSource
  293.     (
  294.         const   XMLCh* const   systemId
  295.         , const XMLCh* const   publicId
  296.         , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager
  297.     );
  298.     /** Constructor witha system identifier as string
  299.       * @param systemId The system identifier (URI).
  300.       */
  301.     InputSource(const char* const systemId,
  302.                 MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager);
  303.     /** Constructor witha system and public identifiers. Both as string
  304.       * @param systemId The system identifier (URI).
  305.       * @param publicId The public identifier as in the entity definition.
  306.       */
  307.     InputSource
  308.     (
  309.         const   char* const systemId
  310.         , const char* const publicId
  311.         , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager
  312.     );
  313.     //@}
  314. private:
  315.     // -----------------------------------------------------------------------
  316.     //  Unimplemented constructors and operators
  317.     // -----------------------------------------------------------------------
  318.     InputSource(const InputSource&);
  319.     InputSource& operator=(const InputSource&);
  320.     // -----------------------------------------------------------------------
  321.     //  Private data members
  322.     //
  323.     //  fEncoding
  324.     //      This is the encoding to use. Usually this is null, which means
  325.     //      to use the information found in the file itself. But, if set,
  326.     //      this encoding will be used without question.
  327.     //
  328.     //  fPublicId
  329.     //      This is the optional public id for the input source. It can be
  330.     //      null if none is desired.
  331.     //
  332.     //  fSystemId
  333.     //      This is the system id for the input source. This is what is
  334.     //      actually used to open the source.
  335.     //
  336.     //  fFatalErrorIfNotFound
  337.     // -----------------------------------------------------------------------
  338.     MemoryManager* fMemoryManager;
  339.     XMLCh*         fEncoding;
  340.     XMLCh*         fPublicId;
  341.     XMLCh*         fSystemId;
  342.     bool           fFatalErrorIfNotFound;
  343. };
  344. // ---------------------------------------------------------------------------
  345. //  InputSource: Getter methods
  346. // ---------------------------------------------------------------------------
  347. inline const XMLCh* InputSource::getEncoding() const
  348. {
  349.     return fEncoding;
  350. }
  351. inline const XMLCh* InputSource::getPublicId() const
  352. {
  353.     return fPublicId;
  354. }
  355. inline const XMLCh* InputSource::getSystemId() const
  356. {
  357.     return fSystemId;
  358. }
  359. inline const bool InputSource::getIssueFatalErrorIfNotFound() const
  360. {
  361.     return fFatalErrorIfNotFound;
  362. }
  363. inline MemoryManager* InputSource::getMemoryManager() const
  364. {
  365.     return fMemoryManager;
  366. }
  367. // ---------------------------------------------------------------------------
  368. //  InputSource: Setter methods
  369. // ---------------------------------------------------------------------------
  370. inline void InputSource::setIssueFatalErrorIfNotFound(const bool flag)
  371. {
  372.     fFatalErrorIfNotFound = flag;
  373. }
  374. XERCES_CPP_NAMESPACE_END
  375. #endif