// 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"
#include "third_party/base/numerics/safe_math.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);
}

size_t FX_WideCharToMultiByte(FX_CodePage codepage,
                              WideStringView wstr,
                              pdfium::span<char> buf) {
#if defined(OS_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 defined(OS_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
}
