// Copyright 2014 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

#include "xfa/src/fgas/src/fgas_base.h"
static const FX_CHARSET_MAP g_FXCharset2CodePageTable[] = {
    {0, 1252},   {1, 0},      {2, 42},     {77, 10000}, {78, 10001},
    {79, 10003}, {80, 10008}, {81, 10002}, {83, 10005}, {84, 10004},
    {85, 10006}, {86, 10081}, {87, 10021}, {88, 10029}, {89, 10007},
    {128, 932},  {129, 949},  {130, 1361}, {134, 936},  {136, 950},
    {161, 1253}, {162, 1254}, {163, 1258}, {177, 1255}, {178, 1256},
    {186, 1257}, {204, 1251}, {222, 874},  {238, 1250}, {254, 437},
    {255, 850},
};
FX_WORD FX_GetCodePageFromCharset(uint8_t charset) {
  int32_t iEnd = sizeof(g_FXCharset2CodePageTable) / sizeof(FX_CHARSET_MAP) - 1;
  FXSYS_assert(iEnd >= 0);
  int32_t iStart = 0, iMid;
  do {
    iMid = (iStart + iEnd) / 2;
    const FX_CHARSET_MAP& cp = g_FXCharset2CodePageTable[iMid];
    if (charset == cp.charset) {
      return cp.codepage;
    } else if (charset < cp.charset) {
      iEnd = iMid - 1;
    } else {
      iStart = iMid + 1;
    }
  } while (iStart <= iEnd);
  return 0xFFFF;
}
static const FX_CHARSET_MAP g_FXCodepage2CharsetTable[] = {
    {1, 0},      {2, 42},     {254, 437},  {255, 850},  {222, 874},
    {128, 932},  {134, 936},  {129, 949},  {136, 950},  {238, 1250},
    {204, 1251}, {0, 1252},   {161, 1253}, {162, 1254}, {177, 1255},
    {178, 1256}, {186, 1257}, {163, 1258}, {130, 1361}, {77, 10000},
    {78, 10001}, {79, 10003}, {80, 10008}, {81, 10002}, {83, 10005},
    {84, 10004}, {85, 10006}, {86, 10081}, {87, 10021}, {88, 10029},
    {89, 10007},
};
FX_WORD FX_GetCharsetFromCodePage(FX_WORD codepage) {
  int32_t iEnd = sizeof(g_FXCodepage2CharsetTable) / sizeof(FX_CHARSET_MAP) - 1;
  FXSYS_assert(iEnd >= 0);
  int32_t iStart = 0, iMid;
  do {
    iMid = (iStart + iEnd) / 2;
    const FX_CHARSET_MAP& cp = g_FXCodepage2CharsetTable[iMid];
    if (codepage == cp.codepage) {
      return cp.charset;
    } else if (codepage < cp.codepage) {
      iEnd = iMid - 1;
    } else {
      iStart = iMid + 1;
    }
  } while (iStart <= iEnd);
  return 0xFFFF;
}
const FX_LANG2CPMAP g_FXLang2CodepageTable[] = {
    {FX_LANG_Arabic_SaudiArabia, FX_CODEPAGE_MSWin_Arabic},
    {FX_LANG_Bulgarian_Bulgaria, FX_CODEPAGE_MSWin_Cyrillic},
    {FX_LANG_Catalan_Catalan, FX_CODEPAGE_MSWin_WesternEuropean},
    {FX_LANG_Chinese_Taiwan, FX_CODEPAGE_ChineseTraditional},
    {FX_LANG_CzechRepublic, FX_CODEPAGE_MSWin_EasternEuropean},
    {FX_LANG_Danish_Denmark, FX_CODEPAGE_MSWin_WesternEuropean},
    {FX_LANG_German_Germany, FX_CODEPAGE_MSWin_WesternEuropean},
    {FX_LANG_Greek_Greece, FX_CODEPAGE_MSWin_Greek},
    {FX_LANG_English_UnitedStates, FX_CODEPAGE_MSWin_WesternEuropean},
    {FX_LANG_Spanish_TraditionalSort, FX_CODEPAGE_MSWin_WesternEuropean},
    {FX_LANG_Finnish_Finland, FX_CODEPAGE_MSWin_WesternEuropean},
    {FX_LANG_French_France, FX_CODEPAGE_MSWin_WesternEuropean},
    {FX_LANG_Hebrew_Israel, FX_CODEPAGE_MSWin_Hebrew},
    {FX_LANG_Hungarian_Hungary, FX_CODEPAGE_MSWin_EasternEuropean},
    {FX_LANG_Icelandic_Iceland, FX_CODEPAGE_MSWin_WesternEuropean},
    {FX_LANG_Italian_Italy, FX_CODEPAGE_MSWin_WesternEuropean},
    {FX_LANG_Japanese_Japan, FX_CODEPAGE_ShiftJIS},
    {FX_LANG_Korean_Korea, FX_CODEPAGE_Korean},
    {FX_LANG_Dutch_Netherlands, FX_CODEPAGE_MSWin_WesternEuropean},
    {FX_LANG_Norwegian_Bokmal, FX_CODEPAGE_MSWin_WesternEuropean},
    {FX_LANG_Polish_Poland, FX_CODEPAGE_MSWin_EasternEuropean},
    {FX_LANG_Portuguese_Brazil, FX_CODEPAGE_MSWin_WesternEuropean},
    {FX_LANG_Romanian_Romania, FX_CODEPAGE_MSWin_EasternEuropean},
    {FX_LANG_Russian_Russia, FX_CODEPAGE_MSWin_Cyrillic},
    {FX_LANG_Croatian_Croatia, FX_CODEPAGE_MSWin_EasternEuropean},
    {FX_LANG_Slovak_Slovakia, FX_CODEPAGE_MSWin_EasternEuropean},
    {FX_LANG_Albanian_Albania, FX_CODEPAGE_MSWin_EasternEuropean},
    {FX_LANG_Swedish_Sweden, FX_CODEPAGE_MSWin_WesternEuropean},
    {FX_LANG_Thai_Thailand, FX_CODEPAGE_MSDOS_Thai},
    {FX_LANG_Turkish_Turkey, FX_CODEPAGE_MSWin_Turkish},
    {FX_LANG_Urdu_Pakistan, FX_CODEPAGE_MSWin_Arabic},
    {FX_LANG_Indonesian_Indonesia, FX_CODEPAGE_MSWin_WesternEuropean},
    {FX_LANG_Ukrainian_Ukraine, FX_CODEPAGE_MSWin_Cyrillic},
    {FX_LANG_Belarusian_Belarus, FX_CODEPAGE_MSWin_Cyrillic},
    {FX_LANG_Slovenian_Slovenia, FX_CODEPAGE_MSWin_EasternEuropean},
    {FX_LANG_Estonian_Estonia, FX_CODEPAGE_MSWin_Baltic},
    {FX_LANG_Latvian_Latvia, FX_CODEPAGE_MSWin_Baltic},
    {FX_LANG_Lithuanian_Lithuania, FX_CODEPAGE_MSWin_Baltic},
    {FX_LANG_Persian, FX_CODEPAGE_MSWin_Arabic},
    {FX_LANG_Vietnamese_Vietnam, FX_CODEPAGE_MSWin_Vietnamese},
    {FX_LANG_Armenian_Armenia, FX_CODEPAGE_DefANSI},
    {FX_LANG_Azerbaijan_Latin, FX_CODEPAGE_MSWin_Turkish},
    {FX_LANG_Basque_Basque, FX_CODEPAGE_MSWin_WesternEuropean},
    {FX_LANG_Macedonian, FX_CODEPAGE_MSWin_Cyrillic},
    {FX_LANG_Afrikaans_SouthAfrica, FX_CODEPAGE_MSWin_WesternEuropean},
    {FX_LANG_Georgian_Georgia, FX_CODEPAGE_DefANSI},
    {FX_LANG_Faroese_FaroeIslands, FX_CODEPAGE_MSWin_WesternEuropean},
    {FX_LANG_Hindi_India, FX_CODEPAGE_DefANSI},
    {FX_LANG_Malay_Malaysia, FX_CODEPAGE_MSWin_WesternEuropean},
    {FX_LANG_Kazakh_Kazakhstan, FX_CODEPAGE_MSWin_Cyrillic},
    {FX_LANG_Kyrgyz_Kyrgyzstan, FX_CODEPAGE_MSWin_Cyrillic},
    {FX_LANG_Kiswahili_Kenya, FX_CODEPAGE_MSWin_WesternEuropean},
    {FX_LANG_Uzbek_LatinUzbekistan, FX_CODEPAGE_MSWin_Turkish},
    {FX_LANG_Tatar_Russia, FX_CODEPAGE_MSWin_Cyrillic},
    {FX_LANG_Punjabi_India, FX_CODEPAGE_DefANSI},
    {FX_LANG_Gujarati_India, FX_CODEPAGE_DefANSI},
    {FX_LANG_Tamil_India, FX_CODEPAGE_DefANSI},
    {FX_LANG_Telugu_India, FX_CODEPAGE_DefANSI},
    {FX_LANG_Kannada_India, FX_CODEPAGE_DefANSI},
    {FX_LANG_Marathi_India, FX_CODEPAGE_DefANSI},
    {FX_LANG_SanskritIndia, FX_CODEPAGE_DefANSI},
    {FX_LANG_Mongolian_CyrillicMongolia, FX_CODEPAGE_MSWin_Cyrillic},
    {FX_LANG_Galician_Galician, FX_CODEPAGE_MSWin_WesternEuropean},
    {FX_LANG_Konkani_India, FX_CODEPAGE_DefANSI},
    {FX_LANG_Syriac_Syria, FX_CODEPAGE_DefANSI},
    {FX_LANG_Divehi_Maldives, FX_CODEPAGE_DefANSI},
    {FX_LANG_Arabic_Iraq, FX_CODEPAGE_MSWin_Arabic},
    {FX_LANG_Chinese_PRC, FX_CODEPAGE_ChineseSimplified},
    {FX_LANG_German_Switzerland, FX_CODEPAGE_MSWin_WesternEuropean},
    {FX_LANG_English_UnitedKingdom, FX_CODEPAGE_MSWin_WesternEuropean},
    {FX_LANG_Spanish_Mexico, FX_CODEPAGE_MSWin_WesternEuropean},
    {FX_LANG_French_Belgium, FX_CODEPAGE_MSWin_WesternEuropean},
    {FX_LANG_Italian_Switzerland, FX_CODEPAGE_MSWin_WesternEuropean},
    {FX_LANG_Dutch_Belgium, FX_CODEPAGE_MSWin_WesternEuropean},
    {FX_LANG_Norwegian_Nynorsk, FX_CODEPAGE_MSWin_WesternEuropean},
    {FX_LANG_Portuguese_Portugal, FX_CODEPAGE_MSWin_WesternEuropean},
    {FX_LANG_SerbianLatin_Serbia, FX_CODEPAGE_MSWin_EasternEuropean},
    {FX_LANG_Swedish_Finland, FX_CODEPAGE_MSWin_WesternEuropean},
    {FX_LANG_Azerbaijan_Cyrillic, FX_CODEPAGE_MSWin_Cyrillic},
    {FX_LANG_Malay_BruneiDarussalam, FX_CODEPAGE_MSWin_WesternEuropean},
    {FX_LANG_Uzbek_CyrillicUzbekistan, FX_CODEPAGE_MSWin_Cyrillic},
    {FX_LANG_Arabic_Egypt, FX_CODEPAGE_MSWin_Arabic},
    {FX_LANG_Chinese_HongKong, FX_CODEPAGE_ChineseTraditional},
    {FX_LANG_German_Austria, FX_CODEPAGE_MSWin_WesternEuropean},
    {FX_LANG_English_Australia, FX_CODEPAGE_MSWin_WesternEuropean},
    {FX_LANG_Spanish_InternationalSort, FX_CODEPAGE_MSWin_WesternEuropean},
    {FX_LANG_French_Canada, FX_CODEPAGE_MSWin_WesternEuropean},
    {FX_LANG_SerbianCyrillic_Serbia, FX_CODEPAGE_MSWin_Cyrillic},
    {FX_LANG_Arabic_Libya, FX_CODEPAGE_MSWin_Arabic},
    {FX_LANG_Chinese_Singapore, FX_CODEPAGE_ChineseSimplified},
    {FX_LANG_German_Luxembourg, FX_CODEPAGE_MSWin_WesternEuropean},
    {FX_LANG_English_Canada, FX_CODEPAGE_MSWin_WesternEuropean},
    {FX_LANG_Spanish_Guatemala, FX_CODEPAGE_MSWin_WesternEuropean},
    {FX_LANG_French_Switzerland, FX_CODEPAGE_MSWin_WesternEuropean},
    {FX_LANG_Arabic_Algeria, FX_CODEPAGE_MSWin_Arabic},
    {FX_LANG_Chinese_Macao, FX_CODEPAGE_ChineseTraditional},
    {FX_LANG_German_Liechtenstein, FX_CODEPAGE_MSWin_WesternEuropean},
    {FX_LANG_English_NewZealand, FX_CODEPAGE_MSWin_WesternEuropean},
    {FX_LANG_Spanish_CostaRica, FX_CODEPAGE_MSWin_WesternEuropean},
    {FX_LANG_French_Luxembourg, FX_CODEPAGE_MSWin_WesternEuropean},
    {FX_LANG_Arabic_Morocco, FX_CODEPAGE_MSWin_Arabic},
    {FX_LANG_English_Ireland, FX_CODEPAGE_MSWin_WesternEuropean},
    {FX_LANG_Spanish_Panama, FX_CODEPAGE_MSWin_WesternEuropean},
    {FX_LANG_French_Monaco, FX_CODEPAGE_MSWin_WesternEuropean},
    {FX_LANG_Arabic_Tunisia, FX_CODEPAGE_MSWin_Arabic},
    {FX_LANG_English_SouthAfrica, FX_CODEPAGE_MSWin_WesternEuropean},
    {FX_LANG_Spanish_DominicanRepublic, FX_CODEPAGE_MSWin_WesternEuropean},
    {FX_LANG_Arabic_Oman, FX_CODEPAGE_MSWin_Arabic},
    {FX_LANG_English_Jamaica, FX_CODEPAGE_MSWin_WesternEuropean},
    {FX_LANG_Spanish_Venezuela, FX_CODEPAGE_MSWin_WesternEuropean},
    {FX_LANG_Arabic_Yemen, FX_CODEPAGE_MSWin_Arabic},
    {FX_LANG_English_Caribbean, FX_CODEPAGE_MSWin_WesternEuropean},
    {FX_LANG_Spanish_Colombia, FX_CODEPAGE_MSWin_WesternEuropean},
    {FX_LANG_Arabic_Syria, FX_CODEPAGE_MSWin_Arabic},
    {FX_LANG_English_Belize, FX_CODEPAGE_MSWin_WesternEuropean},
    {FX_LANG_Spanish_Peru, FX_CODEPAGE_MSWin_WesternEuropean},
    {FX_LANG_Arabic_Jordan, FX_CODEPAGE_MSWin_Arabic},
    {FX_LANG_English_TrinidadTobago, FX_CODEPAGE_MSWin_WesternEuropean},
    {FX_LANG_Spanish_Argentina, FX_CODEPAGE_MSWin_WesternEuropean},
    {FX_LANG_Arabic_Lebanon, FX_CODEPAGE_MSWin_Arabic},
    {FX_LANG_English_Zimbabwe, FX_CODEPAGE_MSWin_WesternEuropean},
    {FX_LANG_Spanish_Ecuador, FX_CODEPAGE_MSWin_WesternEuropean},
    {FX_LANG_Arabic_Kuwait, FX_CODEPAGE_MSWin_Arabic},
    {FX_LANG_English_Philippines, FX_CODEPAGE_MSWin_WesternEuropean},
    {FX_LANG_Spanish_Chile, FX_CODEPAGE_MSWin_WesternEuropean},
    {FX_LANG_Arabic_UAE, FX_CODEPAGE_MSWin_Arabic},
    {FX_LANG_Spanish_Uruguay, FX_CODEPAGE_MSWin_WesternEuropean},
    {FX_LANG_Arabic_Bahrain, FX_CODEPAGE_MSWin_Arabic},
    {FX_LANG_Spanish_Paraguay, FX_CODEPAGE_MSWin_WesternEuropean},
    {FX_LANG_Arabic_Qatar, FX_CODEPAGE_MSWin_Arabic},
    {FX_LANG_Spanish_Bolivia, FX_CODEPAGE_MSWin_WesternEuropean},
    {FX_LANG_Spanish_ElSalvador, FX_CODEPAGE_MSWin_WesternEuropean},
    {FX_LANG_Spanish_Honduras, FX_CODEPAGE_MSWin_WesternEuropean},
    {FX_LANG_Spanish_Nicaragua, FX_CODEPAGE_MSWin_WesternEuropean},
    {FX_LANG_Spanish_PuertoRico, FX_CODEPAGE_MSWin_WesternEuropean},
};
FX_WORD FX_GetDefCodePageByLanguage(FX_WORD wLanguage) {
  int32_t iEnd = sizeof(g_FXLang2CodepageTable) / sizeof(FX_LANG2CPMAP) - 1;
  FXSYS_assert(iEnd >= 0);
  int32_t iStart = 0, iMid;
  do {
    iMid = (iStart + iEnd) / 2;
    const FX_LANG2CPMAP& cp = g_FXLang2CodepageTable[iMid];
    if (wLanguage == cp.wLanguage) {
      return cp.wCodepage;
    } else if (wLanguage < cp.wLanguage) {
      iEnd = iMid - 1;
    } else {
      iStart = iMid + 1;
    }
  } while (iStart <= iEnd);
  return 0xFFFF;
}
static const FX_STR2CPHASH g_FXCPHashTable[] = {
    {0xd45, 0x6faf},      {0xd46, 0x6fb0},      {0xd47, 0x6fb1},
    {0xd48, 0x6fb2},      {0xd49, 0x4e6},       {0xd4d, 0x6fbd},
    {0xe9e, 0x4e4},       {0xc998, 0x1b5},      {0x18ef0, 0x3a8},
    {0x19f85, 0x5182},    {0x2e2335, 0x3b6},    {0x325153, 0x5182},
    {0x145bded, 0x2716},  {0x3c9a5f2, 0xc6f3},  {0x4c45f2d, 0x3a4},
    {0x4c45f4e, 0xc431},  {0x58caf51, 0x4e4},   {0x5a5cd7d, 0x3a8},
    {0x5a6c6a7, 0x4e4},   {0x5a6ca0b, 0x1b5},   {0x5a6cd68, 0x307},
    {0x5a6d8d3, 0x4e4},   {0x5a6d948, 0x354},   {0x5a6d96b, 0x362},
    {0x5a6d984, 0x366},   {0x5a90e35, 0x1b5},   {0x5e0cf00, 0x6fb5},
    {0x609c324, 0x551},   {0x617d97f, 0x5182},  {0x6a6fd91, 0xfde8},
    {0x6a6fd92, 0xfde9},  {0x6b102de, 0xcadc},  {0x6b10f48, 0x4e89},
    {0x1020805f, 0x4e4},  {0x10f0524c, 0x6fb5}, {0x11d558fe, 0x6fb0},
    {0x13898d19, 0xc42d}, {0x13898d3a, 0xc431}, {0x138a319e, 0x6fb1},
    {0x14679c09, 0x96c6}, {0x153f0a3d, 0x6fb2}, {0x1576eeb3, 0x4e20},
    {0x169a0ce6, 0xc6f9}, {0x16f3e2dc, 0x6fb3}, {0x18a8bb7a, 0x6fb4},
    {0x1a5d9419, 0x6fb5}, {0x1a847b48, 0x3a8},  {0x1b762419, 0xcec8},
    {0x1b9d7847, 0x475},  {0x1c126cb9, 0x6fb6}, {0x1ccdbc7d, 0x4f42},
    {0x1d330f5f, 0x2714}, {0x1dc74559, 0x4e6},  {0x1edd80da, 0x4e4},
    {0x23e4b03d, 0xfde8}, {0x24f28a16, 0x4f3d}, {0x286e7a32, 0x2715},
    {0x2c7c18ed, 0x3a8},  {0x2e2103b7, 0x2713}, {0x304bf479, 0x6fb4},
    {0x304bf47d, 0x6fb5}, {0x309bb869, 0xfde8}, {0x309bb86a, 0xfde9},
    {0x33664357, 0x3b6},  {0x352d6b49, 0x3a4},  {0x36f5661c, 0x1b5},
    {0x392e8f48, 0xcadc}, {0x3dc7c64c, 0x47c},  {0x3ed2e8e1, 0x4e4},
    {0x3f0c2fea, 0xcaed}, {0x3f0fef8f, 0xc6f2}, {0x3f5e130f, 0x5182},
    {0x47174d1f, 0x3a8},  {0x49686b7b, 0x6fb4}, {0x4b80b0d9, 0x3a4},
    {0x4dcda97a, 0x4e4},  {0x4dcda9b6, 0x4e4},  {0x4e881e6a, 0x5221},
    {0x4ffdf5a1, 0x36a},  {0x4ffdf5a5, 0x6fbd}, {0x5241ce16, 0x4e8b},
    {0x546bab9d, 0x4e4},  {0x54a3d64e, 0x6fb6}, {0x562179bd, 0x5161},
    {0x57c1df15, 0xc6f7}, {0x61ff6e62, 0x4f36}, {0x6359c7d8, 0x4f35},
    {0x63f3c335, 0x3a8},  {0x645a0f78, 0x477},  {0x691ac2fd, 0x275f},
    {0x6dc2eab0, 0x2d0},  {0x6dc2eeef, 0x35e},  {0x6dc2ef10, 0x36a},
    {0x7103138a, 0x47d},  {0x710dfbd0, 0xc6f5}, {0x7319f6cb, 0x36a},
    {0x745096ad, 0x3a8},  {0x74866229, 0x4e8c}, {0x77185fa5, 0x3a8},
    {0x7953f002, 0x6faf}, {0x7953f003, 0x6fb0}, {0x7953f004, 0x6fb1},
    {0x7953f005, 0x6fb2}, {0x7953f006, 0x6fb7}, {0x7953f00a, 0x6fbd},
    {0x7c577571, 0x2761}, {0x7e8c8ff1, 0x479},  {0x8031f47f, 0x3b5},
    {0x8031f481, 0x3b5},  {0x80c4a710, 0x5187}, {0x857c7e14, 0xfde8},
    {0x857c7e15, 0xfde9}, {0x86b59c90, 0x4e4},  {0x86b59c91, 0x6fb0},
    {0x86b59c92, 0x6fb1}, {0x86b59c93, 0x6fb2}, {0x86b59c94, 0x6fb3},
    {0x86b59c95, 0x6fb4}, {0x86b59c96, 0x6fb5}, {0x86b59c97, 0x4e7},
    {0x86b59c98, 0x4e6},  {0x8b4b24ec, 0x5190}, {0x8face362, 0x4e4},
    {0x8ff9ec2a, 0xfde9}, {0x919d3989, 0xcadc}, {0x9967e5ad, 0x4e22},
    {0x99f8b933, 0x6fbd}, {0x9bd2a380, 0x4fc7}, {0x9befad23, 0x4f38},
    {0x9c7ac649, 0x4f3c}, {0xa02468db, 0xdeae}, {0xa02468ec, 0xdeab},
    {0xa024692a, 0xdeaa}, {0xa0246997, 0xdeb2}, {0xa02469ff, 0xdeb0},
    {0xa0246a3d, 0xdeb1}, {0xa0246a8c, 0xdeaf}, {0xa0246a9a, 0xdeb3},
    {0xa0246b16, 0xdeac}, {0xa0246b1a, 0xdead}, {0xa071addc, 0x4b1},
    {0xa38b62dc, 0x474},  {0xa4c09fed, 0x3a8},  {0xa51e86e5, 0x4e7},
    {0xa67ab13e, 0x3a4},  {0xa7414244, 0x51a9}, {0xa9ddbead, 0xc6fb},
    {0xab24ffab, 0x4e8a}, {0xabef8ac4, 0x2710}, {0xabfa20ac, 0x6fb4},
    {0xad36895e, 0x4e2},  {0xad36895f, 0x4e3},  {0xaf310e90, 0x402},
    {0xaf31166f, 0x4e8},  {0xaf7277a5, 0x3b6},  {0xafc0d8b3, 0x96c6},
    {0xb0fd5dba, 0xcae0}, {0xb0fd5e95, 0xcadc}, {0xb1052893, 0x7149},
    {0xb1e98745, 0x36a},  {0xb277e91c, 0x5166}, {0xb2f7eac5, 0xcae0},
    {0xb2f7eba0, 0xcadc}, {0xb2f7ebc1, 0x3b5},  {0xb53fa77d, 0x3a8},
    {0xb6391138, 0x6fb5}, {0xb7358b7f, 0x6fb6}, {0xb8c42b40, 0x4e4},
    {0xb8c42ea4, 0x1b5},  {0xb8c439e7, 0x2e1},  {0xb8c43a61, 0x307},
    {0xb8c43d6c, 0x4e4},  {0xb8c43ddf, 0x352},  {0xb8c43de1, 0x354},
    {0xb8c43de6, 0x359},  {0xb8c43dff, 0x35d},  {0xb8c43e04, 0x362},
    {0xb8c43e07, 0x365},  {0xbcd29a7f, 0x3a8},  {0xbce34e78, 0x5182},
    {0xbce34e7b, 0x556a}, {0xbce81504, 0x3b5},  {0xbd8a4c95, 0x272d},
    {0xbdd89dad, 0x4e4},  {0xbdd89dae, 0x6fb0}, {0xbdd89daf, 0x6fb1},
    {0xbdd89db0, 0x6fb2}, {0xbdd89db1, 0x4e6},  {0xbdd89db5, 0x6fbd},
    {0xc1756e9f, 0x36b},  {0xc7482444, 0x47a},  {0xc9281c18, 0x4e4},
    {0xc9ef95df, 0x47b},  {0xccc9db0d, 0x4e4},  {0xccc9db0e, 0x6fb0},
    {0xcd73425f, 0x3b6},  {0xce38b40b, 0x4b0},  {0xce99e549, 0x25},
    {0xcf598740, 0x4e7},  {0xcf6d6f78, 0x4e4},  {0xcf758df6, 0x3a4},
    {0xd1266e51, 0x6fb5}, {0xd2910213, 0x2718}, {0xd29196bb, 0x2712},
    {0xd3eb2fc2, 0x476},  {0xd442dc2c, 0x4fc4}, {0xd9da4da4, 0x2711},
    {0xdbad2f42, 0x4e4},  {0xdbad2f43, 0x6fb0}, {0xdbad2f44, 0x6fb1},
    {0xdbad2f45, 0x6fb2}, {0xdbad2f46, 0x6fb3}, {0xdbad2f47, 0x6fb4},
    {0xdbad2f48, 0x6fb5}, {0xdbad2f49, 0x6fb6}, {0xdbad2f4a, 0x4e6},
    {0xdc438033, 0x4f31}, {0xdccb439b, 0x477},  {0xdccdc626, 0x3b5},
    {0xdd80a595, 0x4e4},  {0xdd80a596, 0x6fb0}, {0xdd80a59e, 0x6fb1},
    {0xdd80a5b4, 0x6fb2}, {0xdd80a5d9, 0x6fb5}, {0xdd80a5da, 0x6fb4},
    {0xdd80a5fa, 0x6fb6}, {0xdd80a615, 0x6fb3}, {0xdd80a619, 0x4e6},
    {0xdd80a61a, 0x3b5},  {0xdd80c0f8, 0x4e9f}, {0xdf7e46ff, 0x4fc8},
    {0xdf8680fd, 0x556a}, {0xdfb0bd6e, 0xc42d}, {0xdff05486, 0x2c4},
    {0xe3323399, 0x3a4},  {0xe60412dd, 0x3b5},  {0xeee47add, 0x4b0},
    {0xf021a186, 0x4e2},  {0xf021a187, 0x4e3},  {0xf021a188, 0x4e4},
    {0xf021a189, 0x4e5},  {0xf021a18a, 0x4e6},  {0xf021a18b, 0x4e7},
    {0xf021a18c, 0x4e8},  {0xf021a18d, 0x4e9},  {0xf021a18e, 0x4ea},
    {0xf0700456, 0x6fb3}, {0xf274f175, 0x3b5},  {0xf2a9730b, 0x3a8},
    {0xf3d463c2, 0x3a4},  {0xf52a70a3, 0xc42e}, {0xf5693147, 0x6fb3},
    {0xf637e157, 0x478},  {0xfc213f3a, 0x2717}, {0xff654d14, 0x3b5},
};
FX_WORD FX_GetCodePageFromStringA(const FX_CHAR* pStr, int32_t iLength) {
  FXSYS_assert(pStr != NULL);
  if (iLength < 0) {
    iLength = FXSYS_strlen(pStr);
  }
  if (iLength == 0) {
    return 0xFFFF;
  }
  uint32_t uHash = FX_HashCode_String_GetA(pStr, iLength, TRUE);
  int32_t iStart = 0, iMid;
  int32_t iEnd = sizeof(g_FXCPHashTable) / sizeof(FX_STR2CPHASH) - 1;
  FXSYS_assert(iEnd >= 0);
  do {
    iMid = (iStart + iEnd) / 2;
    const FX_STR2CPHASH& cp = g_FXCPHashTable[iMid];
    if (uHash == cp.uHash) {
      return (FX_WORD)cp.uCodePage;
    } else if (uHash < cp.uHash) {
      iEnd = iMid - 1;
    } else {
      iStart = iMid + 1;
    }
  } while (iStart <= iEnd);
  return 0xFFFF;
}
FX_WORD FX_GetCodePageFormStringW(const FX_WCHAR* pStr, int32_t iLength) {
  if (iLength < 0) {
    iLength = FXSYS_wcslen(pStr);
  }
  if (iLength == 0) {
    return 0xFFFF;
  }
  CFX_ByteString csStr;
  FX_CHAR* pBuf = csStr.GetBuffer(iLength + 1);
  for (int32_t i = 0; i < iLength; ++i) {
    *pBuf++ = (FX_CHAR)*pStr++;
  }
  csStr.ReleaseBuffer(iLength);
  return FX_GetCodePageFromStringA(csStr, iLength);
}
