// Copyright 2018 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/fx_codepage.h"

#include <algorithm>
#include <iterator>
#include <utility>

#include "build/build_config.h"

#if defined(OS_WIN)
#include <windows.h>
#endif

namespace {

const uint16_t g_FX_MSDOSThaiUnicodes[128] = {
    0x20AC, 0x0000, 0x0000, 0x0000, 0x0000, 0x2026, 0x0000, 0x0000, 0x0000,
    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2018,
    0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, 0x0000, 0x0000, 0x0000,
    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x00A0, 0x0E01, 0x0E02, 0x0E03,
    0x0E04, 0x0E05, 0x0E06, 0x0E07, 0x0E08, 0x0E09, 0x0E0A, 0x0E0B, 0x0E0C,
    0x0E0D, 0x0E0E, 0x0E0F, 0x0E10, 0x0E11, 0x0E12, 0x0E13, 0x0E14, 0x0E15,
    0x0E16, 0x0E17, 0x0E18, 0x0E19, 0x0E1A, 0x0E1B, 0x0E1C, 0x0E1D, 0x0E1E,
    0x0E1F, 0x0E20, 0x0E21, 0x0E22, 0x0E23, 0x0E24, 0x0E25, 0x0E26, 0x0E27,
    0x0E28, 0x0E29, 0x0E2A, 0x0E2B, 0x0E2C, 0x0E2D, 0x0E2E, 0x0E2F, 0x0E30,
    0x0E31, 0x0E32, 0x0E33, 0x0E34, 0x0E35, 0x0E36, 0x0E37, 0x0E38, 0x0E39,
    0x0E3A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0E3F, 0x0E40, 0x0E41, 0x0E42,
    0x0E43, 0x0E44, 0x0E45, 0x0E46, 0x0E47, 0x0E48, 0x0E49, 0x0E4A, 0x0E4B,
    0x0E4C, 0x0E4D, 0x0E4E, 0x0E4F, 0x0E50, 0x0E51, 0x0E52, 0x0E53, 0x0E54,
    0x0E55, 0x0E56, 0x0E57, 0x0E58, 0x0E59, 0x0E5A, 0x0E5B, 0x0000, 0x0000,
    0x0000, 0x0000,
};

const uint16_t g_FX_MSWinEasternEuropeanUnicodes[128] = {
    0x20AC, 0x0000, 0x201A, 0x0000, 0x201E, 0x2026, 0x2020, 0x2021, 0x0000,
    0x2030, 0x0160, 0x2039, 0x015A, 0x0164, 0x017D, 0x0179, 0x0000, 0x2018,
    0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, 0x0000, 0x2122, 0x0161,
    0x203A, 0x015B, 0x0165, 0x017E, 0x017A, 0x00A0, 0x02C7, 0x02D8, 0x0141,
    0x00A4, 0x0104, 0x00A6, 0x00A7, 0x00A8, 0x00A9, 0x015E, 0x00AB, 0x00AC,
    0x00AD, 0x00AE, 0x017B, 0x00B0, 0x00B1, 0x02DB, 0x0142, 0x00B4, 0x00B5,
    0x00B6, 0x00B7, 0x00B8, 0x0105, 0x015F, 0x00BB, 0x013D, 0x02DD, 0x013E,
    0x017C, 0x0154, 0x00C1, 0x00C2, 0x0102, 0x00C4, 0x0139, 0x0106, 0x00C7,
    0x010C, 0x00C9, 0x0118, 0x00CB, 0x011A, 0x00CD, 0x00CE, 0x010E, 0x0110,
    0x0143, 0x0147, 0x00D3, 0x00D4, 0x0150, 0x00D6, 0x00D7, 0x0158, 0x016E,
    0x00DA, 0x0170, 0x00DC, 0x00DD, 0x0162, 0x00DF, 0x0155, 0x00E1, 0x00E2,
    0x0103, 0x00E4, 0x013A, 0x0107, 0x00E7, 0x010D, 0x00E9, 0x0119, 0x00EB,
    0x011B, 0x00ED, 0x00EE, 0x010F, 0x0111, 0x0144, 0x0148, 0x00F3, 0x00F4,
    0x0151, 0x00F6, 0x00F7, 0x0159, 0x016F, 0x00FA, 0x0171, 0x00FC, 0x00FD,
    0x0163, 0x02D9,
};

const uint16_t g_FX_MSWinCyrillicUnicodes[128] = {
    0x0402, 0x0403, 0x201A, 0x0453, 0x201E, 0x2026, 0x2020, 0x2021, 0x20AC,
    0x2030, 0x0409, 0x2039, 0x040A, 0x040C, 0x040B, 0x040F, 0x0452, 0x2018,
    0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, 0x0000, 0x2122, 0x0459,
    0x203A, 0x045A, 0x045C, 0x045B, 0x045F, 0x00A0, 0x040E, 0x045E, 0x0408,
    0x00A4, 0x0490, 0x00A6, 0x00A7, 0x0401, 0x00A9, 0x0404, 0x00AB, 0x00AC,
    0x00AD, 0x00AE, 0x0407, 0x00B0, 0x00B1, 0x0406, 0x0456, 0x0491, 0x00B5,
    0x00B6, 0x00B7, 0x0451, 0x2116, 0x0454, 0x00BB, 0x0458, 0x0405, 0x0455,
    0x0457, 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417,
    0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F, 0x0420,
    0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, 0x0428, 0x0429,
    0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F, 0x0430, 0x0431, 0x0432,
    0x0433, 0x0434, 0x0435, 0x0436, 0x0437, 0x0438, 0x0439, 0x043A, 0x043B,
    0x043C, 0x043D, 0x043E, 0x043F, 0x0440, 0x0441, 0x0442, 0x0443, 0x0444,
    0x0445, 0x0446, 0x0447, 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D,
    0x044E, 0x044F,
};

const uint16_t g_FX_MSWinGreekUnicodes[128] = {
    0x20AC, 0x0000, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021, 0x0000,
    0x2030, 0x0000, 0x2039, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2018,
    0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, 0x0000, 0x2122, 0x0000,
    0x203A, 0x0000, 0x0000, 0x0000, 0x0000, 0x00A0, 0x0385, 0x0386, 0x00A3,
    0x00A4, 0x00A5, 0x00A6, 0x00A7, 0x00A8, 0x00A9, 0x0000, 0x00AB, 0x00AC,
    0x00AD, 0x00AE, 0x2015, 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x0384, 0x00B5,
    0x00B6, 0x00B7, 0x0388, 0x0389, 0x038A, 0x00BB, 0x038C, 0x00BD, 0x038E,
    0x038F, 0x0390, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397,
    0x0398, 0x0399, 0x039A, 0x039B, 0x039C, 0x039D, 0x039E, 0x039F, 0x03A0,
    0x03A1, 0x0000, 0x03A3, 0x03A4, 0x03A5, 0x03A6, 0x03A7, 0x03A8, 0x03A9,
    0x03AA, 0x03AB, 0x03AC, 0x03AD, 0x03AE, 0x03AF, 0x03B0, 0x03B1, 0x03B2,
    0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7, 0x03B8, 0x03B9, 0x03BA, 0x03BB,
    0x03BC, 0x03BD, 0x03BE, 0x03BF, 0x03C0, 0x03C1, 0x03C2, 0x03C3, 0x03C4,
    0x03C5, 0x03C6, 0x03C7, 0x03C8, 0x03C9, 0x03CA, 0x03CB, 0x03CC, 0x03CD,
    0x03CE, 0x0000,
};

const uint16_t g_FX_MSWinTurkishUnicodes[128] = {
    0x20AC, 0x0000, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021, 0x02C6,
    0x2030, 0x0160, 0x2039, 0x0152, 0x0000, 0x0000, 0x0000, 0x0000, 0x2018,
    0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, 0x02DC, 0x2122, 0x0161,
    0x203A, 0x0153, 0x0000, 0x0000, 0x0178, 0x00A0, 0x00A1, 0x00A2, 0x00A3,
    0x00A4, 0x00A5, 0x00A6, 0x00A7, 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC,
    0x00AD, 0x00AE, 0x00AF, 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5,
    0x00B6, 0x00B7, 0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE,
    0x00BF, 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7,
    0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF, 0x011E,
    0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7, 0x00D8, 0x00D9,
    0x00DA, 0x00DB, 0x00DC, 0x0130, 0x015E, 0x00DF, 0x00E0, 0x00E1, 0x00E2,
    0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7, 0x00E8, 0x00E9, 0x00EA, 0x00EB,
    0x00EC, 0x00ED, 0x00EE, 0x00EF, 0x011F, 0x00F1, 0x00F2, 0x00F3, 0x00F4,
    0x00F5, 0x00F6, 0x00F7, 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x0131,
    0x015F, 0x00FF,
};

const uint16_t g_FX_MSWinHebrewUnicodes[128] = {
    0x20AC, 0x0000, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021, 0x02C6,
    0x2030, 0x0000, 0x2039, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2018,
    0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, 0x02DC, 0x2122, 0x0000,
    0x203A, 0x0000, 0x0000, 0x0000, 0x0000, 0x00A0, 0x00A1, 0x00A2, 0x00A3,
    0x20AA, 0x00A5, 0x00A6, 0x00A7, 0x00A8, 0x00A9, 0x00D7, 0x00AB, 0x00AC,
    0x00AD, 0x00AE, 0x00AF, 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5,
    0x00B6, 0x00B7, 0x00B8, 0x00B9, 0x00F7, 0x00BB, 0x00BC, 0x00BD, 0x00BE,
    0x00BF, 0x05B0, 0x05B1, 0x05B2, 0x05B3, 0x05B4, 0x05B5, 0x05B6, 0x05B7,
    0x05B8, 0x05B9, 0x0000, 0x05BB, 0x05BC, 0x05BD, 0x05BE, 0x05BF, 0x05C0,
    0x05C1, 0x05C2, 0x05C3, 0x05F0, 0x05F1, 0x05F2, 0x05F3, 0x05F4, 0x0000,
    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x05D0, 0x05D1, 0x05D2,
    0x05D3, 0x05D4, 0x05D5, 0x05D6, 0x05D7, 0x05D8, 0x05D9, 0x05DA, 0x05DB,
    0x05DC, 0x05DD, 0x05DE, 0x05DF, 0x05E0, 0x05E1, 0x05E2, 0x05E3, 0x05E4,
    0x05E5, 0x05E6, 0x05E7, 0x05E8, 0x05E9, 0x05EA, 0x0000, 0x0000, 0x200E,
    0x200F, 0x0000,
};

const uint16_t g_FX_MSWinArabicUnicodes[128] = {
    0x20AC, 0x067E, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021, 0x02C6,
    0x2030, 0x0679, 0x2039, 0x0152, 0x0686, 0x0698, 0x0688, 0x06AF, 0x2018,
    0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, 0x06A9, 0x2122, 0x0691,
    0x203A, 0x0153, 0x200C, 0x200D, 0x06BA, 0x00A0, 0x060C, 0x00A2, 0x00A3,
    0x00A4, 0x00A5, 0x00A6, 0x00A7, 0x00A8, 0x00A9, 0x06BE, 0x00AB, 0x00AC,
    0x00AD, 0x00AE, 0x00AF, 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5,
    0x00B6, 0x00B7, 0x00B8, 0x00B9, 0x061B, 0x00BB, 0x00BC, 0x00BD, 0x00BE,
    0x061F, 0x06C1, 0x0621, 0x0622, 0x0623, 0x0624, 0x0625, 0x0626, 0x0627,
    0x0628, 0x0629, 0x062A, 0x062B, 0x062C, 0x062D, 0x062E, 0x062F, 0x0630,
    0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x0636, 0x00D7, 0x0637, 0x0638,
    0x0639, 0x063A, 0x0640, 0x0641, 0x0642, 0x0643, 0x00E0, 0x0644, 0x00E2,
    0x0645, 0x0646, 0x0647, 0x0648, 0x00E7, 0x00E8, 0x00E9, 0x00EA, 0x00EB,
    0x0649, 0x064A, 0x00EE, 0x00EF, 0x064B, 0x064C, 0x064D, 0x064E, 0x00F4,
    0x064F, 0x0650, 0x00F7, 0x0651, 0x00F9, 0x0652, 0x00FB, 0x00FC, 0x200E,
    0x200F, 0x06D2,
};

const uint16_t g_FX_MSWinBalticUnicodes[128] = {
    0x20AC, 0x0000, 0x201A, 0x0000, 0x201E, 0x2026, 0x2020, 0x2021, 0x0000,
    0x2030, 0x0000, 0x2039, 0x0000, 0x00A8, 0x02C7, 0x00B8, 0x0000, 0x2018,
    0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, 0x0000, 0x2122, 0x0000,
    0x203A, 0x0000, 0x00AF, 0x02DB, 0x0000, 0x00A0, 0x0000, 0x00A2, 0x00A3,
    0x00A4, 0x0000, 0x00A6, 0x00A7, 0x00D8, 0x00A9, 0x0156, 0x00AB, 0x00AC,
    0x00AD, 0x00AE, 0x00C6, 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5,
    0x00B6, 0x00B7, 0x00F8, 0x00B9, 0x0157, 0x00BB, 0x00BC, 0x00BD, 0x00BE,
    0x00E6, 0x0104, 0x012E, 0x0100, 0x0106, 0x00C4, 0x00C5, 0x0118, 0x0112,
    0x010C, 0x00C9, 0x0179, 0x0116, 0x0122, 0x0136, 0x012A, 0x013B, 0x0160,
    0x0143, 0x0145, 0x00D3, 0x014C, 0x00D5, 0x00D6, 0x00D7, 0x0172, 0x0141,
    0x015A, 0x016A, 0x00DC, 0x017B, 0x017D, 0x00DF, 0x0105, 0x012F, 0x0101,
    0x0107, 0x00E4, 0x00E5, 0x0119, 0x0113, 0x010D, 0x00E9, 0x017A, 0x0117,
    0x0123, 0x0137, 0x012B, 0x013C, 0x0161, 0x0144, 0x0146, 0x00F3, 0x014D,
    0x00F5, 0x00F6, 0x00F7, 0x0173, 0x0142, 0x015B, 0x016B, 0x00FC, 0x017C,
    0x017E, 0x02D9,
};

struct FX_CHARSET_MAP {
  FX_Charset charset;
  FX_CodePage codepage;
};

const FX_CHARSET_MAP g_FXCharset2CodePageTable[] = {
    {FX_Charset::kANSI, FX_CodePage::kMSWin_WesternEuropean},
    {FX_Charset::kDefault, FX_CodePage::kDefANSI},
    {FX_Charset::kSymbol, FX_CodePage::kSymbol},
    {FX_Charset::kMAC_Roman, FX_CodePage::kMAC_Roman},
    {FX_Charset::kMAC_ShiftJIS, FX_CodePage::kMAC_ShiftJIS},
    {FX_Charset::kMAC_Korean, FX_CodePage::kMAC_Korean},
    {FX_Charset::kMAC_ChineseSimplified, FX_CodePage::kMAC_ChineseSimplified},
    {FX_Charset::kMAC_ChineseTraditional, FX_CodePage::kMAC_ChineseTraditional},
    {FX_Charset::kMAC_Hebrew, FX_CodePage::kMAC_Hebrew},
    {FX_Charset::kMAC_Arabic, FX_CodePage::kMAC_Arabic},
    {FX_Charset::kMAC_Greek, FX_CodePage::kMAC_Greek},
    {FX_Charset::kMAC_Turkish, FX_CodePage::kMAC_Turkish},
    {FX_Charset::kMAC_Thai, FX_CodePage::kMAC_Thai},
    {FX_Charset::kMAC_EasternEuropean, FX_CodePage::kMAC_EasternEuropean},
    {FX_Charset::kMAC_Cyrillic, FX_CodePage::kMAC_Cyrillic},
    {FX_Charset::kShiftJIS, FX_CodePage::kShiftJIS},
    {FX_Charset::kHangul, FX_CodePage::kHangul},
    {FX_Charset::kJohab, FX_CodePage::kJohab},
    {FX_Charset::kChineseSimplified, FX_CodePage::kChineseSimplified},
    {FX_Charset::kChineseTraditional, FX_CodePage::kChineseTraditional},
    {FX_Charset::kMSWin_Greek, FX_CodePage::kMSWin_Greek},
    {FX_Charset::kMSWin_Turkish, FX_CodePage::kMSWin_Turkish},
    {FX_Charset::kMSWin_Vietnamese, FX_CodePage::kMSWin_Vietnamese},
    {FX_Charset::kMSWin_Hebrew, FX_CodePage::kMSWin_Hebrew},
    {FX_Charset::kMSWin_Arabic, FX_CodePage::kMSWin_Arabic},
    {FX_Charset::kMSWin_Baltic, FX_CodePage::kMSWin_Baltic},
    {FX_Charset::kMSWin_Cyrillic, FX_CodePage::kMSWin_Cyrillic},
    {FX_Charset::kThai, FX_CodePage::kMSDOS_Thai},
    {FX_Charset::kMSWin_EasternEuropean, FX_CodePage::kMSWin_EasternEuropean},
    {FX_Charset::kUS, FX_CodePage::kMSDOS_US},
    {FX_Charset::kOEM, FX_CodePage::kMSDOS_WesternEuropean},
};

}  // namespace

const FX_CharsetUnicodes g_FX_CharsetUnicodes[8] = {
    {FX_Charset::kThai, g_FX_MSDOSThaiUnicodes},
    {FX_Charset::kMSWin_EasternEuropean, g_FX_MSWinEasternEuropeanUnicodes},
    {FX_Charset::kMSWin_Cyrillic, g_FX_MSWinCyrillicUnicodes},
    {FX_Charset::kMSWin_Greek, g_FX_MSWinGreekUnicodes},
    {FX_Charset::kMSWin_Turkish, g_FX_MSWinTurkishUnicodes},
    {FX_Charset::kMSWin_Hebrew, g_FX_MSWinHebrewUnicodes},
    {FX_Charset::kMSWin_Arabic, g_FX_MSWinArabicUnicodes},
    {FX_Charset::kMSWin_Baltic, g_FX_MSWinBalticUnicodes},
};

FX_CodePage FX_GetACP() {
#if defined(OS_WIN)
  return static_cast<FX_CodePage>(GetACP());
#else
  return FX_CodePage::kDefANSI;
#endif
}

FX_CodePage FX_GetCodePageFromCharset(FX_Charset charset) {
  auto* result = std::lower_bound(
      std::begin(g_FXCharset2CodePageTable),
      std::end(g_FXCharset2CodePageTable), charset,
      [](const FX_CHARSET_MAP& iter, const FX_Charset& charset) {
        return iter.charset < charset;
      });
  if (result != std::end(g_FXCharset2CodePageTable) &&
      result->charset == charset) {
    return result->codepage;
  }
  return FX_CodePage::kFailure;
}

FX_Charset FX_GetCharsetFromCodePage(FX_CodePage codepage) {
  for (const auto& it : g_FXCharset2CodePageTable) {
    if (it.codepage == codepage)
      return it.charset;
  }
  return FX_Charset::kANSI;
}

FX_Charset FX_GetCharsetFromInt(int value) {
  switch (value) {
    case static_cast<int>(FX_Charset::kANSI):
    case static_cast<int>(FX_Charset::kDefault):
    case static_cast<int>(FX_Charset::kSymbol):
    case static_cast<int>(FX_Charset::kMAC_Roman):
    case static_cast<int>(FX_Charset::kMAC_ShiftJIS):
    case static_cast<int>(FX_Charset::kMAC_Korean):
    case static_cast<int>(FX_Charset::kMAC_ChineseSimplified):
    case static_cast<int>(FX_Charset::kMAC_ChineseTraditional):
    case static_cast<int>(FX_Charset::kMAC_Hebrew):
    case static_cast<int>(FX_Charset::kMAC_Arabic):
    case static_cast<int>(FX_Charset::kMAC_Greek):
    case static_cast<int>(FX_Charset::kMAC_Turkish):
    case static_cast<int>(FX_Charset::kMAC_Thai):
    case static_cast<int>(FX_Charset::kMAC_EasternEuropean):
    case static_cast<int>(FX_Charset::kMAC_Cyrillic):
    case static_cast<int>(FX_Charset::kShiftJIS):
    case static_cast<int>(FX_Charset::kHangul):
    case static_cast<int>(FX_Charset::kJohab):
    case static_cast<int>(FX_Charset::kChineseSimplified):
    case static_cast<int>(FX_Charset::kChineseTraditional):
    case static_cast<int>(FX_Charset::kMSWin_Greek):
    case static_cast<int>(FX_Charset::kMSWin_Turkish):
    case static_cast<int>(FX_Charset::kMSWin_Vietnamese):
    case static_cast<int>(FX_Charset::kMSWin_Hebrew):
    case static_cast<int>(FX_Charset::kMSWin_Arabic):
    case static_cast<int>(FX_Charset::kMSWin_Baltic):
    case static_cast<int>(FX_Charset::kMSWin_Cyrillic):
    case static_cast<int>(FX_Charset::kThai):
    case static_cast<int>(FX_Charset::kMSWin_EasternEuropean):
    case static_cast<int>(FX_Charset::kUS):
    case static_cast<int>(FX_Charset::kOEM):
      return static_cast<FX_Charset>(value);
    default:
      return FX_Charset::kANSI;
  }
}

bool FX_CharSetIsCJK(FX_Charset uCharset) {
  return (uCharset == FX_Charset::kChineseSimplified) ||
         (uCharset == FX_Charset::kChineseTraditional) ||
         (uCharset == FX_Charset::kHangul) ||
         (uCharset == FX_Charset::kShiftJIS);
}

int FX_WideCharToMultiByte(FX_CodePage codepage,
                           const wchar_t* wstr,
                           int wlen,
                           char* buf,
                           int buflen) {
#if defined(OS_WIN)
  return WideCharToMultiByte(static_cast<UINT>(codepage), 0, wstr, wlen, buf,
                             buflen, nullptr, nullptr);
#else
  int len = 0;
  for (int i = 0; i < wlen; i++) {
    if (wstr[i] < 0x100) {
      if (buf && len < buflen)
        buf[len] = static_cast<char>(wstr[i]);
      len++;
    }
  }
  return len;
#endif
}

int FX_MultiByteToWideChar(FX_CodePage codepage,
                           uint32_t dwFlags,
                           const char* bstr,
                           int blen,
                           wchar_t* buf,
                           int buflen) {
#if defined(OS_WIN)
  return MultiByteToWideChar(static_cast<UINT>(codepage), dwFlags, bstr, blen,
                             buf, buflen);
#else
  int wlen = 0;
  for (int i = 0; i < blen; i++) {
    if (buf && wlen < buflen)
      buf[wlen] = reinterpret_cast<const uint8_t*>(bstr)[i];
    wlen++;
  }
  return wlen;
#endif
}
