Make FX_CodePage an enum class.

Replaces using a number of FX_CODEPAGE_ #defines. In turn, move
some functions that require FX_CodePage arguments from fx_system.h
to fx_codepage.h.

-- Introduce new kFailure sentinel.
-- Introduce incomplete definition header fx_codepage_forward.h
-- Replace literal integers with symbolic names where needed.
-- Correct "847" to Thai (874).


Change-Id: I1a74672c1c42855a0bd4716f6d33ef3c57f08e5c
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/83290
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
diff --git a/core/fpdfapi/font/cpdf_cidfont.cpp b/core/fpdfapi/font/cpdf_cidfont.cpp
index d8b7b14..0717795 100644
--- a/core/fpdfapi/font/cpdf_cidfont.cpp
+++ b/core/fpdfapi/font/cpdf_cidfont.cpp
@@ -21,6 +21,7 @@
 #include "core/fpdfapi/parser/cpdf_array.h"
 #include "core/fpdfapi/parser/cpdf_dictionary.h"
 #include "core/fpdfapi/parser/cpdf_stream_acc.h"
+#include "core/fxcrt/fx_codepage.h"
 #include "core/fxcrt/fx_memory.h"
 #include "core/fxcrt/fx_safe_types.h"
 #include "core/fxcrt/fx_unicode.h"
@@ -34,10 +35,15 @@
 
 namespace {
 
-constexpr uint16_t kCharsetCodePages[CIDSET_NUM_SETS] = {0,   936, 950,
-                                                         932, 949, 1200};
+constexpr FX_CodePage kCharsetCodePages[CIDSET_NUM_SETS] = {
+    FX_CodePage::kDefANSI,
+    FX_CodePage::kChineseSimplified,
+    FX_CodePage::kChineseTraditional,
+    FX_CodePage::kShiftJIS,
+    FX_CodePage::kHangul,
+    FX_CodePage::kUTF16LE};
 
-constexpr struct CIDTransform {
+struct CIDTransform {
   uint16_t cid;
   uint8_t a;
   uint8_t b;
@@ -45,7 +51,9 @@
   uint8_t d;
   uint8_t e;
   uint8_t f;
-} kJapan1VerticalCIDs[] = {
+};
+
+constexpr CIDTransform kJapan1VerticalCIDs[] = {
     {97, 129, 0, 0, 127, 55, 0},     {7887, 127, 0, 0, 127, 76, 89},
     {7888, 127, 0, 0, 127, 79, 94},  {7889, 0, 129, 127, 0, 17, 127},
     {7890, 0, 129, 127, 0, 17, 127}, {7891, 0, 129, 127, 0, 17, 127},
@@ -322,9 +330,9 @@
     charcode = (charcode % 256) * 256 + (charcode / 256);
     charsize = 2;
   }
-  int ret = FXSYS_MultiByteToWideChar(
-      kCharsetCodePages[m_pCMap->GetCoding()], 0,
-      reinterpret_cast<const char*>(&charcode), charsize, &unicode, 1);
+  int ret = FX_MultiByteToWideChar(kCharsetCodePages[m_pCMap->GetCoding()], 0,
+                                   reinterpret_cast<const char*>(&charcode),
+                                   charsize, &unicode, 1);
   return ret == 1 ? unicode : 0;
 #else
   if (!m_pCMap->GetEmbedMap())
@@ -365,9 +373,9 @@
     return 0;
 #if defined(OS_WIN)
   uint8_t buffer[32];
-  int ret = FXSYS_WideCharToMultiByte(
-      kCharsetCodePages[m_pCMap->GetCoding()], 0, &unicode, 1,
-      reinterpret_cast<char*>(buffer), 4, nullptr, nullptr);
+  int ret = FX_WideCharToMultiByte(kCharsetCodePages[m_pCMap->GetCoding()], 0,
+                                   &unicode, 1, reinterpret_cast<char*>(buffer),
+                                   4, nullptr, nullptr);
   if (ret == 1)
     return buffer[0];
   if (ret == 2)
diff --git a/core/fpdfapi/font/cpdf_cidfont.h b/core/fpdfapi/font/cpdf_cidfont.h
index 11f6d81..bf07aa6 100644
--- a/core/fpdfapi/font/cpdf_cidfont.h
+++ b/core/fpdfapi/font/cpdf_cidfont.h
@@ -13,7 +13,6 @@
 #include "core/fpdfapi/font/cpdf_font.h"
 #include "core/fxcrt/fx_coordinates.h"
 #include "core/fxcrt/fx_string.h"
-#include "core/fxcrt/fx_system.h"
 #include "core/fxcrt/retain_ptr.h"
 #include "core/fxcrt/unowned_ptr.h"
 
diff --git a/core/fpdfapi/font/cpdf_font.cpp b/core/fpdfapi/font/cpdf_font.cpp
index d85eff2..1391f5a 100644
--- a/core/fpdfapi/font/cpdf_font.cpp
+++ b/core/fpdfapi/font/cpdf_font.cpp
@@ -25,6 +25,7 @@
 #include "core/fpdfapi/parser/cpdf_name.h"
 #include "core/fpdfapi/parser/cpdf_stream.h"
 #include "core/fpdfapi/parser/cpdf_stream_acc.h"
+#include "core/fxcrt/fx_codepage.h"
 #include "core/fxcrt/fx_safe_types.h"
 #include "core/fxcrt/stl_util.h"
 #include "core/fxge/cfx_fontmapper.h"
@@ -385,7 +386,8 @@
     safeWeight *= 5;
     m_FontFallbacks[0]->LoadSubst("Arial", IsTrueTypeFont(), m_Flags,
                                   safeWeight.ValueOrDefault(FXFONT_FW_NORMAL),
-                                  m_ItalicAngle, 0, IsVertWriting());
+                                  m_ItalicAngle, FX_CodePage::kDefANSI,
+                                  IsVertWriting());
   }
   return 0;
 }
diff --git a/core/fpdfapi/font/cpdf_simplefont.cpp b/core/fpdfapi/font/cpdf_simplefont.cpp
index 698e35b..1593639 100644
--- a/core/fpdfapi/font/cpdf_simplefont.cpp
+++ b/core/fpdfapi/font/cpdf_simplefont.cpp
@@ -12,6 +12,7 @@
 #include "core/fpdfapi/parser/cpdf_array.h"
 #include "core/fpdfapi/parser/cpdf_dictionary.h"
 #include "core/fpdfapi/parser/cpdf_name.h"
+#include "core/fxcrt/fx_codepage.h"
 #include "core/fxge/fx_font.h"
 #include "core/fxge/fx_freetype.h"
 #include "third_party/base/cxx17_backports.h"
@@ -266,7 +267,7 @@
       m_Flags |= FXFONT_FIXED_PITCH;
   }
   m_Font.LoadSubst(m_BaseFontName, IsTrueTypeFont(), m_Flags, GetFontWeight(),
-                   m_ItalicAngle, 0, false);
+                   m_ItalicAngle, FX_CodePage::kDefANSI, false);
 }
 
 bool CPDF_SimpleFont::IsUnicodeCompatible() const {
diff --git a/core/fpdfdoc/cpdf_bafontmap.cpp b/core/fpdfdoc/cpdf_bafontmap.cpp
index ab92dc9..174e937 100644
--- a/core/fpdfdoc/cpdf_bafontmap.cpp
+++ b/core/fpdfdoc/cpdf_bafontmap.cpp
@@ -159,7 +159,7 @@
 }
 
 int32_t CPDF_BAFontMap::GetNativeCharset() {
-  return FX_GetCharsetFromCodePage(FXSYS_GetACP());
+  return FX_GetCharsetFromCodePage(FX_GetACP());
 }
 
 RetainPtr<CPDF_Font> CPDF_BAFontMap::FindFontSameCharset(ByteString* sFontAlias,
diff --git a/core/fpdfdoc/cpdf_interactiveform.cpp b/core/fpdfdoc/cpdf_interactiveform.cpp
index 5f4e605..8c6e89b 100644
--- a/core/fpdfdoc/cpdf_interactiveform.cpp
+++ b/core/fpdfdoc/cpdf_interactiveform.cpp
@@ -266,7 +266,7 @@
 }
 
 uint8_t GetNativeCharSet() {
-  return FX_GetCharsetFromCodePage(FXSYS_GetACP());
+  return FX_GetCharsetFromCodePage(FX_GetACP());
 }
 
 void InitDict(CPDF_Dictionary*& pFormDict, CPDF_Document* pDocument) {
diff --git a/core/fxcrt/BUILD.gn b/core/fxcrt/BUILD.gn
index 07beba6..8509148 100644
--- a/core/fxcrt/BUILD.gn
+++ b/core/fxcrt/BUILD.gn
@@ -36,6 +36,7 @@
     "fx_bidi.h",
     "fx_codepage.cpp",
     "fx_codepage.h",
+    "fx_codepage_forward.h",
     "fx_coordinates.cpp",
     "fx_coordinates.h",
     "fx_extension.cpp",
diff --git a/core/fxcrt/cfx_seekablestreamproxy.cpp b/core/fxcrt/cfx_seekablestreamproxy.cpp
index f677eec..666aee5 100644
--- a/core/fxcrt/cfx_seekablestreamproxy.cpp
+++ b/core/fxcrt/cfx_seekablestreamproxy.cpp
@@ -112,18 +112,18 @@
   bom &= BOM_UTF8_MASK;
   if (bom == BOM_UTF8) {
     m_wBOMLength = 3;
-    m_wCodePage = FX_CODEPAGE_UTF8;
+    m_wCodePage = FX_CodePage::kUTF8;
   } else {
     bom &= BOM_UTF16_MASK;
     if (bom == BOM_UTF16_BE) {
       m_wBOMLength = 2;
-      m_wCodePage = FX_CODEPAGE_UTF16BE;
+      m_wCodePage = FX_CodePage::kUTF16BE;
     } else if (bom == BOM_UTF16_LE) {
       m_wBOMLength = 2;
-      m_wCodePage = FX_CODEPAGE_UTF16LE;
+      m_wCodePage = FX_CodePage::kUTF16LE;
     } else {
       m_wBOMLength = 0;
-      m_wCodePage = FXSYS_GetACP();
+      m_wCodePage = FX_GetACP();
     }
   }
 
@@ -160,7 +160,7 @@
       pdfium::clamp(m_iPosition, static_cast<FX_FILESIZE>(0), GetSize());
 }
 
-void CFX_SeekableStreamProxy::SetCodePage(uint16_t wCodePage) {
+void CFX_SeekableStreamProxy::SetCodePage(FX_CodePage wCodePage) {
   if (m_wBOMLength > 0)
     return;
   m_wCodePage = wCodePage;
@@ -188,12 +188,12 @@
   if (!pStr || size == 0)
     return 0;
 
-  if (m_wCodePage == FX_CODEPAGE_UTF16LE ||
-      m_wCodePage == FX_CODEPAGE_UTF16BE) {
+  if (m_wCodePage == FX_CodePage::kUTF16LE ||
+      m_wCodePage == FX_CodePage::kUTF16BE) {
     size_t iBytes = size * 2;
     size_t iLen = ReadData(reinterpret_cast<uint8_t*>(pStr), iBytes);
     size = iLen / 2;
-    if (m_wCodePage == FX_CODEPAGE_UTF16BE)
+    if (m_wCodePage == FX_CodePage::kUTF16BE)
       SwapByteOrder(reinterpret_cast<uint16_t*>(pStr), size);
 
 #if defined(WCHAR_T_IS_UTF32)
@@ -210,7 +210,7 @@
 
   std::vector<uint8_t, FxAllocAllocator<uint8_t>> buf(iBytes);
   size_t iLen = ReadData(buf.data(), iBytes);
-  if (m_wCodePage != FX_CODEPAGE_UTF8)
+  if (m_wCodePage != FX_CodePage::kUTF8)
     return 0;
 
   size_t iSrc;
diff --git a/core/fxcrt/cfx_seekablestreamproxy.h b/core/fxcrt/cfx_seekablestreamproxy.h
index bfff049..587a570 100644
--- a/core/fxcrt/cfx_seekablestreamproxy.h
+++ b/core/fxcrt/cfx_seekablestreamproxy.h
@@ -22,8 +22,8 @@
   bool IsEOF();
   size_t ReadBlock(wchar_t* pStr, size_t size);
 
-  uint16_t GetCodePage() const { return m_wCodePage; }
-  void SetCodePage(uint16_t wCodePage);
+  FX_CodePage GetCodePage() const { return m_wCodePage; }
+  void SetCodePage(FX_CodePage wCodePage);
 
  private:
   enum class From {
@@ -39,7 +39,7 @@
   void Seek(From eSeek, FX_FILESIZE iOffset);
   size_t ReadData(uint8_t* pBuffer, size_t iBufferSize);
 
-  uint16_t m_wCodePage = FX_CODEPAGE_DefANSI;
+  FX_CodePage m_wCodePage = FX_CodePage::kDefANSI;
   size_t m_wBOMLength = 0;
   FX_FILESIZE m_iPosition = 0;
   RetainPtr<IFX_SeekableReadStream> const m_pStream;
diff --git a/core/fxcrt/fx_codepage.cpp b/core/fxcrt/fx_codepage.cpp
index c85291f..993853b 100644
--- a/core/fxcrt/fx_codepage.cpp
+++ b/core/fxcrt/fx_codepage.cpp
@@ -10,6 +10,12 @@
 #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] = {
@@ -158,41 +164,41 @@
 
 struct FX_CHARSET_MAP {
   uint16_t charset;
-  uint16_t codepage;
+  FX_CodePage codepage;
 };
 
 const FX_CHARSET_MAP g_FXCharset2CodePageTable[] = {
-    {FX_CHARSET_ANSI, FX_CODEPAGE_MSWin_WesternEuropean},
-    {FX_CHARSET_Default, FX_CODEPAGE_DefANSI},
-    {FX_CHARSET_Symbol, FX_CODEPAGE_Symbol},
-    {FX_CHARSET_MAC_Roman, FX_CODEPAGE_MAC_Roman},
-    {FX_CHARSET_MAC_ShiftJIS, FX_CODEPAGE_MAC_ShiftJIS},
-    {FX_CHARSET_MAC_Korean, FX_CODEPAGE_MAC_Korean},
-    {FX_CHARSET_MAC_ChineseSimplified, FX_CODEPAGE_MAC_ChineseSimplified},
-    {FX_CHARSET_MAC_ChineseTraditional, FX_CODEPAGE_MAC_ChineseTraditional},
-    {FX_CHARSET_MAC_Hebrew, FX_CODEPAGE_MAC_Hebrew},
-    {FX_CHARSET_MAC_Arabic, FX_CODEPAGE_MAC_Arabic},
-    {FX_CHARSET_MAC_Greek, FX_CODEPAGE_MAC_Greek},
-    {FX_CHARSET_MAC_Turkish, FX_CODEPAGE_MAC_Turkish},
-    {FX_CHARSET_MAC_Thai, FX_CODEPAGE_MAC_Thai},
-    {FX_CHARSET_MAC_EasternEuropean, FX_CODEPAGE_MAC_EasternEuropean},
-    {FX_CHARSET_MAC_Cyrillic, FX_CODEPAGE_MAC_Cyrillic},
-    {FX_CHARSET_ShiftJIS, FX_CODEPAGE_ShiftJIS},
-    {FX_CHARSET_Hangul, FX_CODEPAGE_Hangul},
-    {FX_CHARSET_Johab, FX_CODEPAGE_Johab},
-    {FX_CHARSET_ChineseSimplified, FX_CODEPAGE_ChineseSimplified},
-    {FX_CHARSET_ChineseTraditional, FX_CODEPAGE_ChineseTraditional},
-    {FX_CHARSET_MSWin_Greek, FX_CODEPAGE_MSWin_Greek},
-    {FX_CHARSET_MSWin_Turkish, FX_CODEPAGE_MSWin_Turkish},
-    {FX_CHARSET_MSWin_Vietnamese, FX_CODEPAGE_MSWin_Vietnamese},
-    {FX_CHARSET_MSWin_Hebrew, FX_CODEPAGE_MSWin_Hebrew},
-    {FX_CHARSET_MSWin_Arabic, FX_CODEPAGE_MSWin_Arabic},
-    {FX_CHARSET_MSWin_Baltic, FX_CODEPAGE_MSWin_Baltic},
-    {FX_CHARSET_MSWin_Cyrillic, FX_CODEPAGE_MSWin_Cyrillic},
-    {FX_CHARSET_Thai, FX_CODEPAGE_MSDOS_Thai},
-    {FX_CHARSET_MSWin_EasternEuropean, FX_CODEPAGE_MSWin_EasternEuropean},
-    {FX_CHARSET_US, FX_CODEPAGE_MSDOS_US},
-    {FX_CHARSET_OEM, FX_CODEPAGE_MSDOS_WesternEuropean},
+    {FX_CHARSET_ANSI, FX_CodePage::kMSWin_WesternEuropean},
+    {FX_CHARSET_Default, FX_CodePage::kDefANSI},
+    {FX_CHARSET_Symbol, FX_CodePage::kSymbol},
+    {FX_CHARSET_MAC_Roman, FX_CodePage::kMAC_Roman},
+    {FX_CHARSET_MAC_ShiftJIS, FX_CodePage::kMAC_ShiftJIS},
+    {FX_CHARSET_MAC_Korean, FX_CodePage::kMAC_Korean},
+    {FX_CHARSET_MAC_ChineseSimplified, FX_CodePage::kMAC_ChineseSimplified},
+    {FX_CHARSET_MAC_ChineseTraditional, FX_CodePage::kMAC_ChineseTraditional},
+    {FX_CHARSET_MAC_Hebrew, FX_CodePage::kMAC_Hebrew},
+    {FX_CHARSET_MAC_Arabic, FX_CodePage::kMAC_Arabic},
+    {FX_CHARSET_MAC_Greek, FX_CodePage::kMAC_Greek},
+    {FX_CHARSET_MAC_Turkish, FX_CodePage::kMAC_Turkish},
+    {FX_CHARSET_MAC_Thai, FX_CodePage::kMAC_Thai},
+    {FX_CHARSET_MAC_EasternEuropean, FX_CodePage::kMAC_EasternEuropean},
+    {FX_CHARSET_MAC_Cyrillic, FX_CodePage::kMAC_Cyrillic},
+    {FX_CHARSET_ShiftJIS, FX_CodePage::kShiftJIS},
+    {FX_CHARSET_Hangul, FX_CodePage::kHangul},
+    {FX_CHARSET_Johab, FX_CodePage::kJohab},
+    {FX_CHARSET_ChineseSimplified, FX_CodePage::kChineseSimplified},
+    {FX_CHARSET_ChineseTraditional, FX_CodePage::kChineseTraditional},
+    {FX_CHARSET_MSWin_Greek, FX_CodePage::kMSWin_Greek},
+    {FX_CHARSET_MSWin_Turkish, FX_CodePage::kMSWin_Turkish},
+    {FX_CHARSET_MSWin_Vietnamese, FX_CodePage::kMSWin_Vietnamese},
+    {FX_CHARSET_MSWin_Hebrew, FX_CodePage::kMSWin_Hebrew},
+    {FX_CHARSET_MSWin_Arabic, FX_CodePage::kMSWin_Arabic},
+    {FX_CHARSET_MSWin_Baltic, FX_CodePage::kMSWin_Baltic},
+    {FX_CHARSET_MSWin_Cyrillic, FX_CodePage::kMSWin_Cyrillic},
+    {FX_CHARSET_Thai, FX_CodePage::kMSDOS_Thai},
+    {FX_CHARSET_MSWin_EasternEuropean, FX_CodePage::kMSWin_EasternEuropean},
+    {FX_CHARSET_US, FX_CodePage::kMSDOS_US},
+    {FX_CHARSET_OEM, FX_CodePage::kMSDOS_WesternEuropean},
 };
 
 }  // namespace
@@ -208,7 +214,15 @@
     {FX_CHARSET_MSWin_Baltic, g_FX_MSWinBalticUnicodes},
 };
 
-uint16_t FX_GetCodePageFromCharset(uint8_t charset) {
+FX_CodePage FX_GetACP() {
+#if defined(OS_WIN)
+  return static_cast<FX_CodePage>(GetACP());
+#else
+  return FX_CodePage::kDefANSI;
+#endif
+}
+
+FX_CodePage FX_GetCodePageFromCharset(uint8_t charset) {
   auto* result =
       std::lower_bound(std::begin(g_FXCharset2CodePageTable),
                        std::end(g_FXCharset2CodePageTable), charset,
@@ -219,10 +233,10 @@
       result->charset == charset) {
     return result->codepage;
   }
-  return 0xFFFF;
+  return FX_CodePage::kFailure;
 }
 
-uint8_t FX_GetCharsetFromCodePage(uint16_t codepage) {
+uint8_t FX_GetCharsetFromCodePage(FX_CodePage codepage) {
   for (const auto& it : g_FXCharset2CodePageTable) {
     if (it.codepage == codepage)
       return it.charset;
@@ -235,3 +249,47 @@
          (uCharset == FX_CHARSET_ChineseTraditional) ||
          (uCharset == FX_CHARSET_Hangul) || (uCharset == FX_CHARSET_ShiftJIS);
 }
+
+int FX_WideCharToMultiByte(FX_CodePage codepage,
+                           uint32_t dwFlags,
+                           const wchar_t* wstr,
+                           int wlen,
+                           char* buf,
+                           int buflen,
+                           const char* default_str,
+                           int* pUseDefault) {
+#if defined(OS_WIN)
+  return WideCharToMultiByte(static_cast<UINT>(codepage), dwFlags, wstr, wlen,
+                             buf, buflen, default_str, pUseDefault);
+#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
+}
diff --git a/core/fxcrt/fx_codepage.h b/core/fxcrt/fx_codepage.h
index 935425d..ae4ecf0 100644
--- a/core/fxcrt/fx_codepage.h
+++ b/core/fxcrt/fx_codepage.h
@@ -9,54 +9,60 @@
 
 #include <stdint.h>
 
-#define FX_CODEPAGE_DefANSI 0
-#define FX_CODEPAGE_Symbol 42
-#define FX_CODEPAGE_MSDOS_US 437
-#define FX_CODEPAGE_Arabic_ASMO708 708
-#define FX_CODEPAGE_MSDOS_Greek1 737
-#define FX_CODEPAGE_MSDOS_Baltic 775
-#define FX_CODEPAGE_MSDOS_WesternEuropean 850
-#define FX_CODEPAGE_MSDOS_EasternEuropean 852
-#define FX_CODEPAGE_MSDOS_Cyrillic 855
-#define FX_CODEPAGE_MSDOS_Turkish 857
-#define FX_CODEPAGE_MSDOS_Portuguese 860
-#define FX_CODEPAGE_MSDOS_Icelandic 861
-#define FX_CODEPAGE_MSDOS_Hebrew 862
-#define FX_CODEPAGE_MSDOS_FrenchCanadian 863
-#define FX_CODEPAGE_MSDOS_Arabic 864
-#define FX_CODEPAGE_MSDOS_Norwegian 865
-#define FX_CODEPAGE_MSDOS_Russian 866
-#define FX_CODEPAGE_MSDOS_Greek2 869
-#define FX_CODEPAGE_MSDOS_Thai 874
-#define FX_CODEPAGE_ShiftJIS 932
-#define FX_CODEPAGE_ChineseSimplified 936
-#define FX_CODEPAGE_Hangul 949
-#define FX_CODEPAGE_ChineseTraditional 950
-#define FX_CODEPAGE_UTF16LE 1200
-#define FX_CODEPAGE_UTF16BE 1201
-#define FX_CODEPAGE_MSWin_EasternEuropean 1250
-#define FX_CODEPAGE_MSWin_Cyrillic 1251
-#define FX_CODEPAGE_MSWin_WesternEuropean 1252
-#define FX_CODEPAGE_MSWin_Greek 1253
-#define FX_CODEPAGE_MSWin_Turkish 1254
-#define FX_CODEPAGE_MSWin_Hebrew 1255
-#define FX_CODEPAGE_MSWin_Arabic 1256
-#define FX_CODEPAGE_MSWin_Baltic 1257
-#define FX_CODEPAGE_MSWin_Vietnamese 1258
-#define FX_CODEPAGE_Johab 1361
-#define FX_CODEPAGE_MAC_Roman 10000
-#define FX_CODEPAGE_MAC_ShiftJIS 10001
-#define FX_CODEPAGE_MAC_ChineseTraditional 10002
-#define FX_CODEPAGE_MAC_Korean 10003
-#define FX_CODEPAGE_MAC_Arabic 10004
-#define FX_CODEPAGE_MAC_Hebrew 10005
-#define FX_CODEPAGE_MAC_Greek 10006
-#define FX_CODEPAGE_MAC_Cyrillic 10007
-#define FX_CODEPAGE_MAC_ChineseSimplified 10008
-#define FX_CODEPAGE_MAC_Thai 10021
-#define FX_CODEPAGE_MAC_EasternEuropean 10029
-#define FX_CODEPAGE_MAC_Turkish 10081
-#define FX_CODEPAGE_UTF8 65001
+// Prove consistency with incomplete forward definitions.
+#include "core/fxcrt/fx_codepage_forward.h"
+
+enum class FX_CodePage : uint16_t {
+  kDefANSI = 0,
+  kSymbol = 42,
+  kMSDOS_US = 437,
+  kArabic_ASMO708 = 708,
+  kMSDOS_Greek1 = 737,
+  kMSDOS_Baltic = 775,
+  kMSDOS_WesternEuropean = 850,
+  kMSDOS_EasternEuropean = 852,
+  kMSDOS_Cyrillic = 855,
+  kMSDOS_Turkish = 857,
+  kMSDOS_Portuguese = 860,
+  kMSDOS_Icelandic = 861,
+  kMSDOS_Hebrew = 862,
+  kMSDOS_FrenchCanadian = 863,
+  kMSDOS_Arabic = 864,
+  kMSDOS_Norwegian = 865,
+  kMSDOS_Russian = 866,
+  kMSDOS_Greek2 = 869,
+  kMSDOS_Thai = 874,
+  kShiftJIS = 932,
+  kChineseSimplified = 936,
+  kHangul = 949,
+  kChineseTraditional = 950,
+  kUTF16LE = 1200,
+  kUTF16BE = 1201,
+  kMSWin_EasternEuropean = 1250,
+  kMSWin_Cyrillic = 1251,
+  kMSWin_WesternEuropean = 1252,
+  kMSWin_Greek = 1253,
+  kMSWin_Turkish = 1254,
+  kMSWin_Hebrew = 1255,
+  kMSWin_Arabic = 1256,
+  kMSWin_Baltic = 1257,
+  kMSWin_Vietnamese = 1258,
+  kJohab = 1361,
+  kMAC_Roman = 10000,
+  kMAC_ShiftJIS = 10001,
+  kMAC_ChineseTraditional = 10002,
+  kMAC_Korean = 10003,
+  kMAC_Arabic = 10004,
+  kMAC_Hebrew = 10005,
+  kMAC_Greek = 10006,
+  kMAC_Cyrillic = 10007,
+  kMAC_ChineseSimplified = 10008,
+  kMAC_Thai = 10021,
+  kMAC_EasternEuropean = 10029,
+  kMAC_Turkish = 10081,
+  kUTF8 = 65001,
+  kFailure = 65535,
+};
 
 #define FX_CHARSET_ANSI 0
 #define FX_CHARSET_Default 1
@@ -98,8 +104,23 @@
 
 extern const FX_CharsetUnicodes g_FX_CharsetUnicodes[8];
 
-uint16_t FX_GetCodePageFromCharset(uint8_t charset);
-uint8_t FX_GetCharsetFromCodePage(uint16_t codepage);
+FX_CodePage FX_GetACP();
+FX_CodePage FX_GetCodePageFromCharset(uint8_t charset);
+uint8_t FX_GetCharsetFromCodePage(FX_CodePage codepage);
 bool FX_CharSetIsCJK(uint8_t uCharset);
+int FX_WideCharToMultiByte(FX_CodePage codepage,
+                           uint32_t dwFlags,
+                           const wchar_t* wstr,
+                           int wlen,
+                           char* buf,
+                           int buflen,
+                           const char* default_str,
+                           int* pUseDefault);
+int FX_MultiByteToWideChar(FX_CodePage codepage,
+                           uint32_t dwFlags,
+                           const char* bstr,
+                           int blen,
+                           wchar_t* buf,
+                           int buflen);
 
 #endif  // CORE_FXCRT_FX_CODEPAGE_H_
diff --git a/core/fxcrt/fx_codepage_forward.h b/core/fxcrt/fx_codepage_forward.h
new file mode 100644
index 0000000..e941d0a
--- /dev/null
+++ b/core/fxcrt/fx_codepage_forward.h
@@ -0,0 +1,16 @@
+// Copyright 2021 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
+
+#ifndef CORE_FXCRT_FX_CODEPAGE_FORWARD_H_
+#define CORE_FXCRT_FX_CODEPAGE_FORWARD_H_
+
+#include <stdint.h>
+
+// Incomplete definitions of large enumerated type for headers that don't
+// need the specifics.
+enum class FX_CodePage : uint16_t;
+
+#endif  // CORE_FXCRT_FX_CODEPAGE_FORWARD_H_
diff --git a/core/fxcrt/fx_system.cpp b/core/fxcrt/fx_system.cpp
index 52da8e0..47d2db9 100644
--- a/core/fxcrt/fx_system.cpp
+++ b/core/fxcrt/fx_system.cpp
@@ -146,10 +146,6 @@
 
 #else   // defined(OS_WIN)
 
-int FXSYS_GetACP() {
-  return 0;
-}
-
 char* FXSYS_strlwr(char* str) {
   if (!str) {
     return nullptr;
@@ -223,40 +219,6 @@
   return FXSYS_IntToStr<int32_t, uint32_t, char*>(value, str, radix);
 }
 
-int FXSYS_WideCharToMultiByte(uint32_t codepage,
-                              uint32_t dwFlags,
-                              const wchar_t* wstr,
-                              int wlen,
-                              char* buf,
-                              int buflen,
-                              const char* default_str,
-                              int* pUseDefault) {
-  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;
-}
-
-int FXSYS_MultiByteToWideChar(uint32_t codepage,
-                              uint32_t dwFlags,
-                              const char* bstr,
-                              int blen,
-                              wchar_t* buf,
-                              int buflen) {
-  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;
-}
-
 void FXSYS_SetLastError(uint32_t err) {
   g_last_error = err;
 }
diff --git a/core/fxcrt/fx_system.h b/core/fxcrt/fx_system.h
index 29b3c56..beb1d7e 100644
--- a/core/fxcrt/fx_system.h
+++ b/core/fxcrt/fx_system.h
@@ -83,10 +83,7 @@
 #endif  // __cplusplus
 
 #if defined(OS_WIN)
-#define FXSYS_GetACP GetACP
 #define FXSYS_itoa _itoa
-#define FXSYS_WideCharToMultiByte WideCharToMultiByte
-#define FXSYS_MultiByteToWideChar MultiByteToWideChar
 #define FXSYS_strlwr _strlwr
 #define FXSYS_strupr _strupr
 #define FXSYS_stricmp _stricmp
@@ -100,22 +97,7 @@
 #define FXSYS_SetLastError SetLastError
 #define FXSYS_GetLastError GetLastError
 #else  // defined(OS_WIN)
-int FXSYS_GetACP();
 char* FXSYS_itoa(int value, char* str, int radix);
-int FXSYS_WideCharToMultiByte(uint32_t codepage,
-                              uint32_t dwFlags,
-                              const wchar_t* wstr,
-                              int wlen,
-                              char* buf,
-                              int buflen,
-                              const char* default_str,
-                              int* pUseDefault);
-int FXSYS_MultiByteToWideChar(uint32_t codepage,
-                              uint32_t dwFlags,
-                              const char* bstr,
-                              int blen,
-                              wchar_t* buf,
-                              int buflen);
 char* FXSYS_strlwr(char* str);
 char* FXSYS_strupr(char* str);
 int FXSYS_stricmp(const char* str1, const char* str2);
diff --git a/core/fxcrt/widestring.cpp b/core/fxcrt/widestring.cpp
index 6ae40a9..c3ec07f 100644
--- a/core/fxcrt/widestring.cpp
+++ b/core/fxcrt/widestring.cpp
@@ -658,8 +658,8 @@
 
 ByteString WideString::ToDefANSI() const {
   int src_len = GetLength();
-  int dest_len = FXSYS_WideCharToMultiByte(
-      FX_CODEPAGE_DefANSI, 0, c_str(), src_len, nullptr, 0, nullptr, nullptr);
+  int dest_len = FX_WideCharToMultiByte(FX_CodePage::kDefANSI, 0, c_str(),
+                                        src_len, nullptr, 0, nullptr, nullptr);
   if (!dest_len)
     return ByteString();
 
@@ -667,8 +667,8 @@
   {
     // Span's lifetime must end before ReleaseBuffer() below.
     pdfium::span<char> dest_buf = bstr.GetBuffer(dest_len);
-    FXSYS_WideCharToMultiByte(FX_CODEPAGE_DefANSI, 0, c_str(), src_len,
-                              dest_buf.data(), dest_len, nullptr, nullptr);
+    FX_WideCharToMultiByte(FX_CodePage::kDefANSI, 0, c_str(), src_len,
+                           dest_buf.data(), dest_len, nullptr, nullptr);
   }
   bstr.ReleaseBuffer(dest_len);
   return bstr;
@@ -921,8 +921,8 @@
 // static
 WideString WideString::FromDefANSI(ByteStringView bstr) {
   int src_len = bstr.GetLength();
-  int dest_len = FXSYS_MultiByteToWideChar(
-      FX_CODEPAGE_DefANSI, 0, bstr.unterminated_c_str(), src_len, nullptr, 0);
+  int dest_len = FX_MultiByteToWideChar(
+      FX_CodePage::kDefANSI, 0, bstr.unterminated_c_str(), src_len, nullptr, 0);
   if (!dest_len)
     return WideString();
 
@@ -930,8 +930,8 @@
   {
     // Span's lifetime must end before ReleaseBuffer() below.
     pdfium::span<wchar_t> dest_buf = wstr.GetBuffer(dest_len);
-    FXSYS_MultiByteToWideChar(FX_CODEPAGE_DefANSI, 0, bstr.unterminated_c_str(),
-                              src_len, dest_buf.data(), dest_len);
+    FX_MultiByteToWideChar(FX_CodePage::kDefANSI, 0, bstr.unterminated_c_str(),
+                           src_len, dest_buf.data(), dest_len);
   }
   wstr.ReleaseBuffer(dest_len);
   return wstr;
diff --git a/core/fxcrt/xml/cfx_xmlparser.cpp b/core/fxcrt/xml/cfx_xmlparser.cpp
index 5f28388..9008e12 100644
--- a/core/fxcrt/xml/cfx_xmlparser.cpp
+++ b/core/fxcrt/xml/cfx_xmlparser.cpp
@@ -65,10 +65,10 @@
   DCHECK(pStream);
 
   auto proxy = pdfium::MakeRetain<CFX_SeekableStreamProxy>(pStream);
-  uint16_t wCodePage = proxy->GetCodePage();
-  if (wCodePage != FX_CODEPAGE_UTF16LE && wCodePage != FX_CODEPAGE_UTF16BE &&
-      wCodePage != FX_CODEPAGE_UTF8) {
-    proxy->SetCodePage(FX_CODEPAGE_UTF8);
+  FX_CodePage wCodePage = proxy->GetCodePage();
+  if (wCodePage != FX_CodePage::kUTF16LE &&
+      wCodePage != FX_CodePage::kUTF16BE && wCodePage != FX_CodePage::kUTF8) {
+    proxy->SetCodePage(FX_CodePage::kUTF8);
   }
   stream_ = proxy;
 
diff --git a/core/fxge/cfx_font.cpp b/core/fxge/cfx_font.cpp
index 86b6cbe..df2bab1 100644
--- a/core/fxge/cfx_font.cpp
+++ b/core/fxge/cfx_font.cpp
@@ -347,13 +347,13 @@
                          uint32_t flags,
                          int weight,
                          int italic_angle,
-                         int CharsetCP,
+                         FX_CodePage code_page,
                          bool bVertical) {
   m_bEmbedded = false;
   m_bVertical = bVertical;
   m_pSubstFont = std::make_unique<CFX_SubstFont>();
   m_Face = CFX_GEModule::Get()->GetFontMgr()->FindSubstFont(
-      face_name, bTrueType, flags, weight, italic_angle, CharsetCP,
+      face_name, bTrueType, flags, weight, italic_angle, code_page,
       m_pSubstFont.get());
   if (m_Face) {
     m_FontData = {FXFT_Get_Face_Stream_Base(m_Face->GetRec()),
diff --git a/core/fxge/cfx_font.h b/core/fxge/cfx_font.h
index f86bc73..57177e4 100644
--- a/core/fxge/cfx_font.h
+++ b/core/fxge/cfx_font.h
@@ -12,6 +12,7 @@
 
 #include "build/build_config.h"
 #include "core/fxcrt/bytestring.h"
+#include "core/fxcrt/fx_codepage_forward.h"
 #include "core/fxcrt/fx_coordinates.h"
 #include "core/fxcrt/fx_memory_wrappers.h"
 #include "core/fxcrt/retain_ptr.h"
@@ -67,7 +68,7 @@
                  uint32_t flags,
                  int weight,
                  int italic_angle,
-                 int CharsetCP,
+                 FX_CodePage code_page,
                  bool bVertical);
 
   bool LoadEmbedded(pdfium::span<const uint8_t> src_span,
diff --git a/core/fxge/cfx_fontmapper.cpp b/core/fxge/cfx_fontmapper.cpp
index 0a22470..db28c20 100644
--- a/core/fxge/cfx_fontmapper.cpp
+++ b/core/fxge/cfx_fontmapper.cpp
@@ -408,7 +408,7 @@
                                                   uint32_t flags,
                                                   int weight,
                                                   int italic_angle,
-                                                  int CharsetCP,
+                                                  FX_CodePage code_page,
                                                   CFX_SubstFont* pSubstFont) {
   if (weight == 0)
     weight = FXFONT_FW_NORMAL;
@@ -546,8 +546,8 @@
   }
 
   int Charset = FX_CHARSET_ANSI;
-  if (CharsetCP)
-    Charset = FX_GetCharsetFromCodePage(CharsetCP);
+  if (code_page != FX_CodePage::kDefANSI)
+    Charset = FX_GetCharsetFromCodePage(code_page);
   else if (iBaseFont == kNumStandardFonts && FontStyleIsSymbolic(flags))
     Charset = FX_CHARSET_Symbol;
   const bool bCJK = FX_CharSetIsCJK(Charset);
@@ -625,7 +625,8 @@
         }
 #endif
         return FindSubstFont(family, bTrueType, flags & ~FXFONT_SYMBOLIC,
-                             weight, italic_angle, 0, pSubstFont);
+                             weight, italic_angle, FX_CodePage::kDefANSI,
+                             pSubstFont);
       }
       if (Charset == FX_CHARSET_ANSI) {
         return UseInternalSubst(pSubstFont, iBaseFont, italic_angle, old_weight,
diff --git a/core/fxge/cfx_fontmapper.h b/core/fxge/cfx_fontmapper.h
index e1897d4..cd200c7 100644
--- a/core/fxge/cfx_fontmapper.h
+++ b/core/fxge/cfx_fontmapper.h
@@ -12,6 +12,7 @@
 #include <vector>
 
 #include "build/build_config.h"
+#include "core/fxcrt/fx_codepage_forward.h"
 #include "core/fxcrt/fx_memory_wrappers.h"
 #include "core/fxcrt/fx_string.h"
 #include "core/fxcrt/retain_ptr.h"
@@ -64,7 +65,7 @@
                                     uint32_t flags,
                                     int weight,
                                     int italic_angle,
-                                    int CharsetCP,
+                                    FX_CodePage code_page,
                                     CFX_SubstFont* pSubstFont);
 
   bool IsBuiltinFace(const RetainPtr<CFX_Face>& face) const;
diff --git a/core/fxge/cfx_fontmgr.cpp b/core/fxge/cfx_fontmgr.cpp
index 6cab19f..5e01413 100644
--- a/core/fxge/cfx_fontmgr.cpp
+++ b/core/fxge/cfx_fontmgr.cpp
@@ -103,10 +103,10 @@
                                                uint32_t flags,
                                                int weight,
                                                int italic_angle,
-                                               int CharsetCP,
+                                               FX_CodePage code_page,
                                                CFX_SubstFont* pSubstFont) {
   return m_pBuiltinMapper->FindSubstFont(face_name, bTrueType, flags, weight,
-                                         italic_angle, CharsetCP, pSubstFont);
+                                         italic_angle, code_page, pSubstFont);
 }
 
 RetainPtr<CFX_FontMgr::FontDesc> CFX_FontMgr::GetCachedFontDesc(
diff --git a/core/fxge/cfx_fontmgr.h b/core/fxge/cfx_fontmgr.h
index 1c4f68c..5b99f41 100644
--- a/core/fxge/cfx_fontmgr.h
+++ b/core/fxge/cfx_fontmgr.h
@@ -10,6 +10,7 @@
 #include <map>
 #include <memory>
 
+#include "core/fxcrt/fx_codepage_forward.h"
 #include "core/fxcrt/fx_memory_wrappers.h"
 #include "core/fxcrt/fx_string.h"
 #include "core/fxcrt/observed_ptr.h"
@@ -74,7 +75,7 @@
                                     uint32_t flags,
                                     int weight,
                                     int italic_angle,
-                                    int CharsetCP,
+                                    FX_CodePage code_page,
                                     CFX_SubstFont* pSubstFont);
 
   void SetSystemFontInfo(std::unique_ptr<SystemFontInfoIface> pFontInfo);
diff --git a/fpdfsdk/fpdf_edit_embeddertest.cpp b/fpdfsdk/fpdf_edit_embeddertest.cpp
index 97a52fd..4ea5c14 100644
--- a/fpdfsdk/fpdf_edit_embeddertest.cpp
+++ b/fpdfsdk/fpdf_edit_embeddertest.cpp
@@ -16,6 +16,7 @@
 #include "core/fpdfapi/parser/cpdf_number.h"
 #include "core/fpdfapi/parser/cpdf_stream.h"
 #include "core/fpdfapi/parser/cpdf_stream_acc.h"
+#include "core/fxcrt/fx_codepage.h"
 #include "core/fxcrt/fx_system.h"
 #include "core/fxge/fx_font.h"
 #include "fpdfsdk/cpdfsdk_helpers.h"
@@ -3006,7 +3007,7 @@
   CFX_Font CIDfont;
   {
     // First, get the data from the font
-    CIDfont.LoadSubst("IPAGothic", 1, 0, 400, 0, 932, 0);
+    CIDfont.LoadSubst("IPAGothic", 1, 0, 400, 0, FX_CodePage::kShiftJIS, 0);
     EXPECT_EQ("IPAGothic", CIDfont.GetFaceName());
     pdfium::span<const uint8_t> span = CIDfont.GetFontSpan();
 
diff --git a/testing/fuzzers/pdf_bidi_fuzzer.cc b/testing/fuzzers/pdf_bidi_fuzzer.cc
index 1e4c08d..3c77b76 100644
--- a/testing/fuzzers/pdf_bidi_fuzzer.cc
+++ b/testing/fuzzers/pdf_bidi_fuzzer.cc
@@ -5,6 +5,7 @@
 #include <cstdint>
 #include <memory>
 
+#include "core/fxcrt/fx_codepage.h"
 #include "core/fxcrt/widestring.h"
 #include "core/fxge/cfx_font.h"
 #include "core/fxge/fx_font.h"
@@ -17,7 +18,8 @@
     return 0;
 
   auto font = std::make_unique<CFX_Font>();
-  font->LoadSubst("Arial", true, 0, FXFONT_FW_NORMAL, 0, 0, 0);
+  font->LoadSubst("Arial", true, 0, FXFONT_FW_NORMAL, 0, FX_CodePage::kDefANSI,
+                  0);
   assert(font);
 
   CFGAS_RTFBreak rtf_break(FX_LAYOUTSTYLE_ExpandTab);
diff --git a/xfa/fde/cfde_texteditengine_unittest.cpp b/xfa/fde/cfde_texteditengine_unittest.cpp
index 9dfd221..b532770 100644
--- a/xfa/fde/cfde_texteditengine_unittest.cpp
+++ b/xfa/fde/cfde_texteditengine_unittest.cpp
@@ -4,6 +4,7 @@
 
 #include "xfa/fde/cfde_texteditengine.h"
 
+#include "core/fxcrt/fx_codepage.h"
 #include "core/fxcrt/fx_extension.h"
 #include "core/fxge/text_char_pos.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -38,7 +39,7 @@
   ~CFDE_TextEditEngineTest() override = default;
 
   void SetUp() override {
-    font_ = CFGAS_GEFont::LoadFont(L"Arial Black", 0, 0);
+    font_ = CFGAS_GEFont::LoadFont(L"Arial Black", 0, FX_CodePage::kDefANSI);
     ASSERT_TRUE(font_);
 
     engine_ = std::make_unique<CFDE_TextEditEngine>();
diff --git a/xfa/fgas/font/cfgas_defaultfontmanager.cpp b/xfa/fgas/font/cfgas_defaultfontmanager.cpp
index c28b21b..3f0bb24 100644
--- a/xfa/fgas/font/cfgas_defaultfontmanager.cpp
+++ b/xfa/fgas/font/cfgas_defaultfontmanager.cpp
@@ -6,6 +6,7 @@
 
 #include "xfa/fgas/font/cfgas_defaultfontmanager.h"
 
+#include "core/fxcrt/fx_codepage.h"
 #include "core/fxge/fx_font.h"
 #include "xfa/fgas/font/cfgas_fontmgr.h"
 #include "xfa/fgas/font/cfgas_gefont.h"
@@ -18,8 +19,8 @@
     uint32_t dwFontStyles) {
   WideString wsFontName(wsFontFamily);
   CFGAS_FontMgr* pFontMgr = CFGAS_GEModule::Get()->GetFontMgr();
-  RetainPtr<CFGAS_GEFont> pFont =
-      pFontMgr->LoadFont(wsFontName.c_str(), dwFontStyles, 0xFFFF);
+  RetainPtr<CFGAS_GEFont> pFont = pFontMgr->LoadFont(
+      wsFontName.c_str(), dwFontStyles, FX_CodePage::kFailure);
   if (pFont)
     return pFont;
 
@@ -45,7 +46,8 @@
     }
     WideString wsReplace =
         WideString::FromASCII(ByteStringView(pReplace, pNameText - pReplace));
-    pFont = pFontMgr->LoadFont(wsReplace.c_str(), dwStyle, 0xFFFF);
+    pFont =
+        pFontMgr->LoadFont(wsReplace.c_str(), dwStyle, FX_CodePage::kFailure);
     if (pFont)
       break;
 
@@ -61,9 +63,9 @@
     uint32_t dwFontStyles) {
   CFGAS_FontMgr* pFontMgr = CFGAS_GEModule::Get()->GetFontMgr();
   RetainPtr<CFGAS_GEFont> pFont =
-      pFontMgr->LoadFont(L"Arial Narrow", dwFontStyles, 0xFFFF);
+      pFontMgr->LoadFont(L"Arial Narrow", dwFontStyles, FX_CodePage::kFailure);
   if (pFont)
     return pFont;
 
-  return pFontMgr->LoadFont(nullptr, dwFontStyles, 0xFFFF);
+  return pFontMgr->LoadFont(nullptr, dwFontStyles, FX_CodePage::kFailure);
 }
diff --git a/xfa/fgas/font/cfgas_fontmgr.cpp b/xfa/fgas/font/cfgas_fontmgr.cpp
index 91c2e99..6b2aef9 100644
--- a/xfa/fgas/font/cfgas_fontmgr.cpp
+++ b/xfa/fgas/font/cfgas_fontmgr.cpp
@@ -89,7 +89,7 @@
     }
     if (font.uCharSet == FX_CHARSET_Symbol)
       continue;
-    if (pParams->wCodePage != 0xFFFF) {
+    if (pParams->wCodePage != FX_CodePage::kFailure) {
       if (FX_GetCodePageFromCharset(font.uCharSet) != pParams->wCodePage)
         continue;
     } else {
@@ -184,7 +184,7 @@
     uint32_t dwFontStyles,
     const wchar_t* pszFontFamily,
     uint32_t dwHash,
-    uint16_t wCodePage,
+    FX_CodePage wCodePage,
     uint16_t wBitField) {
   const FX_FONTDESCRIPTOR* pFD = FindFont(pszFontFamily, dwFontStyles, false,
                                           wCodePage, wBitField, wUnicode);
@@ -195,7 +195,7 @@
   if (!pFD)
     return nullptr;
 
-  uint16_t newCodePage = FX_GetCodePageFromCharset(pFD->uCharSet);
+  FX_CodePage newCodePage = FX_GetCodePageFromCharset(pFD->uCharSet);
   RetainPtr<CFGAS_GEFont> pFont =
       CFGAS_GEFont::LoadFont(pFD->wsFontFace, dwFontStyles, newCodePage);
   if (!pFont)
@@ -214,7 +214,7 @@
 const FX_FONTDESCRIPTOR* CFGAS_FontMgr::FindFont(const wchar_t* pszFontFamily,
                                                  uint32_t dwFontStyles,
                                                  bool matchParagraphStyle,
-                                                 uint16_t wCodePage,
+                                                 FX_CodePage wCodePage,
                                                  uint32_t dwUSB,
                                                  wchar_t wUnicode) {
   FX_FONTMATCHPARAMS params;
@@ -255,74 +255,74 @@
 
 namespace {
 
-const uint16_t g_CodePages[] = {FX_CODEPAGE_MSWin_WesternEuropean,
-                                FX_CODEPAGE_MSWin_EasternEuropean,
-                                FX_CODEPAGE_MSWin_Cyrillic,
-                                FX_CODEPAGE_MSWin_Greek,
-                                FX_CODEPAGE_MSWin_Turkish,
-                                FX_CODEPAGE_MSWin_Hebrew,
-                                FX_CODEPAGE_MSWin_Arabic,
-                                FX_CODEPAGE_MSWin_Baltic,
-                                FX_CODEPAGE_MSWin_Vietnamese,
-                                FX_CODEPAGE_DefANSI,
-                                FX_CODEPAGE_DefANSI,
-                                FX_CODEPAGE_DefANSI,
-                                FX_CODEPAGE_DefANSI,
-                                FX_CODEPAGE_DefANSI,
-                                FX_CODEPAGE_DefANSI,
-                                FX_CODEPAGE_DefANSI,
-                                FX_CODEPAGE_MSDOS_Thai,
-                                FX_CODEPAGE_ShiftJIS,
-                                FX_CODEPAGE_ChineseSimplified,
-                                FX_CODEPAGE_Hangul,
-                                FX_CODEPAGE_ChineseTraditional,
-                                FX_CODEPAGE_Johab,
-                                FX_CODEPAGE_DefANSI,
-                                FX_CODEPAGE_DefANSI,
-                                FX_CODEPAGE_DefANSI,
-                                FX_CODEPAGE_DefANSI,
-                                FX_CODEPAGE_DefANSI,
-                                FX_CODEPAGE_DefANSI,
-                                FX_CODEPAGE_DefANSI,
-                                FX_CODEPAGE_DefANSI,
-                                FX_CODEPAGE_DefANSI,
-                                FX_CODEPAGE_DefANSI,
-                                FX_CODEPAGE_DefANSI,
-                                FX_CODEPAGE_DefANSI,
-                                FX_CODEPAGE_DefANSI,
-                                FX_CODEPAGE_DefANSI,
-                                FX_CODEPAGE_DefANSI,
-                                FX_CODEPAGE_DefANSI,
-                                FX_CODEPAGE_DefANSI,
-                                FX_CODEPAGE_DefANSI,
-                                FX_CODEPAGE_DefANSI,
-                                FX_CODEPAGE_DefANSI,
-                                FX_CODEPAGE_DefANSI,
-                                FX_CODEPAGE_DefANSI,
-                                FX_CODEPAGE_DefANSI,
-                                FX_CODEPAGE_DefANSI,
-                                FX_CODEPAGE_DefANSI,
-                                FX_CODEPAGE_DefANSI,
-                                FX_CODEPAGE_MSDOS_Greek2,
-                                FX_CODEPAGE_MSDOS_Russian,
-                                FX_CODEPAGE_MSDOS_Norwegian,
-                                FX_CODEPAGE_MSDOS_Arabic,
-                                FX_CODEPAGE_MSDOS_FrenchCanadian,
-                                FX_CODEPAGE_MSDOS_Hebrew,
-                                FX_CODEPAGE_MSDOS_Icelandic,
-                                FX_CODEPAGE_MSDOS_Portuguese,
-                                FX_CODEPAGE_MSDOS_Turkish,
-                                FX_CODEPAGE_MSDOS_Cyrillic,
-                                FX_CODEPAGE_MSDOS_EasternEuropean,
-                                FX_CODEPAGE_MSDOS_Baltic,
-                                FX_CODEPAGE_MSDOS_Greek1,
-                                FX_CODEPAGE_Arabic_ASMO708,
-                                FX_CODEPAGE_MSDOS_WesternEuropean,
-                                FX_CODEPAGE_MSDOS_US};
+const FX_CodePage kCodePages[] = {FX_CodePage::kMSWin_WesternEuropean,
+                                  FX_CodePage::kMSWin_EasternEuropean,
+                                  FX_CodePage::kMSWin_Cyrillic,
+                                  FX_CodePage::kMSWin_Greek,
+                                  FX_CodePage::kMSWin_Turkish,
+                                  FX_CodePage::kMSWin_Hebrew,
+                                  FX_CodePage::kMSWin_Arabic,
+                                  FX_CodePage::kMSWin_Baltic,
+                                  FX_CodePage::kMSWin_Vietnamese,
+                                  FX_CodePage::kDefANSI,
+                                  FX_CodePage::kDefANSI,
+                                  FX_CodePage::kDefANSI,
+                                  FX_CodePage::kDefANSI,
+                                  FX_CodePage::kDefANSI,
+                                  FX_CodePage::kDefANSI,
+                                  FX_CodePage::kDefANSI,
+                                  FX_CodePage::kMSDOS_Thai,
+                                  FX_CodePage::kShiftJIS,
+                                  FX_CodePage::kChineseSimplified,
+                                  FX_CodePage::kHangul,
+                                  FX_CodePage::kChineseTraditional,
+                                  FX_CodePage::kJohab,
+                                  FX_CodePage::kDefANSI,
+                                  FX_CodePage::kDefANSI,
+                                  FX_CodePage::kDefANSI,
+                                  FX_CodePage::kDefANSI,
+                                  FX_CodePage::kDefANSI,
+                                  FX_CodePage::kDefANSI,
+                                  FX_CodePage::kDefANSI,
+                                  FX_CodePage::kDefANSI,
+                                  FX_CodePage::kDefANSI,
+                                  FX_CodePage::kDefANSI,
+                                  FX_CodePage::kDefANSI,
+                                  FX_CodePage::kDefANSI,
+                                  FX_CodePage::kDefANSI,
+                                  FX_CodePage::kDefANSI,
+                                  FX_CodePage::kDefANSI,
+                                  FX_CodePage::kDefANSI,
+                                  FX_CodePage::kDefANSI,
+                                  FX_CodePage::kDefANSI,
+                                  FX_CodePage::kDefANSI,
+                                  FX_CodePage::kDefANSI,
+                                  FX_CodePage::kDefANSI,
+                                  FX_CodePage::kDefANSI,
+                                  FX_CodePage::kDefANSI,
+                                  FX_CodePage::kDefANSI,
+                                  FX_CodePage::kDefANSI,
+                                  FX_CodePage::kDefANSI,
+                                  FX_CodePage::kMSDOS_Greek2,
+                                  FX_CodePage::kMSDOS_Russian,
+                                  FX_CodePage::kMSDOS_Norwegian,
+                                  FX_CodePage::kMSDOS_Arabic,
+                                  FX_CodePage::kMSDOS_FrenchCanadian,
+                                  FX_CodePage::kMSDOS_Hebrew,
+                                  FX_CodePage::kMSDOS_Icelandic,
+                                  FX_CodePage::kMSDOS_Portuguese,
+                                  FX_CodePage::kMSDOS_Turkish,
+                                  FX_CodePage::kMSDOS_Cyrillic,
+                                  FX_CodePage::kMSDOS_EasternEuropean,
+                                  FX_CodePage::kMSDOS_Baltic,
+                                  FX_CodePage::kMSDOS_Greek1,
+                                  FX_CodePage::kArabic_ASMO708,
+                                  FX_CodePage::kMSDOS_WesternEuropean,
+                                  FX_CodePage::kMSDOS_US};
 
-uint16_t FX_GetCodePageBit(uint16_t wCodePage) {
-  for (size_t i = 0; i < pdfium::size(g_CodePages); ++i) {
-    if (g_CodePages[i] == wCodePage)
+uint16_t FX_GetCodePageBit(FX_CodePage wCodePage) {
+  for (size_t i = 0; i < pdfium::size(kCodePages); ++i) {
+    if (kCodePages[i] == wCodePage)
       return static_cast<uint16_t>(i);
   }
   return static_cast<uint16_t>(-1);
@@ -531,7 +531,7 @@
 }
 
 int32_t CalcPenalty(CFGAS_FontDescriptor* pInstalled,
-                    uint16_t wCodePage,
+                    FX_CodePage wCodePage,
                     uint32_t dwFontStyles,
                     const WideString& FontName,
                     wchar_t wcUnicode) {
@@ -578,9 +578,10 @@
   if (nPenalty >= 0xFFFF)
     return 0xFFFF;
 
-  uint16_t wBit = (wCodePage == FX_CODEPAGE_DefANSI || wCodePage == 0xFFFF)
-                      ? static_cast<uint16_t>(-1)
-                      : FX_GetCodePageBit(wCodePage);
+  uint16_t wBit =
+      (wCodePage == FX_CodePage::kDefANSI || wCodePage == FX_CodePage::kFailure)
+          ? static_cast<uint16_t>(-1)
+          : FX_GetCodePageBit(wCodePage);
   if (wBit != static_cast<uint16_t>(-1)) {
     DCHECK(wBit < 64);
     if ((pInstalled->m_dwCsb[wBit / 32] & (1 << (wBit % 32))) == 0)
@@ -638,7 +639,7 @@
     uint32_t dwFontStyles,
     const wchar_t* pszFontFamily,
     uint32_t dwHash,
-    uint16_t wCodePage,
+    FX_CodePage wCodePage,
     uint16_t /* wBitField*/) {
   if (!m_Hash2CandidateList[dwHash].has_value()) {
     m_Hash2CandidateList[dwHash] =
@@ -677,7 +678,7 @@
 }
 
 std::vector<CFGAS_FontDescriptorInfo> CFGAS_FontMgr::MatchFonts(
-    uint16_t wCodePage,
+    FX_CodePage wCodePage,
     uint32_t dwFontStyles,
     const WideString& FontName,
     wchar_t wcUnicode) {
@@ -749,7 +750,7 @@
 #endif  // defined(OS_WIN)
 
 RetainPtr<CFGAS_GEFont> CFGAS_FontMgr::GetFontByCodePage(
-    uint16_t wCodePage,
+    FX_CodePage wCodePage,
     uint32_t dwFontStyles,
     const wchar_t* pszFontFamily) {
   ByteString bsHash = ByteString::Format("%d, %d", wCodePage, dwFontStyles);
@@ -807,10 +808,10 @@
     return nullptr;
 
   const FGAS_FONTUSB* x = FGAS_GetUnicodeBitField(wUnicode);
-  uint16_t wCodePage = x ? x->wCodePage : 0xFFFF;
+  FX_CodePage wCodePage = x ? x->wCodePage : FX_CodePage::kFailure;
   uint16_t wBitField = x ? x->wBitField : 0x03E7;
   ByteString bsHash;
-  if (wCodePage == 0xFFFF) {
+  if (wCodePage == FX_CodePage::kFailure) {
     bsHash =
         ByteString::Format("%d, %d, %d", wCodePage, wBitField, dwFontStyles);
   } else {
@@ -830,7 +831,7 @@
 
 RetainPtr<CFGAS_GEFont> CFGAS_FontMgr::LoadFont(const wchar_t* pszFontFamily,
                                                 uint32_t dwFontStyles,
-                                                uint16_t wCodePage) {
+                                                FX_CodePage wCodePage) {
 #if defined(OS_WIN)
   ByteString bsHash = ByteString::Format("%d, %d", wCodePage, dwFontStyles);
   bsHash += FX_UTF8Encode(WideStringView(pszFontFamily));
diff --git a/xfa/fgas/font/cfgas_fontmgr.h b/xfa/fgas/font/cfgas_fontmgr.h
index 6f4828b..6e17c15 100644
--- a/xfa/fgas/font/cfgas_fontmgr.h
+++ b/xfa/fgas/font/cfgas_fontmgr.h
@@ -14,6 +14,7 @@
 #include <vector>
 
 #include "build/build_config.h"
+#include "core/fxcrt/fx_codepage_forward.h"
 #include "core/fxcrt/fx_string.h"
 #include "core/fxcrt/retain_ptr.h"
 #include "core/fxge/cfx_face.h"
@@ -30,7 +31,7 @@
   uint32_t dwUSB;
   bool matchParagraphStyle;
   wchar_t wUnicode;
-  uint16_t wCodePage;
+  FX_CodePage wCodePage;
 };
 
 struct FX_FONTSIGNATURE {
@@ -99,7 +100,7 @@
   ~CFGAS_FontMgr();
 
   bool EnumFonts();
-  RetainPtr<CFGAS_GEFont> GetFontByCodePage(uint16_t wCodePage,
+  RetainPtr<CFGAS_GEFont> GetFontByCodePage(FX_CodePage wCodePage,
                                             uint32_t dwFontStyles,
                                             const wchar_t* pszFontFamily);
   RetainPtr<CFGAS_GEFont> GetFontByUnicode(wchar_t wUnicode,
@@ -107,21 +108,21 @@
                                            const wchar_t* pszFontFamily);
   RetainPtr<CFGAS_GEFont> LoadFont(const wchar_t* pszFontFamily,
                                    uint32_t dwFontStyles,
-                                   uint16_t wCodePage);
+                                   FX_CodePage wCodePage);
 
  private:
   RetainPtr<CFGAS_GEFont> GetFontByUnicodeImpl(wchar_t wUnicode,
                                                uint32_t dwFontStyles,
                                                const wchar_t* pszFontFamily,
                                                uint32_t dwHash,
-                                               uint16_t wCodePage,
+                                               FX_CodePage wCodePage,
                                                uint16_t wBitField);
 
 #if defined(OS_WIN)
   const FX_FONTDESCRIPTOR* FindFont(const wchar_t* pszFontFamily,
                                     uint32_t dwFontStyles,
                                     bool matchParagraphStyle,
-                                    uint16_t wCodePage,
+                                    FX_CodePage wCodePage,
                                     uint32_t dwUSB,
                                     wchar_t wUnicode);
 
@@ -131,7 +132,7 @@
   void RegisterFace(RetainPtr<CFX_Face> pFace, const WideString* pFaceName);
   void RegisterFaces(const RetainPtr<IFX_SeekableReadStream>& pFontStream,
                      const WideString* pFaceName);
-  std::vector<CFGAS_FontDescriptorInfo> MatchFonts(uint16_t wCodePage,
+  std::vector<CFGAS_FontDescriptorInfo> MatchFonts(FX_CodePage wCodePage,
                                                    uint32_t dwFontStyles,
                                                    const WideString& FontName,
                                                    wchar_t wcUnicode);
diff --git a/xfa/fgas/font/cfgas_gefont.cpp b/xfa/fgas/font/cfgas_gefont.cpp
index 43f1fde..fcb304d 100644
--- a/xfa/fgas/font/cfgas_gefont.cpp
+++ b/xfa/fgas/font/cfgas_gefont.cpp
@@ -11,7 +11,6 @@
 
 #include "build/build_config.h"
 #include "core/fpdfapi/font/cpdf_font.h"
-#include "core/fxcrt/fx_codepage.h"
 #include "core/fxge/cfx_font.h"
 #include "core/fxge/cfx_substfont.h"
 #include "core/fxge/cfx_unicodeencodingex.h"
@@ -24,7 +23,7 @@
 // static
 RetainPtr<CFGAS_GEFont> CFGAS_GEFont::LoadFont(const wchar_t* pszFontFamily,
                                                uint32_t dwFontStyles,
-                                               uint16_t wCodePage) {
+                                               FX_CodePage wCodePage) {
 #if defined(OS_WIN)
   auto pFont = pdfium::MakeRetain<CFGAS_GEFont>();
   if (!pFont->LoadFontInternal(pszFontFamily, dwFontStyles, wCodePage))
@@ -72,7 +71,7 @@
 #if defined(OS_WIN)
 bool CFGAS_GEFont::LoadFontInternal(const wchar_t* pszFontFamily,
                                     uint32_t dwFontStyles,
-                                    uint16_t wCodePage) {
+                                    FX_CodePage wCodePage) {
   if (m_pFont)
     return false;
   ByteString csFontFamily;
diff --git a/xfa/fgas/font/cfgas_gefont.h b/xfa/fgas/font/cfgas_gefont.h
index 9716bf5..c29da21 100644
--- a/xfa/fgas/font/cfgas_gefont.h
+++ b/xfa/fgas/font/cfgas_gefont.h
@@ -13,6 +13,7 @@
 #include <vector>
 
 #include "build/build_config.h"
+#include "core/fxcrt/fx_codepage_forward.h"
 #include "core/fxcrt/fx_coordinates.h"
 #include "core/fxcrt/fx_string.h"
 #include "core/fxcrt/fx_system.h"
@@ -31,7 +32,7 @@
 
   static RetainPtr<CFGAS_GEFont> LoadFont(const wchar_t* pszFontFamily,
                                           uint32_t dwFontStyles,
-                                          uint16_t wCodePage);
+                                          FX_CodePage wCodePage);
   static RetainPtr<CFGAS_GEFont> LoadFont(const RetainPtr<CPDF_Font>& pFont);
   static RetainPtr<CFGAS_GEFont> LoadFont(std::unique_ptr<CFX_Font> pFont);
   static RetainPtr<CFGAS_GEFont> LoadStockFont(CPDF_Document* pDoc,
@@ -59,7 +60,7 @@
 #if defined(OS_WIN)
   bool LoadFontInternal(const wchar_t* pszFontFamily,
                         uint32_t dwFontStyles,
-                        uint16_t wCodePage);
+                        FX_CodePage wCodePage);
   bool LoadFontInternal(const uint8_t* pBuffer, int32_t length);
 #endif
   bool LoadFontInternal(std::unique_ptr<CFX_Font> pInternalFont);
diff --git a/xfa/fgas/font/fgas_fontutils.cpp b/xfa/fgas/font/fgas_fontutils.cpp
index 191aeb8..3bbe383 100644
--- a/xfa/fgas/font/fgas_fontutils.cpp
+++ b/xfa/fgas/font/fgas_fontutils.cpp
@@ -15,1836 +15,2410 @@
 namespace {
 
 const FGAS_FONTUSB g_FXGdiFontUSBTable[] = {
-    {0x0000, 0x007F, 0, FX_CODEPAGE_MSWin_WesternEuropean},
-    {0x0080, 0x00FF, 1, FX_CODEPAGE_MSWin_WesternEuropean},
-    {0x0100, 0x017F, 2, FX_CODEPAGE_MSWin_EasternEuropean},
-    {0x0180, 0x024F, 3, FX_CODEPAGE_MSWin_EasternEuropean},
-    {0x0250, 0x02AF, 4, 0xFFFF},
-    {0x02B0, 0x02FF, 5, 0xFFFF},
-    {0x0300, 0x036F, 6, 0xFFFF},
-    {0x0370, 0x03FF, 7, FX_CODEPAGE_MSWin_Greek},
-    {0x0400, 0x04FF, 9, FX_CODEPAGE_MSWin_Cyrillic},
-    {0x0500, 0x052F, 9, 0xFFFF},
-    {0x0530, 0x058F, 10, 0xFFFF},
-    {0x0590, 0x05FF, 11, FX_CODEPAGE_MSWin_Hebrew},
-    {0x0600, 0x06FF, 13, FX_CODEPAGE_MSWin_Arabic},
-    {0x0700, 0x074F, 71, 0xFFFF},
-    {0x0750, 0x077F, 13, 0xFFFF},
-    {0x0780, 0x07BF, 72, 0xFFFF},
-    {0x07C0, 0x07FF, 14, 0xFFFF},
-    {0x0800, 0x08FF, 999, 0xFFFF},
-    {0x0900, 0x097F, 15, 0xFFFF},
-    {0x0980, 0x09FF, 16, 0xFFFF},
-    {0x0A00, 0x0A7F, 17, 0xFFFF},
-    {0x0A80, 0x0AFF, 18, 0xFFFF},
-    {0x0B00, 0x0B7F, 19, 0xFFFF},
-    {0x0B80, 0x0BFF, 20, 0xFFFF},
-    {0x0C00, 0x0C7F, 21, 0xFFFF},
-    {0x0C80, 0x0CFF, 22, 0xFFFF},
-    {0x0D00, 0x0D7F, 23, 0xFFFF},
-    {0x0D80, 0x0DFF, 73, 0xFFFF},
-    {0x0E00, 0x0E7F, 24, FX_CODEPAGE_MSDOS_Thai},
-    {0x0E80, 0x0EFF, 25, 0xFFFF},
-    {0x0F00, 0x0FFF, 70, 0xFFFF},
-    {0x1000, 0x109F, 74, 0xFFFF},
-    {0x10A0, 0x10FF, 26, 0xFFFF},
-    {0x1100, 0x11FF, 28, 0xFFFF},
-    {0x1200, 0x137F, 75, 0xFFFF},
-    {0x1380, 0x139F, 75, 0xFFFF},
-    {0x13A0, 0x13FF, 76, 0xFFFF},
-    {0x1400, 0x167F, 77, 0xFFFF},
-    {0x1680, 0x169F, 78, 0xFFFF},
-    {0x16A0, 0x16FF, 79, 0xFFFF},
-    {0x1700, 0x171F, 84, 0xFFFF},
-    {0x1720, 0x173F, 84, 0xFFFF},
-    {0x1740, 0x175F, 84, 0xFFFF},
-    {0x1760, 0x177F, 84, 0xFFFF},
-    {0x1780, 0x17FF, 80, 0xFFFF},
-    {0x1800, 0x18AF, 81, 0xFFFF},
-    {0x18B0, 0x18FF, 999, 0xFFFF},
-    {0x1900, 0x194F, 93, 0xFFFF},
-    {0x1950, 0x197F, 94, 0xFFFF},
-    {0x1980, 0x19DF, 95, 0xFFFF},
-    {0x19E0, 0x19FF, 80, 0xFFFF},
-    {0x1A00, 0x1A1F, 96, 0xFFFF},
-    {0x1A20, 0x1AFF, 999, 0xFFFF},
-    {0x1B00, 0x1B7F, 27, 0xFFFF},
-    {0x1B80, 0x1BBF, 112, 0xFFFF},
-    {0x1BC0, 0x1BFF, 999, 0xFFFF},
-    {0x1C00, 0x1C4F, 113, 0xFFFF},
-    {0x1C50, 0x1C7F, 114, 0xFFFF},
-    {0x1C80, 0x1CFF, 999, 0xFFFF},
-    {0x1D00, 0x1D7F, 4, 0xFFFF},
-    {0x1D80, 0x1DBF, 4, 0xFFFF},
-    {0x1DC0, 0x1DFF, 6, 0xFFFF},
-    {0x1E00, 0x1EFF, 29, 0xFFFF},
-    {0x1F00, 0x1FFF, 30, 0xFFFF},
-    {0x2000, 0x206F, 31, 0xFFFF},
-    {0x2070, 0x209F, 32, 0xFFFF},
-    {0x20A0, 0x20CF, 33, 0xFFFF},
-    {0x20D0, 0x20FF, 34, 0xFFFF},
-    {0x2100, 0x214F, 35, 0xFFFF},
-    {0x2150, 0x215F, 36, 0xFFFF},
-    {0x2160, 0x216B, 36, FX_CODEPAGE_ChineseSimplified},
-    {0x216C, 0x216F, 36, 0xFFFF},
-    {0x2170, 0x2179, 36, FX_CODEPAGE_ChineseSimplified},
-    {0x217A, 0x218F, 36, 0xFFFF},
-    {0x2190, 0x2199, 37, FX_CODEPAGE_Hangul},
-    {0x219A, 0x21FF, 37, 0xFFFF},
-    {0x2200, 0x22FF, 38, 0xFFFF},
-    {0x2300, 0x23FF, 39, 0xFFFF},
-    {0x2400, 0x243F, 40, 0xFFFF},
-    {0x2440, 0x245F, 41, 0xFFFF},
-    {0x2460, 0x2473, 42, FX_CODEPAGE_ShiftJIS},
-    {0x2474, 0x249B, 42, FX_CODEPAGE_ChineseSimplified},
-    {0x249C, 0x24E9, 42, FX_CODEPAGE_Hangul},
-    {0x24EA, 0x24FF, 42, 0xFFFF},
-    {0x2500, 0x2573, 43, FX_CODEPAGE_ChineseSimplified},
-    {0x2574, 0x257F, 43, 0xFFFF},
-    {0x2580, 0x2580, 44, 0xFFFF},
-    {0x2581, 0x258F, 44, FX_CODEPAGE_ChineseSimplified},
-    {0x2590, 0x259F, 44, 0xFFFF},
-    {0x25A0, 0x25FF, 45, 0xFFFF},
-    {0x2600, 0x26FF, 46, 0xFFFF},
-    {0x2700, 0x27BF, 47, 0xFFFF},
-    {0x27C0, 0x27EF, 38, 0xFFFF},
-    {0x27F0, 0x27FF, 37, 0xFFFF},
-    {0x2800, 0x28FF, 82, 0xFFFF},
-    {0x2900, 0x297F, 37, 0xFFFF},
-    {0x2980, 0x29FF, 38, 0xFFFF},
-    {0x2A00, 0x2AFF, 38, 0xFFFF},
-    {0x2B00, 0x2BFF, 37, 0xFFFF},
-    {0x2C00, 0x2C5F, 97, 0xFFFF},
-    {0x2C60, 0x2C7F, 29, 0xFFFF},
-    {0x2C80, 0x2CFF, 8, 0xFFFF},
-    {0x2D00, 0x2D2F, 26, 0xFFFF},
-    {0x2D30, 0x2D7F, 98, 0xFFFF},
-    {0x2D80, 0x2DDF, 75, 0xFFFF},
-    {0x2DE0, 0x2DFF, 9, 0xFFFF},
-    {0x2E00, 0x2E7F, 31, 0xFFFF},
-    {0x2E80, 0x2EFF, 59, 0xFFFF},
-    {0x2F00, 0x2FDF, 59, 0xFFFF},
-    {0x2FE0, 0x2FEF, 999, 0xFFFF},
-    {0x2FF0, 0x2FFF, 59, 0xFFFF},
-    {0x3000, 0x303F, 48, 0xFFFF},
-    {0x3040, 0x309F, 49, FX_CODEPAGE_ShiftJIS},
-    {0x30A0, 0x30FF, 50, FX_CODEPAGE_ShiftJIS},
-    {0x3100, 0x3129, 51, FX_CODEPAGE_ChineseSimplified},
-    {0x312A, 0x312F, 51, 0xFFFF},
-    {0x3130, 0x318F, 52, FX_CODEPAGE_Hangul},
-    {0x3190, 0x319F, 59, 0xFFFF},
-    {0x31A0, 0x31BF, 51, 0xFFFF},
-    {0x31C0, 0x31EF, 61, 0xFFFF},
-    {0x31F0, 0x31FF, 50, 0xFFFF},
-    {0x3200, 0x321C, 54, FX_CODEPAGE_Hangul},
-    {0x321D, 0x325F, 54, 0xFFFF},
-    {0x3260, 0x327F, 54, FX_CODEPAGE_Hangul},
-    {0x3280, 0x32FF, 54, 0xFFFF},
-    {0x3300, 0x3387, 55, 0xFFFF},
-    {0x3388, 0x33D0, 55, FX_CODEPAGE_Hangul},
-    {0x33D1, 0x33FF, 55, 0xFFFF},
-    {0x3400, 0x4DBF, 59, 0xFFFF},
-    {0x4DC0, 0x4DFF, 99, 0xFFFF},
-    {0x4E00, 0x9FA5, 59, FX_CODEPAGE_ChineseSimplified},
-    {0x9FA6, 0x9FFF, 59, 0xFFFF},
-    {0xA000, 0xA48F, 83, 0xFFFF},
-    {0xA490, 0xA4CF, 83, 0xFFFF},
-    {0xA4D0, 0xA4FF, 999, 0xFFFF},
-    {0xA500, 0xA63F, 12, 0xFFFF},
-    {0xA640, 0xA69F, 9, 0xFFFF},
-    {0xA6A0, 0xA6FF, 999, 0xFFFF},
-    {0xA700, 0xA71F, 5, 0xFFFF},
-    {0xA720, 0xA7FF, 29, 0xFFFF},
-    {0xA800, 0xA82F, 100, 0xFFFF},
-    {0xA830, 0xA8FF, 999, 0xFFFF},
-    {0xA840, 0xA87F, 53, 0xFFFF},
-    {0xA880, 0xA8DF, 115, 0xFFFF},
-    {0xA8E0, 0xA8FF, 999, 0xFFFF},
-    {0xA900, 0xA92F, 116, 0xFFFF},
-    {0xA930, 0xA95F, 117, 0xFFFF},
-    {0xA960, 0xA9FF, 999, 0xFFFF},
-    {0xAA00, 0xAA5F, 118, 0xFFFF},
-    {0xAA60, 0xABFF, 999, 0xFFFF},
-    {0xAC00, 0xD7AF, 56, FX_CODEPAGE_Hangul},
-    {0xD7B0, 0xD7FF, 999, 0xFFFF},
-    {0xD800, 0xDB7F, 57, 0xFFFF},
-    {0xDB80, 0xDBFF, 57, 0xFFFF},
-    {0xDC00, 0xDFFF, 57, 0xFFFF},
-    {0xE000, 0xE814, 60, 0xFFFF},
-    {0xE815, 0xE864, 60, FX_CODEPAGE_ChineseSimplified},
-    {0xE865, 0xF8FF, 60, 0xFFFF},
-    {0xF900, 0xFA0B, 61, FX_CODEPAGE_Hangul},
-    {0xFA0C, 0xFA0D, 61, FX_CODEPAGE_ChineseSimplified},
-    {0xFA0E, 0xFA2D, 61, FX_CODEPAGE_ShiftJIS},
-    {0xFA2E, 0xFAFF, 61, 0xFFFF},
-    {0xFB00, 0xFB4F, 62, 0xFFFF},
-    {0xFB50, 0xFDFF, 63, FX_CODEPAGE_MSWin_Arabic},
-    {0xFE00, 0xFE0F, 91, 0xFFFF},
-    {0xFE10, 0xFE1F, 65, 0xFFFF},
-    {0xFE20, 0xFE2F, 64, 0xFFFF},
-    {0xFE30, 0xFE4F, 65, 0xFFFF},
-    {0xFE50, 0xFE6F, 66, 0xFFFF},
-    {0xFE70, 0xFEFF, 67, FX_CODEPAGE_MSWin_Arabic},
-    {0xFF00, 0xFF5F, 68, FX_CODEPAGE_ChineseSimplified},
-    {0xFF60, 0xFF9F, 68, FX_CODEPAGE_ShiftJIS},
-    {0xFFA0, 0xFFEF, 68, 0xFFFF},
+    {0x0000, 0x007F, 0, FX_CodePage::kMSWin_WesternEuropean},
+    {0x0080, 0x00FF, 1, FX_CodePage::kMSWin_WesternEuropean},
+    {0x0100, 0x017F, 2, FX_CodePage::kMSWin_EasternEuropean},
+    {0x0180, 0x024F, 3, FX_CodePage::kMSWin_EasternEuropean},
+    {0x0250, 0x02AF, 4, FX_CodePage::kFailure},
+    {0x02B0, 0x02FF, 5, FX_CodePage::kFailure},
+    {0x0300, 0x036F, 6, FX_CodePage::kFailure},
+    {0x0370, 0x03FF, 7, FX_CodePage::kMSWin_Greek},
+    {0x0400, 0x04FF, 9, FX_CodePage::kMSWin_Cyrillic},
+    {0x0500, 0x052F, 9, FX_CodePage::kFailure},
+    {0x0530, 0x058F, 10, FX_CodePage::kFailure},
+    {0x0590, 0x05FF, 11, FX_CodePage::kMSWin_Hebrew},
+    {0x0600, 0x06FF, 13, FX_CodePage::kMSWin_Arabic},
+    {0x0700, 0x074F, 71, FX_CodePage::kFailure},
+    {0x0750, 0x077F, 13, FX_CodePage::kFailure},
+    {0x0780, 0x07BF, 72, FX_CodePage::kFailure},
+    {0x07C0, 0x07FF, 14, FX_CodePage::kFailure},
+    {0x0800, 0x08FF, 999, FX_CodePage::kFailure},
+    {0x0900, 0x097F, 15, FX_CodePage::kFailure},
+    {0x0980, 0x09FF, 16, FX_CodePage::kFailure},
+    {0x0A00, 0x0A7F, 17, FX_CodePage::kFailure},
+    {0x0A80, 0x0AFF, 18, FX_CodePage::kFailure},
+    {0x0B00, 0x0B7F, 19, FX_CodePage::kFailure},
+    {0x0B80, 0x0BFF, 20, FX_CodePage::kFailure},
+    {0x0C00, 0x0C7F, 21, FX_CodePage::kFailure},
+    {0x0C80, 0x0CFF, 22, FX_CodePage::kFailure},
+    {0x0D00, 0x0D7F, 23, FX_CodePage::kFailure},
+    {0x0D80, 0x0DFF, 73, FX_CodePage::kFailure},
+    {0x0E00, 0x0E7F, 24, FX_CodePage::kMSDOS_Thai},
+    {0x0E80, 0x0EFF, 25, FX_CodePage::kFailure},
+    {0x0F00, 0x0FFF, 70, FX_CodePage::kFailure},
+    {0x1000, 0x109F, 74, FX_CodePage::kFailure},
+    {0x10A0, 0x10FF, 26, FX_CodePage::kFailure},
+    {0x1100, 0x11FF, 28, FX_CodePage::kFailure},
+    {0x1200, 0x137F, 75, FX_CodePage::kFailure},
+    {0x1380, 0x139F, 75, FX_CodePage::kFailure},
+    {0x13A0, 0x13FF, 76, FX_CodePage::kFailure},
+    {0x1400, 0x167F, 77, FX_CodePage::kFailure},
+    {0x1680, 0x169F, 78, FX_CodePage::kFailure},
+    {0x16A0, 0x16FF, 79, FX_CodePage::kFailure},
+    {0x1700, 0x171F, 84, FX_CodePage::kFailure},
+    {0x1720, 0x173F, 84, FX_CodePage::kFailure},
+    {0x1740, 0x175F, 84, FX_CodePage::kFailure},
+    {0x1760, 0x177F, 84, FX_CodePage::kFailure},
+    {0x1780, 0x17FF, 80, FX_CodePage::kFailure},
+    {0x1800, 0x18AF, 81, FX_CodePage::kFailure},
+    {0x18B0, 0x18FF, 999, FX_CodePage::kFailure},
+    {0x1900, 0x194F, 93, FX_CodePage::kFailure},
+    {0x1950, 0x197F, 94, FX_CodePage::kFailure},
+    {0x1980, 0x19DF, 95, FX_CodePage::kFailure},
+    {0x19E0, 0x19FF, 80, FX_CodePage::kFailure},
+    {0x1A00, 0x1A1F, 96, FX_CodePage::kFailure},
+    {0x1A20, 0x1AFF, 999, FX_CodePage::kFailure},
+    {0x1B00, 0x1B7F, 27, FX_CodePage::kFailure},
+    {0x1B80, 0x1BBF, 112, FX_CodePage::kFailure},
+    {0x1BC0, 0x1BFF, 999, FX_CodePage::kFailure},
+    {0x1C00, 0x1C4F, 113, FX_CodePage::kFailure},
+    {0x1C50, 0x1C7F, 114, FX_CodePage::kFailure},
+    {0x1C80, 0x1CFF, 999, FX_CodePage::kFailure},
+    {0x1D00, 0x1D7F, 4, FX_CodePage::kFailure},
+    {0x1D80, 0x1DBF, 4, FX_CodePage::kFailure},
+    {0x1DC0, 0x1DFF, 6, FX_CodePage::kFailure},
+    {0x1E00, 0x1EFF, 29, FX_CodePage::kFailure},
+    {0x1F00, 0x1FFF, 30, FX_CodePage::kFailure},
+    {0x2000, 0x206F, 31, FX_CodePage::kFailure},
+    {0x2070, 0x209F, 32, FX_CodePage::kFailure},
+    {0x20A0, 0x20CF, 33, FX_CodePage::kFailure},
+    {0x20D0, 0x20FF, 34, FX_CodePage::kFailure},
+    {0x2100, 0x214F, 35, FX_CodePage::kFailure},
+    {0x2150, 0x215F, 36, FX_CodePage::kFailure},
+    {0x2160, 0x216B, 36, FX_CodePage::kChineseSimplified},
+    {0x216C, 0x216F, 36, FX_CodePage::kFailure},
+    {0x2170, 0x2179, 36, FX_CodePage::kChineseSimplified},
+    {0x217A, 0x218F, 36, FX_CodePage::kFailure},
+    {0x2190, 0x2199, 37, FX_CodePage::kHangul},
+    {0x219A, 0x21FF, 37, FX_CodePage::kFailure},
+    {0x2200, 0x22FF, 38, FX_CodePage::kFailure},
+    {0x2300, 0x23FF, 39, FX_CodePage::kFailure},
+    {0x2400, 0x243F, 40, FX_CodePage::kFailure},
+    {0x2440, 0x245F, 41, FX_CodePage::kFailure},
+    {0x2460, 0x2473, 42, FX_CodePage::kShiftJIS},
+    {0x2474, 0x249B, 42, FX_CodePage::kChineseSimplified},
+    {0x249C, 0x24E9, 42, FX_CodePage::kHangul},
+    {0x24EA, 0x24FF, 42, FX_CodePage::kFailure},
+    {0x2500, 0x2573, 43, FX_CodePage::kChineseSimplified},
+    {0x2574, 0x257F, 43, FX_CodePage::kFailure},
+    {0x2580, 0x2580, 44, FX_CodePage::kFailure},
+    {0x2581, 0x258F, 44, FX_CodePage::kChineseSimplified},
+    {0x2590, 0x259F, 44, FX_CodePage::kFailure},
+    {0x25A0, 0x25FF, 45, FX_CodePage::kFailure},
+    {0x2600, 0x26FF, 46, FX_CodePage::kFailure},
+    {0x2700, 0x27BF, 47, FX_CodePage::kFailure},
+    {0x27C0, 0x27EF, 38, FX_CodePage::kFailure},
+    {0x27F0, 0x27FF, 37, FX_CodePage::kFailure},
+    {0x2800, 0x28FF, 82, FX_CodePage::kFailure},
+    {0x2900, 0x297F, 37, FX_CodePage::kFailure},
+    {0x2980, 0x29FF, 38, FX_CodePage::kFailure},
+    {0x2A00, 0x2AFF, 38, FX_CodePage::kFailure},
+    {0x2B00, 0x2BFF, 37, FX_CodePage::kFailure},
+    {0x2C00, 0x2C5F, 97, FX_CodePage::kFailure},
+    {0x2C60, 0x2C7F, 29, FX_CodePage::kFailure},
+    {0x2C80, 0x2CFF, 8, FX_CodePage::kFailure},
+    {0x2D00, 0x2D2F, 26, FX_CodePage::kFailure},
+    {0x2D30, 0x2D7F, 98, FX_CodePage::kFailure},
+    {0x2D80, 0x2DDF, 75, FX_CodePage::kFailure},
+    {0x2DE0, 0x2DFF, 9, FX_CodePage::kFailure},
+    {0x2E00, 0x2E7F, 31, FX_CodePage::kFailure},
+    {0x2E80, 0x2EFF, 59, FX_CodePage::kFailure},
+    {0x2F00, 0x2FDF, 59, FX_CodePage::kFailure},
+    {0x2FE0, 0x2FEF, 999, FX_CodePage::kFailure},
+    {0x2FF0, 0x2FFF, 59, FX_CodePage::kFailure},
+    {0x3000, 0x303F, 48, FX_CodePage::kFailure},
+    {0x3040, 0x309F, 49, FX_CodePage::kShiftJIS},
+    {0x30A0, 0x30FF, 50, FX_CodePage::kShiftJIS},
+    {0x3100, 0x3129, 51, FX_CodePage::kChineseSimplified},
+    {0x312A, 0x312F, 51, FX_CodePage::kFailure},
+    {0x3130, 0x318F, 52, FX_CodePage::kHangul},
+    {0x3190, 0x319F, 59, FX_CodePage::kFailure},
+    {0x31A0, 0x31BF, 51, FX_CodePage::kFailure},
+    {0x31C0, 0x31EF, 61, FX_CodePage::kFailure},
+    {0x31F0, 0x31FF, 50, FX_CodePage::kFailure},
+    {0x3200, 0x321C, 54, FX_CodePage::kHangul},
+    {0x321D, 0x325F, 54, FX_CodePage::kFailure},
+    {0x3260, 0x327F, 54, FX_CodePage::kHangul},
+    {0x3280, 0x32FF, 54, FX_CodePage::kFailure},
+    {0x3300, 0x3387, 55, FX_CodePage::kFailure},
+    {0x3388, 0x33D0, 55, FX_CodePage::kHangul},
+    {0x33D1, 0x33FF, 55, FX_CodePage::kFailure},
+    {0x3400, 0x4DBF, 59, FX_CodePage::kFailure},
+    {0x4DC0, 0x4DFF, 99, FX_CodePage::kFailure},
+    {0x4E00, 0x9FA5, 59, FX_CodePage::kChineseSimplified},
+    {0x9FA6, 0x9FFF, 59, FX_CodePage::kFailure},
+    {0xA000, 0xA48F, 83, FX_CodePage::kFailure},
+    {0xA490, 0xA4CF, 83, FX_CodePage::kFailure},
+    {0xA4D0, 0xA4FF, 999, FX_CodePage::kFailure},
+    {0xA500, 0xA63F, 12, FX_CodePage::kFailure},
+    {0xA640, 0xA69F, 9, FX_CodePage::kFailure},
+    {0xA6A0, 0xA6FF, 999, FX_CodePage::kFailure},
+    {0xA700, 0xA71F, 5, FX_CodePage::kFailure},
+    {0xA720, 0xA7FF, 29, FX_CodePage::kFailure},
+    {0xA800, 0xA82F, 100, FX_CodePage::kFailure},
+    {0xA830, 0xA8FF, 999, FX_CodePage::kFailure},
+    {0xA840, 0xA87F, 53, FX_CodePage::kFailure},
+    {0xA880, 0xA8DF, 115, FX_CodePage::kFailure},
+    {0xA8E0, 0xA8FF, 999, FX_CodePage::kFailure},
+    {0xA900, 0xA92F, 116, FX_CodePage::kFailure},
+    {0xA930, 0xA95F, 117, FX_CodePage::kFailure},
+    {0xA960, 0xA9FF, 999, FX_CodePage::kFailure},
+    {0xAA00, 0xAA5F, 118, FX_CodePage::kFailure},
+    {0xAA60, 0xABFF, 999, FX_CodePage::kFailure},
+    {0xAC00, 0xD7AF, 56, FX_CodePage::kHangul},
+    {0xD7B0, 0xD7FF, 999, FX_CodePage::kFailure},
+    {0xD800, 0xDB7F, 57, FX_CodePage::kFailure},
+    {0xDB80, 0xDBFF, 57, FX_CodePage::kFailure},
+    {0xDC00, 0xDFFF, 57, FX_CodePage::kFailure},
+    {0xE000, 0xE814, 60, FX_CodePage::kFailure},
+    {0xE815, 0xE864, 60, FX_CodePage::kChineseSimplified},
+    {0xE865, 0xF8FF, 60, FX_CodePage::kFailure},
+    {0xF900, 0xFA0B, 61, FX_CodePage::kHangul},
+    {0xFA0C, 0xFA0D, 61, FX_CodePage::kChineseSimplified},
+    {0xFA0E, 0xFA2D, 61, FX_CodePage::kShiftJIS},
+    {0xFA2E, 0xFAFF, 61, FX_CodePage::kFailure},
+    {0xFB00, 0xFB4F, 62, FX_CodePage::kFailure},
+    {0xFB50, 0xFDFF, 63, FX_CodePage::kMSWin_Arabic},
+    {0xFE00, 0xFE0F, 91, FX_CodePage::kFailure},
+    {0xFE10, 0xFE1F, 65, FX_CodePage::kFailure},
+    {0xFE20, 0xFE2F, 64, FX_CodePage::kFailure},
+    {0xFE30, 0xFE4F, 65, FX_CodePage::kFailure},
+    {0xFE50, 0xFE6F, 66, FX_CodePage::kFailure},
+    {0xFE70, 0xFEFF, 67, FX_CodePage::kMSWin_Arabic},
+    {0xFF00, 0xFF5F, 68, FX_CodePage::kChineseSimplified},
+    {0xFF60, 0xFF9F, 68, FX_CodePage::kShiftJIS},
+    {0xFFA0, 0xFFEF, 68, FX_CodePage::kFailure},
 };
 
 #if defined(OS_WIN)
 const FGAS_FontInfo g_XFAFontsMap[] = {
-    {0x01d5d33e, "SimSun", "Arial", 0, 936},
-    {0x01e4f102, "YouYuan", "Arial", 1, 936},
-    {0x030549dc, "LiSu", "Arial", 1, 936},
-    {0x032edd44, "Simhei", "Arial", 1, 936},
-    {0x03eac6fc, "PoorRichard-Regular", "Arial", 2, 1252},
-    {0x03ed90e6, "Nina", "Arial", 0, 1252},
-    {0x077b56b3, "KingsoftPhoneticPlain", "Arial", 0, 1252},
-    {0x078ed524, "MicrosoftSansSerif", "Arial", 0, 1252},
-    {0x089b18a9, "Arial", "Arial", 0, 1252},
-    {0x0b2cad72, "MonotypeCorsiva", "Arial", 8, 1252},
-    {0x0bb003e7, "Kartika", "Arial", 2, 1252},
-    {0x0bb469df, "VinerHandITC", "Arial", 8, 1252},
-    {0x0bc1a851, "SegoeUI", "Arial", 0, 1252},
-    {0x0c112ebd, "KozukaGothicPro-VIM", "Arial", 0, 1252},
-    {0x0cfcb9c1, "AdobeThai", "Kokila,Arial Narrow", 0, 847},
-    {0x0e7de0f9, "Playbill", "Arial", 0, 1252},
-    {0x0eff47c3, "STHupo", "Arial", 0, 936},
-    {0x107ad374, "Constantia", "Arial", 2, 1252},
-    {0x12194c2d, "KunstlerScript", "Arial", 8, 1252},
+    {0x01d5d33e, "SimSun", "Arial", 0, FX_CodePage::kChineseSimplified},
+    {0x01e4f102, "YouYuan", "Arial", 1, FX_CodePage::kChineseSimplified},
+    {0x030549dc, "LiSu", "Arial", 1, FX_CodePage::kChineseSimplified},
+    {0x032edd44, "Simhei", "Arial", 1, FX_CodePage::kChineseSimplified},
+    {0x03eac6fc, "PoorRichard-Regular", "Arial", 2,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x03ed90e6, "Nina", "Arial", 0, FX_CodePage::kMSWin_WesternEuropean},
+    {0x077b56b3, "KingsoftPhoneticPlain", "Arial", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x078ed524, "MicrosoftSansSerif", "Arial", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x089b18a9, "Arial", "Arial", 0, FX_CodePage::kMSWin_WesternEuropean},
+    {0x0b2cad72, "MonotypeCorsiva", "Arial", 8,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x0bb003e7, "Kartika", "Arial", 2, FX_CodePage::kMSWin_WesternEuropean},
+    {0x0bb469df, "VinerHandITC", "Arial", 8,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x0bc1a851, "SegoeUI", "Arial", 0, FX_CodePage::kMSWin_WesternEuropean},
+    {0x0c112ebd, "KozukaGothicPro-VIM", "Arial", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    // Was 847 (not defined), presumably 874 (Thai).
+    {0x0cfcb9c1, "AdobeThai", "Kokila,Arial Narrow", 0,
+     FX_CodePage::kMSDOS_Thai},
+    {0x0e7de0f9, "Playbill", "Arial", 0, FX_CodePage::kMSWin_WesternEuropean},
+    {0x0eff47c3, "STHupo", "Arial", 0, FX_CodePage::kChineseSimplified},
+    {0x107ad374, "Constantia", "Arial", 2, FX_CodePage::kMSWin_WesternEuropean},
+    {0x12194c2d, "KunstlerScript", "Arial", 8,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x135ef6a1, "MinionProSmBd",
-     "Bell MT,Corbel,Times New Roman,Cambria,Berlin Sans FB", 0, 1252},
-    {0x158c4049, "Garamond", "Arial", 2, 1252},
-    {0x160ecb24, "STZhongsong", "Arial", 0, 936},
-    {0x161ed07e, "MSGothic", "Arial", 1, 1252},
-    {0x171d1ed1, "SnapITC-Regular", "Arial", 0, 1252},
-    {0x18d1188f, "Cambria", "Arial", 2, 1252},
-    {0x18eaf350, "ArialUnicodeMS", "Arial", 0, 936},
-    {0x1a92d115, "MingLiU", "Arial", 1, 1252},
-    {0x1cc217c6, "TrebuchetMS", "Arial", 0, 1252},
-    {0x1d649596, "BasemicTimes", "Arial", 0, 1252},
-    {0x1e34ee60, "BellMT", "Arial", 2, 1252},
-    {0x1eb36945, "CooperBlack", "Arial", 2, 1252},
-    {0x1ef7787d, "BatangChe", "Arial", 1, 1252},
-    {0x20b3bd3a, "BrushScriptMT", "Arial", 8, 1252},
-    {0x220877aa, "Candara", "Arial", 0, 1252},
-    {0x22135007, "FreestyleScript-Regular", "Arial", 8, 1252},
-    {0x251059c3, "Chiller", "Arial", 0, 1252},
-    {0x25bed6dd, "MSReferenceSansSerif", "Arial", 0, 1252},
-    {0x28154c81, "Parchment-Regular", "Arial", 8, 1252},
-    {0x29711eb9, "STLiti", "Arial", 0, 936},
-    {0x2b1993b4, "Basemic", "Arial", 0, 1252},
-    {0x2b316339, "NiagaraSolid-Reg", "Arial", 0, 1252},
-    {0x2c147529, "FootlightMTLight", "Arial", 0, 1252},
-    {0x2c198928, "HarlowSolid", "Arial", 0, 1252},
-    {0x2c6ac6b2, "LucidaBright", "Arial", 2, 1252},
-    {0x2c9f38e2, "KozukaMinchoPro-VIR", "Arial", 0, 1252},
-    {0x2d5a47b0, "STCaiyun", "Arial", 0, 936},
-    {0x2def26bf, "BernardMT-Condensed", "Arial", 0, 1252},
-    {0x2fd8930b, "KozukaMinchoPr6NR", "Arial", 0, 1252},
-    {0x3115525a, "FangSong_GB2312", "Arial", 0, 1252},
+     "Bell MT,Corbel,Times New Roman,Cambria,Berlin Sans FB", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x158c4049, "Garamond", "Arial", 2, FX_CodePage::kMSWin_WesternEuropean},
+    {0x160ecb24, "STZhongsong", "Arial", 0, FX_CodePage::kChineseSimplified},
+    {0x161ed07e, "MSGothic", "Arial", 1, FX_CodePage::kMSWin_WesternEuropean},
+    {0x171d1ed1, "SnapITC-Regular", "Arial", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x18d1188f, "Cambria", "Arial", 2, FX_CodePage::kMSWin_WesternEuropean},
+    {0x18eaf350, "ArialUnicodeMS", "Arial", 0, FX_CodePage::kChineseSimplified},
+    {0x1a92d115, "MingLiU", "Arial", 1, FX_CodePage::kMSWin_WesternEuropean},
+    {0x1cc217c6, "TrebuchetMS", "Arial", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x1d649596, "BasemicTimes", "Arial", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x1e34ee60, "BellMT", "Arial", 2, FX_CodePage::kMSWin_WesternEuropean},
+    {0x1eb36945, "CooperBlack", "Arial", 2,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x1ef7787d, "BatangChe", "Arial", 1, FX_CodePage::kMSWin_WesternEuropean},
+    {0x20b3bd3a, "BrushScriptMT", "Arial", 8,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x220877aa, "Candara", "Arial", 0, FX_CodePage::kMSWin_WesternEuropean},
+    {0x22135007, "FreestyleScript-Regular", "Arial", 8,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x251059c3, "Chiller", "Arial", 0, FX_CodePage::kMSWin_WesternEuropean},
+    {0x25bed6dd, "MSReferenceSansSerif", "Arial", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x28154c81, "Parchment-Regular", "Arial", 8,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x29711eb9, "STLiti", "Arial", 0, FX_CodePage::kChineseSimplified},
+    {0x2b1993b4, "Basemic", "Arial", 0, FX_CodePage::kMSWin_WesternEuropean},
+    {0x2b316339, "NiagaraSolid-Reg", "Arial", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x2c147529, "FootlightMTLight", "Arial", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x2c198928, "HarlowSolid", "Arial", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x2c6ac6b2, "LucidaBright", "Arial", 2,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x2c9f38e2, "KozukaMinchoPro-VIR", "Arial", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x2d5a47b0, "STCaiyun", "Arial", 0, FX_CodePage::kChineseSimplified},
+    {0x2def26bf, "BernardMT-Condensed", "Arial", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x2fd8930b, "KozukaMinchoPr6NR", "Arial", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x3115525a, "FangSong_GB2312", "Arial", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x31327817, "MyriadPro",
      "Calibri,Corbel,Candara,Cambria Math,Franklin Gothic Medium,Arial "
      "Narrow,Times New Roman",
-     0, 1252},
-    {0x32244975, "Helvetica", "Arial", 0, 1252},
-    {0x32ac995c, "Terminal", "Arial", 0, 1252},
-    {0x338d648a, "NiagaraEngraved-Reg", "Arial", 0, 1252},
-    {0x33bb65f2, "Sylfaen", "Arial", 2, 1252},
-    {0x3402c30e, "MSPMincho", "Arial", 2, 1252},
-    {0x3412bf31, "SimSun-PUA", "Arial", 0, 936},
-    {0x36eb39b9, "BerlinSansFB", "Arial", 0, 1252},
-    {0x36f42055, "UniversATT", "Microsoft Sans Serif", 0, 1252},
-    {0x3864c4f6, "HighTowerText", "Arial", 2, 1252},
-    {0x3a257d03, "FangSong_GB2312", "Arial", 0, 1252},
-    {0x3cdae668, "FreestyleScript", "Arial", 8, 1252},
-    {0x3d55aed7, "Jokerman", "Arial", 0, 1252},
-    {0x3d5b4385, "PMingLiU", "Arial", 2, 1252},
-    {0x3d9b7669, "EstrangeloEdessa", "Arial", 0, 1252},
-    {0x3e532d74, "FranklinGothicMedium", "Arial", 0, 1252},
-    {0x3e6aa32d, "NSimSun", "Arial", 1, 936},
-    {0x3f6c36a8, "Gautami", "Arial", 0, 1252},
-    {0x3ff32662, "Chiller-Regular", "Arial", 0, 1252},
-    {0x409de312, "ModernNo.20", "Arial", 2, 1252},
-    {0x41443c5e, "Georgia", "Arial", 2, 1252},
+     0, FX_CodePage::kMSWin_WesternEuropean},
+    {0x32244975, "Helvetica", "Arial", 0, FX_CodePage::kMSWin_WesternEuropean},
+    {0x32ac995c, "Terminal", "Arial", 0, FX_CodePage::kMSWin_WesternEuropean},
+    {0x338d648a, "NiagaraEngraved-Reg", "Arial", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x33bb65f2, "Sylfaen", "Arial", 2, FX_CodePage::kMSWin_WesternEuropean},
+    {0x3402c30e, "MSPMincho", "Arial", 2, FX_CodePage::kMSWin_WesternEuropean},
+    {0x3412bf31, "SimSun-PUA", "Arial", 0, FX_CodePage::kChineseSimplified},
+    {0x36eb39b9, "BerlinSansFB", "Arial", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x36f42055, "UniversATT", "Microsoft Sans Serif", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x3864c4f6, "HighTowerText", "Arial", 2,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x3a257d03, "FangSong_GB2312", "Arial", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x3cdae668, "FreestyleScript", "Arial", 8,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x3d55aed7, "Jokerman", "Arial", 0, FX_CodePage::kMSWin_WesternEuropean},
+    {0x3d5b4385, "PMingLiU", "Arial", 2, FX_CodePage::kMSWin_WesternEuropean},
+    {0x3d9b7669, "EstrangeloEdessa", "Arial", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x3e532d74, "FranklinGothicMedium", "Arial", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x3e6aa32d, "NSimSun", "Arial", 1, FX_CodePage::kChineseSimplified},
+    {0x3f6c36a8, "Gautami", "Arial", 0, FX_CodePage::kMSWin_WesternEuropean},
+    {0x3ff32662, "Chiller-Regular", "Arial", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x409de312, "ModernNo.20", "Arial", 2,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x41443c5e, "Georgia", "Arial", 2, FX_CodePage::kMSWin_WesternEuropean},
     {0x4160ade5, "BellGothicStdBlack",
-     "Arial,Arial Unicode MS,Book Antiqua,Dotum,Georgia", 0, 1252},
-    {0x421976c4, "Modern-Regular", "Arial", 2, 1252},
-    {0x422a7252, "Stencil", "Arial", 0, 1252},
-    {0x42c8554f, "Fixedsys", "Arial", 0, 1252},
-    {0x435cb41d, "Roman", "Arial", 0, 1252},
-    {0x47882383, "CourierNew", "Arial", 1, 1252},
-    {0x480a2338, "BerlinSansFBDemi", "Arial", 0, 1252},
-    {0x480bf7a4, "CourierStd", "Courier New,Verdana", 0, 1252},
-    {0x481ad6ed, "VladimirScript", "Arial", 8, 1252},
-    {0x4911577a, "YouYuan", "Arial", 1, 936},
-    {0x4a788d72, "STXingkai", "Arial", 0, 936},
-    {0x4bf88566, "SegoeCondensed", "Arial", 0, 1252},
-    {0x4ccf51a4, "BerlinSansFB-Reg", "Arial", 0, 1252},
-    {0x4ea967ce, "GulimChe", "Arial", 1, 1252},
-    {0x4f68bd79, "LetterGothicStd", "Courier New,Verdana", 0, 1252},
-    {0x51a0d0e6, "KozukaGothicPr6NM", "Arial", 0, 1252},
-    {0x531b3dea, "BasemicSymbol", "Arial", 0, 1252},
-    {0x5333fd39, "CalifornianFB-Reg", "Arial", 2, 1252},
-    {0x53561a54, "FZYTK--GBK1-0", "Arial", 0, 936},
-    {0x55e0dde6, "LucidaSansTypewriter", "Arial", 0, 1252},
-    {0x574d4d3d, "AdobeArabic", "Arial Narrow", 0, 1252},
-    {0x5792e759, "STKaiti", "Arial", 0, 936},
-    {0x5921978e, "LucidaSansUnicode", "Arial", 0, 1252},
-    {0x594e2da4, "Vrinda", "Arial", 0, 1252},
-    {0x59baa9a2, "KaiTi_GB2312", "Arial", 0, 1252},
-    {0x5cfedf4f, "BaskOldFace", "Arial", 0, 1252},
+     "Arial,Arial Unicode MS,Book Antiqua,Dotum,Georgia", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x421976c4, "Modern-Regular", "Arial", 2,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x422a7252, "Stencil", "Arial", 0, FX_CodePage::kMSWin_WesternEuropean},
+    {0x42c8554f, "Fixedsys", "Arial", 0, FX_CodePage::kMSWin_WesternEuropean},
+    {0x435cb41d, "Roman", "Arial", 0, FX_CodePage::kMSWin_WesternEuropean},
+    {0x47882383, "CourierNew", "Arial", 1, FX_CodePage::kMSWin_WesternEuropean},
+    {0x480a2338, "BerlinSansFBDemi", "Arial", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x480bf7a4, "CourierStd", "Courier New,Verdana", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x481ad6ed, "VladimirScript", "Arial", 8,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x4911577a, "YouYuan", "Arial", 1, FX_CodePage::kChineseSimplified},
+    {0x4a788d72, "STXingkai", "Arial", 0, FX_CodePage::kChineseSimplified},
+    {0x4bf88566, "SegoeCondensed", "Arial", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x4ccf51a4, "BerlinSansFB-Reg", "Arial", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x4ea967ce, "GulimChe", "Arial", 1, FX_CodePage::kMSWin_WesternEuropean},
+    {0x4f68bd79, "LetterGothicStd", "Courier New,Verdana", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x51a0d0e6, "KozukaGothicPr6NM", "Arial", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x531b3dea, "BasemicSymbol", "Arial", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x5333fd39, "CalifornianFB-Reg", "Arial", 2,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x53561a54, "FZYTK--GBK1-0", "Arial", 0, FX_CodePage::kChineseSimplified},
+    {0x55e0dde6, "LucidaSansTypewriter", "Arial", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x574d4d3d, "AdobeArabic", "Arial Narrow", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x5792e759, "STKaiti", "Arial", 0, FX_CodePage::kChineseSimplified},
+    {0x5921978e, "LucidaSansUnicode", "Arial", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x594e2da4, "Vrinda", "Arial", 0, FX_CodePage::kMSWin_WesternEuropean},
+    {0x59baa9a2, "KaiTi_GB2312", "Arial", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x5cfedf4f, "BaskOldFace", "Arial", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x5f97921c, "AdobeMyungjoStdM",
-     "Batang,Bookman Old Style,Consolas,STZhongsong", 0, 936},
-    {0x5fefbfad, "Batang", "Arial", 2, 1252},
-    {0x605342b9, "DotumChe", "Arial", 1, 1252},
-    {0x608c5f9a, "KaiTi_GB2312", "Arial", 0, 936},
-    {0x61efd0d1, "MaturaMTScriptCapitals", "Arial", 0, 1252},
-    {0x626608a9, "MVBoli", "Arial", 0, 1252},
-    {0x630501a3, "SmallFonts", "Arial", 0, 1252},
-    {0x65d0e2a9, "FZYTK--GBK1-0", "Arial", 0, 936},
-    {0x669f29e1, "FZSTK--GBK1-0", "Arial", 0, 936},
-    {0x673a9e5f, "Tunga", "Arial", 0, 1252},
-    {0x691aa4ce, "NiagaraSolid", "Arial", 0, 1252},
-    {0x696259b7, "Corbel", "Arial", 0, 1252},
-    {0x696ee9be, "STXihei", "Arial", 0, 936},
-    {0x6c59cf69, "Dotum", "Arial", 0, 1252},
-    {0x707fa561, "Gungsuh", "Arial", 2, 1252},
-    {0x71416bb2, "ZWAdobeF", "Arial", 0, 1252},
-    {0x71b41801, "Verdana", "Arial", 0, 1252},
-    {0x73f25e4c, "PalatinoLinotype", "Arial", 0, 1252},
-    {0x73f4d19f, "NiagaraEngraved", "Arial", 0, 1252},
+     "Batang,Bookman Old Style,Consolas,STZhongsong", 0,
+     FX_CodePage::kChineseSimplified},
+    {0x5fefbfad, "Batang", "Arial", 2, FX_CodePage::kMSWin_WesternEuropean},
+    {0x605342b9, "DotumChe", "Arial", 1, FX_CodePage::kMSWin_WesternEuropean},
+    {0x608c5f9a, "KaiTi_GB2312", "Arial", 0, FX_CodePage::kChineseSimplified},
+    {0x61efd0d1, "MaturaMTScriptCapitals", "Arial", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x626608a9, "MVBoli", "Arial", 0, FX_CodePage::kMSWin_WesternEuropean},
+    {0x630501a3, "SmallFonts", "Arial", 0, FX_CodePage::kMSWin_WesternEuropean},
+    {0x65d0e2a9, "FZYTK--GBK1-0", "Arial", 0, FX_CodePage::kChineseSimplified},
+    {0x669f29e1, "FZSTK--GBK1-0", "Arial", 0, FX_CodePage::kChineseSimplified},
+    {0x673a9e5f, "Tunga", "Arial", 0, FX_CodePage::kMSWin_WesternEuropean},
+    {0x691aa4ce, "NiagaraSolid", "Arial", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x696259b7, "Corbel", "Arial", 0, FX_CodePage::kMSWin_WesternEuropean},
+    {0x696ee9be, "STXihei", "Arial", 0, FX_CodePage::kChineseSimplified},
+    {0x6c59cf69, "Dotum", "Arial", 0, FX_CodePage::kMSWin_WesternEuropean},
+    {0x707fa561, "Gungsuh", "Arial", 2, FX_CodePage::kMSWin_WesternEuropean},
+    {0x71416bb2, "ZWAdobeF", "Arial", 0, FX_CodePage::kMSWin_WesternEuropean},
+    {0x71b41801, "Verdana", "Arial", 0, FX_CodePage::kMSWin_WesternEuropean},
+    {0x73f25e4c, "PalatinoLinotype", "Arial", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x73f4d19f, "NiagaraEngraved", "Arial", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x74001694, "MyriadProBlack", "Book Antiqua,Constantia,Dotum,Georgia", 0,
-     1252},
-    {0x74b14d8f, "Haettenschweiler", "Arial", 0, 1252},
-    {0x74cb44ee, "NSimSun", "Arial", 1, 936},
-    {0x76b4d7ff, "Shruti", "Arial", 0, 1252},
-    {0x788b3533, "Webdings", "Arial", 6, 42},
-    {0x797dde99, "MSSerif", "Arial", 0, 1252},
-    {0x7a0f9e9e, "MSMincho", "Arial", 1, 1252},
-    {0x7b439caf, "OldEnglishTextMT", "Arial", 0, 1252},
-    {0x8213a433, "LucidaSans-Typewriter", "Arial", 0, 1252},
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x74b14d8f, "Haettenschweiler", "Arial", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x74cb44ee, "NSimSun", "Arial", 1, FX_CodePage::kChineseSimplified},
+    {0x76b4d7ff, "Shruti", "Arial", 0, FX_CodePage::kMSWin_WesternEuropean},
+    {0x788b3533, "Webdings", "Arial", 6, FX_CodePage::kSymbol},
+    {0x797dde99, "MSSerif", "Arial", 0, FX_CodePage::kMSWin_WesternEuropean},
+    {0x7a0f9e9e, "MSMincho", "Arial", 1, FX_CodePage::kMSWin_WesternEuropean},
+    {0x7b439caf, "OldEnglishTextMT", "Arial", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x8213a433, "LucidaSans-Typewriter", "Arial", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x82fec929, "AdobeSongStd",
-     "Centaur,Calibri,STSong,Bell MT,Garamond,Times New Roman", 0, 936},
-    {0x83581825, "Modern", "Arial", 0, 1252},
-    {0x835a2823, "Algerian", "Arial", 0, 1252},
-    {0x83dab9f5, "Script", "Arial", 0, 1252},
-    {0x847b56da, "Tahoma", "Arial", 0, 1252},
-    {0x8a783cb2, "SimSun-PUA", "Arial", 0, 1252},
-    {0x8b5cac0e, "Onyx", "Arial", 0, 1252},
-    {0x8c6a499e, "Gulim", "Arial", 0, 1252},
-    {0x8e0af790, "JuiceITC", "Arial", 0, 1252},
-    {0x8e8d43b2, "Centaur", "Arial", 2, 1252},
-    {0x8ee4dcca, "BookshelfSymbol7", "Arial", 0, 1252},
+     "Centaur,Calibri,STSong,Bell MT,Garamond,Times New Roman", 0,
+     FX_CodePage::kChineseSimplified},
+    {0x83581825, "Modern", "Arial", 0, FX_CodePage::kMSWin_WesternEuropean},
+    {0x835a2823, "Algerian", "Arial", 0, FX_CodePage::kMSWin_WesternEuropean},
+    {0x83dab9f5, "Script", "Arial", 0, FX_CodePage::kMSWin_WesternEuropean},
+    {0x847b56da, "Tahoma", "Arial", 0, FX_CodePage::kMSWin_WesternEuropean},
+    {0x8a783cb2, "SimSun-PUA", "Arial", 0, FX_CodePage::kMSWin_WesternEuropean},
+    {0x8b5cac0e, "Onyx", "Arial", 0, FX_CodePage::kMSWin_WesternEuropean},
+    {0x8c6a499e, "Gulim", "Arial", 0, FX_CodePage::kMSWin_WesternEuropean},
+    {0x8e0af790, "JuiceITC", "Arial", 0, FX_CodePage::kMSWin_WesternEuropean},
+    {0x8e8d43b2, "Centaur", "Arial", 2, FX_CodePage::kMSWin_WesternEuropean},
+    {0x8ee4dcca, "BookshelfSymbol7", "Arial", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x90794800, "BellGothicStdLight", "Bell MT,Calibri,Times New Roman", 0,
-     1252},
-    {0x909b516a, "Century", "Arial", 2, 1252},
-    {0x92ae370d, "MSOutlook", "Arial", 4, 42},
-    {0x93c9fbf1, "LucidaFax", "Arial", 2, 1252},
-    {0x9565085e, "BookAntiqua", "Arial", 2, 1252},
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x909b516a, "Century", "Arial", 2, FX_CodePage::kMSWin_WesternEuropean},
+    {0x92ae370d, "MSOutlook", "Arial", 4, FX_CodePage::kSymbol},
+    {0x93c9fbf1, "LucidaFax", "Arial", 2, FX_CodePage::kMSWin_WesternEuropean},
+    {0x9565085e, "BookAntiqua", "Arial", 2,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x9856d95d, "AdobeMingStd", "Arial,Arial Unicode MS,Cambria,BatangChe", 0,
-     949},
-    {0x9bbadd6b, "ColonnaMT", "Arial", 0, 1252},
-    {0x9cbd16a4, "ShowcardGothic-Reg", "Arial", 0, 1252},
-    {0x9d73008e, "MSSansSerif", "Arial", 0, 1252},
-    {0xa0607db1, "GungsuhChe", "Arial", 1, 1252},
-    {0xa0bcf6a1, "LatinWide", "Arial", 2, 1252},
-    {0xa1429b36, "Symbol", "Arial", 6, 42},
-    {0xa1fa5abc, "Wingdings2", "Arial", 6, 42},
-    {0xa1fa5abd, "Wingdings3", "Arial", 6, 42},
-    {0xa427bad4, "InformalRoman-Regular", "Arial", 8, 1252},
-    {0xa8b92ece, "FZSTK--GBK1-0", "Arial", 0, 936},
-    {0xa8d83ece, "CalifornianFB", "Arial", 2, 1252},
-    {0xaa3e082c, "Kingsoft-Phonetic", "Arial", 0, 1252},
-    {0xaa6bcabe, "HarlowSolidItalic", "Arial", 0, 1252},
-    {0xade5337c, "MSUIGothic", "Arial", 0, 1252},
-    {0xb08dd941, "WideLatin", "Arial", 2, 1252},
-    {0xb207f05d, "PoorRichard", "Arial", 2, 1252},
-    {0xb3bc492f, "JuiceITC-Regular", "Arial", 0, 1252},
-    {0xb5545399, "Marlett", "Arial", 4, 42},
-    {0xb5dd1ebb, "BritannicBold", "Arial", 0, 1252},
-    {0xb699c1c5, "LucidaCalligraphy-Italic", "Arial", 0, 1252},
-    {0xb725d629, "TimesNewRoman", "Arial", 2, 1252},
-    {0xb7eaebeb, "AdobeHeitiStdR", "Batang,Century,Dotum", 0, 936},
-    {0xbd29c486, "BerlinSansFBDemi-Bold", "Arial", 0, 1252},
-    {0xbe8a8db4, "BookshelfSymbolSeven", "Arial", 0, 1252},
-    {0xc16c0118, "AdobeHebrew", "Bell MT,Berlin Sans FB,Calibri", 0, 1252},
+     FX_CodePage::kHangul},
+    {0x9bbadd6b, "ColonnaMT", "Arial", 0, FX_CodePage::kMSWin_WesternEuropean},
+    {0x9cbd16a4, "ShowcardGothic-Reg", "Arial", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x9d73008e, "MSSansSerif", "Arial", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xa0607db1, "GungsuhChe", "Arial", 1, FX_CodePage::kMSWin_WesternEuropean},
+    {0xa0bcf6a1, "LatinWide", "Arial", 2, FX_CodePage::kMSWin_WesternEuropean},
+    {0xa1429b36, "Symbol", "Arial", 6, FX_CodePage::kSymbol},
+    {0xa1fa5abc, "Wingdings2", "Arial", 6, FX_CodePage::kSymbol},
+    {0xa1fa5abd, "Wingdings3", "Arial", 6, FX_CodePage::kSymbol},
+    {0xa427bad4, "InformalRoman-Regular", "Arial", 8,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xa8b92ece, "FZSTK--GBK1-0", "Arial", 0, FX_CodePage::kChineseSimplified},
+    {0xa8d83ece, "CalifornianFB", "Arial", 2,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xaa3e082c, "Kingsoft-Phonetic", "Arial", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xaa6bcabe, "HarlowSolidItalic", "Arial", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xade5337c, "MSUIGothic", "Arial", 0, FX_CodePage::kMSWin_WesternEuropean},
+    {0xb08dd941, "WideLatin", "Arial", 2, FX_CodePage::kMSWin_WesternEuropean},
+    {0xb207f05d, "PoorRichard", "Arial", 2,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xb3bc492f, "JuiceITC-Regular", "Arial", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xb5545399, "Marlett", "Arial", 4, FX_CodePage::kSymbol},
+    {0xb5dd1ebb, "BritannicBold", "Arial", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xb699c1c5, "LucidaCalligraphy-Italic", "Arial", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xb725d629, "TimesNewRoman", "Arial", 2,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xb7eaebeb, "AdobeHeitiStdR", "Batang,Century,Dotum", 0,
+     FX_CodePage::kChineseSimplified},
+    {0xbd29c486, "BerlinSansFBDemi-Bold", "Arial", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xbe8a8db4, "BookshelfSymbolSeven", "Arial", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xc16c0118, "AdobeHebrew", "Bell MT,Berlin Sans FB,Calibri", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xc318b0af, "MyriadProLight", "Calibri,STFangsong,Times New Roman", 0,
-     1252},
-    {0xc65e5659, "CambriaMath", "Arial", 2, 1252},
-    {0xc75c8f05, "LucidaConsole", "Arial", 1, 1252},
-    {0xca7c35d6, "Calibri", "Arial", 0, 1252},
-    {0xcb053f53, "MicrosoftYaHei", "Arial", 0, 936},
-    {0xcb7190f9, "Magneto-Bold", "Arial", 0, 1252},
-    {0xcca00cc5, "System", "Arial", 0, 1252},
-    {0xccad6f76, "Jokerman-Regular", "Arial", 0, 1252},
-    {0xccc5818c, "EuroSign", "Arial", 0, 1252},
-    {0xcf3d7234, "LucidaHandwriting-Italic", "Arial", 0, 1252},
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xc65e5659, "CambriaMath", "Arial", 2,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xc75c8f05, "LucidaConsole", "Arial", 1,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xca7c35d6, "Calibri", "Arial", 0, FX_CodePage::kMSWin_WesternEuropean},
+    {0xcb053f53, "MicrosoftYaHei", "Arial", 0, FX_CodePage::kChineseSimplified},
+    {0xcb7190f9, "Magneto-Bold", "Arial", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xcca00cc5, "System", "Arial", 0, FX_CodePage::kMSWin_WesternEuropean},
+    {0xccad6f76, "Jokerman-Regular", "Arial", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xccc5818c, "EuroSign", "Arial", 0, FX_CodePage::kMSWin_WesternEuropean},
+    {0xcf3d7234, "LucidaHandwriting-Italic", "Arial", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xcf7b8fdb, "MinionPro",
-     "Bell MT,Corbel,Times New Roman,Cambria,Berlin Sans FB", 0, 1252},
-    {0xcfe5755f, "Simhei", "Arial", 1, 936},
-    {0xd011f4ee, "MSPGothic", "Arial", 0, 1252},
-    {0xd060e7ef, "Vivaldi", "Arial", 8, 1252},
-    {0xd07edec1, "FranklinGothic-Medium", "Arial", 0, 1252},
-    {0xd107243f, "SimSun", "Arial", 0, 936},
-    {0xd1881562, "ArialNarrow", "Arial Narrow", 0, 1252},
-    {0xd22b7dce, "BodoniMTPosterCompressed", "Arial", 0, 1252},
-    {0xd22bfa60, "ComicSansMS", "Arial", 8, 1252},
-    {0xd3bd0e35, "Bauhaus93", "Arial", 0, 1252},
-    {0xd429ee7a, "STFangsong", "Arial", 0, 936},
-    {0xd6679c12, "BernardMTCondensed", "Arial", 0, 1252},
-    {0xd8e8a027, "LucidaSans", "Arial", 0, 1252},
-    {0xd9fe7761, "HighTowerText-Reg", "Arial", 2, 1252},
-    {0xda7e551e, "STSong", "Arial", 0, 936},
-    {0xdaa6842d, "STZhongsong", "Arial", 0, 936},
-    {0xdaaab93f, "STFangsong", "Arial", 0, 936},
-    {0xdaeb0713, "STSong", "Arial", 0, 936},
-    {0xdafedbef, "STCaiyun", "Arial", 0, 936},
-    {0xdb00a3d9, "Broadway", "Arial", 0, 1252},
-    {0xdb1f5ad4, "STXinwei", "Arial", 0, 936},
-    {0xdb326e7f, "STKaiti", "Arial", 0, 936},
-    {0xdb69595a, "STHupo", "Arial", 0, 936},
-    {0xdba0082c, "STXihei", "Arial", 0, 936},
-    {0xdbd0ab18, "STXingkai", "Arial", 0, 936},
-    {0xdc1a7db1, "STLiti", "Arial", 0, 936},
-    {0xdc33075f, "KristenITC-Regular", "Arial", 8, 1252},
-    {0xdcc7009c, "Harrington", "Arial", 0, 1252},
-    {0xdd712466, "ArialBlack", "Arial", 0, 1252},
-    {0xdde87b3e, "Impact", "Arial", 0, 1252},
-    {0xdf69fb32, "SnapITC", "Arial", 0, 1252},
-    {0xdf8b25e8, "CenturyGothic", "Arial", 0, 1252},
-    {0xe0f705c0, "KristenITC", "Arial", 8, 1252},
-    {0xe1427573, "Raavi", "Arial", 0, 1252},
-    {0xe2cea0cb, "Magneto", "Arial", 0, 1252},
-    {0xe36a9e17, "Ravie", "Arial", 0, 1252},
-    {0xe433f8e2, "Parchment", "Arial", 8, 1252},
-    {0xe43dff4a, "Wingdings", "Arial", 4, 42},
-    {0xe4e2c405, "MTExtra", "Arial", 6, 42},
-    {0xe618cc35, "InformalRoman", "Arial", 8, 1252},
-    {0xe6c27ffc, "Mistral", "Arial", 8, 1252},
-    {0xe7ebf4b9, "Courier", "Courier New", 0, 1252},
-    {0xe8bc4a9d, "MSReferenceSpecialty", "Arial", 0, 1252},
-    {0xe90fb013, "TempusSansITC", "Arial", 0, 1252},
-    {0xec637b42, "Consolas", "Verdana", 1, 1252},
-    {0xed3a683b, "STXinwei", "Arial", 0, 936},
-    {0xef264cd1, "LucidaHandwriting", "Arial", 0, 1252},
-    {0xf086bca2, "BaskervilleOldFace", "Arial", 0, 1252},
-    {0xf1028030, "Mangal", "Arial", 2, 1252},
-    {0xf1da7eb9, "ShowcardGothic", "Arial", 0, 1252},
-    {0xf210f06a, "ArialMT", "Arial", 0, 1252},
-    {0xf477f16a, "Latha", "Arial", 0, 1252},
-    {0xf616f3dd, "LiSu", "Arial", 1, 936},
-    {0xfa479aa6, "MicrosoftYaHei", "Arial", 0, 936},
-    {0xfcd19697, "BookmanOldStyle", "Arial", 0, 1252},
-    {0xfe209a82, "LucidaCalligraphy", "Arial", 0, 1252},
-    {0xfef135f8, "AdobeHeitiStd-Regular", "Batang,Century,Dotum", 0, 936},
+     "Bell MT,Corbel,Times New Roman,Cambria,Berlin Sans FB", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xcfe5755f, "Simhei", "Arial", 1, FX_CodePage::kChineseSimplified},
+    {0xd011f4ee, "MSPGothic", "Arial", 0, FX_CodePage::kMSWin_WesternEuropean},
+    {0xd060e7ef, "Vivaldi", "Arial", 8, FX_CodePage::kMSWin_WesternEuropean},
+    {0xd07edec1, "FranklinGothic-Medium", "Arial", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xd107243f, "SimSun", "Arial", 0, FX_CodePage::kChineseSimplified},
+    {0xd1881562, "ArialNarrow", "Arial Narrow", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xd22b7dce, "BodoniMTPosterCompressed", "Arial", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xd22bfa60, "ComicSansMS", "Arial", 8,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xd3bd0e35, "Bauhaus93", "Arial", 0, FX_CodePage::kMSWin_WesternEuropean},
+    {0xd429ee7a, "STFangsong", "Arial", 0, FX_CodePage::kChineseSimplified},
+    {0xd6679c12, "BernardMTCondensed", "Arial", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xd8e8a027, "LucidaSans", "Arial", 0, FX_CodePage::kMSWin_WesternEuropean},
+    {0xd9fe7761, "HighTowerText-Reg", "Arial", 2,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xda7e551e, "STSong", "Arial", 0, FX_CodePage::kChineseSimplified},
+    {0xdaa6842d, "STZhongsong", "Arial", 0, FX_CodePage::kChineseSimplified},
+    {0xdaaab93f, "STFangsong", "Arial", 0, FX_CodePage::kChineseSimplified},
+    {0xdaeb0713, "STSong", "Arial", 0, FX_CodePage::kChineseSimplified},
+    {0xdafedbef, "STCaiyun", "Arial", 0, FX_CodePage::kChineseSimplified},
+    {0xdb00a3d9, "Broadway", "Arial", 0, FX_CodePage::kMSWin_WesternEuropean},
+    {0xdb1f5ad4, "STXinwei", "Arial", 0, FX_CodePage::kChineseSimplified},
+    {0xdb326e7f, "STKaiti", "Arial", 0, FX_CodePage::kChineseSimplified},
+    {0xdb69595a, "STHupo", "Arial", 0, FX_CodePage::kChineseSimplified},
+    {0xdba0082c, "STXihei", "Arial", 0, FX_CodePage::kChineseSimplified},
+    {0xdbd0ab18, "STXingkai", "Arial", 0, FX_CodePage::kChineseSimplified},
+    {0xdc1a7db1, "STLiti", "Arial", 0, FX_CodePage::kChineseSimplified},
+    {0xdc33075f, "KristenITC-Regular", "Arial", 8,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xdcc7009c, "Harrington", "Arial", 0, FX_CodePage::kMSWin_WesternEuropean},
+    {0xdd712466, "ArialBlack", "Arial", 0, FX_CodePage::kMSWin_WesternEuropean},
+    {0xdde87b3e, "Impact", "Arial", 0, FX_CodePage::kMSWin_WesternEuropean},
+    {0xdf69fb32, "SnapITC", "Arial", 0, FX_CodePage::kMSWin_WesternEuropean},
+    {0xdf8b25e8, "CenturyGothic", "Arial", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xe0f705c0, "KristenITC", "Arial", 8, FX_CodePage::kMSWin_WesternEuropean},
+    {0xe1427573, "Raavi", "Arial", 0, FX_CodePage::kMSWin_WesternEuropean},
+    {0xe2cea0cb, "Magneto", "Arial", 0, FX_CodePage::kMSWin_WesternEuropean},
+    {0xe36a9e17, "Ravie", "Arial", 0, FX_CodePage::kMSWin_WesternEuropean},
+    {0xe433f8e2, "Parchment", "Arial", 8, FX_CodePage::kMSWin_WesternEuropean},
+    {0xe43dff4a, "Wingdings", "Arial", 4, FX_CodePage::kSymbol},
+    {0xe4e2c405, "MTExtra", "Arial", 6, FX_CodePage::kSymbol},
+    {0xe618cc35, "InformalRoman", "Arial", 8,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xe6c27ffc, "Mistral", "Arial", 8, FX_CodePage::kMSWin_WesternEuropean},
+    {0xe7ebf4b9, "Courier", "Courier New", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xe8bc4a9d, "MSReferenceSpecialty", "Arial", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xe90fb013, "TempusSansITC", "Arial", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xec637b42, "Consolas", "Verdana", 1, FX_CodePage::kMSWin_WesternEuropean},
+    {0xed3a683b, "STXinwei", "Arial", 0, FX_CodePage::kChineseSimplified},
+    {0xef264cd1, "LucidaHandwriting", "Arial", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xf086bca2, "BaskervilleOldFace", "Arial", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xf1028030, "Mangal", "Arial", 2, FX_CodePage::kMSWin_WesternEuropean},
+    {0xf1da7eb9, "ShowcardGothic", "Arial", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xf210f06a, "ArialMT", "Arial", 0, FX_CodePage::kMSWin_WesternEuropean},
+    {0xf477f16a, "Latha", "Arial", 0, FX_CodePage::kMSWin_WesternEuropean},
+    {0xf616f3dd, "LiSu", "Arial", 1, FX_CodePage::kChineseSimplified},
+    {0xfa479aa6, "MicrosoftYaHei", "Arial", 0, FX_CodePage::kChineseSimplified},
+    {0xfcd19697, "BookmanOldStyle", "Arial", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xfe209a82, "LucidaCalligraphy", "Arial", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xfef135f8, "AdobeHeitiStd-Regular", "Batang,Century,Dotum", 0,
+     FX_CodePage::kChineseSimplified},
 };
 #elif defined(OS_APPLE)
 const FGAS_FontInfo g_XFAFontsMap[] = {
-    {0x01d5d33e, "SimSun", "STHeiti,Heiti TC,STFangsong", 0, 936},
-    {0x01e4f102, "YouYuan", "STHeiti,Heiti TC,STFangsong", 1, 936},
-    {0x030549dc, "LiSu", "STHeiti,Heiti TC,STFangsong", 1, 936},
-    {0x032edd44, "Simhei", "STHeiti,Heiti TC,STFangsong", 1, 936},
+    {0x01d5d33e, "SimSun", "STHeiti,Heiti TC,STFangsong", 0,
+     FX_CodePage::kChineseSimplified},
+    {0x01e4f102, "YouYuan", "STHeiti,Heiti TC,STFangsong", 1,
+     FX_CodePage::kChineseSimplified},
+    {0x030549dc, "LiSu", "STHeiti,Heiti TC,STFangsong", 1,
+     FX_CodePage::kChineseSimplified},
+    {0x032edd44, "Simhei", "STHeiti,Heiti TC,STFangsong", 1,
+     FX_CodePage::kChineseSimplified},
     {0x03eac6fc, "PoorRichard-Regular",
-     "Noteworthy,Avenir Next Condensed,Impact", 2, 1252},
-    {0x03ed90e6, "Nina", "Microsoft Sans Serif", 0, 1252},
+     "Noteworthy,Avenir Next Condensed,Impact", 2,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x03ed90e6, "Nina", "Microsoft Sans Serif", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x077b56b3, "KingsoftPhoneticPlain",
      "LastResort,Apple "
      "Chancery,STIXVariants,STIXSizeOneSym,STIXSizeOneSym,Apple Braille",
-     0, 1252},
-    {0x078ed524, "MicrosoftSansSerif", "Songti SC,Apple Symbols", 0, 1252},
+     0, FX_CodePage::kMSWin_WesternEuropean},
+    {0x078ed524, "MicrosoftSansSerif", "Songti SC,Apple Symbols", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x089b18a9, "Arial", "Arial Unicode MS,Microsoft Sans Serif,Apple Symbols",
-     0, 1252},
-    {0x0b2cad72, "MonotypeCorsiva", "Arial Narrow,Impact", 8, 1252},
+     0, FX_CodePage::kMSWin_WesternEuropean},
+    {0x0b2cad72, "MonotypeCorsiva", "Arial Narrow,Impact", 8,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x0bb003e7, "Kartika",
-     "Arial Unicode MS,Microsoft Sans Serif,Arial Narrow,Damascus", 2, 1252},
-    {0x0bb469df, "VinerHandITC", "Comic Sans MS,Songti SC,STSong", 8, 1252},
-    {0x0bc1a851, "SegoeUI", "Apple Symbols", 0, 1252},
+     "Arial Unicode MS,Microsoft Sans Serif,Arial Narrow,Damascus", 2,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x0bb469df, "VinerHandITC", "Comic Sans MS,Songti SC,STSong", 8,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x0bc1a851, "SegoeUI", "Apple Symbols", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x0c112ebd, "KozukaGothicPro-VIM", "Microsoft Sans Serif,Apple Symbols", 0,
-     1252},
-    {0x0cfcb9c1, "AdobeThai", "Avenir Next Condensed Ultra Light", 0, 847},
-    {0x0e7de0f9, "Playbill", "STIXNonUnicode", 0, 1252},
-    {0x0eff47c3, "STHupo", "Kaiti SC,Songti SC,STHeiti", 0, 936},
+     FX_CodePage::kMSWin_WesternEuropean},
+    // Was 847 (not defined), presumably 874 (Thai).
+    {0x0cfcb9c1, "AdobeThai", "Avenir Next Condensed Ultra Light", 0,
+     FX_CodePage::kMSDOS_Thai},
+    {0x0e7de0f9, "Playbill", "STIXNonUnicode", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x0eff47c3, "STHupo", "Kaiti SC,Songti SC,STHeiti", 0,
+     FX_CodePage::kChineseSimplified},
     {0x107ad374, "Constantia", "Arial Unicode MS,Palatino,Baskerville", 2,
-     1252},
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x12194c2d, "KunstlerScript",
-     "Avenir Next Condensed Demi Bold,Arial Narrow", 8, 1252},
+     "Avenir Next Condensed Demi Bold,Arial Narrow", 8,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x135ef6a1, "MinionProSmBd", "Microsoft Sans Serif,Apple Symbols", 0,
-     1252},
-    {0x158c4049, "Garamond", "Impact,Arial Narrow", 2, 1252},
-    {0x160ecb24, "STZhongsong", "STFangsong,Songti SC", 0, 936},
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x158c4049, "Garamond", "Impact,Arial Narrow", 2,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x160ecb24, "STZhongsong", "STFangsong,Songti SC", 0,
+     FX_CodePage::kChineseSimplified},
     {0x161ed07e, "MSGothic",
      "WenQuanYi Zen Hei Mono,AR PL UMing CN,AR PL UMing HK,AR PL UMing "
      "TW,Microsoft Sans Serif,Apple Symbols",
-     1, 1252},
-    {0x171d1ed1, "SnapITC-Regular", "STHeiti,Arial Black", 0, 1252},
-    {0x18d1188f, "Cambria", "Arial Unicode MS", 2, 1252},
+     1, FX_CodePage::kMSWin_WesternEuropean},
+    {0x171d1ed1, "SnapITC-Regular", "STHeiti,Arial Black", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x18d1188f, "Cambria", "Arial Unicode MS", 2,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x18eaf350, "ArialUnicodeMS", "Microsoft Sans Serif,Apple Symbols", 0,
-     936},
-    {0x1a92d115, "MingLiU", "Heiti SC,STHeiti", 1, 1252},
-    {0x1cc217c6, "TrebuchetMS", "Damascus,Impact,Arial Narrow", 0, 1252},
+     FX_CodePage::kChineseSimplified},
+    {0x1a92d115, "MingLiU", "Heiti SC,STHeiti", 1,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x1cc217c6, "TrebuchetMS", "Damascus,Impact,Arial Narrow", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x1d649596, "BasemicTimes", "Liberation Serif,Impact,Arial Narrow", 0,
-     1252},
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x1e34ee60, "BellMT",
-     "Papyrus,STIXNonUnicode,Microsoft Sans Serif,Avenir Light", 2, 1252},
+     "Papyrus,STIXNonUnicode,Microsoft Sans Serif,Avenir Light", 2,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x1eb36945, "CooperBlack",
-     "Marion,STIXNonUnicode,Arial Rounded MT Bold,Lucida Grande", 2, 1252},
+     "Marion,STIXNonUnicode,Arial Rounded MT Bold,Lucida Grande", 2,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x1ef7787d, "BatangChe",
      "WenQuanYi Zen Hei Mono,AR PL UMing CN,,AR PL UMing HK,AR PL UMing TW,AR "
      "PL UMing TW MBE,Arial Unicode MS,Heiti TC",
-     1, 1252},
+     1, FX_CodePage::kMSWin_WesternEuropean},
     {0x20b3bd3a, "BrushScriptMT",
      "STIXNonUnicode,Damascus,Arial Narrow,Avenir Next Condensed,Cochin", 8,
-     1252},
-    {0x220877aa, "Candara", "Cochin,Baskerville,Marion", 0, 1252},
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x220877aa, "Candara", "Cochin,Baskerville,Marion", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x22135007, "FreestyleScript-Regular",
-     "STIXNonUnicode,Nadeem,Zapf Dingbats", 8, 1252},
+     "STIXNonUnicode,Nadeem,Zapf Dingbats", 8,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x251059c3, "Chiller",
      "Zapf Dingbats,Damascus,STIXNonUnicode,Papyrus,KufiStandardGK,Baghdad", 0,
-     1252},
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x25bed6dd, "MSReferenceSansSerif",
      "Tahoma,Apple Symbols,Apple LiGothic,Arial Unicode MS,Lucida "
      "Grande,Microsoft Sans Serif",
-     0, 1252},
+     0, FX_CodePage::kMSWin_WesternEuropean},
     {0x28154c81, "Parchment-Regular", "Microsoft Sans Serif,Apple Symbols", 8,
-     1252},
-    {0x29711eb9, "STLiti", "Kaiti SC,Songti SC", 0, 936},
-    {0x2b1993b4, "Basemic", "Impact,Arial Narrow", 0, 1252},
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x29711eb9, "STLiti", "Kaiti SC,Songti SC", 0,
+     FX_CodePage::kChineseSimplified},
+    {0x2b1993b4, "Basemic", "Impact,Arial Narrow", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x2b316339, "NiagaraSolid-Reg", "Microsoft Sans Serif,Apple Symbols", 0,
-     1252},
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x2c147529, "FootlightMTLight",
-     "STIXNonUnicode,Avenir Next Condensed Heavy,PT Sans,Noteworthy", 0, 1252},
+     "STIXNonUnicode,Avenir Next Condensed Heavy,PT Sans,Noteworthy", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x2c198928, "HarlowSolid",
-     "Avenir Medium,Avenir Next Medium,Arial Unicode MS", 0, 1252},
+     "Avenir Medium,Avenir Next Medium,Arial Unicode MS", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x2c6ac6b2, "LucidaBright",
      "PT Sans Narrow,Papyrus,Damascus,STIXNonUnicode,Arial Rounded MT "
      "Bold,Comic Sans MS,Avenir Next",
-     2, 1252},
+     2, FX_CodePage::kMSWin_WesternEuropean},
     {0x2c9f38e2, "KozukaMinchoPro-VIR", "Microsoft Sans Serif,Apple Symbols", 0,
-     1252},
-    {0x2d5a47b0, "STCaiyun", "Kaiti SC,Songti SC", 0, 936},
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x2d5a47b0, "STCaiyun", "Kaiti SC,Songti SC", 0,
+     FX_CodePage::kChineseSimplified},
     {0x2def26bf, "BernardMT-Condensed",
-     "Impact,Avenir Next Condensed Demi Bold,American Typewriter", 0, 1252},
+     "Impact,Avenir Next Condensed Demi Bold,American Typewriter", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x2fd8930b, "KozukaMinchoPr6NR", "Microsoft Sans Serif,Apple Symbols", 0,
-     1252},
-    {0x3115525a, "FangSong_GB2312", "Hiragino Sans GB,STHeiti", 0, 1252},
-    {0x31327817, "MyriadPro", "Microsoft Sans Serif,Apple Symbols", 0, 1252},
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x3115525a, "FangSong_GB2312", "Hiragino Sans GB,STHeiti", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x31327817, "MyriadPro", "Microsoft Sans Serif,Apple Symbols", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x32244975, "Helvetica",
-     "Arial Narrow,Arial Unicode MS,Damascus,STIXNonUnicode", 0, 1252},
-    {0x32ac995c, "Terminal", "Microsoft Sans Serif,Apple Symbols", 0, 1252},
+     "Arial Narrow,Arial Unicode MS,Damascus,STIXNonUnicode", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x32ac995c, "Terminal", "Microsoft Sans Serif,Apple Symbols", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x338d648a, "NiagaraEngraved-Reg", "Microsoft Sans Serif,Apple Symbols", 0,
-     1252},
-    {0x33bb65f2, "Sylfaen", "Arial Unicode MS,Marion", 2, 1252},
-    {0x3402c30e, "MSPMincho", "Arial Unicode MS,Apple SD Gothic Neo", 2, 1252},
-    {0x3412bf31, "SimSun-PUA", "STHeiti,Heiti TC,STFangsong", 0, 936},
-    {0x36eb39b9, "BerlinSansFB", "American Typewriter,Impact", 0, 1252},
-    {0x36f42055, "UniversATT", "Microsoft Sans Serif", 0, 1252},
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x33bb65f2, "Sylfaen", "Arial Unicode MS,Marion", 2,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x3402c30e, "MSPMincho", "Arial Unicode MS,Apple SD Gothic Neo", 2,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x3412bf31, "SimSun-PUA", "STHeiti,Heiti TC,STFangsong", 0,
+     FX_CodePage::kChineseSimplified},
+    {0x36eb39b9, "BerlinSansFB", "American Typewriter,Impact", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x36f42055, "UniversATT", "Microsoft Sans Serif", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x3864c4f6, "HighTowerText", "STIXGeneral,.Helvetica Neue Desk UI", 2,
-     1252},
-    {0x3a257d03, "FangSong_GB2312", "Hiragino Sans GB,STHeiti", 0, 1252},
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x3a257d03, "FangSong_GB2312", "Hiragino Sans GB,STHeiti", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x3cdae668, "FreestyleScript", "Nadeem,Zapf Dingbats,STIXNonUnicode", 8,
-     1252},
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x3d55aed7, "Jokerman",
-     "Papyrus,Lucida Grande,Heiti TC,American Typewriter", 0, 1252},
-    {0x3d5b4385, "PMingLiU", "Heiti SC,STHeiti", 2, 1252},
-    {0x3d9b7669, "EstrangeloEdessa", "American Typewriter,Marion", 0, 1252},
-    {0x3e532d74, "FranklinGothicMedium", "Impact,Arial Narrow", 0, 1252},
-    {0x3e6aa32d, "NSimSun", "STHeiti,STFangsong", 1, 936},
+     "Papyrus,Lucida Grande,Heiti TC,American Typewriter", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x3d5b4385, "PMingLiU", "Heiti SC,STHeiti", 2,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x3d9b7669, "EstrangeloEdessa", "American Typewriter,Marion", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x3e532d74, "FranklinGothicMedium", "Impact,Arial Narrow", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x3e6aa32d, "NSimSun", "STHeiti,STFangsong", 1,
+     FX_CodePage::kChineseSimplified},
     {0x3f6c36a8, "Gautami",
-     "Damascus,STIXNonUnicode,STIXGeneral,American Typewriter", 0, 1252},
-    {0x3ff32662, "Chiller-Regular", "Papyrus,KufiStandardGK,Baghdad", 0, 1252},
-    {0x409de312, "ModernNo.20", "Avenir Next Condensed,Impact", 2, 1252},
+     "Damascus,STIXNonUnicode,STIXGeneral,American Typewriter", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x3ff32662, "Chiller-Regular", "Papyrus,KufiStandardGK,Baghdad", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x409de312, "ModernNo.20", "Avenir Next Condensed,Impact", 2,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x41443c5e, "Georgia", ".Helvetica Neue Desk UI,Arial Unicode MS", 2,
-     1252},
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x4160ade5, "BellGothicStdBlack", "Microsoft Sans Serif,Apple Symbols", 0,
-     1252},
-    {0x421976c4, "Modern-Regular", "Impact", 2, 1252},
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x421976c4, "Modern-Regular", "Impact", 2,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x422a7252, "Stencil", "STIXNonUnicode,Songti SC,Georgia,Baskerville", 0,
-     1252},
-    {0x42c8554f, "Fixedsys", "Microsoft Sans Serif,Apple Symbols", 0, 1252},
-    {0x435cb41d, "Roman", "Arial Narrow", 0, 1252},
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x42c8554f, "Fixedsys", "Microsoft Sans Serif,Apple Symbols", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x435cb41d, "Roman", "Arial Narrow", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x47882383, "CourierNew", "PCMyungjo,Osaka,Arial Unicode MS,Songti SC", 1,
-     1252},
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x480a2338, "BerlinSansFBDemi",
-     "STIXNonUnicode,American Typewriter,Avenir Next Condensed Heavy", 0, 1252},
-    {0x480bf7a4, "CourierStd", "Courier New", 0, 1252},
+     "STIXNonUnicode,American Typewriter,Avenir Next Condensed Heavy", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x480bf7a4, "CourierStd", "Courier New", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x481ad6ed, "VladimirScript",
-     "STIXNonUnicode,Avenir Next Condensed,Impact", 8, 1252},
-    {0x4911577a, "YouYuan", "STHeiti,Heiti TC", 1, 936},
-    {0x4a788d72, "STXingkai", "Kaiti SC,Songti SC", 0, 936},
+     "STIXNonUnicode,Avenir Next Condensed,Impact", 8,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x4911577a, "YouYuan", "STHeiti,Heiti TC", 1,
+     FX_CodePage::kChineseSimplified},
+    {0x4a788d72, "STXingkai", "Kaiti SC,Songti SC", 0,
+     FX_CodePage::kChineseSimplified},
     {0x4bf88566, "SegoeCondensed", "Microsoft Sans Serif,Apple Symbols", 0,
-     1252},
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x4ccf51a4, "BerlinSansFB-Reg",
-     "STIXNonUnicode,American Typewriter,Impact", 0, 1252},
-    {0x4ea967ce, "GulimChe", "Arial Unicode MS,Heiti TC,STFangsong", 1, 1252},
+     "STIXNonUnicode,American Typewriter,Impact", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x4ea967ce, "GulimChe", "Arial Unicode MS,Heiti TC,STFangsong", 1,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x4f68bd79, "LetterGothicStd",
-     "Courier New,Andale Mono,Ayuthaya,PCMyungjo,Osaka", 0, 1252},
+     "Courier New,Andale Mono,Ayuthaya,PCMyungjo,Osaka", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x51a0d0e6, "KozukaGothicPr6NM", "Microsoft Sans Serif,Apple Symbols", 0,
-     1252},
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x531b3dea, "BasemicSymbol", "Microsoft Sans Serif,Apple Symbols", 0,
-     1252},
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x5333fd39, "CalifornianFB-Reg",
-     "American Typewriter,Avenir Next Condensed,Impact", 2, 1252},
-    {0x53561a54, "FZYTK--GBK1-0", "STFangsong,Songti SC,STSong", 0, 936},
+     "American Typewriter,Avenir Next Condensed,Impact", 2,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x53561a54, "FZYTK--GBK1-0", "STFangsong,Songti SC,STSong", 0,
+     FX_CodePage::kChineseSimplified},
     {0x55e0dde6, "LucidaSansTypewriter", "Menlo,Courier New,Andale Mono", 0,
-     1252},
-    {0x574d4d3d, "AdobeArabic", "Arial Narrow", 0, 1252},
-    {0x5792e759, "STKaiti", "Songti SC,Arial Unicode MS", 0, 936},
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x574d4d3d, "AdobeArabic", "Arial Narrow", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x5792e759, "STKaiti", "Songti SC,Arial Unicode MS", 0,
+     FX_CodePage::kChineseSimplified},
     {0x5921978e, "LucidaSansUnicode", "Lucida Grande,Arial Unicode MS,Menlo", 0,
-     1252},
-    {0x594e2da4, "Vrinda", "Geeza Pro,Damascus,STIXGeneral,Gill Sans", 0, 1252},
-    {0x59baa9a2, "KaiTi_GB2312", "Hiragino Sans GB,STHeiti", 0, 1252},
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x594e2da4, "Vrinda", "Geeza Pro,Damascus,STIXGeneral,Gill Sans", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x59baa9a2, "KaiTi_GB2312", "Hiragino Sans GB,STHeiti", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x5cfedf4f, "BaskOldFace",
-     "Avenir Next Condensed Heavy,PT Sans,Avenir Next Condensed", 0, 1252},
-    {0x5e16ac91, "TrajanPro", "Arial Narrow,PT Sans Narrow,Damascus", 0, 1252},
+     "Avenir Next Condensed Heavy,PT Sans,Avenir Next Condensed", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x5e16ac91, "TrajanPro", "Arial Narrow,PT Sans Narrow,Damascus", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x5f97921c, "AdobeMyungjoStdM",
-     "AppleMyungjo,AppleGothic,Arial Unicode MS", 0, 936},
-    {0x5fefbfad, "Batang", "Arial Unicode MS,Songti SC", 2, 1252},
-    {0x605342b9, "DotumChe", "Arial Unicode MS,Heiti TC", 1, 1252},
-    {0x608c5f9a, "KaiTi_GB2312", "Hiragino Sans GB,STHeiti,Heiti TC", 0, 936},
+     "AppleMyungjo,AppleGothic,Arial Unicode MS", 0,
+     FX_CodePage::kChineseSimplified},
+    {0x5fefbfad, "Batang", "Arial Unicode MS,Songti SC", 2,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x605342b9, "DotumChe", "Arial Unicode MS,Heiti TC", 1,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x608c5f9a, "KaiTi_GB2312", "Hiragino Sans GB,STHeiti,Heiti TC", 0,
+     FX_CodePage::kChineseSimplified},
     {0x61efd0d1, "MaturaMTScriptCapitals",
      "Kokonor,Damascus,STIXNonUnicode,STHeiti,Arial Black,Avenir Next Heavy", 0,
-     1252},
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x626608a9, "MVBoli",
-     "Apple Braille,Geeza Pro,Microsoft Sans Serif,Apple Symbols", 0, 1252},
-    {0x630501a3, "SmallFonts", "Microsoft Sans Serif,Apple Symbols", 0, 1252},
-    {0x65d0e2a9, "FZYTK--GBK1-0", "STFangsong,Songti SC,STSong", 0, 936},
-    {0x669f29e1, "FZSTK--GBK1-0", "STHeiti,Heiti TC", 0, 936},
+     "Apple Braille,Geeza Pro,Microsoft Sans Serif,Apple Symbols", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x630501a3, "SmallFonts", "Microsoft Sans Serif,Apple Symbols", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x65d0e2a9, "FZYTK--GBK1-0", "STFangsong,Songti SC,STSong", 0,
+     FX_CodePage::kChineseSimplified},
+    {0x669f29e1, "FZSTK--GBK1-0", "STHeiti,Heiti TC", 0,
+     FX_CodePage::kChineseSimplified},
     {0x673a9e5f, "Tunga",
      "Damascus,STIXNonUnicode,Avenir Next Condensed,Avenir Next Condensed "
      "Ultra Light,Futura",
-     0, 1252},
-    {0x691aa4ce, "NiagaraSolid", "Microsoft Sans Serif,Apple Symbols", 0, 1252},
-    {0x696259b7, "Corbel", "Cochin,Baskerville,Marion", 0, 1252},
+     0, FX_CodePage::kMSWin_WesternEuropean},
+    {0x691aa4ce, "NiagaraSolid", "Microsoft Sans Serif,Apple Symbols", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x696259b7, "Corbel", "Cochin,Baskerville,Marion", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x696ee9be, "STXihei", "STHeiti,Heiti TC,Songti SC,Arial Unicode MS", 0,
-     936},
-    {0x6c59cf69, "Dotum", "Arial Unicode MS,Songti SC", 0, 1252},
-    {0x707fa561, "Gungsuh", "Arial Unicode MS,Heiti TC", 2, 1252},
+     FX_CodePage::kChineseSimplified},
+    {0x6c59cf69, "Dotum", "Arial Unicode MS,Songti SC", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x707fa561, "Gungsuh", "Arial Unicode MS,Heiti TC", 2,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x71416bb2, "ZWAdobeF",
-     "STIXSizeFourSym,STIXSizeThreeSym,STIXSizeTwoSym,STIXSizeOneSym", 0, 1252},
+     "STIXSizeFourSym,STIXSizeThreeSym,STIXSizeTwoSym,STIXSizeOneSym", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x71b41801, "Verdana",
      "Tahoma,Marion,Apple Symbols,.Helvetica Neue Desk UI,Lucida "
      "Grande,Courier New",
-     0, 1252},
-    {0x73f25e4c, "PalatinoLinotype", "Palatino,Arial Unicode MS", 0, 1252},
+     0, FX_CodePage::kMSWin_WesternEuropean},
+    {0x73f25e4c, "PalatinoLinotype", "Palatino,Arial Unicode MS", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x73f4d19f, "NiagaraEngraved", "Microsoft Sans Serif,Apple Symbols", 0,
-     1252},
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x74001694, "MyriadProBlack", "Palatino,Baskerville,Marion,Cochin", 0,
-     1252},
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x74b14d8f, "Haettenschweiler", "Microsoft Sans Serif,Apple Symbols", 0,
-     1252},
-    {0x74cb44ee, "NSimSun", "STHeiti,Heiti TC,STFangsong", 1, 936},
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x74cb44ee, "NSimSun", "STHeiti,Heiti TC,STFangsong", 1,
+     FX_CodePage::kChineseSimplified},
     {0x76b4d7ff, "Shruti",
-     "Damascus,STIXNonUnicode,Arial Unicode MS,American Typewriter", 0, 1252},
-    {0x788b3533, "Webdings", "Microsoft Sans Serif,Apple Symbols", 6, 42},
-    {0x797dde99, "MSSerif", "Microsoft Sans Serif,Apple Symbols", 0, 1252},
+     "Damascus,STIXNonUnicode,Arial Unicode MS,American Typewriter", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x788b3533, "Webdings", "Microsoft Sans Serif,Apple Symbols", 6,
+     FX_CodePage::kSymbol},
+    {0x797dde99, "MSSerif", "Microsoft Sans Serif,Apple Symbols", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x7a0f9e9e, "MSMincho",
      "WenQuanYi Zen Hei Mono,AR PL UMing CN,AR PL UMing HK,AR PL UMing TW,AR "
      "PL UMing TW MBE,Arial Unicode MS,Apple SD Gothic Neo",
-     1, 1252},
+     1, FX_CodePage::kMSWin_WesternEuropean},
     {0x7b439caf, "OldEnglishTextMT",
-     "STIXNonUnicode,Arial Unicode MS,Baskerville,Avenir Next Medium", 0, 1252},
+     "STIXNonUnicode,Arial Unicode MS,Baskerville,Avenir Next Medium", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x8213a433, "LucidaSans-Typewriter",
-     "Comic Sans MS,Avenir Next,Arial Rounded MT Bold", 0, 1252},
-    {0x82fec929, "AdobeSongStd", "Heiti TC,STHeiti", 0, 936},
-    {0x83581825, "Modern", "Avenir Next Condensed,Impact", 0, 1252},
+     "Comic Sans MS,Avenir Next,Arial Rounded MT Bold", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x82fec929, "AdobeSongStd", "Heiti TC,STHeiti", 0,
+     FX_CodePage::kChineseSimplified},
+    {0x83581825, "Modern", "Avenir Next Condensed,Impact", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x835a2823, "Algerian",
      "STIXNonUnicode,Baskerville,Avenir Next Medium,American Typewriter", 0,
-     1252},
-    {0x83dab9f5, "Script", "Arial Narrow", 0, 1252},
-    {0x847b56da, "Tahoma", "Songti SC,Apple Symbols", 0, 1252},
-    {0x8a783cb2, "SimSun-PUA", "STHeiti,Heiti TC,STFangsong", 0, 1252},
-    {0x8b5cac0e, "Onyx", "Microsoft Sans Serif,Apple Symbols", 0, 1252},
-    {0x8c6a499e, "Gulim", "Arial Unicode MS,Songti SC", 0, 1252},
-    {0x8e0af790, "JuiceITC", "Nadeem,Al Bayan", 0, 1252},
-    {0x8e8d43b2, "Centaur", "Avenir Next Condensed,Noteworthy,Impact", 2, 1252},
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x83dab9f5, "Script", "Arial Narrow", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x847b56da, "Tahoma", "Songti SC,Apple Symbols", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x8a783cb2, "SimSun-PUA", "STHeiti,Heiti TC,STFangsong", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x8b5cac0e, "Onyx", "Microsoft Sans Serif,Apple Symbols", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x8c6a499e, "Gulim", "Arial Unicode MS,Songti SC", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x8e0af790, "JuiceITC", "Nadeem,Al Bayan", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x8e8d43b2, "Centaur", "Avenir Next Condensed,Noteworthy,Impact", 2,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x8ee4dcca, "BookshelfSymbol7", "Microsoft Sans Serif,Apple Symbols", 0,
-     1252},
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x90794800, "BellGothicStdLight", "Microsoft Sans Serif,Apple Symbols", 0,
-     1252},
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x909b516a, "Century", "Damascus,Andale Mono,Songti SC,Arial Unicode MS",
-     2, 1252},
-    {0x92ae370d, "MSOutlook", "Microsoft Sans Serif,Apple Symbols", 4, 42},
+     2, FX_CodePage::kMSWin_WesternEuropean},
+    {0x92ae370d, "MSOutlook", "Microsoft Sans Serif,Apple Symbols", 4,
+     FX_CodePage::kSymbol},
     {0x93c9fbf1, "LucidaFax",
      "PT Sans Narrow,Papyrus,Kokonor,Geeza Pro,Arial Rounded MT Bold,Lucida "
      "Grande,Futura",
-     2, 1252},
+     2, FX_CodePage::kMSWin_WesternEuropean},
     {0x9565085e, "BookAntiqua", "Palatino,Microsoft Sans Serif,Apple Symbols",
-     2, 1252},
-    {0x9856d95d, "AdobeMingStd", "AHiragino Sans GB,Heiti TC,STHeiti", 0, 949},
+     2, FX_CodePage::kMSWin_WesternEuropean},
+    {0x9856d95d, "AdobeMingStd", "AHiragino Sans GB,Heiti TC,STHeiti", 0,
+     FX_CodePage::kHangul},
     {0x9bbadd6b, "ColonnaMT", "Noteworthy,Avenir Next Condensed,Impact", 0,
-     1252},
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x9cbd16a4, "ShowcardGothic-Reg",
-     "Arial Unicode MS,Georgia,American Typewriter", 0, 1252},
-    {0x9d73008e, "MSSansSerif", "Songti SC,Apple Symbols", 0, 1252},
+     "Arial Unicode MS,Georgia,American Typewriter", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x9d73008e, "MSSansSerif", "Songti SC,Apple Symbols", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xa0607db1, "GungsuhChe",
      "WenQuanYi Zen Hei Mono,AR PL UMing CN,AR PL UMing HK,AR PL UMing TW,AR "
      "PL UMing TW MBE,Arial Unicode MS,Heiti TC,STFangsong",
-     1, 1252},
-    {0xa0bcf6a1, "LatinWide", "Zapfino,Arial Black,STHeiti", 2, 1252},
-    {0xa1429b36, "Symbol", "Microsoft Sans Serif,Apple Symbols", 6, 42},
-    {0xa1fa5abc, "Wingdings2", "Microsoft Sans Serif,Apple Symbols", 6, 42},
-    {0xa1fa5abd, "Wingdings3", "Microsoft Sans Serif,Apple Symbols", 6, 42},
+     1, FX_CodePage::kMSWin_WesternEuropean},
+    {0xa0bcf6a1, "LatinWide", "Zapfino,Arial Black,STHeiti", 2,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xa1429b36, "Symbol", "Microsoft Sans Serif,Apple Symbols", 6,
+     FX_CodePage::kSymbol},
+    {0xa1fa5abc, "Wingdings2", "Microsoft Sans Serif,Apple Symbols", 6,
+     FX_CodePage::kSymbol},
+    {0xa1fa5abd, "Wingdings3", "Microsoft Sans Serif,Apple Symbols", 6,
+     FX_CodePage::kSymbol},
     {0xa427bad4, "InformalRoman-Regular",
-     "STIXNonUnicode,Arial Narrow,Avenir Next Condensed Demi Bold", 8, 1252},
-    {0xa8b92ece, "FZSTK--GBK1-0", "STHeiti,Heiti TC,STFangsong", 0, 936},
+     "STIXNonUnicode,Arial Narrow,Avenir Next Condensed Demi Bold", 8,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xa8b92ece, "FZSTK--GBK1-0", "STHeiti,Heiti TC,STFangsong", 0,
+     FX_CodePage::kChineseSimplified},
     {0xa8d83ece, "CalifornianFB",
-     "American Typewriter,Avenir Next Condensed,Impact", 2, 1252},
+     "American Typewriter,Avenir Next Condensed,Impact", 2,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xaa3e082c, "Kingsoft-Phonetic",
-     "STIXVariants,STIXSizeOneSym,Apple Braille", 0, 1252},
+     "STIXVariants,STIXSizeOneSym,Apple Braille", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xaa6bcabe, "HarlowSolidItalic",
      "STIXNonUnicode,Avenir Medium,Avenir Next Medium,Arial Unicode MS", 0,
-     1252},
-    {0xade5337c, "MSUIGothic", "Arial Unicode MS,Apple SD Gothic Neo", 0, 1252},
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xade5337c, "MSUIGothic", "Arial Unicode MS,Apple SD Gothic Neo", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xb08dd941, "WideLatin",
      "Marion,Papyrus,Nanum Pen Script,Zapf Dingbats,Damascus,Zapfino,Arial "
      "Black,STHeiti",
-     2, 1252},
+     2, FX_CodePage::kMSWin_WesternEuropean},
     {0xb12765e0, "ITCLegacySansStdBook",
-     "LastResort,.Helvetica Neue Desk UI,Arial Unicode MS,Palatino", 0, 1252},
+     "LastResort,.Helvetica Neue Desk UI,Arial Unicode MS,Palatino", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xb207f05d, "PoorRichard", "Noteworthy,Avenir Next Condensed,Impact", 2,
-     1252},
-    {0xb3bc492f, "JuiceITC-Regular", "Nadeem,Al Bayan,STIXNonUnicode", 0, 1252},
-    {0xb5545399, "Marlett", "Microsoft Sans Serif,Apple Symbols", 4, 42},
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xb3bc492f, "JuiceITC-Regular", "Nadeem,Al Bayan,STIXNonUnicode", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xb5545399, "Marlett", "Microsoft Sans Serif,Apple Symbols", 4,
+     FX_CodePage::kSymbol},
     {0xb5dd1ebb, "BritannicBold",
-     "Damascus,STIXNonUnicode,Avenir Next Condensed Heavy,PT Sans", 0, 1252},
-    {0xb699c1c5, "LucidaCalligraphy-Italic", "STHeiti,Arial Black", 0, 1252},
+     "Damascus,STIXNonUnicode,Avenir Next Condensed Heavy,PT Sans", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xb699c1c5, "LucidaCalligraphy-Italic", "STHeiti,Arial Black", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xb725d629, "TimesNewRoman", "Microsoft Sans Serif,Apple Symbols", 2,
-     1252},
-    {0xb7eaebeb, "AdobeHeitiStdR", "Heiti TC,STHeiti", 0, 936},
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xb7eaebeb, "AdobeHeitiStdR", "Heiti TC,STHeiti", 0,
+     FX_CodePage::kChineseSimplified},
     {0xbd29c486, "BerlinSansFBDemi-Bold",
-     "American Typewriter,Avenir Next Condensed Heavy", 0, 1252},
+     "American Typewriter,Avenir Next Condensed Heavy", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xbe8a8db4, "BookshelfSymbolSeven", "Microsoft Sans Serif,Apple Symbols",
-     0, 1252},
+     0, FX_CodePage::kMSWin_WesternEuropean},
     {0xc16c0118, "AdobeHebrew",
-     ".Helvetica Neue Desk UI,Palatino,American Typewriter", 0, 1252},
-    {0xc318b0af, "MyriadProLight", "Palatino,Baskerville,Marion", 0, 1252},
-    {0xc65e5659, "CambriaMath", "Arial Unicode MS", 2, 1252},
-    {0xc75c8f05, "LucidaConsole", "Courier New,Menlo,Andale Mono", 1, 1252},
-    {0xca7c35d6, "Calibri", "Apple Symbols,HeadLineA", 0, 1252},
-    {0xcb053f53, "MicrosoftYaHei", "Arial Unicode MS", 0, 936},
-    {0xcb7190f9, "Magneto-Bold", "Lucida Grande", 0, 1252},
-    {0xcca00cc5, "System", "Microsoft Sans Serif,Apple Symbols", 0, 1252},
-    {0xccad6f76, "Jokerman-Regular", "Lucida Grande", 0, 1252},
-    {0xccc5818c, "EuroSign", "Microsoft Sans Serif,Apple Symbols", 0, 1252},
+     ".Helvetica Neue Desk UI,Palatino,American Typewriter", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xc318b0af, "MyriadProLight", "Palatino,Baskerville,Marion", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xc65e5659, "CambriaMath", "Arial Unicode MS", 2,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xc75c8f05, "LucidaConsole", "Courier New,Menlo,Andale Mono", 1,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xca7c35d6, "Calibri", "Apple Symbols,HeadLineA", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xcb053f53, "MicrosoftYaHei", "Arial Unicode MS", 0,
+     FX_CodePage::kChineseSimplified},
+    {0xcb7190f9, "Magneto-Bold", "Lucida Grande", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xcca00cc5, "System", "Microsoft Sans Serif,Apple Symbols", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xccad6f76, "Jokerman-Regular", "Lucida Grande", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xccc5818c, "EuroSign", "Microsoft Sans Serif,Apple Symbols", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xcf3d7234, "LucidaHandwriting-Italic",
-     "Microsoft Sans Serif,Apple Symbols", 0, 1252},
+     "Microsoft Sans Serif,Apple Symbols", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xcf7b8fdb, "MinionPro",
-     "Bell MT,Corbel,Times New Roman,Cambria,Berlin Sans FB", 0, 1252},
-    {0xcfe5755f, "Simhei", "STHeiti,Heiti TC,STFangsong", 1, 936},
-    {0xd011f4ee, "MSPGothic", "Arial Unicode MS,Apple SD Gothic Neo", 0, 1252},
+     "Bell MT,Corbel,Times New Roman,Cambria,Berlin Sans FB", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xcfe5755f, "Simhei", "STHeiti,Heiti TC,STFangsong", 1,
+     FX_CodePage::kChineseSimplified},
+    {0xd011f4ee, "MSPGothic", "Arial Unicode MS,Apple SD Gothic Neo", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xd060e7ef, "Vivaldi",
      "STIXNonUnicode,Arial Unicode MS,Avenir Medium,Avenir Next Medium", 8,
-     1252},
-    {0xd07edec1, "FranklinGothic-Medium", "Impact,Arial Narrow", 0, 1252},
-    {0xd107243f, "SimSun", "STHeiti,Heiti TC,STFangsong", 0, 936},
-    {0xd1881562, "ArialNarrow", "PT Sans Narrow,Apple Symbols", 0, 1252},
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xd07edec1, "FranklinGothic-Medium", "Impact,Arial Narrow", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xd107243f, "SimSun", "STHeiti,Heiti TC,STFangsong", 0,
+     FX_CodePage::kChineseSimplified},
+    {0xd1881562, "ArialNarrow", "PT Sans Narrow,Apple Symbols", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xd22b7dce, "BodoniMTPosterCompressed",
-     "Microsoft Sans Serif,Apple Symbols", 0, 1252},
+     "Microsoft Sans Serif,Apple Symbols", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xd22bfa60, "ComicSansMS",
      "Damascus,Georgia,.Helvetica Neue Desk UI,Lucida Grande,Arial Unicode MS",
-     8, 1252},
+     8, FX_CodePage::kMSWin_WesternEuropean},
     {0xd3bd0e35, "Bauhaus93",
-     "STIXNonUnicode,Arial Unicode MS,Avenir Next,Avenir", 0, 1252},
-    {0xd429ee7a, "STFangsong", "Songti SC,Arial Unicode MS", 0, 936},
+     "STIXNonUnicode,Arial Unicode MS,Avenir Next,Avenir", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xd429ee7a, "STFangsong", "Songti SC,Arial Unicode MS", 0,
+     FX_CodePage::kChineseSimplified},
     {0xd6679c12, "BernardMTCondensed", "Impact,Avenir Next Condensed Demi Bold",
-     0, 1252},
+     0, FX_CodePage::kMSWin_WesternEuropean},
     {0xd8e8a027, "LucidaSans",
      "Arial Narrow,Khmer MN,Kokonor,Damascus,Microsoft Sans Serif,Apple "
      "Symbols",
-     0, 1252},
+     0, FX_CodePage::kMSWin_WesternEuropean},
     {0xd9fe7761, "HighTowerText-Reg",
-     "STIXGeneral,.Helvetica Neue Desk UI,Trebuchet MS", 2, 1252},
-    {0xda7e551e, "STSong", "Arial Unicode MS", 0, 936},
-    {0xdaa6842d, "STZhongsong", "STFangsong,Songti SC,STSong", 0, 936},
-    {0xdaaab93f, "STFangsong", "Songti SC,Arial Unicode MS", 0, 936},
-    {0xdaeb0713, "STSong", "Songti SC,Arial Unicode MS", 0, 936},
-    {0xdafedbef, "STCaiyun", "Kaiti SC,Songti SC,STHeiti", 0, 936},
+     "STIXGeneral,.Helvetica Neue Desk UI,Trebuchet MS", 2,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xda7e551e, "STSong", "Arial Unicode MS", 0,
+     FX_CodePage::kChineseSimplified},
+    {0xdaa6842d, "STZhongsong", "STFangsong,Songti SC,STSong", 0,
+     FX_CodePage::kChineseSimplified},
+    {0xdaaab93f, "STFangsong", "Songti SC,Arial Unicode MS", 0,
+     FX_CodePage::kChineseSimplified},
+    {0xdaeb0713, "STSong", "Songti SC,Arial Unicode MS", 0,
+     FX_CodePage::kChineseSimplified},
+    {0xdafedbef, "STCaiyun", "Kaiti SC,Songti SC,STHeiti", 0,
+     FX_CodePage::kChineseSimplified},
     {0xdb00a3d9, "Broadway",
-     "Papyrus,STIXNonUnicode,Arial Black,Avenir Next Heavy,Heiti TC", 0, 1252},
-    {0xdb1f5ad4, "STXinwei", "Kaiti SC,Songti SC,STHeiti", 0, 936},
-    {0xdb326e7f, "STKaiti", "Songti SC,Arial Unicode MS", 0, 936},
-    {0xdb69595a, "STHupo", "Kaiti SC,Songti SC,STHeiti", 0, 936},
-    {0xdba0082c, "STXihei", "Songti SC,Arial Unicode MS", 0, 936},
-    {0xdbd0ab18, "STXingkai", "Kaiti SC,Songti SC", 0, 936},
-    {0xdc1a7db1, "STLiti", "Kaiti SC,Songti SC", 0, 936},
+     "Papyrus,STIXNonUnicode,Arial Black,Avenir Next Heavy,Heiti TC", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xdb1f5ad4, "STXinwei", "Kaiti SC,Songti SC,STHeiti", 0,
+     FX_CodePage::kChineseSimplified},
+    {0xdb326e7f, "STKaiti", "Songti SC,Arial Unicode MS", 0,
+     FX_CodePage::kChineseSimplified},
+    {0xdb69595a, "STHupo", "Kaiti SC,Songti SC,STHeiti", 0,
+     FX_CodePage::kChineseSimplified},
+    {0xdba0082c, "STXihei", "Songti SC,Arial Unicode MS", 0,
+     FX_CodePage::kChineseSimplified},
+    {0xdbd0ab18, "STXingkai", "Kaiti SC,Songti SC", 0,
+     FX_CodePage::kChineseSimplified},
+    {0xdc1a7db1, "STLiti", "Kaiti SC,Songti SC", 0,
+     FX_CodePage::kChineseSimplified},
     {0xdc33075f, "KristenITC-Regular",
-     "STIXNonUnicode,Damascus,Songti SC,STSong", 8, 1252},
+     "STIXNonUnicode,Damascus,Songti SC,STSong", 8,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xdcc7009c, "Harrington",
-     "STIXNonUnicode,Avenir Next Condensed Heavy,Noteworthy", 0, 1252},
-    {0xdd712466, "ArialBlack", "Geeza Pro,Damascus,Songti SC,STSong", 0, 1252},
-    {0xdde87b3e, "Impact", "Arial Narrow,Marion", 0, 1252},
+     "STIXNonUnicode,Avenir Next Condensed Heavy,Noteworthy", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xdd712466, "ArialBlack", "Geeza Pro,Damascus,Songti SC,STSong", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xdde87b3e, "Impact", "Arial Narrow,Marion", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xdf69fb32, "SnapITC",
-     "Arial Narrow,PT Sans Narrow,Marion,STHeiti,Arial Black", 0, 1252},
+     "Arial Narrow,PT Sans Narrow,Marion,STHeiti,Arial Black", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xdf8b25e8, "CenturyGothic",
-     "Damascus,Andale Mono,Songti SC,Arial Unicode MS", 0, 1252},
-    {0xe0f705c0, "KristenITC", "Songti SC,STSong", 8, 1252},
+     "Damascus,Andale Mono,Songti SC,Arial Unicode MS", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xe0f705c0, "KristenITC", "Songti SC,STSong", 8,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xe1427573, "Raavi",
      "Damascus,STIXNonUnicode,Marion,Papyrus,Avenir Next Condensed "
      "Heavy,American Typewriter",
-     0, 1252},
+     0, FX_CodePage::kMSWin_WesternEuropean},
     {0xe2cea0cb, "Magneto",
      "STIXNonUnicode,Damascus,Geeza Pro,Lucida Grande,Georgia,Heiti TC", 0,
-     1252},
-    {0xe36a9e17, "Ravie", "STHeiti,Arial Black", 0, 1252},
-    {0xe433f8e2, "Parchment", "Microsoft Sans Serif,Apple Symbols", 8, 1252},
-    {0xe43dff4a, "Wingdings", "Microsoft Sans Serif,Apple Symbols", 4, 42},
-    {0xe4e2c405, "MTExtra", "Microsoft Sans Serif,Apple Symbols", 6, 42},
-    {0xe618cc35, "InformalRoman", "Arial Narrow", 8, 1252},
-    {0xe6c27ffc, "Mistral", "Apple Symbols", 8, 1252},
-    {0xe7ebf4b9, "Courier", "Courier New", 0, 1252},
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xe36a9e17, "Ravie", "STHeiti,Arial Black", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xe433f8e2, "Parchment", "Microsoft Sans Serif,Apple Symbols", 8,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xe43dff4a, "Wingdings", "Microsoft Sans Serif,Apple Symbols", 4,
+     FX_CodePage::kSymbol},
+    {0xe4e2c405, "MTExtra", "Microsoft Sans Serif,Apple Symbols", 6,
+     FX_CodePage::kSymbol},
+    {0xe618cc35, "InformalRoman", "Arial Narrow", 8,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xe6c27ffc, "Mistral", "Apple Symbols", 8,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xe7ebf4b9, "Courier", "Courier New", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xe8bc4a9d, "MSReferenceSpecialty", "Microsoft Sans Serif,Apple Symbols",
-     0, 1252},
+     0, FX_CodePage::kMSWin_WesternEuropean},
     {0xe90fb013, "TempusSansITC",
-     "STIXNonUnicode,Microsoft Sans Serif,Avenir Light", 0, 1252},
+     "STIXNonUnicode,Microsoft Sans Serif,Avenir Light", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xec637b42, "Consolas",
      "AR PL UKai CN,AR PL UKai HK,AR PL UKai TW,AR PL UKai TW MBE,AR PL UMing "
      "CN,AR PL UMing HK,Microsoft Sans Serif,Tahoma",
-     1, 1252},
-    {0xed3a683b, "STXinwei", "Kaiti SC,Songti SC,", 0, 936},
+     1, FX_CodePage::kMSWin_WesternEuropean},
+    {0xed3a683b, "STXinwei", "Kaiti SC,Songti SC,", 0,
+     FX_CodePage::kChineseSimplified},
     {0xef264cd1, "LucidaHandwriting",
      "Arial Narrow,Avenir Next Condensed Demi Bold,Avenir Next "
      "Condensed,Avenir Next Condensed Medium,STHeiti,Arial Black",
-     0, 1252},
+     0, FX_CodePage::kMSWin_WesternEuropean},
     {0xf086bca2, "BaskervilleOldFace",
-     "STIXNonUnicode,Avenir Next Condensed Heavy,PT Sans", 0, 1252},
+     "STIXNonUnicode,Avenir Next Condensed Heavy,PT Sans", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xf1028030, "Mangal",
-     "Arial Unicode MS,Microsoft Sans Serif,Arial Narrow,Tahoma", 2, 1252},
+     "Arial Unicode MS,Microsoft Sans Serif,Arial Narrow,Tahoma", 2,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xf1da7eb9, "ShowcardGothic",
-     "Papyrus,Arial Unicode MS,Georgia,American Typewriter", 0, 1252},
+     "Papyrus,Arial Unicode MS,Georgia,American Typewriter", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xf210f06a, "ArialMT",
      "Arial Unicode MS,Arial Narrow,STIXNonUnicode,Damascus,Avenir Next "
      "Condensed Demi Bold,Avenir Next Condensed Medium,Avenir Next Condensed",
-     0, 1252},
+     0, FX_CodePage::kMSWin_WesternEuropean},
     {0xf477f16a, "Latha",
-     "Arial Narrow,Damascus,STIXNonUnicode,American Typewriter", 0, 1252},
-    {0xf616f3dd, "LiSu", "STHeiti,Heiti TC,STFangsong", 1, 936},
-    {0xfa479aa6, "MicrosoftYaHei", "Arial Unicode MS", 0, 936},
+     "Arial Narrow,Damascus,STIXNonUnicode,American Typewriter", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xf616f3dd, "LiSu", "STHeiti,Heiti TC,STFangsong", 1,
+     FX_CodePage::kChineseSimplified},
+    {0xfa479aa6, "MicrosoftYaHei", "Arial Unicode MS", 0,
+     FX_CodePage::kChineseSimplified},
     {0xfcd19697, "BookmanOldStyle",
-     "Geeza Pro,Damascus,Andale Mono,Songti SC,Arial Unicode MS", 0, 1252},
+     "Geeza Pro,Damascus,Andale Mono,Songti SC,Arial Unicode MS", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xfe209a82, "LucidaCalligraphy",
-     "Kokonor,Damascus,STIXNonUnicode,STHeiti,Arial Black", 0, 1252},
-    {0xfef135f8, "AdobeHeitiStd-Regular", "Heiti TC,STHeiti", 0, 936},
+     "Kokonor,Damascus,STIXNonUnicode,STHeiti,Arial Black", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xfef135f8, "AdobeHeitiStd-Regular", "Heiti TC,STHeiti", 0,
+     FX_CodePage::kChineseSimplified},
 };
 #elif defined(OS_ANDROID)
 const FGAS_FontInfo g_XFAFontsMap[] = {
-    {0x01d5d33e, "SimSun", "Droid Sans Fallback", 0, 936},
-    {0x01e4f102, "YouYuan", "Droid Sans Fallback", 1, 936},
-    {0x030549dc, "LiSu", "Droid Sans Fallback", 1, 936},
-    {0x032edd44, "Simhei", "Droid Sans Fallback", 1, 936},
+    {0x01d5d33e, "SimSun", "Droid Sans Fallback", 0,
+     FX_CodePage::kChineseSimplified},
+    {0x01e4f102, "YouYuan", "Droid Sans Fallback", 1,
+     FX_CodePage::kChineseSimplified},
+    {0x030549dc, "LiSu", "Droid Sans Fallback", 1,
+     FX_CodePage::kChineseSimplified},
+    {0x032edd44, "Simhei", "Droid Sans Fallback", 1,
+     FX_CodePage::kChineseSimplified},
     {0x03eac6fc, "PoorRichard-Regular",
      "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback,Droid Arabic "
      "Naskh,Droid Sans Ethiopic",
-     2, 1252},
+     2, FX_CodePage::kMSWin_WesternEuropean},
     {0x03ed90e6, "Nina",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x077b56b3, "KingsoftPhoneticPlain",
      "Droid Sans Thai,Droid Sans Armenian,Droid Arabic Naskh,Droid Sans "
      "Ethiopic,Droid Sans Fallback",
-     0, 1252},
-    {0x078ed524, "MicrosoftSansSerif", "Droid Sans Fallback", 0, 1252},
-    {0x089b18a9, "Arial", "Droid Sans Fallback", 0, 1252},
+     0, FX_CodePage::kMSWin_WesternEuropean},
+    {0x078ed524, "MicrosoftSansSerif", "Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x089b18a9, "Arial", "Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x0b2cad72, "MonotypeCorsiva",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 8, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 8,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x0bb003e7, "Kartika",
      "Droid Arabic Naskh,Droid Sans Ethiopic,Roboto,Droid Serif,Droid Sans "
      "Mono",
-     2, 1252},
+     2, FX_CodePage::kMSWin_WesternEuropean},
     {0x0bb469df, "VinerHandITC",
-     "Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 8, 1252},
-    {0x0bc1a851, "SegoeUI", "Droid Sans Fallback", 0, 1252},
+     "Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 8,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x0bc1a851, "SegoeUI", "Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x0c112ebd, "KozukaGothicPro-VIM",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x0cfcb9c1, "AdobeThai",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 847},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSDOS_Thai},
     {0x0e7de0f9, "Playbill",
      "Droid Arabic Naskh,Droid Sans Ethiopic,Roboto,Droid Serif,Droid Sans "
      "Mono",
-     0, 1252},
-    {0x0eff47c3, "STHupo", "Droid Sans Fallback", 0, 936},
+     0, FX_CodePage::kMSWin_WesternEuropean},
+    {0x0eff47c3, "STHupo", "Droid Sans Fallback", 0,
+     FX_CodePage::kChineseSimplified},
     {0x107ad374, "Constantia",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 2, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 2,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x12194c2d, "KunstlerScript",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 8, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 8,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x135ef6a1, "MinionProSmBd",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x158c4049, "Garamond",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 2, 1252},
-    {0x160ecb24, "STZhongsong", "Droid Sans Fallback", 0, 936},
-    {0x161ed07e, "MSGothic", "Droid Sans Fallback", 1, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 2,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x160ecb24, "STZhongsong", "Droid Sans Fallback", 0,
+     FX_CodePage::kChineseSimplified},
+    {0x161ed07e, "MSGothic", "Droid Sans Fallback", 1,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x171d1ed1, "SnapITC-Regular",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
-    {0x18d1188f, "Cambria", "Droid Sans Fallback", 2, 1252},
-    {0x18eaf350, "ArialUnicodeMS", "Droid Sans Fallback", 0, 936},
-    {0x1a92d115, "MingLiU", "Droid Sans Fallback", 1, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x18d1188f, "Cambria", "Droid Sans Fallback", 2,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x18eaf350, "ArialUnicodeMS", "Droid Sans Fallback", 0,
+     FX_CodePage::kChineseSimplified},
+    {0x1a92d115, "MingLiU", "Droid Sans Fallback", 1,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x1cc217c6, "TrebuchetMS",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x1d649596, "BasemicTimes",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x1e34ee60, "BellMT",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 2, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 2,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x1eb36945, "CooperBlack",
-     "Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 2, 1252},
-    {0x1ef7787d, "BatangChe", "Droid Sans Fallback", 1, 1252},
+     "Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 2,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x1ef7787d, "BatangChe", "Droid Sans Fallback", 1,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x20b3bd3a, "BrushScriptMT", "Droid Arabic Naskh,Droid Sans Ethiopic", 8,
-     1252},
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x220877aa, "Candara",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x22135007, "FreestyleScript-Regular",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 8, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 8,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x251059c3, "Chiller",
-     "Droid Arabic Naskh,Droid Sans Ethiopic,Roboto,Droid Serif", 0, 1252},
-    {0x25bed6dd, "MSReferenceSansSerif", "Droid Sans Fallback", 0, 1252},
+     "Droid Arabic Naskh,Droid Sans Ethiopic,Roboto,Droid Serif", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x25bed6dd, "MSReferenceSansSerif", "Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x28154c81, "Parchment-Regular",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 8, 1252},
-    {0x29711eb9, "STLiti", "Droid Sans Fallback", 0, 936},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 8,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x29711eb9, "STLiti", "Droid Sans Fallback", 0,
+     FX_CodePage::kChineseSimplified},
     {0x2b1993b4, "Basemic",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x2b316339, "NiagaraSolid-Reg",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x2c147529, "FootlightMTLight",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x2c198928, "HarlowSolid",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x2c6ac6b2, "LucidaBright",
-     "Droid Arabic Naskh,Droid Sans Ethiopic,Droid Serif,Roboto", 2, 1252},
+     "Droid Arabic Naskh,Droid Sans Ethiopic,Droid Serif,Roboto", 2,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x2c9f38e2, "KozukaMinchoPro-VIR",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
-    {0x2d5a47b0, "STCaiyun", "Droid Sans Fallback", 0, 936},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x2d5a47b0, "STCaiyun", "Droid Sans Fallback", 0,
+     FX_CodePage::kChineseSimplified},
     {0x2def26bf, "BernardMT-Condensed",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x2fd8930b, "KozukaMinchoPr6NR",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
-    {0x3115525a, "FangSong_GB2312", "Droid Sans Fallback", 0, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x3115525a, "FangSong_GB2312", "Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x31327817, "MyriadPro",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x32244975, "Helvetica",
-     "Droid Arabic Naskh,Droid Sans Ethiopic,Droid Serif,Roboto", 0, 1252},
+     "Droid Arabic Naskh,Droid Sans Ethiopic,Droid Serif,Roboto", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x32ac995c, "Terminal",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x338d648a, "NiagaraEngraved-Reg",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x33bb65f2, "Sylfaen",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 2, 1252},
-    {0x3402c30e, "MSPMincho", "Droid Sans Fallback", 2, 1252},
-    {0x3412bf31, "SimSun-PUA", "Droid Sans Fallback", 0, 936},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 2,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x3402c30e, "MSPMincho", "Droid Sans Fallback", 2,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x3412bf31, "SimSun-PUA", "Droid Sans Fallback", 0,
+     FX_CodePage::kChineseSimplified},
     {0x36eb39b9, "BerlinSansFB",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
-    {0x36f42055, "UniversATT", "Microsoft Sans Serif", 0, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x36f42055, "UniversATT", "Microsoft Sans Serif", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x3864c4f6, "HighTowerText",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 2, 1252},
-    {0x3a257d03, "FangSong_GB2312", "Droid Sans Fallback", 0, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 2,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x3a257d03, "FangSong_GB2312", "Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x3cdae668, "FreestyleScript",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 8, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 8,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x3d55aed7, "Jokerman",
-     "Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
-    {0x3d5b4385, "PMingLiU", "Droid Sans Fallback", 2, 1252},
+     "Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x3d5b4385, "PMingLiU", "Droid Sans Fallback", 2,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x3d9b7669, "EstrangeloEdessa",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x3e532d74, "FranklinGothicMedium",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
-    {0x3e6aa32d, "NSimSun", "Droid Sans Fallback", 1, 936},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x3e6aa32d, "NSimSun", "Droid Sans Fallback", 1,
+     FX_CodePage::kChineseSimplified},
     {0x3f6c36a8, "Gautami",
      "Droid Arabic Naskh,Droid Sans Ethiopic,Roboto,Droid Serif,Droid Sans "
      "Mono,Droid Sans Fallback",
-     0, 1252},
+     0, FX_CodePage::kMSWin_WesternEuropean},
     {0x3ff32662, "Chiller-Regular",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x409de312, "ModernNo.20",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 2, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 2,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x41443c5e, "Georgia",
-     "Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 2, 1252},
+     "Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 2,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x4160ade5, "BellGothicStdBlack",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x421976c4, "Modern-Regular",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 2, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 2,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x422a7252, "Stencil",
-     "Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+     "Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x42c8554f, "Fixedsys",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x435cb41d, "Roman",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
-    {0x47882383, "CourierNew", "Droid Sans Fallback", 1, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x47882383, "CourierNew", "Droid Sans Fallback", 1,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x480a2338, "BerlinSansFBDemi",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
-    {0x480bf7a4, "CourierStd", "Droid Sans Fallback", 0, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x480bf7a4, "CourierStd", "Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x481ad6ed, "VladimirScript",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 8, 1252},
-    {0x4911577a, "YouYuan", "Droid Sans Fallback", 1, 936},
-    {0x4a788d72, "STXingkai", "Droid Sans Fallback", 0, 936},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 8,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x4911577a, "YouYuan", "Droid Sans Fallback", 1,
+     FX_CodePage::kChineseSimplified},
+    {0x4a788d72, "STXingkai", "Droid Sans Fallback", 0,
+     FX_CodePage::kChineseSimplified},
     {0x4bf88566, "SegoeCondensed",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x4ccf51a4, "BerlinSansFB-Reg",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
-    {0x4ea967ce, "GulimChe", "Droid Sans Fallback", 1, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x4ea967ce, "GulimChe", "Droid Sans Fallback", 1,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x4f68bd79, "LetterGothicStd",
      "Droid Sans Mono,Droid Arabic Naskh,Droid Sans Ethiopic,Droid Sans "
      "Mono,Droid Serif,Droid Sans Fallback",
-     0, 1252},
+     0, FX_CodePage::kMSWin_WesternEuropean},
     {0x51a0d0e6, "KozukaGothicPr6NM",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x531b3dea, "BasemicSymbol",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x5333fd39, "CalifornianFB-Reg",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 2, 1252},
-    {0x53561a54, "FZYTK--GBK1-0", "Droid Sans Fallback", 0, 936},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 2,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x53561a54, "FZYTK--GBK1-0", "Droid Sans Fallback", 0,
+     FX_CodePage::kChineseSimplified},
     {0x55e0dde6, "LucidaSansTypewriter",
-     "Droid Sans Mono,Droid Arabic Naskh,Droid Sans Ethiopic", 0, 1252},
+     "Droid Sans Mono,Droid Arabic Naskh,Droid Sans Ethiopic", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x574d4d3d, "AdobeArabic",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
-    {0x5792e759, "STKaiti", "Droid Sans Fallback", 0, 936},
-    {0x5921978e, "LucidaSansUnicode", "Droid Sans Fallback", 0, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x5792e759, "STKaiti", "Droid Sans Fallback", 0,
+     FX_CodePage::kChineseSimplified},
+    {0x5921978e, "LucidaSansUnicode", "Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x594e2da4, "Vrinda",
      "Droid Arabic Naskh,Droid Sans Ethiopic,Roboto,Droid Serif,Droid Sans "
      "Mono",
-     0, 1252},
-    {0x59baa9a2, "KaiTi_GB2312", "Droid Sans Fallback", 0, 1252},
+     0, FX_CodePage::kMSWin_WesternEuropean},
+    {0x59baa9a2, "KaiTi_GB2312", "Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x5cfedf4f, "BaskOldFace",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
-    {0x5f97921c, "AdobeMyungjoStdM", "Droid Sans Fallback", 0, 936},
-    {0x5fefbfad, "Batang", "Droid Sans Fallback", 2, 1252},
-    {0x605342b9, "DotumChe", "Droid Sans Fallback", 1, 1252},
-    {0x608c5f9a, "KaiTi_GB2312", "Droid Sans Fallback", 0, 936},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x5f97921c, "AdobeMyungjoStdM", "Droid Sans Fallback", 0,
+     FX_CodePage::kChineseSimplified},
+    {0x5fefbfad, "Batang", "Droid Sans Fallback", 2,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x605342b9, "DotumChe", "Droid Sans Fallback", 1,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x608c5f9a, "KaiTi_GB2312", "Droid Sans Fallback", 0,
+     FX_CodePage::kChineseSimplified},
     {0x61efd0d1, "MaturaMTScriptCapitals",
      "Droid Arabic Naskh,Droid Sans Ethiopic,Droid Serif,Roboto,Droid Sans "
      "Mono",
-     0, 1252},
+     0, FX_CodePage::kMSWin_WesternEuropean},
     {0x626608a9, "MVBoli",
      "Droid Arabic Naskh,Droid Sans Ethiopic,Droid Serif,Roboto,Droid Sans "
      "Mono",
-     0, 1252},
+     0, FX_CodePage::kMSWin_WesternEuropean},
     {0x630501a3, "SmallFonts",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
-    {0x65d0e2a9, "FZYTK--GBK1-0", "Droid Sans Fallback", 0, 936},
-    {0x669f29e1, "FZSTK--GBK1-0", "Droid Sans Fallback", 0, 936},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x65d0e2a9, "FZYTK--GBK1-0", "Droid Sans Fallback", 0,
+     FX_CodePage::kChineseSimplified},
+    {0x669f29e1, "FZSTK--GBK1-0", "Droid Sans Fallback", 0,
+     FX_CodePage::kChineseSimplified},
     {0x673a9e5f, "Tunga",
      "Droid Arabic Naskh,Droid Sans Ethiopic,Roboto,Droid Serif,Droid Sans "
      "Mono,Droid Sans Fallback",
-     0, 1252},
+     0, FX_CodePage::kMSWin_WesternEuropean},
     {0x691aa4ce, "NiagaraSolid",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x696259b7, "Corbel",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
-    {0x696ee9be, "STXihei", "Droid Sans Fallback", 0, 936},
-    {0x6c59cf69, "Dotum", "Droid Sans Fallback", 0, 1252},
-    {0x707fa561, "Gungsuh", "Droid Sans Fallback", 2, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x696ee9be, "STXihei", "Droid Sans Fallback", 0,
+     FX_CodePage::kChineseSimplified},
+    {0x6c59cf69, "Dotum", "Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x707fa561, "Gungsuh", "Droid Sans Fallback", 2,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x71416bb2, "ZWAdobeF",
      "Droid Arabic Naskh,Droid Sans Armenian,Droid Sans Ethiopic,Droid Sans "
      "Georgian,Droid Sans Hebrew,Droid Sans Thai",
-     0, 1252},
+     0, FX_CodePage::kMSWin_WesternEuropean},
     {0x71b41801, "Verdana",
-     "Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
-    {0x73f25e4c, "PalatinoLinotype", "Droid Sans Fallback", 0, 1252},
+     "Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x73f25e4c, "PalatinoLinotype", "Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x73f4d19f, "NiagaraEngraved",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x74001694, "MyriadProBlack", "Book Antiqua,Constantia,Dotum,Georgia", 0,
-     1252},
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x74b14d8f, "Haettenschweiler",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
-    {0x74cb44ee, "NSimSun", "Droid Sans Fallback", 1, 936},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x74cb44ee, "NSimSun", "Droid Sans Fallback", 1,
+     FX_CodePage::kChineseSimplified},
     {0x76b4d7ff, "Shruti",
      "Droid Arabic Naskh,Droid Sans Ethiopic,Roboto,Droid Serif,Droid Sans "
      "Mono",
-     0, 1252},
+     0, FX_CodePage::kMSWin_WesternEuropean},
     {0x788b3533, "Webdings",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 6, 42},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 6,
+     FX_CodePage::kSymbol},
     {0x797dde99, "MSSerif",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
-    {0x7a0f9e9e, "MSMincho", "Droid Sans Fallback", 1, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x7a0f9e9e, "MSMincho", "Droid Sans Fallback", 1,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x7b439caf, "OldEnglishTextMT",
-     "Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+     "Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x8213a433, "LucidaSans-Typewriter",
-     "Droid Sans Mono,Droid Serif,Roboto,Droid Sans Fallback", 0, 1252},
-    {0x82fec929, "AdobeSongStd", "Droid Sans Fallback", 0, 936},
+     "Droid Sans Mono,Droid Serif,Roboto,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x82fec929, "AdobeSongStd", "Droid Sans Fallback", 0,
+     FX_CodePage::kChineseSimplified},
     {0x83581825, "Modern",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x835a2823, "Algerian",
-     "Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+     "Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x83dab9f5, "Script",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
-    {0x847b56da, "Tahoma", "Droid Sans Fallback", 0, 1252},
-    {0x8a783cb2, "SimSun-PUA", "Droid Sans Fallback", 0, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x847b56da, "Tahoma", "Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x8a783cb2, "SimSun-PUA", "Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x8b5cac0e, "Onyx",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
-    {0x8c6a499e, "Gulim", "Droid Sans Fallback", 0, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x8c6a499e, "Gulim", "Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x8e0af790, "JuiceITC",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x8e8d43b2, "Centaur",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 2, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 2,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x8ee4dcca, "BookshelfSymbol7",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x90794800, "BellGothicStdLight",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x909b516a, "Century",
-     "Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 2, 1252},
+     "Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 2,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x92ae370d, "MSOutlook",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 4, 42},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 4,
+     FX_CodePage::kSymbol},
     {0x93c9fbf1, "LucidaFax",
      "Droid Arabic Naskh,Droid Sans Ethiopic,Droid Serif,Roboto,Droid Sans "
      "Mono",
-     2, 1252},
+     2, FX_CodePage::kMSWin_WesternEuropean},
     {0x9565085e, "BookAntiqua",
-     "Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 2, 1252},
-    {0x9856d95d, "AdobeMingStd", "Droid Sans Fallback", 0, 949},
+     "Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 2,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x9856d95d, "AdobeMingStd", "Droid Sans Fallback", 0,
+     FX_CodePage::kHangul},
     {0x9bbadd6b, "ColonnaMT",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x9cbd16a4, "ShowcardGothic-Reg",
-     "Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallbac", 0, 1252},
+     "Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallbac", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x9d73008e, "MSSansSerif",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
-    {0xa0607db1, "GungsuhChe", "Droid Sans Fallback", 1, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xa0607db1, "GungsuhChe", "Droid Sans Fallback", 1,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xa0bcf6a1, "LatinWide",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 2, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 2,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xa1429b36, "Symbol",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 6, 42},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 6,
+     FX_CodePage::kSymbol},
     {0xa1fa5abc, "Wingdings2",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 6, 42},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 6,
+     FX_CodePage::kSymbol},
     {0xa1fa5abd, "Wingdings3",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 6, 42},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 6,
+     FX_CodePage::kSymbol},
     {0xa427bad4, "InformalRoman-Regular",
-     "Droid Arabic Naskh,Droid Sans Ethiopic", 8, 1252},
-    {0xa8b92ece, "FZSTK--GBK1-0", "Droid Sans Fallback", 0, 936},
+     "Droid Arabic Naskh,Droid Sans Ethiopic", 8,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xa8b92ece, "FZSTK--GBK1-0", "Droid Sans Fallback", 0,
+     FX_CodePage::kChineseSimplified},
     {0xa8d83ece, "CalifornianFB",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 2, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 2,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xaa3e082c, "Kingsoft-Phonetic",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xaa6bcabe, "HarlowSolidItalic",
-     "Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+     "Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xade5337c, "MSUIGothic",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xb08dd941, "WideLatin",
      "Droid Arabic Naskh,Droid Sans Ethiopic,Droid Serif,Roboto,Droid Sans "
      "Mono",
-     2, 1252},
+     2, FX_CodePage::kMSWin_WesternEuropean},
     {0xb207f05d, "PoorRichard",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 2, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 2,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xb3bc492f, "JuiceITC-Regular",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xb5545399, "Marlett",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 4, 42},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 4,
+     FX_CodePage::kSymbol},
     {0xb5dd1ebb, "BritannicBold", "Droid Arabic Naskh,Droid Sans Ethiopic", 0,
-     1252},
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xb699c1c5, "LucidaCalligraphy-Italic",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
-    {0xb725d629, "TimesNewRoman", "Droid Sans Fallback", 2, 1252},
-    {0xb7eaebeb, "AdobeHeitiStdR", "Droid Sans Fallback", 0, 936},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xb725d629, "TimesNewRoman", "Droid Sans Fallback", 2,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xb7eaebeb, "AdobeHeitiStdR", "Droid Sans Fallback", 0,
+     FX_CodePage::kChineseSimplified},
     {0xbd29c486, "BerlinSansFBDemi-Bold",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xbe8a8db4, "BookshelfSymbolSeven",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xc16c0118, "AdobeHebrew",
      "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback,Droid Arabic "
      "Naskh,Droid Sans Ethiopic",
-     0, 1252},
+     0, FX_CodePage::kMSWin_WesternEuropean},
     {0xc318b0af, "MyriadProLight",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
-    {0xc65e5659, "CambriaMath", "Droid Sans Fallback", 2, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xc65e5659, "CambriaMath", "Droid Sans Fallback", 2,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xc75c8f05, "LucidaConsole",
-     "Droid Sans Mono,Droid Serif,Roboto,Droid Sans Fallback", 1, 1252},
-    {0xca7c35d6, "Calibri", "Droid Sans Fallback", 0, 1252},
-    {0xcb053f53, "MicrosoftYaHei", "Droid Sans Fallback", 0, 936},
+     "Droid Sans Mono,Droid Serif,Roboto,Droid Sans Fallback", 1,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xca7c35d6, "Calibri", "Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xcb053f53, "MicrosoftYaHei", "Droid Sans Fallback", 0,
+     FX_CodePage::kChineseSimplified},
     {0xcb7190f9, "Magneto-Bold",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xcca00cc5, "System",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xccad6f76, "Jokerman-Regular",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xccc5818c, "EuroSign",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xcf3d7234, "LucidaHandwriting-Italic",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xcf7b8fdb, "MinionPro",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
-    {0xcfe5755f, "Simhei", "Droid Sans Fallback", 1, 936},
-    {0xd011f4ee, "MSPGothic", "Droid Sans Fallback", 0, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xcfe5755f, "Simhei", "Droid Sans Fallback", 1,
+     FX_CodePage::kChineseSimplified},
+    {0xd011f4ee, "MSPGothic", "Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xd060e7ef, "Vivaldi",
-     "Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 8, 1252},
+     "Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 8,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xd07edec1, "FranklinGothic-Medium",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
-    {0xd107243f, "SimSun", "Droid Sans Fallback", 0, 936},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xd107243f, "SimSun", "Droid Sans Fallback", 0,
+     FX_CodePage::kChineseSimplified},
     {0xd1881562, "ArialNarrow",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xd22b7dce, "BodoniMTPosterCompressed",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xd22bfa60, "ComicSansMS", "Droid Serif,Roboto,Droid Sans Fallback", 8,
-     1252},
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xd3bd0e35, "Bauhaus93",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
-    {0xd429ee7a, "STFangsong", "Droid Sans Fallback", 0, 936},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xd429ee7a, "STFangsong", "Droid Sans Fallback", 0,
+     FX_CodePage::kChineseSimplified},
     {0xd6679c12, "BernardMTCondensed",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xd8e8a027, "LucidaSans",
-     "Droid Arabic Naskh,Droid Sans Ethiopic,Droid Serif,Roboto", 0, 1252},
+     "Droid Arabic Naskh,Droid Sans Ethiopic,Droid Serif,Roboto", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xd9fe7761, "HighTowerText-Reg",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 2, 1252},
-    {0xda7e551e, "STSong", "Droid Sans Fallback", 0, 936},
-    {0xdaa6842d, "STZhongsong", "Droid Sans Fallback", 0, 936},
-    {0xdaaab93f, "STFangsong", "Droid Sans Fallback", 0, 936},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 2,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xda7e551e, "STSong", "Droid Sans Fallback", 0,
+     FX_CodePage::kChineseSimplified},
+    {0xdaa6842d, "STZhongsong", "Droid Sans Fallback", 0,
+     FX_CodePage::kChineseSimplified},
+    {0xdaaab93f, "STFangsong", "Droid Sans Fallback", 0,
+     FX_CodePage::kChineseSimplified},
     {0xdaeb0713, "STSong",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 936},
-    {0xdafedbef, "STCaiyun", "Droid Sans Fallback", 0, 936},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kChineseSimplified},
+    {0xdafedbef, "STCaiyun", "Droid Sans Fallback", 0,
+     FX_CodePage::kChineseSimplified},
     {0xdb00a3d9, "Broadway",
-     "Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
-    {0xdb1f5ad4, "STXinwei", "Droid Sans Fallback", 0, 936},
-    {0xdb326e7f, "STKaiti", "Droid Sans Fallback", 0, 936},
-    {0xdb69595a, "STHupo", "Droid Sans Fallback", 0, 936},
-    {0xdba0082c, "STXihei", "Droid Sans Fallback", 0, 936},
-    {0xdbd0ab18, "STXingkai", "Droid Sans Fallback", 0, 936},
-    {0xdc1a7db1, "STLiti", "Droid Sans Fallback", 0, 936},
+     "Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xdb1f5ad4, "STXinwei", "Droid Sans Fallback", 0,
+     FX_CodePage::kChineseSimplified},
+    {0xdb326e7f, "STKaiti", "Droid Sans Fallback", 0,
+     FX_CodePage::kChineseSimplified},
+    {0xdb69595a, "STHupo", "Droid Sans Fallback", 0,
+     FX_CodePage::kChineseSimplified},
+    {0xdba0082c, "STXihei", "Droid Sans Fallback", 0,
+     FX_CodePage::kChineseSimplified},
+    {0xdbd0ab18, "STXingkai", "Droid Sans Fallback", 0,
+     FX_CodePage::kChineseSimplified},
+    {0xdc1a7db1, "STLiti", "Droid Sans Fallback", 0,
+     FX_CodePage::kChineseSimplified},
     {0xdc33075f, "KristenITC-Regular",
-     "Droid Arabic Naskh,Droid Sans Ethiopic,Droid Serif,Roboto", 8, 1252},
+     "Droid Arabic Naskh,Droid Sans Ethiopic,Droid Serif,Roboto", 8,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xdcc7009c, "Harrington",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xdd712466, "ArialBlack",
-     "Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+     "Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xdde87b3e, "Impact",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xdf69fb32, "SnapITC",
      "Droid Arabic Naskh,Droid Sans Ethiopic,Droid Serif,Roboto,Droid Sans "
      "Mono",
-     0, 1252},
+     0, FX_CodePage::kMSWin_WesternEuropean},
     {0xdf8b25e8, "CenturyGothic",
-     "Droid Serif,Roboto,Droid Serif,Droid Sans Mono", 0, 1252},
+     "Droid Serif,Roboto,Droid Serif,Droid Sans Mono", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xe0f705c0, "KristenITC",
-     "Droid Arabic Naskh,Droid Sans Ethiopic,Droid Serif,Roboto", 8, 1252},
+     "Droid Arabic Naskh,Droid Sans Ethiopic,Droid Serif,Roboto", 8,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xe1427573, "Raavi",
      "Droid Arabic Naskh,Droid Sans Ethiopic,Roboto,Droid Serif,Droid Sans "
      "Mono",
-     0, 1252},
+     0, FX_CodePage::kMSWin_WesternEuropean},
     {0xe2cea0cb, "Magneto",
      "Droid Arabic Naskh,Droid Sans Ethiopic,Droid Serif,Roboto,Droid Sans "
      "Mono",
-     0, 1252},
+     0, FX_CodePage::kMSWin_WesternEuropean},
     {0xe36a9e17, "Ravie",
      "Droid Arabic Naskh,Droid Sans Ethiopic,Roboto,Droid Serif,Droid Sans "
      "Mono",
-     0, 1252},
+     0, FX_CodePage::kMSWin_WesternEuropean},
     {0xe433f8e2, "Parchment",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 8, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 8,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xe43dff4a, "Wingdings",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 4, 42},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 4,
+     FX_CodePage::kSymbol},
     {0xe4e2c405, "MTExtra",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 6, 42},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 6,
+     FX_CodePage::kSymbol},
     {0xe618cc35, "InformalRoman",
-     "Droid Arabic Naskh,Droid Sans Ethiopic,Roboto,Droid Serif", 8, 1252},
+     "Droid Arabic Naskh,Droid Sans Ethiopic,Roboto,Droid Serif", 8,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xe6c27ffc, "Mistral",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 8, 1252},
-    {0xe7ebf4b9, "Courier", "Droid Sans Fallback", 0, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 8,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xe7ebf4b9, "Courier", "Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xe8bc4a9d, "MSReferenceSpecialty",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xe90fb013, "TempusSansITC",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
-    {0xec637b42, "Consolas", "Droid Sans Fallback", 1, 1252},
-    {0xed3a683b, "STXinwei", "Droid Sans Fallback", 0, 936},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xec637b42, "Consolas", "Droid Sans Fallback", 1,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xed3a683b, "STXinwei", "Droid Sans Fallback", 0,
+     FX_CodePage::kChineseSimplified},
     {0xef264cd1, "LucidaHandwriting",
      "Droid Arabic Naskh,Droid Sans Ethiopic,Droid Serif,Roboto,Droid Sans "
      "Mono",
-     0, 1252},
+     0, FX_CodePage::kMSWin_WesternEuropean},
     {0xf086bca2, "BaskervilleOldFace",
-     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+     "Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xf1028030, "Mangal",
      "Droid Arabic Naskh,Droid Sans Ethiopic,Droid Serif,Roboto,Droid Sans "
      "Mono",
-     2, 1252},
+     2, FX_CodePage::kMSWin_WesternEuropean},
     {0xf1da7eb9, "ShowcardGothic",
-     "Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallbac", 0, 1252},
+     "Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallbac", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xf210f06a, "ArialMT",
-     "Droid Arabic Naskh,Droid Sans Ethiopic,Roboto,Droid Serif", 0, 1252},
+     "Droid Arabic Naskh,Droid Sans Ethiopic,Roboto,Droid Serif", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xf477f16a, "Latha",
      "Droid Arabic Naskh,Droid Sans Ethiopic,Roboto,Droid Serif,Droid Sans "
      "Mono",
-     0, 1252},
-    {0xf616f3dd, "LiSu", "Droid Sans Fallback", 1, 936},
-    {0xfa479aa6, "MicrosoftYaHei", "Droid Sans Fallback", 0, 936},
+     0, FX_CodePage::kMSWin_WesternEuropean},
+    {0xf616f3dd, "LiSu", "Droid Sans Fallback", 1,
+     FX_CodePage::kChineseSimplified},
+    {0xfa479aa6, "MicrosoftYaHei", "Droid Sans Fallback", 0,
+     FX_CodePage::kChineseSimplified},
     {0xfcd19697, "BookmanOldStyle",
-     "Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+     "Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xfe209a82, "LucidaCalligraphy",
      "Droid Arabic Naskh,Droid Sans Ethiopic,Droid Serif,Roboto,Droid Sans "
      "Mono",
-     0, 1252},
-    {0xfef135f8, "AdobeHeitiStd-Regular", "Droid Sans Fallback", 0, 936},
+     0, FX_CodePage::kMSWin_WesternEuropean},
+    {0xfef135f8, "AdobeHeitiStd-Regular", "Droid Sans Fallback", 0,
+     FX_CodePage::kChineseSimplified},
 };
 #elif defined(OS_POSIX)
 const FGAS_FontInfo g_XFAFontsMap[] = {
     {0x01d5d33e, "SimSun",
      "WenQuanYi Zen Hei Mono,AR PL UMing CN,AR PL UMing HK,AR PL UMing TW,AR "
      "PL UMing TW MBE",
-     0, 936},
+     0, FX_CodePage::kChineseSimplified},
     {0x01e4f102, "YouYuan",
      "WenQuanYi Zen Hei Mono,AR PL UMing CN,AR PL UMing HK,AR PL UMing TW,AR "
      "PL UMing TW MBE",
-     1, 936},
+     1, FX_CodePage::kChineseSimplified},
     {0x030549dc, "LiSu",
      "WenQuanYi Zen Hei,WenQuanYi Zen Hei Sharp,WenQuanYi Zen Hei "
      "Mono,WenQuanYi Micro Hei",
-     1, 936},
+     1, FX_CodePage::kChineseSimplified},
     {0x032edd44, "Simhei",
      "WenQuanYi Zen Hei,WenQuanYi Zen Hei Sharp,WenQuanYi Zen Hei "
      "Mono,WenQuanYi Micro Hei",
-     1, 936},
+     1, FX_CodePage::kChineseSimplified},
     {0x03eac6fc, "PoorRichard-Regular", "Droid Sans Japanese,FreeSerif", 2,
-     1252},
-    {0x03ed90e6, "Nina", "FreeSerif", 0, 1252},
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x03ed90e6, "Nina", "FreeSerif", 0, FX_CodePage::kMSWin_WesternEuropean},
     {0x077b56b3, "KingsoftPhoneticPlain",
      "Tibetan Machine Uni,LKLUG,Samyak Gujarati,Droid Sans Thai,Droid Sans "
      "Armenian,Untitled1,utkal,Lohit Oriya",
-     0, 1252},
+     0, FX_CodePage::kMSWin_WesternEuropean},
     {0x078ed524, "MicrosoftSansSerif",
-     "Droid Sans Japanese,FreeSerif,WenQuanYi Micro Hei", 0, 1252},
+     "Droid Sans Japanese,FreeSerif,WenQuanYi Micro Hei", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x089b18a9, "Arial",
      "Droid Sans Japanese,DejaVu Sans Condensed,FreeSerif,WenQuanYi Micro Hei",
-     0, 1252},
-    {0x0b2cad72, "MonotypeCorsiva", "Droid Sans Japanese,FreeSerif", 8, 1252},
+     0, FX_CodePage::kMSWin_WesternEuropean},
+    {0x0b2cad72, "MonotypeCorsiva", "Droid Sans Japanese,FreeSerif", 8,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x0bb003e7, "Kartika",
      "FreeSans,Liberation Sans,Liberation Sans Narrow,Nimbus Sans "
      "L,Garuda,FreeSerif,WenQuanYi Micro Hei",
-     2, 1252},
+     2, FX_CodePage::kMSWin_WesternEuropean},
     {0x0bb469df, "VinerHandITC",
-     "Droid Sans Japanese,Ubuntu,Liberation Sans,Liberation Serif", 8, 1252},
-    {0x0bc1a851, "SegoeUI", "Droid Sans Japanese,DejaVu Sans", 0, 1252},
-    {0x0c112ebd, "KozukaGothicPro-VIM", "FreeSerif", 0, 1252},
-    {0x0cfcb9c1, "AdobeThai", "Droid Sans Japanese,Waree", 0, 847},
+     "Droid Sans Japanese,Ubuntu,Liberation Sans,Liberation Serif", 8,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x0bc1a851, "SegoeUI", "Droid Sans Japanese,DejaVu Sans", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x0c112ebd, "KozukaGothicPro-VIM", "FreeSerif", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x0cfcb9c1, "AdobeThai", "Droid Sans Japanese,Waree", 0,
+     FX_CodePage::kMSDOS_Thai},
     {0x0e7de0f9, "Playbill",
      "KacstQurn,Droid Arabic Naskh,Droid Sans Ethiopic,mry_KacstQurn,Droid "
      "Sans Ethiopic,Droid Sans Japanese,FreeSerif",
-     0, 1252},
+     0, FX_CodePage::kMSWin_WesternEuropean},
     {0x0eff47c3, "STHupo", "AR PL UKai HK,AR PL UMing HK,AR PL UKai CN", 0,
-     936},
+     FX_CodePage::kChineseSimplified},
     {0x107ad374, "Constantia",
-     "Droid Sans Japanese,FreeSerif,WenQuanYi Micro Hei,Ubuntu", 2, 1252},
+     "Droid Sans Japanese,FreeSerif,WenQuanYi Micro Hei,Ubuntu", 2,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x12194c2d, "KunstlerScript", "Droid Sans Japanese,Liberation Serif", 8,
-     1252},
-    {0x135ef6a1, "MinionProSmBd", "Liberation Serif", 0, 1252},
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x135ef6a1, "MinionProSmBd", "Liberation Serif", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x158c4049, "Garamond",
-     "Droid Sans Japanese,Liberation Serif,Ubuntu,FreeSerif", 2, 1252},
+     "Droid Sans Japanese,Liberation Serif,Ubuntu,FreeSerif", 2,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x160ecb24, "STZhongsong",
      "WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei "
      "Sharp,WenQuanYi Micro Hei",
-     0, 936},
+     0, FX_CodePage::kChineseSimplified},
     {0x161ed07e, "MSGothic",
      "WenQuanYi Micro Hei Mono,WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,AR PL "
      "UMing CN,AR PL UMing HK,AR PL UMing TW",
-     1, 1252},
+     1, FX_CodePage::kMSWin_WesternEuropean},
     {0x171d1ed1, "SnapITC-Regular",
      "Liberation Sans Narrow,Ubuntu Condensed,Nimbus Sans L,DejaVu Sans", 0,
-     1252},
-    {0x18d1188f, "Cambria", "Droid Sans Japanese,FreeSerif,FreeMono", 2, 1252},
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x18d1188f, "Cambria", "Droid Sans Japanese,FreeSerif,FreeMono", 2,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x18eaf350, "ArialUnicodeMS",
      "WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei "
      "Sharp,WenQuanYi Micro Hei",
-     0, 936},
+     0, FX_CodePage::kChineseSimplified},
     {0x1a92d115, "MingLiU",
      "WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei "
      "Sharp,WenQuanYi Micro Hei",
-     1, 1252},
+     1, FX_CodePage::kMSWin_WesternEuropean},
     {0x1cc217c6, "TrebuchetMS",
-     "Droid Sans Japanese,Liberation Serif,FreeSerif,Ubuntu", 0, 1252},
+     "Droid Sans Japanese,Liberation Serif,FreeSerif,Ubuntu", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x1d649596, "BasemicTimes",
      "Liberation Serif,Times New Roman,Droid Sans Japanese,FreeSerif,Ubuntu", 0,
-     1252},
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x1e34ee60, "BellMT",
-     "KacstQurn,Droid Sans Japanese,Ubuntu,Liberation Serif", 2, 1252},
+     "KacstQurn,Droid Sans Japanese,Ubuntu,Liberation Serif", 2,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x1eb36945, "CooperBlack",
      "KacstQurn,Droid Sans Japanese,FreeMono,Liberation Mono, WenQuanYi Micro "
      "Hei Mono",
-     2, 1252},
+     2, FX_CodePage::kMSWin_WesternEuropean},
     {0x1ef7787d, "BatangChe",
      "WenQuanYi Zen Hei Mono,AR PL UMing CN,AR PL UMing HK,AR PL UMing "
      "TW,WenQuanYi Zen Hei,WenQuanYi Micro Hei",
-     1, 1252},
+     1, FX_CodePage::kMSWin_WesternEuropean},
     {0x20b3bd3a, "BrushScriptMT",
      "KacstQurn,Droid Arabic Naskh,Droid Sans Ethiopic,Droid Sans "
      "Japanese,URW Chancery L,Liberation Sans",
-     8, 1252},
-    {0x220877aa, "Candara", "Droid Sans Japanese,DejaVu Sans", 0, 1252},
+     8, FX_CodePage::kMSWin_WesternEuropean},
+    {0x220877aa, "Candara", "Droid Sans Japanese,DejaVu Sans", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x22135007, "FreestyleScript-Regular",
-     "KacstQurn,Droid Sans Japanese,Liberation Sans", 8, 1252},
+     "KacstQurn,Droid Sans Japanese,Liberation Sans", 8,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x251059c3, "Chiller",
      "KacstQurn,Droid Arabic Naskh,Droid Sans Ethiopic,Droid Sans "
      "Japanese,Liberation Sans",
-     0, 1252},
+     0, FX_CodePage::kMSWin_WesternEuropean},
     {0x25bed6dd, "MSReferenceSansSerif",
      "DejaVu Sans Condensed,Ubuntu Condensed,Droid Sans Japanese,AR PL UKai "
      "HK",
-     0, 1252},
+     0, FX_CodePage::kMSWin_WesternEuropean},
     {0x28154c81, "Parchment-Regular", "Droid Sans Japanese,Liberation Sans", 8,
-     1252},
-    {0x29711eb9, "STLiti", "AR PL UKai HK", 0, 936},
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x29711eb9, "STLiti", "AR PL UKai HK", 0, FX_CodePage::kChineseSimplified},
     {0x2b1993b4, "Basemic",
-     "Liberation Serif,Droid Sans Japanese,Liberation Sans", 0, 1252},
+     "Liberation Serif,Droid Sans Japanese,Liberation Sans", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x2b316339, "NiagaraSolid-Reg", "Droid Sans Japanese,Liberation Sans", 0,
-     1252},
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x2c147529, "FootlightMTLight",
-     "KacstQurn,Droid Sans Japanese,Liberation Sans", 0, 1252},
+     "KacstQurn,Droid Sans Japanese,Liberation Sans", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x2c198928, "HarlowSolid", "KacstQurn,Droid Sans Japanese,Liberation Sans",
-     0, 1252},
+     0, FX_CodePage::kMSWin_WesternEuropean},
     {0x2c6ac6b2, "LucidaBright",
      "KacstQurn,Droid Arabic Naskh,Droid Sans Ethiopic,mry_KacstQurn,Droid "
      "Sans Japanese,Liberation Sans",
-     2, 1252},
-    {0x2c9f38e2, "KozukaMinchoPro-VIR", "DejaVu Sans", 0, 1252},
-    {0x2d5a47b0, "STCaiyun", "AR PL UKai HK", 0, 936},
+     2, FX_CodePage::kMSWin_WesternEuropean},
+    {0x2c9f38e2, "KozukaMinchoPro-VIR", "DejaVu Sans", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x2d5a47b0, "STCaiyun", "AR PL UKai HK", 0,
+     FX_CodePage::kChineseSimplified},
     {0x2def26bf, "BernardMT-Condensed",
-     "KacstQurn,Droid Sans Japanese,DejaVu Serif", 0, 1252},
-    {0x2fd8930b, "KozukaMinchoPr6NR", "DejaVu Serif", 0, 1252},
+     "KacstQurn,Droid Sans Japanese,DejaVu Serif", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x2fd8930b, "KozukaMinchoPr6NR", "DejaVu Serif", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x3115525a, "FangSong_GB2312",
      "WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei "
      "Sharp,WenQuanYi Micro Hei",
-     0, 1252},
+     0, FX_CodePage::kMSWin_WesternEuropean},
     {0x31327817, "MyriadPro", "Ubuntu Condensed,Droid Sans Japanese, FreeSerif",
-     0, 1252},
+     0, FX_CodePage::kMSWin_WesternEuropean},
     {0x32244975, "Helvetica",
      "Ubuntu,DejaVu Sans Condensed,Liberation Sans,Liberation Sans "
      "Narrow,Nimbus Sans ",
-     0, 1252},
-    {0x32ac995c, "Terminal", "DejaVu Serif", 0, 1252},
+     0, FX_CodePage::kMSWin_WesternEuropean},
+    {0x32ac995c, "Terminal", "DejaVu Serif", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x338d648a, "NiagaraEngraved-Reg", "Droid Sans Japanese,DejaVu Serif", 0,
-     1252},
-    {0x33bb65f2, "Sylfaen", "Droid Sans Japanese,DejaVu Sans", 2, 1252},
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x33bb65f2, "Sylfaen", "Droid Sans Japanese,DejaVu Sans", 2,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x3402c30e, "MSPMincho",
      "WenQuanYi Zen Hei Mono,AR PL UMing CN,AR PL UMing HK,AR PL UMing TW", 2,
-     1252},
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x3412bf31, "SimSun-PUA",
      "WenQuanYi Zen Hei Mono,AR PL UMing CN,AR PL UMing CN,AR PL UMing HK", 0,
-     936},
+     FX_CodePage::kChineseSimplified},
     {0x36eb39b9, "BerlinSansFB",
-     "Droid Sans Japanese,Liberation Serif,Ubuntu,FreeSerif", 0, 1252},
-    {0x36f42055, "UniversATT", "Microsoft Sans Serif", 0, 1252},
-    {0x3864c4f6, "HighTowerText", "Droid Sans Japanese,DejaVu Serif", 2, 1252},
+     "Droid Sans Japanese,Liberation Serif,Ubuntu,FreeSerif", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x36f42055, "UniversATT", "Microsoft Sans Serif", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x3864c4f6, "HighTowerText", "Droid Sans Japanese,DejaVu Serif", 2,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x3a257d03, "FangSong_GB2312", "WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei",
-     0, 1252},
+     0, FX_CodePage::kMSWin_WesternEuropean},
     {0x3c7d1d07, "Garamond3LTStd",
      "Droid Sans Japanese,Ubuntu Condensed,DejaVu Sans Condensed,Liberation "
      "Serif,Ubuntu,FreeSerif",
-     2, 1252},
+     2, FX_CodePage::kMSWin_WesternEuropean},
     {0x3cdae668, "FreestyleScript", "KacstQurn,Droid Sans Japanese,DejaVu Sans",
-     8, 1252},
-    {0x3d55aed7, "Jokerman", "Droid Sans Japanese,DejaVu Sans", 0, 1252},
+     8, FX_CodePage::kMSWin_WesternEuropean},
+    {0x3d55aed7, "Jokerman", "Droid Sans Japanese,DejaVu Sans", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x3d5b4385, "PMingLiU",
      "WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei "
      "Sharp,WenQuanYi Micro Hei",
-     2, 1252},
+     2, FX_CodePage::kMSWin_WesternEuropean},
     {0x3d9b7669, "EstrangeloEdessa", "Droid Sans Japanese,DejaVu Sans", 0,
-     1252},
-    {0x3e532d74, "FranklinGothicMedium", "Droid Sans Japanese,Ubuntu", 0, 1252},
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x3e532d74, "FranklinGothicMedium", "Droid Sans Japanese,Ubuntu", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x3e6aa32d, "NSimSun",
      "WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei "
      "Sharp,WenQuanYi Micro Hei",
-     1, 936},
+     1, FX_CodePage::kChineseSimplified},
     {0x3f6c36a8, "Gautami",
      "Droid Arabic Naskh,Droid Sans Ethiopic, mry_KacstQurn,Droid Sans "
      "Japanese,FreeSans",
-     0, 1252},
+     0, FX_CodePage::kMSWin_WesternEuropean},
     {0x3ff32662, "Chiller-Regular",
-     "KacstQurn,Droid Arabic Naskh,Droid Sans Ethiopic,FreeSans", 0, 1252},
+     "KacstQurn,Droid Arabic Naskh,Droid Sans Ethiopic,FreeSans", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x409de312, "ModernNo.20",
      "KacstQurn,Droid Sans Japanese,Nimbus Sans L,Nimbus Sans L,FreeSans", 2,
-     1252},
-    {0x41443c5e, "Georgia", "Droid Sans Japanese,FreeSans", 2, 1252},
-    {0x4160ade5, "BellGothicStdBlack", "FreeSans", 0, 1252},
-    {0x421976c4, "Modern-Regular", "FreeSans", 2, 1252},
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x41443c5e, "Georgia", "Droid Sans Japanese,FreeSans", 2,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x4160ade5, "BellGothicStdBlack", "FreeSans", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x421976c4, "Modern-Regular", "FreeSans", 2,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x422a7252, "Stencil", "Droid Sans Japanese,FreeSans,Liberation Sans", 0,
-     1252},
-    {0x42c8554f, "Fixedsys", "FreeSerif", 0, 1252},
-    {0x435cb41d, "Roman", "FreeSerif", 0, 1252},
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x42c8554f, "Fixedsys", "FreeSerif", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x435cb41d, "Roman", "FreeSerif", 0, FX_CodePage::kMSWin_WesternEuropean},
     {0x47882383, "CourierNew",
      "FreeMono,WenQuanYi Micro Hei Mono,AR PL UKai CN,AR PL UKai HK,AR PL "
      "UKai TW,AR PL UKai TW MBE,DejaVu Sans",
-     1, 1252},
+     1, FX_CodePage::kMSWin_WesternEuropean},
     {0x480a2338, "BerlinSansFBDemi", "Droid Sans Japanese,Liberation Serif", 0,
-     1252},
-    {0x480bf7a4, "CourierStd", "DejaVu Sans", 0, 1252},
-    {0x481ad6ed, "VladimirScript", "Droid Sans Japanese,DejaVu Serif", 8, 1252},
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x480bf7a4, "CourierStd", "DejaVu Sans", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x481ad6ed, "VladimirScript", "Droid Sans Japanese,DejaVu Serif", 8,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x4911577a, "YouYuan",
      "WenQuanYi Zen Hei Mono,AR PL UMing CN,AR PL UMing HK,AR PL UMing TW", 1,
-     936},
+     FX_CodePage::kChineseSimplified},
     {0x4a788d72, "STXingkai", "AR PL UKai HK,AR PL UMing HK,AR PL UKai CN", 0,
-     936},
-    {0x4bf88566, "SegoeCondensed", "FreeSerif", 0, 1252},
+     FX_CodePage::kChineseSimplified},
+    {0x4bf88566, "SegoeCondensed", "FreeSerif", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x4ccf51a4, "BerlinSansFB-Reg", "Droid Sans Japanese,Liberation Serif", 0,
-     1252},
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x4ea967ce, "GulimChe",
      "WenQuanYi Zen Hei Mono,AR PL UKai CN,AR PL UKai HK,AR PL UKai TW,AR PL "
      "UKai TW MBE",
-     1, 1252},
+     1, FX_CodePage::kMSWin_WesternEuropean},
     {0x4f68bd79, "LetterGothicStd",
-     "FreeMono,Liberation Mono,Andale Mono,WenQuanYi Micro Hei Mono", 0, 1252},
-    {0x51a0d0e6, "KozukaGothicPr6NM", "FreeSerif", 0, 1252},
-    {0x531b3dea, "BasemicSymbol", "FreeSerif", 0, 1252},
+     "FreeMono,Liberation Mono,Andale Mono,WenQuanYi Micro Hei Mono", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x51a0d0e6, "KozukaGothicPr6NM", "FreeSerif", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x531b3dea, "BasemicSymbol", "FreeSerif", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x5333fd39, "CalifornianFB-Reg",
-     "Droid Sans Japanese,URW Chancery L,FreeSerif", 2, 1252},
+     "Droid Sans Japanese,URW Chancery L,FreeSerif", 2,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x53561a54, "FZYTK--GBK1-0",
      "WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei "
      "Sharp,WenQuanYi Micro Hei",
-     0, 936},
+     0, FX_CodePage::kChineseSimplified},
     {0x55e0dde6, "LucidaSansTypewriter",
      "Ubuntu Mono,DejaVu Sans Mono,Nimbus Mono L,Liberation Mono,Courier 10 "
      "Pitch,FreeMono",
-     0, 1252},
-    {0x574d4d3d, "AdobeArabic", "Droid Sans Japanese,DejaVu Sans", 0, 1252},
-    {0x5792e759, "STKaiti", "WenQuanYi Micro Hei Mono", 0, 936},
+     0, FX_CodePage::kMSWin_WesternEuropean},
+    {0x574d4d3d, "AdobeArabic", "Droid Sans Japanese,DejaVu Sans", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x5792e759, "STKaiti", "WenQuanYi Micro Hei Mono", 0,
+     FX_CodePage::kChineseSimplified},
     {0x5921978e, "LucidaSansUnicode", "Droid Sans Japanese,DejaVu Sans", 0,
-     1252},
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x594e2da4, "Vrinda",
      "Droid Arabic Naskh,Droid Sans Ethiopic,Droid Arabic "
      "Naskh,mry_KacstQurn,Droid Sans Japanese,FreeSans,FreeSerif",
-     0, 1252},
+     0, FX_CodePage::kMSWin_WesternEuropean},
     {0x59baa9a2, "KaiTi_GB2312",
      "WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei "
      "Sharp,WenQuanYi Micro Hei",
-     0, 1252},
+     0, FX_CodePage::kMSWin_WesternEuropean},
     {0x5cfedf4f, "BaskOldFace",
-     "KacstQurn,Droid Sans Japanese,Ubuntu,Liberation Serif", 0, 1252},
+     "KacstQurn,Droid Sans Japanese,Ubuntu,Liberation Serif", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x5e16ac91, "TrajanPro",
      "Nimbus Sans L,AR PL UMing HK,AR PL UKai HK,AR PL UMing TW,AR PL UMing "
      "TW MBE,DejaVu Sans,DejaVu Serif",
-     0, 1252},
+     0, FX_CodePage::kMSWin_WesternEuropean},
     {0x5f388196, "ITCLegacySansStdMedium",
-     "Liberation Serif,FreeSerif,FreeSans,Ubuntu", 0, 1252},
+     "Liberation Serif,FreeSerif,FreeSans,Ubuntu", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x5f97921c, "AdobeMyungjoStdM",
      "WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei "
      "Sharp,WenQuanYi Micro Hei",
-     0, 936},
+     0, FX_CodePage::kChineseSimplified},
     {0x5fefbfad, "Batang",
      "WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei "
      "Sharp,WenQuanYi Micro Hei",
-     2, 1252},
+     2, FX_CodePage::kMSWin_WesternEuropean},
     {0x605342b9, "DotumChe",
      "WenQuanYi Zen Hei Mono,AR PL UMing CN,AR PL UMing HK,AR PL UMing TW", 1,
-     1252},
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x608c5f9a, "KaiTi_GB2312",
      "WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei "
      "Sharp,WenQuanYi Micro Hei",
-     0, 936},
+     0, FX_CodePage::kChineseSimplified},
     {0x61efd0d1, "MaturaMTScriptCapitals",
      "KacstQurn,Droid Arabic Naskh,Droid Sans Ethiopic,mry_KacstQurn,Droid "
      "Sans Japanese,DejaVu Serif,DejaVu Sans",
-     0, 1252},
+     0, FX_CodePage::kMSWin_WesternEuropean},
     {0x626608a9, "MVBoli",
      "Droid Arabic Naskh,Droid Sans Ethiopic,mry_KacstQurn,Droid Sans "
      "Ethiopic,Droid Sans Japanese,DejaVu Sans",
-     0, 1252},
-    {0x630501a3, "SmallFonts", "DejaVu Serif", 0, 1252},
+     0, FX_CodePage::kMSWin_WesternEuropean},
+    {0x630501a3, "SmallFonts", "DejaVu Serif", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x65d0e2a9, "FZYTK--GBK1-0",
      "WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei "
      "Sharp,WenQuanYi Micro Hei",
-     0, 936},
+     0, FX_CodePage::kChineseSimplified},
     {0x669f29e1, "FZSTK--GBK1-0",
-     "AR PL UMing CN,AR PL UKai CN, AR PL UMing HK", 0, 936},
+     "AR PL UMing CN,AR PL UKai CN, AR PL UMing HK", 0,
+     FX_CodePage::kChineseSimplified},
     {0x673a9e5f, "Tunga",
      "Droid Arabic Naskh,Droid Sans Ethiopic,mry_KacstQurn,Droid Sans "
      "Japanese,DejaVu Serif",
-     0, 1252},
-    {0x691aa4ce, "NiagaraSolid", "Droid Sans Japanese,DejaVu Serif", 0, 1252},
-    {0x696259b7, "Corbel", "Droid Sans Japanese,DejaVu Sans", 0, 1252},
-    {0x696ee9be, "STXihei", "WenQuanYi Micro Hei Mono", 0, 936},
-    {0x6c59cf69, "Dotum", "WenQuanYi Zen Hei Mono", 0, 1252},
-    {0x707fa561, "Gungsuh", "WenQuanYi Zen Hei Mono", 2, 1252},
+     0, FX_CodePage::kMSWin_WesternEuropean},
+    {0x691aa4ce, "NiagaraSolid", "Droid Sans Japanese,DejaVu Serif", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x696259b7, "Corbel", "Droid Sans Japanese,DejaVu Sans", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x696ee9be, "STXihei", "WenQuanYi Micro Hei Mono", 0,
+     FX_CodePage::kChineseSimplified},
+    {0x6c59cf69, "Dotum", "WenQuanYi Zen Hei Mono", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x707fa561, "Gungsuh", "WenQuanYi Zen Hei Mono", 2,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x71416bb2, "ZWAdobeF",
      "KacstArt,KacstBookm,KacstDecorative,KacstDigital,KacstFarsi,KacstLetter,"
      "KacstOffice,Dingbats,FreeSerif",
-     0, 1252},
+     0, FX_CodePage::kMSWin_WesternEuropean},
     {0x71b41801, "Verdana",
      "DejaVu Sans Condensed,Ubuntu Condensed,Droid Sans Japanese,DejaVu Sans",
-     0, 1252},
-    {0x73f25e4c, "PalatinoLinotype", "Droid Sans Japanese,FreeSerif", 0, 1252},
-    {0x73f4d19f, "NiagaraEngraved", "Droid Sans Japanese,FreeSerif", 0, 1252},
+     0, FX_CodePage::kMSWin_WesternEuropean},
+    {0x73f25e4c, "PalatinoLinotype", "Droid Sans Japanese,FreeSerif", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x73f4d19f, "NiagaraEngraved", "Droid Sans Japanese,FreeSerif", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x74001694, "MyriadProBlack", "Droid Sans Japanese,AR PL UKai HK", 0,
-     1252},
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x74b14d8f, "Haettenschweiler", "Droid Sans Japanese,DejaVu Serif", 0,
-     1252},
-    {0x74cb44ee, "NSimSun", "WenQuanYi Zen Hei Mono", 1, 936},
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x74cb44ee, "NSimSun", "WenQuanYi Zen Hei Mono", 1,
+     FX_CodePage::kChineseSimplified},
     {0x76b4d7ff, "Shruti",
      "Droid Arabic Naskh,Droid Sans Ethiopic,mry_KacstQurn,Droid Sans "
      "Japanese,FreeSans",
-     0, 1252},
-    {0x788b3533, "Webdings", "FreeSans", 6, 42},
-    {0x797dde99, "MSSerif", "FreeSans", 0, 1252},
+     0, FX_CodePage::kMSWin_WesternEuropean},
+    {0x788b3533, "Webdings", "FreeSans", 6, FX_CodePage::kSymbol},
+    {0x797dde99, "MSSerif", "FreeSans", 0, FX_CodePage::kMSWin_WesternEuropean},
     {0x7a0f9e9e, "MSMincho",
      "WenQuanYi Micro Hei Mono,AR PL UMing CN,AR PL UMing HK,AR PL UMing TW", 1,
-     1252},
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x7b439caf, "OldEnglishTextMT",
-     "Droid Sans Japanese,Liberation Sans,Ubuntu", 0, 1252},
+     "Droid Sans Japanese,Liberation Sans,Ubuntu", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x8213a433, "LucidaSans-Typewriter",
-     "Ubuntu Mono,Liberation Mono,DejaVu Sans Mono", 0, 1252},
+     "Ubuntu Mono,Liberation Mono,DejaVu Sans Mono", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x82fec929, "AdobeSongStd",
      "WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei "
      "Sharp,WenQuanYi Micro Hei",
-     0, 936},
-    {0x83581825, "Modern", "FreeSans", 0, 1252},
+     0, FX_CodePage::kChineseSimplified},
+    {0x83581825, "Modern", "FreeSans", 0, FX_CodePage::kMSWin_WesternEuropean},
     {0x835a2823, "Algerian",
-     "KacstQurn,Droid Sans Japanese,FreeSans,Liberation Sans,Ubuntu", 0, 1252},
-    {0x83dab9f5, "Script", "FreeSans", 0, 1252},
+     "KacstQurn,Droid Sans Japanese,FreeSans,Liberation Sans,Ubuntu", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x83dab9f5, "Script", "FreeSans", 0, FX_CodePage::kMSWin_WesternEuropean},
     {0x847b56da, "Tahoma",
-     "Droid Sans Japanese,DejaVu Sans Condensed,FreeSerif", 0, 1252},
+     "Droid Sans Japanese,DejaVu Sans Condensed,FreeSerif", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x8a783cb2, "SimSun-PUA",
      "WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei "
      "Sharp,WenQuanYi Micro Hei",
-     0, 1252},
-    {0x8b5cac0e, "Onyx", "Droid Sans Japanese,Liberation Sans", 0, 1252},
+     0, FX_CodePage::kMSWin_WesternEuropean},
+    {0x8b5cac0e, "Onyx", "Droid Sans Japanese,Liberation Sans", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x8c6a499e, "Gulim",
      "WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei "
      "Sharp,WenQuanYi Micro Hei",
-     0, 1252},
-    {0x8e0af790, "JuiceITC", "Droid Sans Japanese,Liberation Sans", 0, 1252},
+     0, FX_CodePage::kMSWin_WesternEuropean},
+    {0x8e0af790, "JuiceITC", "Droid Sans Japanese,Liberation Sans", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x8e8d43b2, "Centaur",
-     "KacstQurn,Droid Sans Japanese,Khmer OS,Khmer OS System", 2, 1252},
-    {0x8ee4dcca, "BookshelfSymbol7", "Liberation Sans", 0, 1252},
-    {0x90794800, "BellGothicStdLight", "Liberation Sans", 0, 1252},
+     "KacstQurn,Droid Sans Japanese,Khmer OS,Khmer OS System", 2,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x8ee4dcca, "BookshelfSymbol7", "Liberation Sans", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x90794800, "BellGothicStdLight", "Liberation Sans", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x909b516a, "Century",
      "Droid Sans Japanese,Liberation Sans,Liberation Mono,Liberation Serif", 2,
-     1252},
-    {0x92ae370d, "MSOutlook", "Liberation Sans", 4, 42},
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x92ae370d, "MSOutlook", "Liberation Sans", 4, FX_CodePage::kSymbol},
     {0x93c9fbf1, "LucidaFax",
      "KacstQurn,Droid Arabic Naskh,Droid Sans "
      "Ethiopic,mry_KacstQurn,Liberation Sans",
-     2, 1252},
+     2, FX_CodePage::kMSWin_WesternEuropean},
     {0x9565085e, "BookAntiqua",
-     "Droid Sans Japanese,Liberation Sans,Liberation Serif", 2, 1252},
-    {0x9856d95d, "AdobeMingStd", "AR PL UMing HK", 0, 949},
+     "Droid Sans Japanese,Liberation Sans,Liberation Serif", 2,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x9856d95d, "AdobeMingStd", "AR PL UMing HK", 0, FX_CodePage::kHangul},
     {0x9bbadd6b, "ColonnaMT",
-     "KacstQurn,Droid Sans Japanese,Khmer OS,Khmer OS System", 0, 1252},
+     "KacstQurn,Droid Sans Japanese,Khmer OS,Khmer OS System", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0x9cbd16a4, "ShowcardGothic-Reg",
-     "Droid Sans Japanese,Liberation Sans,Ubuntu", 0, 1252},
-    {0x9d73008e, "MSSansSerif", "FreeSerif", 0, 1252},
+     "Droid Sans Japanese,Liberation Sans,Ubuntu", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0x9d73008e, "MSSansSerif", "FreeSerif", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xa0607db1, "GungsuhChe",
      "WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei "
      "Sharp,WenQuanYi Micro Hei",
-     1, 1252},
-    {0xa0bcf6a1, "LatinWide", "FreeSerif", 2, 1252},
-    {0xa1429b36, "Symbol", "FreeSerif", 6, 42},
-    {0xa1fa5abc, "Wingdings2", "FreeSerif", 6, 42},
-    {0xa1fa5abd, "Wingdings3", "FreeSerif", 6, 42},
+     1, FX_CodePage::kMSWin_WesternEuropean},
+    {0xa0bcf6a1, "LatinWide", "FreeSerif", 2,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xa1429b36, "Symbol", "FreeSerif", 6, FX_CodePage::kSymbol},
+    {0xa1fa5abc, "Wingdings2", "FreeSerif", 6, FX_CodePage::kSymbol},
+    {0xa1fa5abd, "Wingdings3", "FreeSerif", 6, FX_CodePage::kSymbol},
     {0xa427bad4, "InformalRoman-Regular",
      "Droid Arabic Naskh,Droid Sans Ethiopic,mry_KacstQurn,Droid Sans "
      "Japanese,FreeSerif",
-     8, 1252},
-    {0xa8b92ece, "FZSTK--GBK1-0", "AR PL UMing CN", 0, 936},
-    {0xa8d83ece, "CalifornianFB", "Droid Sans Japanese,FreeSerif", 2, 1252},
+     8, FX_CodePage::kMSWin_WesternEuropean},
+    {0xa8b92ece, "FZSTK--GBK1-0", "AR PL UMing CN", 0,
+     FX_CodePage::kChineseSimplified},
+    {0xa8d83ece, "CalifornianFB", "Droid Sans Japanese,FreeSerif", 2,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xaa3e082c, "Kingsoft-Phonetic",
      "Tibetan Machine Uni,LKLUG,Samyak Gujarati,Droid Sans "
      "Thai,utkal,Kedage,Mallige,AR PL UKai CN",
-     0, 1252},
+     0, FX_CodePage::kMSWin_WesternEuropean},
     {0xaa6bcabe, "HarlowSolidItalic",
-     "KacstQurn,Droid Sans Japanese,Liberation Serif", 0, 1252},
+     "KacstQurn,Droid Sans Japanese,Liberation Serif", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xade5337c, "MSUIGothic",
      "WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei "
      "Sharp,WenQuanYi Micro Hei",
-     0, 1252},
+     0, FX_CodePage::kMSWin_WesternEuropean},
     {0xb08dd941, "WideLatin",
      "KacstQurn,Droid Arabic Naskh,Droid Sans Ethiopic,mry_KacstQurn,Droid "
      "Sans Japanese,Liberation Serif",
-     2, 1252},
+     2, FX_CodePage::kMSWin_WesternEuropean},
     {0xb12765e0, "ITCLegacySansStdBook",
-     "AR PL UMing HK,AR PL UKai HK,FreeSerif,Ubuntu,FreeSans", 0, 1252},
+     "AR PL UMing HK,AR PL UKai HK,FreeSerif,Ubuntu,FreeSans", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xb207f05d, "PoorRichard", "Droid Sans Japanese,Liberation Serif", 2,
-     1252},
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xb3bc492f, "JuiceITC-Regular", "Droid Sans Japanese,Liberation Serif", 0,
-     1252},
-    {0xb5545399, "Marlett", "Liberation Serif", 4, 42},
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xb5545399, "Marlett", "Liberation Serif", 4, FX_CodePage::kSymbol},
     {0xb5dd1ebb, "BritannicBold",
      "KacstQurn,Droid Arabic Naskh,Droid Sans "
      "Ethiopic,mry_KacstQurn,Liberation Serif",
-     0, 1252},
+     0, FX_CodePage::kMSWin_WesternEuropean},
     {0xb699c1c5, "LucidaCalligraphy-Italic",
      "KacstQurn,Droid Arabic Naskh,Droid Sans Ethiopic,mry_KacstQurn,Droid "
      "Sans Japanese,DejaVu Serif",
-     0, 1252},
+     0, FX_CodePage::kMSWin_WesternEuropean},
     {0xb725d629, "TimesNewRoman", "Droid Sans Japanese,Liberation Sans", 2,
-     1252},
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xb7eaebeb, "AdobeHeitiStdR",
      "WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei "
      "Sharp,WenQuanYi Micro Hei",
-     0, 936},
+     0, FX_CodePage::kChineseSimplified},
     {0xbd29c486, "BerlinSansFBDemi-Bold", "Droid Sans Japanese,DejaVu Serif", 0,
-     1252},
-    {0xbe8a8db4, "BookshelfSymbolSeven", "DejaVu Sans", 0, 1252},
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xbe8a8db4, "BookshelfSymbolSeven", "DejaVu Sans", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xc16c0118, "AdobeHebrew", "Droid Sans Japanese,Ubuntu,Liberation Serif",
-     0, 1252},
+     0, FX_CodePage::kMSWin_WesternEuropean},
     {0xc318b0af, "MyriadProLight",
-     "Droid Sans Japanese,AR PL UKai HK,AR PL UMing HK,AR PL UKai CN", 0, 1252},
+     "Droid Sans Japanese,AR PL UKai HK,AR PL UMing HK,AR PL UKai CN", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xc65e5659, "CambriaMath", "Droid Sans Japanese,FreeSerif,FreeMono", 2,
-     1252},
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xc75c8f05, "LucidaConsole",
      "Liberation Mono,DejaVu Sans Mono,FreeMono,WenQuanYi Micro Hei Mono", 1,
-     1252},
-    {0xca7c35d6, "Calibri", "Droid Sans Japanese,DejaVu Sans", 0, 1252},
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xca7c35d6, "Calibri", "Droid Sans Japanese,DejaVu Sans", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xcb053f53, "MicrosoftYaHei",
      "WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei "
      "Sharp,WenQuanYi Micro Hei",
-     0, 936},
+     0, FX_CodePage::kChineseSimplified},
     {0xcb7190f9, "Magneto-Bold",
      "Droid Arabic Naskh,Droid Sans Ethiopic,mry_KacstQurn,Droid Sans "
      "Japanese,DejaVu Serif",
-     0, 1252},
-    {0xcca00cc5, "System", "DejaVu Sans", 0, 1252},
+     0, FX_CodePage::kMSWin_WesternEuropean},
+    {0xcca00cc5, "System", "DejaVu Sans", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xccad6f76, "Jokerman-Regular", "Droid Sans Japanese,DejaVu Sans", 0,
-     1252},
-    {0xccc5818c, "EuroSign", "DejaVu Serif", 0, 1252},
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xccc5818c, "EuroSign", "DejaVu Serif", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xcf3d7234, "LucidaHandwriting-Italic",
      "Liberation Sans Narrow,Ubuntu Condensed,Nimbus Sans L,DejaVu Serif", 0,
-     1252},
-    {0xcf7b8fdb, "MinionPro", "DejaVu Sans", 0, 1252},
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xcf7b8fdb, "MinionPro", "DejaVu Sans", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xcfe5755f, "Simhei",
      "WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei "
      "Sharp,WenQuanYi Micro Hei",
-     1, 936},
+     1, FX_CodePage::kChineseSimplified},
     {0xd011f4ee, "MSPGothic",
      "WenQuanYi Zen Hei Mono,AR PL UMing CN,AR PL UMing HK,AR PL UMing TW", 0,
-     1252},
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xd060e7ef, "Vivaldi",
-     "KacstQurn,Droid Sans Japanese,Liberation Sans,Ubuntu", 8, 1252},
+     "KacstQurn,Droid Sans Japanese,Liberation Sans,Ubuntu", 8,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xd07edec1, "FranklinGothic-Medium", "Droid Sans Japanese,Ubuntu", 0,
-     1252},
-    {0xd107243f, "SimSun", "WenQuanYi Zen Hei Mono", 0, 936},
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xd107243f, "SimSun", "WenQuanYi Zen Hei Mono", 0,
+     FX_CodePage::kChineseSimplified},
     {0xd1881562, "ArialNarrow",
-     "Liberation Sans Narrow,Droid Sans Japanese,FreeSerif", 0, 1252},
+     "Liberation Sans Narrow,Droid Sans Japanese,FreeSerif", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xd22b7dce, "BodoniMTPosterCompressed", "Droid Sans Japanese,DejaVu Serif",
-     0, 1252},
+     0, FX_CodePage::kMSWin_WesternEuropean},
     {0xd22bfa60, "ComicSansMS", "Droid Sans Japanese,FreeMono,Liberation Mono",
-     8, 1252},
+     8, FX_CodePage::kMSWin_WesternEuropean},
     {0xd3bd0e35, "Bauhaus93",
-     "KacstQurn,Droid Sans Japanese,Liberation Sans,Ubuntu", 0, 1252},
-    {0xd429ee7a, "STFangsong", "WenQuanYi Micro Hei Mono", 0, 936},
+     "KacstQurn,Droid Sans Japanese,Liberation Sans,Ubuntu", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xd429ee7a, "STFangsong", "WenQuanYi Micro Hei Mono", 0,
+     FX_CodePage::kChineseSimplified},
     {0xd6679c12, "BernardMTCondensed",
      "KacstQurn,Droid Sans Japanese,Nimbus Sans L,URW Chancery "
      "L,KacstOne,Liberation Sans",
-     0, 1252},
+     0, FX_CodePage::kMSWin_WesternEuropean},
     {0xd8e8a027, "LucidaSans",
      "Liberation Sans Narrow,Nimbus Sans L,KacstQurn,Droid Arabic Naskh,Droid "
      "Sans Ethiopic,DejaVu Serif Condensed,Liberation Mono,Ubuntu",
-     0, 1252},
+     0, FX_CodePage::kMSWin_WesternEuropean},
     {0xd9fe7761, "HighTowerText-Reg",
-     "Droid Sans Japanese,Ubuntu,Liberation Serif", 2, 1252},
-    {0xda7e551e, "STSong", "WenQuanYi Micro Hei Mono", 0, 936},
+     "Droid Sans Japanese,Ubuntu,Liberation Serif", 2,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xda7e551e, "STSong", "WenQuanYi Micro Hei Mono", 0,
+     FX_CodePage::kChineseSimplified},
     {0xdaa6842d, "STZhongsong",
      "WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei "
      "Sharp,WenQuanYi Micro Hei",
-     0, 936},
+     0, FX_CodePage::kChineseSimplified},
     {0xdaaab93f, "STFangsong",
      "WenQuanYi Micro Hei Mono,WenQuanYi Zen Hei Mono,WenQuanYi Zen "
      "Hei,WenQuanYi Zen Hei Sharp",
-     0, 936},
+     0, FX_CodePage::kChineseSimplified},
     {0xdaeb0713, "STSong",
      "WenQuanYi Micro Hei Mono,WenQuanYi Zen Hei Mono,WenQuanYi Zen "
      "Hei,WenQuanYi Zen Hei Sharp",
-     0, 936},
+     0, FX_CodePage::kChineseSimplified},
     {0xdafedbef, "STCaiyun", "AR PL UKai HK,AR PL UMing HK,AR PL UKai CN", 0,
-     936},
+     FX_CodePage::kChineseSimplified},
     {0xdb00a3d9, "Broadway",
      "KacstQurn,Droid Sans Japanese,DejaVu Sans,FreeMono,Liberation Mono", 0,
-     1252},
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xdb1f5ad4, "STXinwei", "AR PL UKai HK,AR PL UMing HK,AR PL UKai CN", 0,
-     936},
+     FX_CodePage::kChineseSimplified},
     {0xdb326e7f, "STKaiti",
      "WenQuanYi Micro Hei Mono,WenQuanYi Zen Hei Mono,WenQuanYi Zen "
      "Hei,WenQuanYi Zen Hei Sharp",
-     0, 936},
+     0, FX_CodePage::kChineseSimplified},
     {0xdb69595a, "STHupo",
      "WenQuanYi Micro Hei Mono,WenQuanYi Zen Hei Mono,WenQuanYi Zen "
      "Hei,WenQuanYi Zen Hei Sharp",
-     0, 936},
+     0, FX_CodePage::kChineseSimplified},
     {0xdba0082c, "STXihei",
      " WenQuanYi Micro Hei Mono,WenQuanYi Zen Hei Mono,WenQuanYi Zen "
      "Hei,WenQuanYi Zen Hei Sharp",
-     0, 936},
+     0, FX_CodePage::kChineseSimplified},
     {0xdbd0ab18, "STXingkai", "AR PL UKai HK,AR PL UMing HK,AR PL UKai CN", 0,
-     936},
+     FX_CodePage::kChineseSimplified},
     {0xdc1a7db1, "STLiti", "AR PL UKai HK,AR PL UMing HK,AR PL UKai CN", 0,
-     936},
+     FX_CodePage::kChineseSimplified},
     {0xdc33075f, "KristenITC-Regular",
      "Droid Arabic Naskh,Droid Sans Ethiopic,mry_KacstQurn,DejaVu Sans "
      "Condensed,Ubuntu,Liberation Sans",
-     8, 1252},
+     8, FX_CodePage::kMSWin_WesternEuropean},
     {0xdcc7009c, "Harrington",
      "KacstQurn,Droid Sans Japanese,Liberation Serif,FreeSerif,Ubuntu", 0,
-     1252},
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xdd712466, "ArialBlack",
-     "Droid Sans Japanese,DejaVu Sans,DejaVu Serif,FreeMono", 0, 1252},
-    {0xdde87b3e, "Impact", "Droid Sans Japanese,DejaVu Serif", 0, 1252},
+     "Droid Sans Japanese,DejaVu Sans,DejaVu Serif,FreeMono", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xdde87b3e, "Impact", "Droid Sans Japanese,DejaVu Serif", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xdf69fb32, "SnapITC",
      "Liberation Sans Narrow,Ubuntu Condensed,DejaVu Sans,DejaVu "
      "Serif,FreeMono",
-     0, 1252},
+     0, FX_CodePage::kMSWin_WesternEuropean},
     {0xdf8b25e8, "CenturyGothic",
      "Droid Sans Japanese,Liberation Mono,Liberation Sans,Liberation Serif", 0,
-     1252},
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xe0f705c0, "KristenITC",
      "Droid Arabic Naskh,Droid Sans Ethiopic,mry_KacstQurn,DejaVu Sans "
      "Condensed,Ubuntu,Liberation Sans",
-     8, 1252},
+     8, FX_CodePage::kMSWin_WesternEuropean},
     {0xe1427573, "Raavi",
      "Droid Arabic Naskh,Droid Sans "
      "Ethiopic,mry_KacstQurn,FreeSerif,Liberation Serif,Khmer OS",
-     0, 1252},
+     0, FX_CodePage::kMSWin_WesternEuropean},
     {0xe2cea0cb, "Magneto",
      "Droid Arabic Naskh,Droid Sans Ethiopic,mry_KacstQurn,DejaVu "
      "Serif,DejaVu Serif Condensed,DejaVu Sans",
-     0, 1252},
+     0, FX_CodePage::kMSWin_WesternEuropean},
     {0xe36a9e17, "Ravie",
      "Droid Arabic Naskh,Droid Sans Ethiopic,mry_KacstQurn,DejaVu "
      "Serif,DejaVu Sans,FreeMono",
-     0, 1252},
-    {0xe433f8e2, "Parchment", "Droid Sans Japanese,DejaVu Serif", 8, 1252},
-    {0xe43dff4a, "Wingdings", "DejaVu Serif", 4, 42},
-    {0xe4e2c405, "MTExtra", "DejaVu Serif", 6, 42},
+     0, FX_CodePage::kMSWin_WesternEuropean},
+    {0xe433f8e2, "Parchment", "Droid Sans Japanese,DejaVu Serif", 8,
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xe43dff4a, "Wingdings", "DejaVu Serif", 4, FX_CodePage::kSymbol},
+    {0xe4e2c405, "MTExtra", "DejaVu Serif", 6, FX_CodePage::kSymbol},
     {0xe618cc35, "InformalRoman",
      "Droid Arabic Naskh,Droid Sans Ethiopic,mry_KacstQurn,Droid Sans "
      "Japanese,Nimbus Sans L,DejaVu Sans Condensed,Ubuntu,Liberation Sans",
-     8, 1252},
-    {0xe6c27ffc, "Mistral", "Droid Sans Japanese,DejaVu Serif", 8, 1252},
+     8, FX_CodePage::kMSWin_WesternEuropean},
+    {0xe6c27ffc, "Mistral", "Droid Sans Japanese,DejaVu Serif", 8,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xe7ebf4b9, "Courier", "DejaVu Sans,DejaVu Sans Condensed,FreeSerif", 0,
-     1252},
-    {0xe8bc4a9d, "MSReferenceSpecialty", "DejaVu Serif", 0, 1252},
+     FX_CodePage::kMSWin_WesternEuropean},
+    {0xe8bc4a9d, "MSReferenceSpecialty", "DejaVu Serif", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xe90fb013, "TempusSansITC",
-     "Droid Sans Japanese,Ubuntu,Liberation Serif,FreeSerif", 0, 1252},
+     "Droid Sans Japanese,Ubuntu,Liberation Serif,FreeSerif", 0,
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xec637b42, "Consolas",
      "DejaVu Sans Condensed,AR PL UKai CN,AR PL UKai HK,AR PL UKai "
      "TW,FreeSerif,FreeSans",
-     1, 1252},
+     1, FX_CodePage::kMSWin_WesternEuropean},
     {0xed3a683b, "STXinwei", "AR PL UKai HK,AR PL UMing HK,AR PL UKai CN", 0,
-     936},
+     FX_CodePage::kChineseSimplified},
     {0xef264cd1, "LucidaHandwriting",
      "Liberation Sans Narrow,Ubuntu Condensed,Nimbus Sans "
      "L,KacstQurn,Liberation Mono",
-     0, 1252},
+     0, FX_CodePage::kMSWin_WesternEuropean},
     {0xf086bca2, "BaskervilleOldFace",
      "KacstQurn,Droid Sans Japanese,Liberation Serif,Ubuntu,FreeSerif", 0,
-     1252},
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xf1028030, "Mangal",
      "FreeSans,TSCu_Paranar,Garuda,Liberation Sans,Liberation Sans "
      "Narrow,Nimbus Sans ",
-     2, 1252},
+     2, FX_CodePage::kMSWin_WesternEuropean},
     {0xf1da7eb9, "ShowcardGothic",
      "Droid Sans Japanese,DejaVu Serif Condensed,DejaVu Sans "
      "Condensed,Liberation Sans,Ubuntu",
-     0, 1252},
+     0, FX_CodePage::kMSWin_WesternEuropean},
     {0xf210f06a, "ArialMT",
      "Liberation Sans,Liberation Sans Narrow,FreeSans,Nimbus Sans L,Khmer OS "
      "System,Khmer OS",
-     0, 1252},
+     0, FX_CodePage::kMSWin_WesternEuropean},
     {0xf477f16a, "Latha",
      "Liberation Sans Narrow,Nimbus Sans L,Droid Arabic "
      "Naskh,mry_KacstQurn,FreeSerif,Nimbus Sans ",
-     0, 1252},
+     0, FX_CodePage::kMSWin_WesternEuropean},
     {0xf616f3dd, "LiSu",
      "WenQuanYi Zen Hei Mono,AR PL UMing CN,AR PL UMing HK,AR PL UMing TW,AR "
      "PL UMing TW MBE",
-     1, 936},
+     1, FX_CodePage::kChineseSimplified},
     {0xfa479aa6, "MicrosoftYaHei",
      "WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei "
      "Sharp,WenQuanYi Micro Hei",
-     0, 936},
+     0, FX_CodePage::kChineseSimplified},
     {0xfcd19697, "BookmanOldStyle",
      "Droid Sans Japanese,Liberation Mono,Liberation Sans,Liberation Serif", 0,
-     1252},
+     FX_CodePage::kMSWin_WesternEuropean},
     {0xfe209a82, "LucidaCalligraphy",
      "KacstQurn,Droid Arabic Naskh,Droid Sans Ethiopic,mry_KacstQurn,Droid "
      "Sans Japanese,DejaVu Serif,DejaVu Sans,FreeMono",
-     0, 1252},
+     0, FX_CodePage::kMSWin_WesternEuropean},
     {0xfef135f8, "AdobeHeitiStd-Regular",
      "WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei "
      "Sharp,WenQuanYi Micro Hei",
-     0, 936},
+     0, FX_CodePage::kChineseSimplified},
 };
 #else
 #error "Unsupported platform"
diff --git a/xfa/fgas/font/fgas_fontutils.h b/xfa/fgas/font/fgas_fontutils.h
index 91998d5..055d019 100644
--- a/xfa/fgas/font/fgas_fontutils.h
+++ b/xfa/fgas/font/fgas_fontutils.h
@@ -7,13 +7,16 @@
 #ifndef XFA_FGAS_FONT_FGAS_FONTUTILS_H_
 #define XFA_FGAS_FONT_FGAS_FONTUTILS_H_
 
+#include <stdint.h>
+
+#include "core/fxcrt/fx_codepage_forward.h"
 #include "core/fxcrt/widestring.h"
 
 struct FGAS_FONTUSB {
   uint16_t wStartUnicode;
   uint16_t wEndUnicode;
   uint16_t wBitField;
-  uint16_t wCodePage;
+  FX_CodePage wCodePage;
 };
 
 const FGAS_FONTUSB* FGAS_GetUnicodeBitField(wchar_t wUnicode);
@@ -23,11 +26,10 @@
   const char* pPsName;       // Raw, POD struct.
   const char* pReplaceFont;  // Raw, POD struct.
   uint16_t dwStyles;
-  uint16_t wCodePage;
+  FX_CodePage wCodePage;
 };
 
 WideString FGAS_FontNameToEnglishName(WideStringView wsLocalName);
-
 const FGAS_FontInfo* FGAS_FontInfoByFontName(WideStringView wsFontName);
 
 #endif  // XFA_FGAS_FONT_FGAS_FONTUTILS_H_
diff --git a/xfa/fgas/layout/cfgas_rtfbreak_unittest.cpp b/xfa/fgas/layout/cfgas_rtfbreak_unittest.cpp
index b424a49..4279146 100644
--- a/xfa/fgas/layout/cfgas_rtfbreak_unittest.cpp
+++ b/xfa/fgas/layout/cfgas_rtfbreak_unittest.cpp
@@ -9,6 +9,7 @@
 #include <memory>
 #include <utility>
 
+#include "core/fxcrt/fx_codepage.h"
 #include "core/fxge/cfx_font.h"
 #include "core/fxge/cfx_gemodule.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -19,7 +20,7 @@
 class CFGAS_RTFBreakTest : public testing::Test {
  public:
   void SetUp() override {
-    font_ = CFGAS_GEFont::LoadFont(L"Arial Black", 0, 0);
+    font_ = CFGAS_GEFont::LoadFont(L"Arial Black", 0, FX_CodePage::kDefANSI);
     ASSERT_TRUE(font_);
   }
 
diff --git a/xfa/fgas/layout/cfgas_txtbreak.cpp b/xfa/fgas/layout/cfgas_txtbreak.cpp
index 54a4523..fc07ffc 100644
--- a/xfa/fgas/layout/cfgas_txtbreak.cpp
+++ b/xfa/fgas/layout/cfgas_txtbreak.cpp
@@ -9,6 +9,7 @@
 #include <algorithm>
 
 #include "build/build_config.h"
+#include "core/fxcrt/fx_codepage.h"
 #include "core/fxcrt/fx_extension.h"
 #include "core/fxcrt/fx_safe_types.h"
 #include "core/fxcrt/stl_util.h"
diff --git a/xfa/fgas/layout/cfgas_txtbreak_unittest.cpp b/xfa/fgas/layout/cfgas_txtbreak_unittest.cpp
index 4d64b9a..743a9ab 100644
--- a/xfa/fgas/layout/cfgas_txtbreak_unittest.cpp
+++ b/xfa/fgas/layout/cfgas_txtbreak_unittest.cpp
@@ -7,6 +7,7 @@
 #include <memory>
 #include <utility>
 
+#include "core/fxcrt/fx_codepage.h"
 #include "core/fxge/cfx_font.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "xfa/fgas/font/cfgas_fontmgr.h"
@@ -16,7 +17,7 @@
 class CFGAS_TxtBreakTest : public testing::Test {
  public:
   void SetUp() override {
-    font_ = CFGAS_GEFont::LoadFont(L"Arial Black", 0, 0);
+    font_ = CFGAS_GEFont::LoadFont(L"Arial Black", 0, FX_CodePage::kDefANSI);
     ASSERT_TRUE(font_);
   }
 
diff --git a/xfa/fwl/theme/cfwl_fontmanager.cpp b/xfa/fwl/theme/cfwl_fontmanager.cpp
index 30ece54..be7106b 100644
--- a/xfa/fwl/theme/cfwl_fontmanager.cpp
+++ b/xfa/fwl/theme/cfwl_fontmanager.cpp
@@ -35,7 +35,7 @@
 
 RetainPtr<CFGAS_GEFont> CFWL_FontManager::FindFont(WideStringView wsFontFamily,
                                                    uint32_t dwFontStyles,
-                                                   uint16_t wCodePage) {
+                                                   FX_CodePage wCodePage) {
   for (const auto& pData : m_FontsArray) {
     if (pData->Equal(wsFontFamily, dwFontStyles, wCodePage))
       return pData->GetFont();
@@ -54,14 +54,14 @@
 
 bool CFWL_FontManager::FontData::Equal(WideStringView wsFontFamily,
                                        uint32_t dwFontStyles,
-                                       uint16_t wCodePage) {
+                                       FX_CodePage wCodePage) {
   return m_wsFamily == wsFontFamily && m_dwStyles == dwFontStyles &&
          m_dwCodePage == wCodePage;
 }
 
 bool CFWL_FontManager::FontData::LoadFont(WideStringView wsFontFamily,
                                           uint32_t dwFontStyles,
-                                          uint16_t dwCodePage) {
+                                          FX_CodePage dwCodePage) {
   m_wsFamily = wsFontFamily;
   m_dwStyles = dwFontStyles;
   m_dwCodePage = dwCodePage;
diff --git a/xfa/fwl/theme/cfwl_fontmanager.h b/xfa/fwl/theme/cfwl_fontmanager.h
index 6a80ea8..3f950c6 100644
--- a/xfa/fwl/theme/cfwl_fontmanager.h
+++ b/xfa/fwl/theme/cfwl_fontmanager.h
@@ -10,6 +10,7 @@
 #include <memory>
 #include <vector>
 
+#include "core/fxcrt/fx_codepage.h"
 #include "core/fxcrt/fx_string.h"
 #include "core/fxcrt/fx_system.h"
 #include "core/fxcrt/retain_ptr.h"
@@ -23,7 +24,7 @@
 
   RetainPtr<CFGAS_GEFont> FindFont(WideStringView wsFontFamily,
                                    uint32_t dwFontStyles,
-                                   uint16_t dwCodePage);
+                                   FX_CodePage dwCodePage);
 
  private:
   class FontData final {
@@ -33,16 +34,16 @@
 
     bool Equal(WideStringView wsFontFamily,
                uint32_t dwFontStyles,
-               uint16_t wCodePage);
+               FX_CodePage wCodePage);
     bool LoadFont(WideStringView wsFontFamily,
                   uint32_t dwFontStyles,
-                  uint16_t wCodePage);
+                  FX_CodePage wCodePage);
     RetainPtr<CFGAS_GEFont> GetFont() const;
 
    private:
     WideString m_wsFamily;
     uint32_t m_dwStyles = 0;
-    uint32_t m_dwCodePage = 0;
+    FX_CodePage m_dwCodePage = FX_CodePage::kDefANSI;
     RetainPtr<CFGAS_GEFont> m_pFont;
   };
 
diff --git a/xfa/fwl/theme/cfwl_widgettp.cpp b/xfa/fwl/theme/cfwl_widgettp.cpp
index e87fc3f..bbd2120 100644
--- a/xfa/fwl/theme/cfwl_widgettp.cpp
+++ b/xfa/fwl/theme/cfwl_widgettp.cpp
@@ -78,7 +78,8 @@
   if (m_pTextOut)
     return;
 
-  m_pFGASFont = CFWL_FontManager::GetInstance()->FindFont(L"Helvetica", 0, 0);
+  m_pFGASFont = CFWL_FontManager::GetInstance()->FindFont(
+      L"Helvetica", 0, FX_CodePage::kDefANSI);
   m_pTextOut = std::make_unique<CFDE_TextOut>();
   m_pTextOut->SetFont(m_pFGASFont);
   m_pTextOut->SetFontSize(FWLTHEME_CAPACITY_FontSize);
diff --git a/xfa/fxfa/cxfa_fwltheme.cpp b/xfa/fxfa/cxfa_fwltheme.cpp
index ff0d3c1..1379f97 100644
--- a/xfa/fxfa/cxfa_fwltheme.cpp
+++ b/xfa/fxfa/cxfa_fwltheme.cpp
@@ -78,7 +78,7 @@
   }
 
   m_pCalendarFont = CFGAS_GEModule::Get()->GetFontMgr()->GetFontByCodePage(
-      FX_CODEPAGE_MSWin_WesternEuropean, 0, nullptr);
+      FX_CodePage::kMSWin_WesternEuropean, 0, nullptr);
   return !!m_pCalendarFont;
 }