// 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 <iterator>
#include <utility>

#include "build/build_config.h"
#include "third_party/base/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 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 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::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);
}

size_t FX_WideCharToMultiByte(FX_CodePage codepage,
                              WideStringView wstr,
                              pdfium::span<char> buf) {
#if BUILDFLAG(IS_WIN)
  int input_len = pdfium::base::checked_cast<int>(wstr.GetLength());
  int output_len = pdfium::base::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::base::checked_cast<int>(bstr.GetLength());
  const int output_len = pdfium::base::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
}
