dtdaux.hpp
上传用户:yhdzpy8989
上传日期:2007-06-13
资源大小:13604k
文件大小:6k
源码类别:

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: dtdaux.hpp,v $
  4.  * PRODUCTION Revision 1000.0  2003/10/29 17:35:10  gouriano
  5.  * PRODUCTION PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.1
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef DTDAUX_HPP
  10. #define DTDAUX_HPP
  11. /*  $Id: dtdaux.hpp,v 1000.0 2003/10/29 17:35:10 gouriano Exp $
  12. * ===========================================================================
  13. *
  14. *                            PUBLIC DOMAIN NOTICE
  15. *               National Center for Biotechnology Information
  16. *
  17. *  This software/database is a "United States Government Work" under the
  18. *  terms of the United States Copyright Act.  It was written as part of
  19. *  the author's official duties as a United States Government employee and
  20. *  thus cannot be copyrighted.  This software/database is freely available
  21. *  to the public for use. The National Library of Medicine and the U.S.
  22. *  Government have not placed any restriction on its use or reproduction.
  23. *
  24. *  Although all reasonable efforts have been taken to ensure the accuracy
  25. *  and reliability of the software and data, the NLM and the U.S.
  26. *  Government do not and cannot warrant the performance or results that
  27. *  may be obtained by using this software or data. The NLM and the U.S.
  28. *  Government disclaim all warranties, express or implied, including
  29. *  warranties of performance, merchantability or fitness for any particular
  30. *  purpose.
  31. *
  32. *  Please cite the author in any work or product based on this material.
  33. *
  34. * ===========================================================================
  35. *
  36. * Author: Andrei Gourianov
  37. *
  38. * File Description:
  39. *   DTD parser's auxiliary stuff:
  40. *       DTDEntity
  41. *       DTDAttribute
  42. *       DTDElement
  43. *       DTDEntityLexer
  44. *
  45. * ===========================================================================
  46. */
  47. #include <corelib/ncbistd.hpp>
  48. #include <corelib/ncbistre.hpp>
  49. #include <serial/datatool/dtdlexer.hpp>
  50. #include <list>
  51. #include <map>
  52. BEGIN_NCBI_SCOPE
  53. class CFileModules;
  54. class CDataModule;
  55. class CDataType;
  56. class CDataMemberContainerType;
  57. class CDataValue;
  58. class CDataMember;
  59. class CEnumDataType;
  60. class CEnumDataTypeValue;
  61. /////////////////////////////////////////////////////////////////////////////
  62. // DTDEntity
  63. class DTDEntity
  64. {
  65. public:
  66.     DTDEntity(void);
  67.     DTDEntity(const DTDEntity& other);
  68.     virtual ~DTDEntity(void);
  69.     void SetName(const string& name);
  70.     const string& GetName(void) const;
  71.     void SetData(const string& data);
  72.     const string& GetData(void) const;
  73.     void SetExternal(void);
  74.     bool IsExternal(void) const;
  75. private:
  76.     string m_Name;
  77.     string m_Data;
  78.     bool   m_External;
  79. };
  80. /////////////////////////////////////////////////////////////////////////////
  81. // DTDAttribute
  82. class DTDAttribute
  83. {
  84. public:
  85.     DTDAttribute(void);
  86.     DTDAttribute(const DTDAttribute& other);
  87.     virtual ~DTDAttribute(void);
  88.     enum EType {
  89.         eUnknown,
  90.         eString,
  91.         eEnum,
  92.         eId,
  93.         eIdRef,
  94.         eIdRefs,
  95.         eNmtoken,
  96.         eNmtokens,
  97.         eEntity,
  98.         eEntities,
  99.         eNotation
  100.     };
  101.     enum EValueType {
  102.         eDefault,
  103.         eRequired,
  104.         eImplied,
  105.         eFixed
  106.     };
  107.     void SetName(const string& name);
  108.     const string& GetName(void) const;
  109.     void SetType(EType type);
  110.     EType GetType(void) const;
  111.     void SetValueType(EValueType valueType);
  112.     EValueType GetValueType(void) const;
  113.     void SetValue(const string& value);
  114.     const string& GetValue(void) const;
  115.     void AddEnumValue(const string& value);
  116.     const list<string>& GetEnumValues(void) const;
  117. private:
  118.     string m_Name;
  119.     EType m_Type;
  120.     EValueType m_ValueType;
  121.     string m_Value;
  122.     list<string> m_ListEnum;
  123. };
  124. /////////////////////////////////////////////////////////////////////////////
  125. // DTDElement
  126. class DTDElement
  127. {
  128. public:
  129.     DTDElement(void);
  130.     DTDElement(const DTDElement& other);
  131.     virtual ~DTDElement(void);
  132.     enum EType {
  133.         eUnknown,
  134.         eString,   // #PCDATA
  135.         eAny,      // ANY
  136.         eEmpty,    // EMPTY
  137.         eSequence, // (a,b,c)
  138.         eChoice    // (a|b|c)
  139.                    // mixed content is not implemented
  140.     };
  141.     enum EOccurrence {
  142.         eOne,
  143.         eOneOrMore,
  144.         eZeroOrMore,
  145.         eZeroOrOne
  146.     };
  147.     void SetName(const string& name);
  148.     const string& GetName(void) const;
  149.     void SetType( EType type);
  150.     void SetTypeIfUnknown( EType type);
  151.     EType GetType(void) const;
  152.     void SetOccurrence( const string& ref_name, EOccurrence occ);
  153.     EOccurrence GetOccurrence(const string& ref_name) const;
  154.     void SetOccurrence( EOccurrence occ);
  155.     EOccurrence GetOccurrence(void) const;
  156.     // i.e. element contains other elements
  157.     void AddContent( const string& ref_name);
  158.     const list<string>& GetContent(void) const;
  159.     // element is contained somewhere
  160.     void SetReferenced(void);
  161.     bool IsReferenced(void) const;
  162.     // element does not have any specific name
  163.     void SetEmbedded(void);
  164.     bool IsEmbedded(void) const;
  165.     string CreateEmbeddedName(int depth) const;
  166.     void AddAttribute(DTDAttribute& attrib);
  167.     bool HasAttributes(void) const;
  168.     const list<DTDAttribute>& GetAttributes(void) const;
  169. private:
  170.     string m_Name;
  171.     EType m_Type;
  172.     EOccurrence m_Occ;
  173.     list<string> m_Refs;
  174.     list<DTDAttribute> m_Attrib;
  175.     map<string,EOccurrence> m_RefOcc;
  176.     bool m_Refd;
  177.     bool m_Embd;
  178. };
  179. /////////////////////////////////////////////////////////////////////////////
  180. // DTDEntityLexer
  181. class DTDEntityLexer : public DTDLexer
  182. {
  183. public:
  184.     DTDEntityLexer(CNcbiIstream& in, bool autoDelete=true);
  185.     virtual ~DTDEntityLexer(void);
  186. protected:
  187.     bool m_AutoDelete;
  188.     CNcbiIstream* m_Str;
  189. };
  190. END_NCBI_SCOPE
  191. #endif // DTDAUX_HPP
  192. /*
  193.  * ==========================================================================
  194.  * $Log: dtdaux.hpp,v $
  195.  * Revision 1000.0  2003/10/29 17:35:10  gouriano
  196.  * PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.1
  197.  *
  198.  * Revision 1.1  2002/11/14 21:06:08  gouriano
  199.  * auxiliary classes to use by DTD parser
  200.  *
  201.  *
  202.  *
  203.  * ==========================================================================
  204.  */