// Copyright 2018 The PDFium Authors
// 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 <functional>
#include <iterator>
#include <utility>

#include "build/build_config.h"
#include "core/fxcrt/numerics/safe_math.h"

#if BUILDFLAG(IS_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 std::array<FX_CharsetUnicodes, 8> kFX_CharsetUnicodes = {{
    {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 BUILDFLAG(IS_WIN)
  return static_cast<FX_CodePage>(GetACP());
#else
  return FX_CodePage::kDefANSI;
#endif
}

FX_CodePage FX_GetCodePageFromCharset(FX_Charset charset) {
  auto* result =
      std::ranges::lower_bound(kFXCharset2CodePageTable, charset, std::less<>{},
                               &FX_CHARSET_MAP::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);
}

size_t FX_WideCharToMultiByte(FX_CodePage codepage,
                              WideStringView wstr,
                              pdfium::span<char> buf) {
#if BUILDFLAG(IS_WIN)
  int input_len = pdfium::checked_cast<int>(wstr.GetLength());
  int output_len = pdfium::checked_cast<int>(buf.size());
  return WideCharToMultiByte(static_cast<UINT>(codepage), 0,
                             wstr.unterminated_c_str(), input_len, buf.data(),
                             output_len, nullptr, nullptr);
#else
  size_t len = 0;
  for (size_t i = 0; i < wstr.GetLength(); i++) {
    if (wstr[i] < 0x100) {
      if (len < buf.size()) {
        buf[len] = static_cast<char>(wstr[i]);
      }
      len++;
    }
  }
  return len;
#endif
}

size_t FX_MultiByteToWideChar(FX_CodePage codepage,
                              ByteStringView bstr,
                              pdfium::span<wchar_t> buf) {
#if BUILDFLAG(IS_WIN)
  const int input_len = pdfium::checked_cast<int>(bstr.GetLength());
  const int output_len = pdfium::checked_cast<int>(buf.size());
  return MultiByteToWideChar(static_cast<UINT>(codepage), 0,
                             bstr.unterminated_c_str(), input_len, buf.data(),
                             output_len);
#else
  size_t wlen = 0;
  for (size_t i = 0; i < bstr.GetLength(); i++) {
    if (wlen < buf.size()) {
      buf[wlen] = reinterpret_cast<uint8_t>(bstr[i]);
    }
    wlen++;
  }
  return wlen;
#endif
}
