diff --git a/xfa/fgas/font/cfgas_fontmgr.cpp b/xfa/fgas/font/cfgas_fontmgr.cpp
index 460acf8..e42d2a5 100644
--- a/xfa/fgas/font/cfgas_fontmgr.cpp
+++ b/xfa/fgas/font/cfgas_fontmgr.cpp
@@ -122,10 +122,9 @@
     m_Fonts[i]->Release();
 }
 
-CFGAS_GEFont* CFGAS_FontMgr::GetDefFontByCodePage(
-    uint16_t wCodePage,
-    uint32_t dwFontStyles,
-    const FX_WCHAR* pszFontFamily) {
+CFGAS_GEFont* CFGAS_FontMgr::GetFontByCodePage(uint16_t wCodePage,
+                                               uint32_t dwFontStyles,
+                                               const FX_WCHAR* pszFontFamily) {
   uint32_t dwHash = FGAS_GetFontHashCode(wCodePage, dwFontStyles);
   CFGAS_GEFont* pFont = nullptr;
   if (m_CPFonts.Lookup((void*)(uintptr_t)dwHash, (void*&)pFont))
@@ -141,20 +140,19 @@
 
   pFont =
       CFGAS_GEFont::LoadFont(pFD->wsFontFace, dwFontStyles, wCodePage, this);
-  if (pFont) {
-    m_Fonts.Add(pFont);
-    m_CPFonts.SetAt((void*)(uintptr_t)dwHash, (void*)pFont);
-    dwHash = FGAS_GetFontFamilyHash(pFD->wsFontFace, dwFontStyles, wCodePage);
-    m_FamilyFonts.SetAt((void*)(uintptr_t)dwHash, (void*)pFont);
-    return LoadFont(pFont, dwFontStyles, wCodePage);
-  }
-  return nullptr;
+  if (!pFont)
+    return nullptr;
+
+  m_Fonts.Add(pFont);
+  m_CPFonts.SetAt((void*)(uintptr_t)dwHash, (void*)pFont);
+  dwHash = FGAS_GetFontFamilyHash(pFD->wsFontFace, dwFontStyles, wCodePage);
+  m_FamilyFonts.SetAt((void*)(uintptr_t)dwHash, (void*)pFont);
+  return LoadFont(pFont, dwFontStyles, wCodePage);
 }
 
-CFGAS_GEFont* CFGAS_FontMgr::GetDefFontByUnicode(
-    FX_WCHAR wUnicode,
-    uint32_t dwFontStyles,
-    const FX_WCHAR* pszFontFamily) {
+CFGAS_GEFont* CFGAS_FontMgr::GetFontByUnicode(FX_WCHAR wUnicode,
+                                              uint32_t dwFontStyles,
+                                              const FX_WCHAR* pszFontFamily) {
   const FGAS_FONTUSB* pRet = FGAS_GetUnicodeBitField(wUnicode);
   if (pRet->wBitField == 999)
     return nullptr;
@@ -178,16 +176,16 @@
   uint16_t wCodePage = FX_GetCodePageFromCharset(pFD->uCharSet);
   const FX_WCHAR* pFontFace = pFD->wsFontFace;
   pFont = CFGAS_GEFont::LoadFont(pFontFace, dwFontStyles, wCodePage, this);
-  if (pFont) {
-    m_Fonts.Add(pFont);
-    m_UnicodeFonts.SetAt((void*)(uintptr_t)dwHash, (void*)pFont);
-    dwHash = FGAS_GetFontHashCode(wCodePage, dwFontStyles);
-    m_CPFonts.SetAt((void*)(uintptr_t)dwHash, (void*)pFont);
-    dwHash = FGAS_GetFontFamilyHash(pFontFace, dwFontStyles, wCodePage);
-    m_FamilyFonts.SetAt((void*)(uintptr_t)dwHash, (void*)pFont);
-    return LoadFont(pFont, dwFontStyles, wCodePage);
-  }
-  return nullptr;
+  if (!pFont)
+    return nullptr;
+
+  m_Fonts.Add(pFont);
+  m_UnicodeFonts.SetAt((void*)(uintptr_t)dwHash, (void*)pFont);
+  dwHash = FGAS_GetFontHashCode(wCodePage, dwFontStyles);
+  m_CPFonts.SetAt((void*)(uintptr_t)dwHash, (void*)pFont);
+  dwHash = FGAS_GetFontFamilyHash(pFontFace, dwFontStyles, wCodePage);
+  m_FamilyFonts.SetAt((void*)(uintptr_t)dwHash, (void*)pFont);
+  return LoadFont(pFont, dwFontStyles, wCodePage);
 }
 
 CFGAS_GEFont* CFGAS_FontMgr::LoadFont(const FX_WCHAR* pszFontFamily,
@@ -209,61 +207,14 @@
     wCodePage = FX_GetCodePageFromCharset(pFD->uCharSet);
   pFont =
       CFGAS_GEFont::LoadFont(pFD->wsFontFace, dwFontStyles, wCodePage, this);
-  if (pFont) {
-    m_Fonts.Add(pFont);
-    m_FamilyFonts.SetAt((void*)(uintptr_t)dwHash, (void*)pFont);
-    dwHash = FGAS_GetFontHashCode(wCodePage, dwFontStyles);
-    m_CPFonts.SetAt((void*)(uintptr_t)dwHash, (void*)pFont);
-    return LoadFont(pFont, dwFontStyles, wCodePage);
-  }
-  return nullptr;
-}
+  if (!pFont)
+    return nullptr;
 
-CFGAS_GEFont* CFGAS_FontMgr::LoadFont(const uint8_t* pBuffer, int32_t iLength) {
-  ASSERT(pBuffer && iLength > 0);
-  CFGAS_GEFont* pFont = nullptr;
-  if (m_BufferFonts.Lookup((void*)pBuffer, (void*&)pFont)) {
-    if (pFont)
-      return pFont->Retain();
-  }
-  pFont = CFGAS_GEFont::LoadFont(pBuffer, iLength, this);
-  if (pFont) {
-    m_Fonts.Add(pFont);
-    m_BufferFonts.SetAt((void*)pBuffer, pFont);
-    return pFont->Retain();
-  }
-  return nullptr;
-}
-
-CFGAS_GEFont* CFGAS_FontMgr::LoadFont(IFX_Stream* pFontStream,
-                                      const FX_WCHAR* pszFontAlias,
-                                      uint32_t dwFontStyles,
-                                      uint16_t wCodePage,
-                                      bool bSaveStream) {
-  ASSERT(pFontStream && pFontStream->GetLength() > 0);
-  CFGAS_GEFont* pFont = nullptr;
-  if (m_StreamFonts.Lookup((void*)pFontStream, (void*&)pFont)) {
-    if (pFont) {
-      if (pszFontAlias) {
-        uint32_t dwHash =
-            FGAS_GetFontFamilyHash(pszFontAlias, dwFontStyles, wCodePage);
-        m_FamilyFonts.SetAt((void*)(uintptr_t)dwHash, (void*)pFont);
-      }
-      return LoadFont(pFont, dwFontStyles, wCodePage);
-    }
-  }
-  pFont = CFGAS_GEFont::LoadFont(pFontStream, this, bSaveStream);
-  if (pFont) {
-    m_Fonts.Add(pFont);
-    m_StreamFonts.SetAt((void*)pFontStream, (void*)pFont);
-    if (pszFontAlias) {
-      uint32_t dwHash =
-          FGAS_GetFontFamilyHash(pszFontAlias, dwFontStyles, wCodePage);
-      m_FamilyFonts.SetAt((void*)(uintptr_t)dwHash, (void*)pFont);
-    }
-    return LoadFont(pFont, dwFontStyles, wCodePage);
-  }
-  return nullptr;
+  m_Fonts.Add(pFont);
+  m_FamilyFonts.SetAt((void*)(uintptr_t)dwHash, (void*)pFont);
+  dwHash = FGAS_GetFontHashCode(wCodePage, dwFontStyles);
+  m_CPFonts.SetAt((void*)(uintptr_t)dwHash, (void*)pFont);
+  return LoadFont(pFont, dwFontStyles, wCodePage);
 }
 
 CFGAS_GEFont* CFGAS_FontMgr::LoadFont(CFGAS_GEFont* pSrcFont,
@@ -283,21 +234,16 @@
       return pFont->Retain();
   }
   pFont = pSrcFont->Derive(dwFontStyles, wCodePage);
-  if (pFont) {
-    m_DeriveFonts.SetAt((void*)(uintptr_t)dwHash, (void*)pFont);
-    int32_t index = m_Fonts.Find(pFont);
-    if (index < 0) {
-      m_Fonts.Add(pFont);
-      pFont->Retain();
-    }
-    return pFont;
-  }
-  return nullptr;
-}
+  if (!pFont)
+    return nullptr;
 
-void CFGAS_FontMgr::ClearFontCache() {
-  for (int32_t i = 0; i < m_Fonts.GetSize(); i++)
-    m_Fonts[i]->Reset();
+  m_DeriveFonts.SetAt((void*)(uintptr_t)dwHash, (void*)pFont);
+  int32_t index = m_Fonts.Find(pFont);
+  if (index < 0) {
+    m_Fonts.Add(pFont);
+    pFont->Retain();
+  }
+  return pFont;
 }
 
 void CFGAS_FontMgr::RemoveFont(CFX_MapPtrToPtr& fontMap, CFGAS_GEFont* pFont) {
@@ -343,22 +289,22 @@
   FX_FONTDESCRIPTOR const* pDesc = MatchDefaultFont(&params, m_FontFaces);
   if (pDesc)
     return pDesc;
-  if (pszFontFamily && m_pEnumerator) {
-    CFX_FontDescriptors namedFonts(100);
-    m_pEnumerator(namedFonts, pszFontFamily, wUnicode);
-    params.pwsFamily = nullptr;
-    pDesc = MatchDefaultFont(&params, namedFonts);
-    if (!pDesc)
-      return nullptr;
-    for (int32_t i = m_FontFaces.GetSize() - 1; i >= 0; i--) {
-      FX_FONTDESCRIPTOR const* pMatch = m_FontFaces.GetPtrAt(i);
-      if (*pMatch == *pDesc)
-        return pMatch;
-    }
-    int index = m_FontFaces.Add(*pDesc);
-    return m_FontFaces.GetPtrAt(index);
+  if (!pszFontFamily || !m_pEnumerator)
+    return nullptr;
+
+  CFX_FontDescriptors namedFonts(100);
+  m_pEnumerator(namedFonts, pszFontFamily, wUnicode);
+  params.pwsFamily = nullptr;
+  pDesc = MatchDefaultFont(&params, namedFonts);
+  if (!pDesc)
+    return nullptr;
+  for (int32_t i = m_FontFaces.GetSize() - 1; i >= 0; i--) {
+    FX_FONTDESCRIPTOR const* pMatch = m_FontFaces.GetPtrAt(i);
+    if (*pMatch == *pDesc)
+      return pMatch;
   }
-  return nullptr;
+  int index = m_FontFaces.Add(*pDesc);
+  return m_FontFaces.GetPtrAt(index);
 }
 
 uint32_t FX_GetGdiFontStyles(const LOGFONTW& lf) {
@@ -456,7 +402,7 @@
     if (g_Bit2CodePage[i].wCodePage == wCodePage)
       return g_Bit2CodePage[i].wBit;
   }
-  return (uint16_t)-1;
+  return static_cast<uint16_t>(-1);
 }
 
 uint16_t FX_GetUnicodeBit(FX_WCHAR wcUnicode) {
@@ -465,11 +411,11 @@
 }
 
 inline uint8_t GetUInt8(const uint8_t* p) {
-  return (uint8_t)(p[0]);
+  return p[0];
 }
 
 inline uint16_t GetUInt16(const uint8_t* p) {
-  return (uint16_t)(p[0] << 8 | p[1]);
+  return static_cast<uint16_t>(p[0] << 8 | p[1]);
 }
 
 struct FX_BIT2CHARSET {
@@ -477,65 +423,71 @@
   uint16_t wCharset;
 };
 
-const FX_BIT2CHARSET g_FX_Bit2Charset1[16] = {
-    {1 << 0, FX_CHARSET_ANSI},
-    {1 << 1, FX_CHARSET_MSWin_EasterEuropean},
-    {1 << 2, FX_CHARSET_MSWin_Cyrillic},
-    {1 << 3, FX_CHARSET_MSWin_Greek},
-    {1 << 4, FX_CHARSET_MSWin_Turkish},
-    {1 << 5, FX_CHARSET_MSWin_Hebrew},
-    {1 << 6, FX_CHARSET_MSWin_Arabic},
-    {1 << 7, FX_CHARSET_MSWin_Baltic},
-    {1 << 8, FX_CHARSET_MSWin_Vietnamese},
-    {1 << 9, FX_CHARSET_Default},
-    {1 << 10, FX_CHARSET_Default},
-    {1 << 11, FX_CHARSET_Default},
-    {1 << 12, FX_CHARSET_Default},
-    {1 << 13, FX_CHARSET_Default},
-    {1 << 14, FX_CHARSET_Default},
-    {1 << 15, FX_CHARSET_Default},
-};
-
-const FX_BIT2CHARSET g_FX_Bit2Charset2[16] = {
-    {1 << 0, FX_CHARSET_Thai},
-    {1 << 1, FX_CHARSET_ShiftJIS},
-    {1 << 2, FX_CHARSET_ChineseSimplified},
-    {1 << 3, FX_CHARSET_Korean},
-    {1 << 4, FX_CHARSET_ChineseTriditional},
-    {1 << 5, FX_CHARSET_Johab},
-    {1 << 6, FX_CHARSET_Default},
-    {1 << 7, FX_CHARSET_Default},
-    {1 << 8, FX_CHARSET_Default},
-    {1 << 9, FX_CHARSET_Default},
-    {1 << 10, FX_CHARSET_Default},
-    {1 << 11, FX_CHARSET_Default},
-    {1 << 12, FX_CHARSET_Default},
-    {1 << 13, FX_CHARSET_Default},
-    {1 << 14, FX_CHARSET_OEM},
-    {1 << 15, FX_CHARSET_Symbol},
-};
-
-const FX_BIT2CHARSET g_FX_Bit2Charset3[16] = {
-    {1 << 0, FX_CHARSET_Default},  {1 << 1, FX_CHARSET_Default},
-    {1 << 2, FX_CHARSET_Default},  {1 << 3, FX_CHARSET_Default},
-    {1 << 4, FX_CHARSET_Default},  {1 << 5, FX_CHARSET_Default},
-    {1 << 6, FX_CHARSET_Default},  {1 << 7, FX_CHARSET_Default},
-    {1 << 8, FX_CHARSET_Default},  {1 << 9, FX_CHARSET_Default},
-    {1 << 10, FX_CHARSET_Default}, {1 << 11, FX_CHARSET_Default},
-    {1 << 12, FX_CHARSET_Default}, {1 << 13, FX_CHARSET_Default},
-    {1 << 14, FX_CHARSET_Default}, {1 << 15, FX_CHARSET_Default},
-};
-
-const FX_BIT2CHARSET g_FX_Bit2Charset4[16] = {
-    {1 << 0, FX_CHARSET_Default},  {1 << 1, FX_CHARSET_Default},
-    {1 << 2, FX_CHARSET_Default},  {1 << 3, FX_CHARSET_Default},
-    {1 << 4, FX_CHARSET_Default},  {1 << 5, FX_CHARSET_Default},
-    {1 << 6, FX_CHARSET_Default},  {1 << 7, FX_CHARSET_Default},
-    {1 << 8, FX_CHARSET_Default},  {1 << 9, FX_CHARSET_Default},
-    {1 << 10, FX_CHARSET_Default}, {1 << 11, FX_CHARSET_Default},
-    {1 << 12, FX_CHARSET_Default}, {1 << 13, FX_CHARSET_Default},
-    {1 << 14, FX_CHARSET_Default}, {1 << 15, FX_CHARSET_US},
-};
+const FX_BIT2CHARSET g_FX_Bit2Charset[4][16] = {
+    {{1 << 0, FX_CHARSET_ANSI},
+     {1 << 1, FX_CHARSET_MSWin_EasterEuropean},
+     {1 << 2, FX_CHARSET_MSWin_Cyrillic},
+     {1 << 3, FX_CHARSET_MSWin_Greek},
+     {1 << 4, FX_CHARSET_MSWin_Turkish},
+     {1 << 5, FX_CHARSET_MSWin_Hebrew},
+     {1 << 6, FX_CHARSET_MSWin_Arabic},
+     {1 << 7, FX_CHARSET_MSWin_Baltic},
+     {1 << 8, FX_CHARSET_MSWin_Vietnamese},
+     {1 << 9, FX_CHARSET_Default},
+     {1 << 10, FX_CHARSET_Default},
+     {1 << 11, FX_CHARSET_Default},
+     {1 << 12, FX_CHARSET_Default},
+     {1 << 13, FX_CHARSET_Default},
+     {1 << 14, FX_CHARSET_Default},
+     {1 << 15, FX_CHARSET_Default}},
+    {{1 << 0, FX_CHARSET_Thai},
+     {1 << 1, FX_CHARSET_ShiftJIS},
+     {1 << 2, FX_CHARSET_ChineseSimplified},
+     {1 << 3, FX_CHARSET_Korean},
+     {1 << 4, FX_CHARSET_ChineseTriditional},
+     {1 << 5, FX_CHARSET_Johab},
+     {1 << 6, FX_CHARSET_Default},
+     {1 << 7, FX_CHARSET_Default},
+     {1 << 8, FX_CHARSET_Default},
+     {1 << 9, FX_CHARSET_Default},
+     {1 << 10, FX_CHARSET_Default},
+     {1 << 11, FX_CHARSET_Default},
+     {1 << 12, FX_CHARSET_Default},
+     {1 << 13, FX_CHARSET_Default},
+     {1 << 14, FX_CHARSET_OEM},
+     {1 << 15, FX_CHARSET_Symbol}},
+    {{1 << 0, FX_CHARSET_Default},
+     {1 << 1, FX_CHARSET_Default},
+     {1 << 2, FX_CHARSET_Default},
+     {1 << 3, FX_CHARSET_Default},
+     {1 << 4, FX_CHARSET_Default},
+     {1 << 5, FX_CHARSET_Default},
+     {1 << 6, FX_CHARSET_Default},
+     {1 << 7, FX_CHARSET_Default},
+     {1 << 8, FX_CHARSET_Default},
+     {1 << 9, FX_CHARSET_Default},
+     {1 << 10, FX_CHARSET_Default},
+     {1 << 11, FX_CHARSET_Default},
+     {1 << 12, FX_CHARSET_Default},
+     {1 << 13, FX_CHARSET_Default},
+     {1 << 14, FX_CHARSET_Default},
+     {1 << 15, FX_CHARSET_Default}},
+    {{1 << 0, FX_CHARSET_Default},
+     {1 << 1, FX_CHARSET_Default},
+     {1 << 2, FX_CHARSET_Default},
+     {1 << 3, FX_CHARSET_Default},
+     {1 << 4, FX_CHARSET_Default},
+     {1 << 5, FX_CHARSET_Default},
+     {1 << 6, FX_CHARSET_Default},
+     {1 << 7, FX_CHARSET_Default},
+     {1 << 8, FX_CHARSET_Default},
+     {1 << 9, FX_CHARSET_Default},
+     {1 << 10, FX_CHARSET_Default},
+     {1 << 11, FX_CHARSET_Default},
+     {1 << 12, FX_CHARSET_Default},
+     {1 << 13, FX_CHARSET_Default},
+     {1 << 14, FX_CHARSET_Default},
+     {1 << 15, FX_CHARSET_US}}};
 
 }  // namespace
 
@@ -776,6 +728,7 @@
   if (m_Hash2Fonts.Lookup(dwHash, pFonts)) {
     if (!pFonts)
       return nullptr;
+
     for (int32_t i = 0; i < pFonts->GetSize(); ++i) {
       if (VerifyUnicode(pFonts->GetAt(i), wUnicode))
         return pFonts->GetAt(i)->Retain();
@@ -813,12 +766,14 @@
       CreateFontStream(pDesc->m_wsFaceName.UTF8Encode());
   if (!pFileRead)
     return false;
+
   FXFT_Face pFace = LoadFace(pFileRead, pDesc->m_nFaceIndex);
   FT_Error retCharmap = FXFT_Select_Charmap(pFace, FXFT_ENCODING_UNICODE);
   FT_Error retIndex = FXFT_Get_Char_Index(pFace, wcUnicode);
   pFileRead->Release();
   if (!pFace)
     return false;
+
   if (FXFT_Get_Face_External_Stream(pFace))
     FXFT_Clear_Face_External_Stream(pFace);
   FXFT_Done_Face(pFace);
@@ -914,7 +869,7 @@
   ftStream->base = nullptr;
   ftStream->descriptor.pointer = pFontStream;
   ftStream->pos = 0;
-  ftStream->size = (unsigned long)pFontStream->GetSize();
+  ftStream->size = static_cast<unsigned long>(pFontStream->GetSize());
   ftStream->read = _ftStreamRead;
   ftStream->close = _ftStreamClose;
 
@@ -1012,7 +967,7 @@
                                    const CFX_WideString& FontName,
                                    FX_WCHAR wcUnicode) {
   int32_t nPenalty = 30000;
-  if (0 != FontName.GetLength()) {
+  if (FontName.GetLength() != 0) {
     if (FontName != pInstalled->m_wsFaceName) {
       int32_t i;
       for (i = 0; i < pInstalled->m_wsFamilyNames.GetSize(); i++) {
@@ -1030,7 +985,7 @@
         0 == IsPartName(pInstalled->m_wsFaceName, FontName)) {
       int32_t i;
       for (i = 0; i < pInstalled->m_wsFamilyNames.GetSize(); i++) {
-        if (0 != IsPartName(pInstalled->m_wsFamilyNames[i], FontName))
+        if (IsPartName(pInstalled->m_wsFamilyNames[i], FontName) != 0)
           break;
       }
       if (i == pInstalled->m_wsFamilyNames.GetSize())
@@ -1054,22 +1009,22 @@
     nPenalty += 0xFFFF;
   if (nPenalty >= 0xFFFF)
     return 0xFFFF;
-  uint16_t wBit =
-      ((0 == wCodePage || 0xFFFF == wCodePage) ? (uint16_t)-1
-                                               : FX_GetCodePageBit(wCodePage));
-  if (wBit != (uint16_t)-1) {
+
+  uint16_t wBit = (wCodePage == 0 || wCodePage == 0xFFFF)
+                      ? static_cast<uint16_t>(-1)
+                      : FX_GetCodePageBit(wCodePage);
+  if (wBit != static_cast<uint16_t>(-1)) {
     ASSERT(wBit < 64);
-    if (0 == (pInstalled->m_dwCsb[wBit / 32] & (1 << (wBit % 32))))
+    if ((pInstalled->m_dwCsb[wBit / 32] & (1 << (wBit % 32))) == 0)
       nPenalty += 0xFFFF;
     else
       nPenalty -= 60000;
   }
-  wBit =
-      ((0 == wcUnicode || 0xFFFE == wcUnicode) ? (uint16_t)999
-                                               : FX_GetUnicodeBit(wcUnicode));
-  if (wBit != (uint16_t)999) {
+  wBit = (wcUnicode == 0 || wcUnicode == 0xFFFE) ? static_cast<uint16_t>(999)
+                                                 : FX_GetUnicodeBit(wcUnicode);
+  if (wBit != static_cast<uint16_t>(999)) {
     ASSERT(wBit < 128);
-    if (0 == (pInstalled->m_dwUsb[wBit / 32] & (1 << (wBit % 32))))
+    if ((pInstalled->m_dwUsb[wBit / 32] & (1 << (wBit % 32))) == 0)
       nPenalty += 0xFFFF;
     else
       nPenalty -= 60000;
@@ -1077,23 +1032,6 @@
   return nPenalty;
 }
 
-void CFGAS_FontMgr::ClearFontCache() {
-  FX_POSITION pos = m_Hash2CandidateList.GetStartPosition();
-  while (pos) {
-    uint32_t dwHash;
-    CFX_FontDescriptorInfos* pDescs;
-    m_Hash2CandidateList.GetNextAssoc(pos, dwHash, pDescs);
-    delete pDescs;
-  }
-  pos = m_IFXFont2FileRead.GetStartPosition();
-  while (pos) {
-    CFGAS_GEFont* pFont;
-    IFX_SeekableReadStream* pFileRead;
-    m_IFXFont2FileRead.GetNextAssoc(pos, pFont, pFileRead);
-    pFileRead->Release();
-  }
-}
-
 void CFGAS_FontMgr::RemoveFont(CFGAS_GEFont* pEFont) {
   if (!pEFont)
     return;
@@ -1180,6 +1118,7 @@
   TT_OS2* pOS2 = (TT_OS2*)FT_Get_Sfnt_Table(pFace, ft_sfnt_os2);
   if (!pOS2)
     return flag;
+
   if (pOS2->ulCodePageRange1 & (1 << 31))
     flag |= FX_FONTSTYLE_Symbolic;
   if (pOS2->panose[0] == 2) {
@@ -1192,9 +1131,9 @@
 
 void CFGAS_FontMgr::GetNames(const uint8_t* name_table,
                              CFX_WideStringArray& Names) {
-  if (!name_table) {
+  if (!name_table)
     return;
-  }
+
   uint8_t* lpTable = (uint8_t*)name_table;
   CFX_WideString wsFamily;
   uint8_t* sp = lpTable + 2;
@@ -1203,9 +1142,9 @@
   uint8_t* lpStr = lpTable + GetUInt16(sp + 2);
   for (uint16_t j = 0; j < nNameCount; j++) {
     uint16_t nNameID = GetUInt16(lpNameRecord + j * 12 + 6);
-    if (nNameID != 1) {
+    if (nNameID != 1)
       continue;
-    }
+
     uint16_t nPlatformID = GetUInt16(lpNameRecord + j * 12 + 0);
     uint16_t nNameLength = GetUInt16(lpNameRecord + j * 12 + 8);
     uint16_t nNameOffset = GetUInt16(lpNameRecord + j * 12 + 10);
@@ -1216,60 +1155,52 @@
         wsFamily += wcTemp;
       }
       Names.Add(wsFamily);
-    } else {
-      for (uint16_t k = 0; k < nNameLength; k++) {
-        FX_WCHAR wcTemp = GetUInt8(lpStr + nNameOffset + k);
-        wsFamily += wcTemp;
-      }
-      Names.Add(wsFamily);
+      continue;
     }
+    for (uint16_t k = 0; k < nNameLength; k++) {
+      FX_WCHAR wcTemp = GetUInt8(lpStr + nNameOffset + k);
+      wsFamily += wcTemp;
+    }
+    Names.Add(wsFamily);
   }
 }
 
-// TODO(npm): Get rid of this #define
-#define CODEPAGERANGE_IMPLEMENT(n)                         \
-  for (int32_t i = 0; i < 16; i++) {                       \
-    if ((a##n & g_FX_Bit2Charset##n[i].wBit) != 0)         \
-      charsets.push_back(g_FX_Bit2Charset##n[i].wCharset); \
-  }
-
 std::vector<uint16_t> CFGAS_FontMgr::GetCharsets(FXFT_Face pFace) const {
   std::vector<uint16_t> charsets;
   TT_OS2* pOS2 = (TT_OS2*)FT_Get_Sfnt_Table(pFace, ft_sfnt_os2);
-  if (pOS2) {
-    uint16_t a1 = pOS2->ulCodePageRange1 & 0xffff;
-    CODEPAGERANGE_IMPLEMENT(1);
-    uint16_t a2 = (pOS2->ulCodePageRange1 >> 16) & 0xffff;
-    CODEPAGERANGE_IMPLEMENT(2);
-    uint16_t a3 = pOS2->ulCodePageRange2 & 0xffff;
-    CODEPAGERANGE_IMPLEMENT(3);
-    uint16_t a4 = (pOS2->ulCodePageRange2 >> 16) & 0xffff;
-    CODEPAGERANGE_IMPLEMENT(4);
-  } else {
+  if (!pOS2) {
     charsets.push_back(FX_CHARSET_Default);
+    return charsets;
+  }
+  uint16_t a[4] = {
+      pOS2->ulCodePageRange1 & 0xffff, (pOS2->ulCodePageRange1 >> 16) & 0xffff,
+      pOS2->ulCodePageRange2 & 0xffff, (pOS2->ulCodePageRange2 >> 16) & 0xffff};
+  for (int n = 0; n < 4; n++) {
+    for (int32_t i = 0; i < 16; i++) {
+      if ((a[n] & g_FX_Bit2Charset[n][i].wBit) != 0)
+        charsets.push_back(g_FX_Bit2Charset[n][i].wCharset);
+    }
   }
   return charsets;
 }
 
-#undef CODEPAGERANGE_IMPLEMENT
-
 void CFGAS_FontMgr::GetUSBCSB(FXFT_Face pFace, uint32_t* USB, uint32_t* CSB) {
   TT_OS2* pOS2 = (TT_OS2*)FT_Get_Sfnt_Table(pFace, ft_sfnt_os2);
-  if (pOS2) {
-    USB[0] = pOS2->ulUnicodeRange1;
-    USB[1] = pOS2->ulUnicodeRange2;
-    USB[2] = pOS2->ulUnicodeRange3;
-    USB[3] = pOS2->ulUnicodeRange4;
-    CSB[0] = pOS2->ulCodePageRange1;
-    CSB[1] = pOS2->ulCodePageRange2;
-  } else {
+  if (!pOS2) {
     USB[0] = 0;
     USB[1] = 0;
     USB[2] = 0;
     USB[3] = 0;
     CSB[0] = 0;
     CSB[1] = 0;
+    return;
   }
+  USB[0] = pOS2->ulUnicodeRange1;
+  USB[1] = pOS2->ulUnicodeRange2;
+  USB[2] = pOS2->ulUnicodeRange3;
+  USB[3] = pOS2->ulUnicodeRange4;
+  CSB[0] = pOS2->ulCodePageRange1;
+  CSB[1] = pOS2->ulCodePageRange2;
 }
 
 int32_t CFGAS_FontMgr::IsPartName(const CFX_WideString& Name1,
diff --git a/xfa/fgas/font/cfgas_fontmgr.h b/xfa/fgas/font/cfgas_fontmgr.h
index 572be38..f571365 100644
--- a/xfa/fgas/font/cfgas_fontmgr.h
+++ b/xfa/fgas/font/cfgas_fontmgr.h
@@ -93,31 +93,21 @@
 
   static std::unique_ptr<CFGAS_FontMgr> Create(FX_LPEnumAllFonts pEnumerator);
 
-  CFGAS_GEFont* GetDefFontByCodePage(uint16_t wCodePage,
-                                     uint32_t dwFontStyles,
-                                     const FX_WCHAR* pszFontFamily = nullptr);
-  CFGAS_GEFont* GetDefFontByUnicode(FX_WCHAR wUnicode,
-                                    uint32_t dwFontStyles,
-                                    const FX_WCHAR* pszFontFamily = nullptr);
+  CFGAS_GEFont* GetFontByCodePage(uint16_t wCodePage,
+                                  uint32_t dwFontStyles,
+                                  const FX_WCHAR* pszFontFamily);
+  CFGAS_GEFont* GetFontByUnicode(FX_WCHAR wUnicode,
+                                 uint32_t dwFontStyles,
+                                 const FX_WCHAR* pszFontFamily);
   CFGAS_GEFont* LoadFont(const FX_WCHAR* pszFontFamily,
                          uint32_t dwFontStyles,
-                         uint16_t wCodePage = 0xFFFF);
-  CFGAS_GEFont* LoadFont(const uint8_t* pBuffer, int32_t iLength);
-  CFGAS_GEFont* LoadFont(IFX_Stream* pFontStream,
-                         const FX_WCHAR* pszFontAlias = nullptr,
-                         uint32_t dwFontStyles = 0,
-                         uint16_t wCodePage = 0,
-                         bool bSaveStream = false);
-  CFGAS_GEFont* LoadFont(CFGAS_GEFont* pSrcFont,
-                         uint32_t dwFontStyles,
-                         uint16_t wCodePage = 0xFFFF);
-
-  // TODO(npm): This method is not being used, but probably should be in
-  // destructor
-  void ClearFontCache();
+                         uint16_t wCodePage);
   void RemoveFont(CFGAS_GEFont* pFont);
 
  private:
+  CFGAS_GEFont* LoadFont(CFGAS_GEFont* pSrcFont,
+                         uint32_t dwFontStyles,
+                         uint16_t wCodePage);
   void RemoveFont(CFX_MapPtrToPtr& fontMap, CFGAS_GEFont* pFont);
   FX_FONTDESCRIPTOR const* FindFont(const FX_WCHAR* pszFontFamily,
                                     uint32_t dwFontStyles,
@@ -210,22 +200,18 @@
   CFGAS_GEFont* GetFontByUnicode(FX_WCHAR wUnicode,
                                  uint32_t dwFontStyles,
                                  const FX_WCHAR* pszFontFamily);
-  void ClearFontCache();
   void RemoveFont(CFGAS_GEFont* pFont);
 
-  CFGAS_GEFont* LoadFont(const CFX_WideString& wsFaceName,
-                         int32_t iFaceIndex,
-                         int32_t* pFaceCount);
   inline CFGAS_GEFont* LoadFont(const FX_WCHAR* pszFontFamily,
                                 uint32_t dwFontStyles,
                                 uint16_t wCodePage) {
     return GetFontByCodePage(wCodePage, dwFontStyles, pszFontFamily);
   }
+
+ private:
   bool EnumFonts();
   bool EnumFontsFromFontMapper();
   bool EnumFontsFromFiles();
-
- private:
   void RegisterFace(FXFT_Face pFace, const CFX_WideString* pFaceName);
   void RegisterFaces(IFX_SeekableReadStream* pFontStream,
                      const CFX_WideString* pFaceName);
@@ -246,6 +232,9 @@
                       uint32_t dwFontStyles,
                       const CFX_WideString& FontName,
                       FX_WCHAR wcUnicode = 0xFFFE);
+  CFGAS_GEFont* LoadFont(const CFX_WideString& wsFaceName,
+                         int32_t iFaceIndex,
+                         int32_t* pFaceCount);
   FXFT_Face LoadFace(IFX_SeekableReadStream* pFontStream, int32_t iFaceIndex);
   IFX_SeekableReadStream* CreateFontStream(CFX_FontMapper* pFontMapper,
                                            IFX_SystemFontInfo* pSystemFontInfo,
diff --git a/xfa/fgas/font/fgas_gefont.cpp b/xfa/fgas/font/fgas_gefont.cpp
index 8a6ff28..7fa352c 100644
--- a/xfa/fgas/font/fgas_gefont.cpp
+++ b/xfa/fgas/font/fgas_gefont.cpp
@@ -438,12 +438,9 @@
   if (m_pFontMgr && bRecursive) {
     CFX_WideString wsFamily;
     GetFamilyName(wsFamily);
-#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
-    CFGAS_GEFont* pFont = m_pFontMgr->GetDefFontByUnicode(
-        wUnicode, GetFontStyles(), wsFamily.c_str());
-#else
     CFGAS_GEFont* pFont = m_pFontMgr->GetFontByUnicode(
         wUnicode, GetFontStyles(), wsFamily.c_str());
+#if _FXM_PLATFORM_ != _FXM_PLATFORM_WINDOWS_
     if (!pFont)
       pFont = m_pFontMgr->GetFontByUnicode(wUnicode, GetFontStyles(), nullptr);
 #endif
diff --git a/xfa/fxfa/app/xfa_fwltheme.cpp b/xfa/fxfa/app/xfa_fwltheme.cpp
index 7d07d98..9042ef9 100644
--- a/xfa/fxfa/app/xfa_fwltheme.cpp
+++ b/xfa/fxfa/app/xfa_fwltheme.cpp
@@ -68,13 +68,8 @@
                                              m_pApp->GetFDEFontMgr());
   }
   if (!m_pCalendarFont) {
-#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
-    m_pCalendarFont = m_pApp->GetFDEFontMgr()->GetDefFontByCodePage(
-        FX_CODEPAGE_MSWin_WesternEuropean, 0, nullptr);
-#else
     m_pCalendarFont = m_pApp->GetFDEFontMgr()->GetFontByCodePage(
         FX_CODEPAGE_MSWin_WesternEuropean, 0, nullptr);
-#endif
   }
 
   ASSERT(m_pCalendarFont);
