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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: unicode.hpp,v $
  4.  * PRODUCTION Revision 1000.0  2004/06/01 19:43:09  gouriano
  5.  * PRODUCTION PRODUCTION: IMPORTED [GCC34_MSVC7] Dev-tree R1.1
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef UTIL_UNICODE__H
  10. #define UTIL_UNICODE__H
  11. /*  $Id: unicode.hpp,v 1000.0 2004/06/01 19:43:09 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: Aleksey Vinokurov
  37.  *
  38.  * File Description:
  39.  *    Unicode transformation library
  40.  *
  41.  */
  42. #include <corelib/ncbistd.hpp>
  43. #include <string>
  44. /** @addtogroup utf8
  45.  *
  46.  * @{
  47.  */
  48. BEGIN_NCBI_SCOPE
  49. BEGIN_SCOPE(utf8)
  50. /// Types of substitutors.
  51. enum ESubstType
  52. {
  53.     eSkip = 0,      ///< Unicode to be skipped in translation. Usually it is combined mark.
  54.     eAsIs,          ///< Unicodes which should go into the text as is.
  55.     eString,        ///< String of symbols.
  56.     eHTML,          ///< HTML tag or, for example, HTML entity.
  57.     ePicture,       ///< Path to the picture, or maybe picture itself.
  58.     eOther          ///< Something else.
  59. };
  60. /// Structure to keep substititutions for the particular unicode character.
  61. typedef struct
  62. {
  63.     const char* Subst;  ///< Substitutor for unicode.
  64.     ESubstType  Type;   ///< Type of the substitutor.
  65. } SUnicodeTranslation;
  66. typedef SUnicodeTranslation TUnicodePlan[256];
  67. typedef TUnicodePlan* TUnicodeTable[256];
  68. typedef unsigned int TUnicode;
  69. /// Convert Unicode character into ASCII string.
  70. ///
  71. /// @param character
  72. ///   character to translate
  73. /// @param table
  74. ///   Table to use in translation. If Table is not specified,
  75. ///   the internal default one will be used.
  76. /// @return
  77. ///   Pointer to substitute structure
  78. NCBI_XUTIL_EXPORT
  79. const SUnicodeTranslation*
  80. UnicodeToAscii(TUnicode character, const TUnicodeTable* table=0);
  81. /// Convert UTF8 into Unicode character.
  82. ///
  83. /// @param utf
  84. ///   Start of UTF8 character buffer
  85. /// @param unicode
  86. ///   Pointer to Unicode character to store the result in
  87. /// @return
  88. ///   Length of the translated UTF8 or 0 in case of error.
  89. NCBI_XUTIL_EXPORT
  90. int UTF8ToUnicode(const char* utf, TUnicode* unicode);
  91. /// Convert Unicode character into UTF8.
  92. ///
  93. /// @param unicode
  94. ///   Unicode character
  95. /// @param buffer
  96. ///   UTF8 buffer to store the result
  97. /// @param buf_length
  98. ///   UTF8 buffer size
  99. /// @return
  100. ///   Length of the generated UTF8 sequence
  101. NCBI_XUTIL_EXPORT
  102. int UnicodeToUTF8(TUnicode unicode, char *buffer, int buf_length);
  103. /// Convert Unicode character into UTF8.
  104. ///
  105. /// @param unicode
  106. ///   Unicode character
  107. /// @return
  108. ///   UTF8 buffer as a string
  109. NCBI_XUTIL_EXPORT
  110. string UnicodeToUTF8(TUnicode unicode);
  111. /// Convert UTF8 into ASCII character buffer.
  112. ///
  113. /// Decode UTF8 buffer and substitute all Unicodes with appropriate
  114. /// symbols or words from dictionary.
  115. /// @param src
  116. ///   UTF8 buffer to decode
  117. /// @param dst
  118. ///   Buffer to put the result in
  119. /// @param dst_len
  120. ///   Length of the destignation buffer
  121. /// @param table
  122. ///   Table to use in translation. If Table is not specified,
  123. ///   the internal default one will be used.
  124. /// @return
  125. ///   Length of decoded string or -1 if buffer is too small
  126. NCBI_XUTIL_EXPORT
  127. int UTF8ToAscii(const char* src, char* dst, int dst_len,
  128.                 const TUnicodeTable* table=0);
  129. /// Convert UTF8 into ASCII string.
  130. ///
  131. /// Decode UTF8 buffer and substitute all Unicodes with appropriate
  132. /// symbols or words from dictionary.
  133. /// @param src
  134. ///   UTF8 buffer to decode
  135. /// @param table
  136. ///   Table to use in translation. If Table is not specified,
  137. ///   the internal default one will be used.
  138. /// @return
  139. ///   String with decoded text
  140. NCBI_XUTIL_EXPORT
  141. string UTF8ToAsciiString(const char* src, const TUnicodeTable* table=0);
  142. END_SCOPE(utf8)
  143. END_NCBI_SCOPE
  144. /* @} */
  145. /*
  146.  * ==========================================================================
  147.  * $Log: unicode.hpp,v $
  148.  * Revision 1000.0  2004/06/01 19:43:09  gouriano
  149.  * PRODUCTION: IMPORTED [GCC34_MSVC7] Dev-tree R1.1
  150.  *
  151.  * Revision 1.1  2004/05/06 18:14:53  gouriano
  152.  * Imported from pubmed/xmldb
  153.  *
  154.  * ==========================================================================
  155.  */
  156. #endif  /* UTIL_UNICODE__H */