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

词法分析

开发平台:

Visual C++

  1. /*
  2.  * The Apache Software License, Version 1.1
  3.  *
  4.  * Copyright (c) 1999-2003 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: XMLAttDef.hpp,v $
  58.  * Revision 1.9  2003/05/16 21:36:55  knoaman
  59.  * Memory manager implementation: Modify constructors to pass in the memory manager.
  60.  *
  61.  * Revision 1.8  2003/05/15 18:26:07  knoaman
  62.  * Partial implementation of the configurable memory manager.
  63.  *
  64.  * Revision 1.7  2003/04/21 20:46:01  knoaman
  65.  * Use XMLString::release to prepare for configurable memory manager.
  66.  *
  67.  * Revision 1.6  2003/03/07 18:08:10  tng
  68.  * Return a reference instead of void for operator=
  69.  *
  70.  * Revision 1.5  2003/01/29 19:45:35  gareth
  71.  * added api for DOMTypeInfo
  72.  *
  73.  * Revision 1.4  2002/12/10 02:15:55  knoaman
  74.  * Schema Errata: E1-21.
  75.  *
  76.  * Revision 1.3  2002/11/04 15:00:21  tng
  77.  * C++ Namespace Support.
  78.  *
  79.  * Revision 1.2  2002/02/20 18:17:01  tng
  80.  * [Bug 5977] Warnings on generating apiDocs.
  81.  *
  82.  * Revision 1.1.1.1  2002/02/01 22:21:50  peiyongz
  83.  * sane_include
  84.  *
  85.  * Revision 1.13  2001/11/15 16:36:36  knoaman
  86.  * Re-organize constant values.
  87.  *
  88.  * Revision 1.12  2001/08/09 15:23:37  knoaman
  89.  * add support for <anyAttribute> declaration.
  90.  *
  91.  * Revision 1.11  2001/06/21 14:25:26  knoaman
  92.  * Fix for bug 1946
  93.  *
  94.  * Revision 1.10  2001/05/11 13:25:31  tng
  95.  * Copyright update.
  96.  *
  97.  * Revision 1.9  2001/02/27 18:48:20  tng
  98.  * Schema: Add SchemaAttDef, SchemaElementDecl, SchemaAttDefList.
  99.  *
  100.  * Revision 1.8  2000/12/14 18:49:56  tng
  101.  * Fix API document generation warning: "Warning: end of member group without matching begin"
  102.  *
  103.  * Revision 1.7  2000/11/30 18:22:38  andyh
  104.  * reuseValidator - fix bugs (spurious errors) that occured on reuse due to
  105.  * pools already containing some items.  Fixed by Tinny Ng.
  106.  *
  107.  * Revision 1.6  2000/07/07 22:23:38  jpolast
  108.  * remove useless getKey() functions.
  109.  *
  110.  * Revision 1.5  2000/02/24 20:00:22  abagchi
  111.  * Swat for removing Log from API docs
  112.  *
  113.  * Revision 1.4  2000/02/16 23:03:48  roddey
  114.  * More documentation updates
  115.  *
  116.  * Revision 1.3  2000/02/15 01:21:30  roddey
  117.  * Some initial documentation improvements. More to come...
  118.  *
  119.  * Revision 1.2  2000/02/06 07:47:46  rahulj
  120.  * Year 2K copyright swat.
  121.  *
  122.  * Revision 1.1.1.1  1999/11/09 01:08:27  twl
  123.  * Initial checkin
  124.  *
  125.  * Revision 1.2  1999/11/08 20:44:34  rahul
  126.  * Swat for adding in Product name and CVS comment log variable.
  127.  *
  128.  */
  129. #if !defined(ATTDEF_HPP)
  130. #define ATTDEF_HPP
  131. #include <xercesc/util/PlatformUtils.hpp>
  132. #include <xercesc/util/XMLString.hpp>
  133. #include <xercesc/util/XMemory.hpp>
  134. XERCES_CPP_NAMESPACE_BEGIN
  135. class XMLAttr;
  136. /** Represents the core information of an atribute definition
  137.  *
  138.  *  This class defines the basic characteristics of an attribute, no matter
  139.  *  what type of validator is used. If a particular schema associates more
  140.  *  information with an attribute it will create a derivative of this class.
  141.  *  So this class provides an abstract way to get basic information on
  142.  *  attributes from any type of validator.
  143.  *
  144.  *  This class supports keyed collection semantics on the fully qualified
  145.  *  attribute name, by providing a getKey() method to extract the key string.
  146.  *  getKey(), in this case, just calls the virtual method getFullName() to
  147.  *  get the fully qualified name, as defined by the derived class.
  148.  *
  149.  *  Note that the 'value' of an attribute type definition is the default or
  150.  *  of fixed value given to it in its definition. If the attribute is of the
  151.  *  enumerated or notation type, it will have an 'enumeration value' as well
  152.  *  which is a space separated list of its possible vlaues.
  153.  */
  154. class XMLPARSER_EXPORT XMLAttDef : public XMemory
  155. {
  156. public:
  157.     // -----------------------------------------------------------------------
  158.     //  Class specific types
  159.     //
  160.     //  AttTypes
  161.     //      The list of possible types that an attribute can have, according
  162.     //      to the XML 1.0 spec and schema.
  163.     //
  164.     //  DefAttTypes
  165.     //      The modifiers that an attribute decl can have, which indicates
  166.     //      whether instances of that attributes are required, implied, etc..
  167.     //
  168.     //  CreateReasons
  169.     //      This type is used to store how an attribute declaration got into
  170.     //      the elementdecl's attribute pool.
  171.     //
  172.     // -----------------------------------------------------------------------
  173. enum AttTypes
  174.     {
  175.         CData               = 0
  176.         , ID                = 1
  177.         , IDRef             = 2
  178.         , IDRefs            = 3
  179.         , Entity            = 4
  180.         , Entities          = 5
  181.         , NmToken           = 6
  182.         , NmTokens          = 7
  183.         , Notation          = 8
  184.         , Enumeration       = 9
  185.         , Simple            = 10
  186.         , Any_Any           = 11
  187.         , Any_Other         = 12
  188.         , Any_List          = 13
  189.         , AttTypes_Count
  190.         , AttTypes_Min      = 0
  191.         , AttTypes_Max      = 13
  192.         , AttTypes_Unknown  = -1
  193. };
  194.     enum DefAttTypes
  195.     {
  196.         Default                  = 0
  197.         , Fixed                  = 1
  198.         , Required               = 2
  199.         , Required_And_Fixed     = 3
  200.         , Implied                = 4
  201.         , ProcessContents_Skip   = 5
  202.         , ProcessContents_Lax    = 6
  203.         , ProcessContents_Strict = 7
  204.         , Prohibited             = 8
  205.         , DefAttTypes_Count
  206.         , DefAttTypes_Min   = 0
  207.         , DefAttTypes_Max   = 8
  208.         , DefAttTypes_Unknown = -1
  209. };
  210.     enum CreateReasons
  211.     {
  212.         NoReason
  213.         , JustFaultIn
  214.     };
  215.     // -----------------------------------------------------------------------
  216.     //  Public static data members
  217.     // -----------------------------------------------------------------------
  218.     static const unsigned int fgInvalidAttrId;
  219.     // -----------------------------------------------------------------------
  220.     //  Public, static methods
  221.     // -----------------------------------------------------------------------
  222.     /** @name Public, static methods */
  223.     //@{
  224.     /** Get a string representation of the passed attribute type enum
  225.       *
  226.       * This method allows you to get a textual representation of an attriubte
  227.       * type, mostly for debug or display.
  228.       *
  229.       * @param attrType The attribute type value to get the string for.
  230.       *
  231.       * @return A const pointer to the static string that holds the text
  232.       *         description of the passed type.
  233.       */
  234.     static const XMLCh* getAttTypeString(const AttTypes attrType);
  235.     /** Get a string representation of the passed def attribute type enum
  236.       *
  237.       * This method allows you to get a textual representation of an default
  238.       * attributetype, mostly for debug or display.
  239.       *
  240.       * @param attrType The default attribute type value to get the string for.
  241.       *
  242.       * @return A const pointer to the static string that holds the text
  243.       *         description of the passed default type.
  244.       */
  245.     static const XMLCh* getDefAttTypeString(const DefAttTypes attrType);
  246.     //@}
  247.     // -----------------------------------------------------------------------
  248.     //  Destructor
  249.     // -----------------------------------------------------------------------
  250.     /** @name Destructor */
  251.     //@{
  252.     /**
  253.       *  Destructor
  254.       */
  255.     virtual ~XMLAttDef();
  256.     //@}
  257.     // -----------------------------------------------------------------------
  258.     //  The virtual attribute def interface
  259.     // -----------------------------------------------------------------------
  260.     /** @name Virtual interface */
  261.     //@{
  262.     /** Get the full name of this attribute type
  263.       *
  264.       * The derived class should return a const pointer to the full name of
  265.       * this attribute. This will vary depending on the type of validator in
  266.       * use.
  267.       *
  268.       * @return A const pointer to the full name of this attribute type.
  269.       */
  270.     virtual const XMLCh* getFullName() const = 0;
  271.     /**
  272.      * The derived class should implement any cleaning up required between
  273.      * each use of an instance of this class for validation
  274.      */
  275.     virtual void reset() = 0;
  276.     //@}
  277.     // -----------------------------------------------------------------------
  278.     //  Getter methods
  279.     // -----------------------------------------------------------------------
  280.     /** @name Getter methods */
  281.     //@{
  282.     /** Get the default type of this attribute type
  283.       *
  284.       * This method returns the 'default type' of the attribute. Default
  285.       * type in this case refers to the XML concept of a default type for
  286.       * an attribute, i.e. #FIXED, #IMPLIED, etc...
  287.       *
  288.       * @return The default type enum for this attribute type.
  289.       */
  290.     DefAttTypes getDefaultType() const;
  291.     /** Get the enumeration value (if any) of this attribute type
  292.       *
  293.       * If the attribute is of an enumeration or notatin type, then this
  294.       * method will return a const reference to a string that contains the
  295.       * space separated values that can the attribute can have.
  296.       *
  297.       * @return A const pointer to a string that contains the space separated
  298.       *         legal values for this attribute.
  299.       */
  300.     const XMLCh* getEnumeration() const;
  301.     /** Get the pool id of this attribute type
  302.       *
  303.       * This method will return the id of this attribute in the validator's
  304.       * attribute pool. It was set by the validator when this attribute was
  305.       * created.
  306.       *
  307.       * @return The pool id of this attribute type.
  308.       */
  309.     unsigned int getId() const;
  310.     /** Query whether the attribute was explicitly provided.
  311.       *
  312.       * When the scanner scans a start tag, it will ask the element decl
  313.       * object of the element type of that start tag to clear the 'provided'
  314.       * flag on all its attributes. As the scanner sees explicitly provided
  315.       * attributes, its turns on this flag to indicate that this attribute
  316.       * has been provided. In this way, the scanner can catch duplicated
  317.       * attributes and required attributes that aren't provided, and default
  318.       * in fixed/default valued attributes that are not explicitly provided.
  319.       *
  320.       * @return Returns a boolean value that indicates whether this attribute
  321.       *         was explicitly provided.
  322.       */
  323.     bool getProvided() const;
  324.     /** Get the type of this attribute
  325.       *
  326.       * Gets the type of this attribute. This type is represented by an enum
  327.       * that convers the types of attributes allowed by XML, e.g. CDATA, NMTOKEN,
  328.       * NOTATION, etc...
  329.       *
  330.       * @return The attribute type enumeration value for this type of
  331.       *         attribute.
  332.       */
  333.     AttTypes getType() const;
  334.     /** Get the default/fixed value of this attribute (if any.)
  335.       *
  336.       * If the attribute defined a default/fixed value, then it is stored
  337.       * and this method will retrieve it. If it has non, then a null pointer
  338.       * is returned.
  339.       *
  340.       * @return A const pointer to the default/fixed value for this attribute
  341.       *         type.
  342.       */
  343.     const XMLCh* getValue() const;
  344.     /** Get the create reason for this attribute
  345.       *
  346.       * This method returns an enumeration which indicates why this attribute
  347.       * declaration exists.
  348.       *
  349.       * @return An enumerated value that indicates the reason why this attribute
  350.       * was added to the attribute table.
  351.       */
  352.     CreateReasons getCreateReason() const;
  353.     /** Indicate whether this attribute has been declared externally
  354.       *
  355.       * This method returns a boolean that indicates whether this attribute
  356.       * has been declared externally.
  357.       *
  358.       * @return true if this attribute has been declared externally, else false.
  359.       */
  360.     bool isExternal() const;
  361.     /** Get the plugged-in memory manager
  362.       *
  363.       * This method returns the plugged-in memory manager user for dynamic
  364.       * memory allocation/deallocation.
  365.       *
  366.       * @return the plugged-in memory manager
  367.       */
  368.     MemoryManager* getMemoryManager() const;
  369.     /**
  370.      * @return the uri part of DOM Level 3 TypeInfo
  371.      */
  372.     virtual const XMLCh* getDOMTypeInfoUri() const = 0;
  373.     /**
  374.      * @return the name part of DOM Level 3 TypeInfo
  375.      */
  376.     virtual const XMLCh* getDOMTypeInfoName() const = 0;
  377.     //@}
  378.     // -----------------------------------------------------------------------
  379.     //  Setter methods
  380.     // -----------------------------------------------------------------------
  381.     /** @name Setter methods */
  382.     //@{
  383.     /** Set the default attribute type
  384.       *
  385.       * This method sets the default attribute type for this attribute.
  386.       * This setting controls whether the attribute is required, fixed,
  387.       * implied, etc...
  388.       *
  389.       * @param  newValue The new default attribute to set
  390.       */
  391.     void setDefaultType(const XMLAttDef::DefAttTypes newValue);
  392.     /** Set the pool id for this attribute type.
  393.       *
  394.       * This method sets the pool id of this attribute type. This is usually
  395.       * called by the validator that creates the actual instance (which is of
  396.       * a derived type known only by the validator.)
  397.       *
  398.       * @param  newId The new pool id to set.
  399.       */
  400.     void setId(const unsigned int newId);
  401.     /** Set or clear the 'provided' flag.
  402.       *
  403.       * This method will set or clear the 'provided' flag. This is called
  404.       * by the scanner as it is scanning a start tag and marking off the
  405.       * attributes that have been explicitly provided.
  406.       *
  407.       * @param  newValue The new provided state to set
  408.       */
  409.     void setProvided(const bool newValue);
  410.     /** Set the type of this attribute type.
  411.       *
  412.       * This method will set the type of the attribute. The type of an attribute
  413.       * controls how it is normalized and what kinds of characters it can hold.
  414.       *
  415.       * @param  newValue The new attribute type to set
  416.       */
  417.     void setType(const XMLAttDef::AttTypes newValue);
  418.     /** Set the default/fixed value of this attribute type.
  419.       *
  420.       * This method set the fixed/default value for the attribute. This value
  421.       * will be used when instances of this attribute type are faulted in. It
  422.       * <b>must</b> be a valid value for the type set by setType(). If the
  423.       * type is enumeration or notation, this must be one of the valid values
  424.       * set in the setEnumeration() call.
  425.       *
  426.       * @param  newValue The new fixed/default value to set.
  427.       */
  428.     void setValue(const XMLCh* const newValue);
  429.     /** Set the enumerated value of this attribute type.
  430.       *
  431.       * This method sets the enumerated/notation value list for this attribute
  432.       * type. It is a space separated set of possible values. These values must
  433.       * meet the constrains of the XML spec for such values of this type of
  434.       * attribute. This should only be set if the setType() method is used to
  435.       * set the type to the enumeration or notation types.
  436.       *
  437.       * @param  newValue The new enumerated/notation value list to set.
  438.       */
  439.     void setEnumeration(const XMLCh* const newValue);
  440.     /** Update the create reason for this attribute type.
  441.       *
  442.       * This method will update the 'create reason' field for this attribute
  443.       * decl object.
  444.       *
  445.       * @param  newReason The new create reason.
  446.       */
  447.     void setCreateReason(const CreateReasons newReason);
  448.     /**
  449.       * Set the attribute decl to indicate external declaration
  450.       *
  451.       * @param  aValue The new value to indicate external declaration.
  452.       */
  453.     void setExternalAttDeclaration(const bool aValue);
  454.     //@}
  455. protected :
  456.     // -----------------------------------------------------------------------
  457.     //  Hidden constructors
  458.     // -----------------------------------------------------------------------
  459.     XMLAttDef
  460.     (
  461.         const   AttTypes       type = CData
  462.         , const DefAttTypes    defType= Implied
  463.         , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager
  464.     );
  465.     XMLAttDef
  466.     (
  467.         const   XMLCh* const        attValue
  468.         , const AttTypes            type
  469.         , const DefAttTypes         defType
  470.         , const XMLCh* const        enumValues = 0
  471.         , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager
  472.     );
  473. private :
  474.     // -----------------------------------------------------------------------
  475.     //  Unimplemented constructors and operators
  476.     // -----------------------------------------------------------------------
  477.     XMLAttDef(const XMLAttDef&);
  478.     XMLAttDef& operator=(const XMLAttDef&);
  479.     // -----------------------------------------------------------------------
  480.     //  Private helper methods
  481.     // -----------------------------------------------------------------------
  482.     void cleanUp();
  483.     // -----------------------------------------------------------------------
  484.     //  Private data members
  485.     //
  486.     //  fDefaultType
  487.     //      Indicates what, if any, default stuff this attribute has.
  488.     //
  489.     //  fEnumeration
  490.     //      If its an enumeration, this is the list of values as space
  491.     //      separated values.
  492.     //
  493.     //  fId
  494.     //      This is the unique id of this attribute, given to it when its put
  495.     //      into the validator's attribute decl pool. It defaults to the
  496.     //      special value XMLAttrDef::fgInvalidAttrId.
  497.     //
  498.     //  fProvided
  499.     //      This field is really for use by the scanner. It is used to track
  500.     //      which of the attributes of an element were provided. Any marked
  501.     //      as not provided (after scanning the start tag) and having a
  502.     //      default type of Required, is in error.
  503.     //
  504.     //  fType
  505.     //      The type of attribute, which is one of the AttTypes values.
  506.     //
  507.     //  fValue
  508.     //      This is the value of the attribute, which is the default value
  509.     //      given in the attribute declaration.
  510.     //
  511.     //  fCreateReason
  512.     //      This flag tells us how this attribute got created.  Sometimes even
  513.     //      the attribute was not declared for the element, we want to fault
  514.     //      fault it into the pool to avoid lots of redundant errors.
  515.     //
  516.     //  fExternalAttribute
  517.     //      This flag indicates whether or not the attribute was declared externally.
  518.     // -----------------------------------------------------------------------
  519.     DefAttTypes     fDefaultType;
  520.     AttTypes        fType;
  521.     CreateReasons   fCreateReason;
  522.     bool            fProvided;
  523.     bool            fExternalAttribute;
  524.     unsigned int    fId;
  525.     XMLCh*          fValue;
  526.     XMLCh*          fEnumeration;
  527.     MemoryManager*  fMemoryManager;
  528. };
  529. // ---------------------------------------------------------------------------
  530. //  Getter methods
  531. // ---------------------------------------------------------------------------
  532. inline XMLAttDef::DefAttTypes XMLAttDef::getDefaultType() const
  533. {
  534.     return fDefaultType;
  535. }
  536. inline const XMLCh* XMLAttDef::getEnumeration() const
  537. {
  538.     return fEnumeration;
  539. }
  540. inline unsigned int XMLAttDef::getId() const
  541. {
  542.     return fId;
  543. }
  544. inline bool XMLAttDef::getProvided() const
  545. {
  546.     return fProvided;
  547. }
  548. inline XMLAttDef::AttTypes XMLAttDef::getType() const
  549. {
  550.     return fType;
  551. }
  552. inline const XMLCh* XMLAttDef::getValue() const
  553. {
  554.     return fValue;
  555. }
  556. inline XMLAttDef::CreateReasons XMLAttDef::getCreateReason() const
  557. {
  558.     return fCreateReason;
  559. }
  560. inline bool XMLAttDef::isExternal() const
  561. {
  562.     return fExternalAttribute;
  563. }
  564. inline MemoryManager* XMLAttDef::getMemoryManager() const
  565. {
  566.     return fMemoryManager;
  567. }
  568. // ---------------------------------------------------------------------------
  569. //  XMLAttDef: Setter methods
  570. // ---------------------------------------------------------------------------
  571. inline void XMLAttDef::setDefaultType(const XMLAttDef::DefAttTypes newValue)
  572. {
  573.     fDefaultType = newValue;
  574. }
  575. inline void XMLAttDef::setEnumeration(const XMLCh* const newValue)
  576. {
  577.     if (fEnumeration)
  578.         fMemoryManager->deallocate(fEnumeration);
  579.     fEnumeration = XMLString::replicate(newValue, fMemoryManager);
  580. }
  581. inline void XMLAttDef::setId(const unsigned int newId)
  582. {
  583.     fId = newId;
  584. }
  585. inline void XMLAttDef::setProvided(const bool newValue)
  586. {
  587.     fProvided = newValue;
  588. }
  589. inline void XMLAttDef::setType(const XMLAttDef::AttTypes newValue)
  590. {
  591.     fType = newValue;
  592. }
  593. inline void XMLAttDef::setValue(const XMLCh* const newValue)
  594. {
  595.     if (fValue)
  596.        fMemoryManager->deallocate(fValue);
  597.     fValue = XMLString::replicate(newValue, fMemoryManager);
  598. }
  599. inline void
  600. XMLAttDef::setCreateReason(const XMLAttDef::CreateReasons newReason)
  601. {
  602.     fCreateReason = newReason;
  603. }
  604. inline void XMLAttDef::setExternalAttDeclaration(const bool aValue)
  605. {
  606.     fExternalAttribute = aValue;
  607. }
  608. XERCES_CPP_NAMESPACE_END
  609. #endif