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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: utf8.hpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/04/21 13:24:22  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.5
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef UTIL_UTF8__H
  10. #define UTIL_UTF8__H
  11. /*  $Id: utf8.hpp,v 1000.1 2004/04/21 13:24:22 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, Vladimir Ivanov
  37.  *
  38.  * File Description:
  39.  *    UTF8 conversion functions
  40.  *
  41.  */
  42. #include <corelib/ncbistd.hpp>
  43. #include <vector>
  44. /** @addtogroup utf8
  45.  *
  46.  * @{
  47.  */
  48. BEGIN_NCBI_SCOPE
  49. BEGIN_SCOPE(utf8)
  50. // For characters that could not be translated into similar ASCII-7 or
  51. // Unicode character because there is no graphically similar character in
  52. // ASCII-7 table for this one.
  53. //
  54. const char kOutrangeChar = '?';
  55. // 0xFF This means that the character should be skipped in translation to
  56. // ASCII-7. 
  57. // For example, there are a lot of characters which meaning is to modify the
  58. // character next to them.
  59. const char kSkipChar = 'xFF';
  60. // Result (status) conversion Unicode symbols to character
  61. enum EConversionStatus {
  62.     eSuccess,             // Success, result is good
  63.     eSkip,                // Result conversion == kSkipChar
  64.     eOutrange             // Result conversion == kOutrangeChar
  65. };
  66. // Convert first UTF-8 symbol of "src" into ASCII-7 character.
  67. // "ascii_table" specifies whether to use ASCII-7 translation tables.
  68. // Length of the retrieved UTF-8 symbol is returned in "*seq_len"
  69. // (if "seq_len" is not NULL).
  70. // Return resulting ASCII-7 character.
  71. // NOTE:  If the UTF-8 symbol has no ASCII-7 equivalent, then return
  72. //        kOutrangeChar or hSkipChar.
  73. //
  74. NCBI_XUTIL_EXPORT
  75. extern char StringToChar(const string&      src,
  76.                          size_t*            seq_len     = 0,
  77.                          bool               ascii_table = true,
  78.                          EConversionStatus* status      = 0);
  79. // Convert UTF-8 string "src" into the ASCII-7 string with
  80. // graphically similar characters -- using StringToChar().
  81. // Return resulting ASCII-7 string.
  82. //
  83. NCBI_XUTIL_EXPORT
  84. extern string StringToAscii(const string& src,
  85.                             bool          ascii_table = true);
  86. // Convert first UTF-8 symbol of "src" into a Unicode symbol code.
  87. // Length of the retrieved UTF-8 symbol is returned in "*seq_len"
  88. // (if "seq_len" is not NULL).
  89. // Return resulting Unicode symbol code.
  90. // NOTE:  If the UTF-8 symbol has no Unicode equivalent, then return
  91. //        kOutrangeChar or hSkipChar.
  92. //
  93. NCBI_XUTIL_EXPORT
  94. extern long StringToCode(const string&      src,
  95.                          size_t*            seq_len = 0,
  96.                          EConversionStatus* status  = 0);
  97. // Convert UTF-8 string "src" into the vector of Unicode symbol codes
  98. // using StringToCode().
  99. // Return resulting vector.
  100. //
  101. NCBI_XUTIL_EXPORT
  102. extern vector<long> StringToVector(const string& src);
  103. // Translate Unicode symbol code "src" into graphically similar ASCII-7
  104. // character.
  105. // Return resulting ASCII-7 character.
  106. // NOTE:  If the Unicode symbol has no ASCII-7 equivalent, then return
  107. //        kOutrangeChar or hSkipChar.
  108. //
  109. NCBI_XUTIL_EXPORT
  110. extern char CodeToChar(const long src, EConversionStatus* status = 0); 
  111. END_SCOPE(utf8)
  112. END_NCBI_SCOPE
  113. /* @} */
  114. /*
  115.  * ===========================================================================
  116.  * $Log: utf8.hpp,v $
  117.  * Revision 1000.1  2004/04/21 13:24:22  gouriano
  118.  * PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.5
  119.  *
  120.  * Revision 1.5  2004/03/11 22:55:43  gorelenk
  121.  * Added export prefixes NCBI_XUTIL_EXPORT to functions.
  122.  *
  123.  * Revision 1.4  2003/04/17 17:50:39  siyan
  124.  * Added doxygen support
  125.  *
  126.  * Revision 1.3  2002/01/18 19:21:52  ivanov
  127.  * Polish source code
  128.  *
  129.  * Revision 1.2  2001/04/18 16:26:04  ivanov
  130.  * Change types TUnicodeChar, TUnicodeString to simple types.
  131.  * TUnicode char to long, TUnicodeString to vector<long>.
  132.  *
  133.  * Revision 1.1  2001/04/06 19:14:36  ivanov
  134.  * Initial revision
  135.  * ===========================================================================
  136.  */
  137. #endif  /* UTIL_UTF8__H */