// 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 kFX_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 kFX_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 kFX_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 kFX_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 kFX_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 kFX_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 kFX_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 kFX_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 kFXCharset2CodePageTable[] = {
    {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 kFX_CharsetUnicodes[8] = {
    {FX_Charset::kThai, kFX_MSDOSThaiUnicodes},
    {FX_Charset::kMSWin_EasternEuropean, kFX_MSWinEasternEuropeanUnicodes},
    {FX_Charset::kMSWin_Cyrillic, kFX_MSWinCyrillicUnicodes},
    {FX_Charset::kMSWin_Greek, kFX_MSWinGreekUnicodes},
    {FX_Charset::kMSWin_Turkish, kFX_MSWinTurkishUnicodes},
    {FX_Charset::kMSWin_Hebrew, kFX_MSWinHebrewUnicodes},
    {FX_Charset::kMSWin_Arabic, kFX_MSWinArabicUnicodes},
    {FX_Charset::kMSWin_Baltic, kFX_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(kFXCharset2CodePageTable), std::end(kFXCharset2CodePageTable),
      charset, [](const FX_CHARSET_MAP& iter, const FX_Charset& charset) {
        return iter.charset < charset;
      });
  if (result != std::end(kFXCharset2CodePageTable) &&
      result->charset == charset) {
    return result->codepage;
  }
  return FX_CodePage::kFailure;
}

FX_Charset FX_GetCharsetFromCodePage(FX_CodePage codepage) {
  for (const auto& it : kFXCharset2CodePageTable) {
    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
}
