utf8.h
上传用户:center1979
上传日期:2022-07-26
资源大小:50633k
文件大小:3k
源码类别:

OpenGL

开发平台:

Visual C++

  1. // utf8.h
  2. //
  3. // Copyright (C) 2004, Chris Laurel <claurel@shatters.net>
  4. //
  5. // This program is free software; you can redistribute it and/or
  6. // modify it under the terms of the GNU General Public License
  7. // as published by the Free Software Foundation; either version 2
  8. // of the License, or (at your option) any later version.
  9. #ifndef _CELUTIL_UTF8_
  10. #define _CELUTIL_UTF8_
  11. #include <string>
  12. #define UTF8_DEGREE_SIGN         "302260"
  13. #define UTF8_MULTIPLICATION_SIGN "303227"
  14. #define UTF8_SUPERSCRIPT_1       "302271"
  15. #define UTF8_SUPERSCRIPT_2       "302262"
  16. #define UTF8_SUPERSCRIPT_3       "302263"
  17. bool UTF8Decode(const std::string& str, int pos, wchar_t& ch);
  18. bool UTF8Decode(const char* str, int pos, int length, wchar_t& ch);
  19. int UTF8Encode(wchar_t ch, char* s);
  20. int UTF8StringCompare(const std::string& s0, const std::string& s1);
  21. int UTF8StringCompare(const std::string& s0, const std::string& s1, size_t length);
  22. class UTF8StringOrderingPredicate
  23. {
  24.  public:
  25.     bool operator()(const std::string& s0, const std::string& s1) const
  26.     {
  27.         return UTF8StringCompare(s0, s1) == -1;
  28.     }
  29. };
  30. int UTF8Length(const std::string& s);
  31. inline int UTF8EncodedSize(wchar_t ch)
  32. {
  33.     if (ch < 0x80)
  34.         return 1;
  35.     else if (ch < 0x800)
  36.         return 2;
  37.     else if (ch < 0x10000)
  38.         return 3;
  39.     else if (ch < 0x200000)
  40.         return 4;
  41.     else if (ch < 0x4000000)
  42.         return 5;
  43.     else
  44.         return 6;
  45. }
  46. inline int UTF8EncodedSizeFromFirstByte(unsigned int ch)
  47. {
  48.     int charlen = 1;
  49.     if (ch < 0x80)
  50.         charlen = 1;
  51.     else if ((ch & 0xe0) == 0xc0)
  52.         charlen = 2;
  53.     else if ((ch & 0xf0) == 0xe0)
  54.         charlen = 3;
  55.     else if ((ch & 0xf8) == 0xf0)
  56.         charlen = 4;
  57.     else if ((ch & 0xfc) == 0xf8)
  58.         charlen = 5;
  59.     else if ((ch & 0xfe) == 0xfc)
  60.         charlen = 6;
  61.     return charlen;
  62. }
  63. std::string ReplaceGreekLetterAbbr(const std::string&);
  64. unsigned int ReplaceGreekLetterAbbr(char* dst, unsigned int dstSize, const char* src, unsigned int srcLength);
  65. class Greek
  66. {
  67.  private:
  68.     Greek();
  69.     ~Greek();
  70.  public:
  71.     enum Letter {
  72.         Alpha     =  1,
  73.         Beta      =  2,
  74.         Gamma     =  3,
  75.         Delta     =  4,
  76.         Epsilon   =  5,
  77.         Zeta      =  6,
  78.         Eta       =  7,
  79.         Theta     =  8,
  80.         Iota      =  9,
  81.         Kappa     = 10,
  82.         Lambda    = 11,
  83.         Mu        = 12,
  84.         Nu        = 13,
  85.         Xi        = 14,
  86.         Omicron   = 15,
  87.         Pi        = 16,
  88.         Rho       = 17,
  89.         Sigma     = 18,
  90.         Tau       = 19,
  91.         Upsilon   = 20,
  92.         Phi       = 21,
  93.         Chi       = 22,
  94.         Psi       = 23,
  95.         Omega     = 24,
  96.     };
  97.     static const std::string& canonicalAbbreviation(const std::string&);
  98.  public:
  99.     static Greek* instance;
  100.     int nLetters;
  101.     std::string* names;
  102.     std::string* abbrevs;
  103. };
  104. #endif // _CELUTIL_UTF8_