// 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 "core/fxcrt/include/fx_ext.h"
#include "xfa/fgas/crt/fgas_codepage.h"
#include "xfa/fgas/crt/fgas_language.h"

namespace {

struct FX_STR2CPHASH {
  uint32_t uHash;
  uint16_t uCodePage;
};

struct FX_CHARSET_MAP {
  uint16_t charset;
  uint16_t codepage;
};

struct FX_LANG2CPMAP {
  uint16_t wLanguage;
  uint16_t wCodepage;
};

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},
};

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},
};

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},
};

uint16_t GetCodePageFromStringA(const FX_CHAR* pStr, int32_t iLength) {
  ASSERT(pStr);
  if (iLength < 0) {
    iLength = FXSYS_strlen(pStr);
  }
  if (iLength == 0) {
    return 0xFFFF;
  }
  uint32_t uHash = FX_HashCode_GetA(CFX_ByteStringC(pStr, iLength), true);
  int32_t iStart = 0;
  int32_t iEnd = sizeof(g_FXCPHashTable) / sizeof(FX_STR2CPHASH) - 1;
  ASSERT(iEnd >= 0);
  do {
    int32_t iMid = (iStart + iEnd) / 2;
    const FX_STR2CPHASH& cp = g_FXCPHashTable[iMid];
    if (uHash == cp.uHash) {
      return (uint16_t)cp.uCodePage;
    } else if (uHash < cp.uHash) {
      iEnd = iMid - 1;
    } else {
      iStart = iMid + 1;
    }
  } while (iStart <= iEnd);
  return 0xFFFF;
}

}  // namespace

uint16_t FX_GetCodePageFromCharset(uint8_t charset) {
  int32_t iEnd = sizeof(g_FXCharset2CodePageTable) / sizeof(FX_CHARSET_MAP) - 1;
  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;
}

uint16_t FX_GetDefCodePageByLanguage(uint16_t wLanguage) {
  int32_t iEnd = sizeof(g_FXLang2CodepageTable) / sizeof(FX_LANG2CPMAP) - 1;
  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;
}

uint16_t FX_GetCodePageFromStringW(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 GetCodePageFromStringA(csStr.c_str(), iLength);
}

void FX_SwapByteOrder(FX_WCHAR* pStr, int32_t iLength) {
  ASSERT(pStr);
  if (iLength < 0) {
    iLength = FXSYS_wcslen(pStr);
  }
  uint16_t wch;
  if (sizeof(FX_WCHAR) > 2) {
    while (iLength-- > 0) {
      wch = (uint16_t)*pStr;
      wch = (wch >> 8) | (wch << 8);
      wch &= 0x00FF;
      *pStr++ = wch;
    }
  } else {
    while (iLength-- > 0) {
      wch = (uint16_t)*pStr;
      wch = (wch >> 8) | (wch << 8);
      *pStr++ = wch;
    }
  }
}

void FX_UTF16ToWChar(void* pBuffer, int32_t iLength) {
  ASSERT(pBuffer && iLength > 0);
  if (sizeof(FX_WCHAR) == 2) {
    return;
  }
  uint16_t* pSrc = (uint16_t*)pBuffer;
  FX_WCHAR* pDst = (FX_WCHAR*)pBuffer;
  while (--iLength >= 0) {
    pDst[iLength] = (FX_WCHAR)pSrc[iLength];
  }
}

int32_t FX_DecodeString(uint16_t wCodePage,
                        const FX_CHAR* pSrc,
                        int32_t* pSrcLen,
                        FX_WCHAR* pDst,
                        int32_t* pDstLen,
                        FX_BOOL bErrBreak) {
  if (wCodePage == FX_CODEPAGE_UTF8) {
    return FX_UTF8Decode(pSrc, pSrcLen, pDst, pDstLen);
  }
  return -1;
}
int32_t FX_UTF8Decode(const FX_CHAR* pSrc,
                      int32_t* pSrcLen,
                      FX_WCHAR* pDst,
                      int32_t* pDstLen) {
  if (!pSrcLen || !pDstLen) {
    return -1;
  }
  int32_t iSrcLen = *pSrcLen;
  if (iSrcLen < 1) {
    *pSrcLen = *pDstLen = 0;
    return 1;
  }
  int32_t iDstLen = *pDstLen;
  FX_BOOL bValidDst = (pDst && iDstLen > 0);
  uint32_t dwCode = 0;
  int32_t iPending = 0;
  int32_t iSrcNum = 0, iDstNum = 0;
  int32_t k = 0;
  int32_t iIndex = 0;
  k = 1;
  while (iIndex < iSrcLen) {
    uint8_t byte = (uint8_t) * (pSrc + iIndex);
    if (byte < 0x80) {
      iPending = 0;
      k = 1;
      iDstNum++;
      iSrcNum += k;
      if (bValidDst) {
        *pDst++ = byte;
        if (iDstNum >= iDstLen) {
          break;
        }
      }
    } else if (byte < 0xc0) {
      if (iPending < 1) {
        break;
      }
      iPending--;
      dwCode |= (byte & 0x3f) << (iPending * 6);
      if (iPending == 0) {
        iDstNum++;
        iSrcNum += k;
        if (bValidDst) {
          *pDst++ = dwCode;
          if (iDstNum >= iDstLen) {
            break;
          }
        }
      }
    } else if (byte < 0xe0) {
      iPending = 1;
      k = 2;
      dwCode = (byte & 0x1f) << 6;
    } else if (byte < 0xf0) {
      iPending = 2;
      k = 3;
      dwCode = (byte & 0x0f) << 12;
    } else if (byte < 0xf8) {
      iPending = 3;
      k = 4;
      dwCode = (byte & 0x07) << 18;
    } else if (byte < 0xfc) {
      iPending = 4;
      k = 5;
      dwCode = (byte & 0x03) << 24;
    } else if (byte < 0xfe) {
      iPending = 5;
      k = 6;
      dwCode = (byte & 0x01) << 30;
    } else {
      break;
    }
    iIndex++;
  }
  *pSrcLen = iSrcNum;
  *pDstLen = iDstNum;
  return 1;
}
