Replace PDFFONT_ENCODING_* with enum class FontEncoding.

Remove some more #defines. This once again reveals the type mismatch
https://pdfium-review.googlesource.com/80610 tried to fix.

Bug: pdfium:1085
Change-Id: I75ddb894c2626c1c8ff6167851bd852011b56d65
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/91941
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/core/fpdfapi/font/cpdf_cidfont.cpp b/core/fpdfapi/font/cpdf_cidfont.cpp
index 25a8077..b881ec3 100644
--- a/core/fpdfapi/font/cpdf_cidfont.cpp
+++ b/core/fpdfapi/font/cpdf_cidfont.cpp
@@ -712,13 +712,13 @@
       charcode += 31;
       bool bMSUnicode = UseTTCharmapMSUnicode(face);
       bool bMacRoman = !bMSUnicode && UseTTCharmapMacRoman(face);
-      int iBaseEncoding = PDFFONT_ENCODING_STANDARD;
+      FontEncoding base_encoding = FontEncoding::kStandard;
       if (bMSUnicode)
-        iBaseEncoding = PDFFONT_ENCODING_WINANSI;
+        base_encoding = FontEncoding::kWinAnsi;
       else if (bMacRoman)
-        iBaseEncoding = PDFFONT_ENCODING_MACROMAN;
+        base_encoding = FontEncoding::kMacRoman;
       const char* name =
-          GetAdobeCharName(iBaseEncoding, std::vector<ByteString>(), charcode);
+          GetAdobeCharName(base_encoding, std::vector<ByteString>(), charcode);
       if (!name)
         return charcode ? static_cast<int>(charcode) : -1;
 
@@ -727,13 +727,13 @@
       if (!name_unicode)
         return charcode ? static_cast<int>(charcode) : -1;
 
-      if (iBaseEncoding == PDFFONT_ENCODING_STANDARD)
+      if (base_encoding == FontEncoding::kStandard)
         return FT_Get_Char_Index(face, name_unicode);
 
-      if (iBaseEncoding == PDFFONT_ENCODING_WINANSI) {
+      if (base_encoding == FontEncoding::kWinAnsi) {
         index = FT_Get_Char_Index(face, name_unicode);
       } else {
-        DCHECK_EQ(iBaseEncoding, PDFFONT_ENCODING_MACROMAN);
+        DCHECK_EQ(base_encoding, FontEncoding::kMacRoman);
         uint32_t maccode =
             FT_CharCodeFromUnicode(FT_ENCODING_APPLE_ROMAN, name_unicode);
         index = maccode ? FT_Get_Char_Index(face, maccode)
diff --git a/core/fpdfapi/font/cpdf_font.cpp b/core/fpdfapi/font/cpdf_font.cpp
index a1c7d55..0260d47 100644
--- a/core/fpdfapi/font/cpdf_font.cpp
+++ b/core/fpdfapi/font/cpdf_font.cpp
@@ -349,7 +349,7 @@
 
 // static
 const char* CPDF_Font::GetAdobeCharName(
-    int iBaseEncoding,
+    FontEncoding base_encoding,
     const std::vector<ByteString>& charnames,
     uint32_t charcode) {
   if (charcode >= 256)
@@ -359,8 +359,8 @@
     return charnames[charcode].c_str();
 
   const char* name = nullptr;
-  if (iBaseEncoding)
-    name = PDF_CharNameFromPredefinedCharSet(iBaseEncoding, charcode);
+  if (base_encoding != FontEncoding::kBuiltin)
+    name = PDF_CharNameFromPredefinedCharSet(base_encoding, charcode);
   if (!name)
     return nullptr;
 
diff --git a/core/fpdfapi/font/cpdf_font.h b/core/fpdfapi/font/cpdf_font.h
index 8e7b694..672ad7e 100644
--- a/core/fpdfapi/font/cpdf_font.h
+++ b/core/fpdfapi/font/cpdf_font.h
@@ -32,6 +32,7 @@
 class CPDF_Type3Char;
 class CPDF_Type3Font;
 class CPDF_ToUnicodeMap;
+enum class FontEncoding;
 
 class CPDF_Font : public Retainable, public Observable {
  public:
@@ -146,7 +147,7 @@
                            int platform_id,
                            int encoding_id);
 
-  static const char* GetAdobeCharName(int iBaseEncoding,
+  static const char* GetAdobeCharName(FontEncoding base_encoding,
                                       const std::vector<ByteString>& charnames,
                                       uint32_t charcode);
 
diff --git a/core/fpdfapi/font/cpdf_fontencoding.cpp b/core/fpdfapi/font/cpdf_fontencoding.cpp
index 9c34e3a..4805fcb 100644
--- a/core/fpdfapi/font/cpdf_fontencoding.cpp
+++ b/core/fpdfapi/font/cpdf_fontencoding.cpp
@@ -13,6 +13,7 @@
 #include "core/fpdfapi/parser/fpdf_parser_decode.h"
 #include "core/fxge/fx_font.h"
 #include "core/fxge/fx_freetype.h"
+#include "third_party/abseil-cpp/absl/types/optional.h"
 #include "third_party/base/cxx17_backports.h"
 
 namespace {
@@ -1661,8 +1662,8 @@
   return -1;
 }
 
-CPDF_FontEncoding::CPDF_FontEncoding(int PredefinedEncoding) {
-  const uint16_t* pSrc = PDF_UnicodesForPredefinedCharSet(PredefinedEncoding);
+CPDF_FontEncoding::CPDF_FontEncoding(FontEncoding predefined_encoding) {
+  const uint16_t* pSrc = PDF_UnicodesForPredefinedCharSet(predefined_encoding);
   if (pSrc) {
     for (size_t i = 0; i < pdfium::size(m_Unicodes); i++)
       m_Unicodes[i] = pSrc[i];
@@ -1677,9 +1678,14 @@
 
 RetainPtr<CPDF_Object> CPDF_FontEncoding::Realize(
     WeakPtr<ByteStringPool> pPool) const {
-  int predefined = 0;
-  for (int cs = PDFFONT_ENCODING_WINANSI; cs < PDFFONT_ENCODING_ZAPFDINGBATS;
-       cs++) {
+  static constexpr FontEncoding kEncodings[] = {
+      FontEncoding::kWinAnsi,     FontEncoding::kMacRoman,
+      FontEncoding::kMacExpert,   FontEncoding::kStandard,
+      FontEncoding::kAdobeSymbol,
+  };
+
+  absl::optional<FontEncoding> predefined;
+  for (FontEncoding cs : kEncodings) {
     const uint16_t* pSrc = PDF_UnicodesForPredefinedCharSet(cs);
     bool match = true;
     for (size_t i = 0; i < pdfium::size(m_Unicodes); i++) {
@@ -1693,13 +1699,13 @@
       break;
     }
   }
-  if (predefined) {
+  if (predefined.has_value()) {
     const char* pName;
-    if (predefined == PDFFONT_ENCODING_WINANSI)
+    if (predefined.value() == FontEncoding::kWinAnsi)
       pName = "WinAnsiEncoding";
-    else if (predefined == PDFFONT_ENCODING_MACROMAN)
+    else if (predefined.value() == FontEncoding::kMacRoman)
       pName = "MacRomanEncoding";
-    else if (predefined == PDFFONT_ENCODING_MACEXPERT)
+    else if (predefined.value() == FontEncoding::kMacExpert)
       pName = "MacExpertEncoding";
     else
       return nullptr;
@@ -1707,7 +1713,7 @@
     return pdfium::MakeRetain<CPDF_Name>(pPool, pName);
   }
   const uint16_t* pStandard =
-      PDF_UnicodesForPredefinedCharSet(PDFFONT_ENCODING_WINANSI);
+      PDF_UnicodesForPredefinedCharSet(FontEncoding::kWinAnsi);
   auto pDiff = pdfium::MakeRetain<CPDF_Array>();
   for (size_t i = 0; i < pdfium::size(m_Unicodes); i++) {
     if (pStandard[i] == m_Unicodes[i])
@@ -1742,30 +1748,33 @@
   }
   return 0;
 }
-const uint16_t* PDF_UnicodesForPredefinedCharSet(int encoding) {
+
+const uint16_t* PDF_UnicodesForPredefinedCharSet(FontEncoding encoding) {
   switch (encoding) {
-    case PDFFONT_ENCODING_WINANSI:
+    case FontEncoding::kBuiltin:
+      return nullptr;
+    case FontEncoding::kWinAnsi:
       return kAdobeWinAnsiEncoding;
-    case PDFFONT_ENCODING_MACROMAN:
+    case FontEncoding::kMacRoman:
       return kMacRomanEncoding;
-    case PDFFONT_ENCODING_MACEXPERT:
+    case FontEncoding::kMacExpert:
       return kMacExpertEncoding;
-    case PDFFONT_ENCODING_STANDARD:
+    case FontEncoding::kStandard:
       return kStandardEncoding;
-    case PDFFONT_ENCODING_ADOBE_SYMBOL:
+    case FontEncoding::kAdobeSymbol:
       return kAdobeSymbolEncoding;
-    case PDFFONT_ENCODING_ZAPFDINGBATS:
+    case FontEncoding::kZapfDingbats:
       return kZapfEncoding;
-    case PDFFONT_ENCODING_PDFDOC:
+    case FontEncoding::kPdfDoc:
       return kPDFDocEncoding;
-    case PDFFONT_ENCODING_MS_SYMBOL:
+    case FontEncoding::kMsSymbol:
       return kMSSymbolEncoding;
   }
-  return nullptr;
 }
 
-const char* PDF_CharNameFromPredefinedCharSet(int encoding, uint8_t charcode) {
-  if (encoding == PDFFONT_ENCODING_PDFDOC) {
+const char* PDF_CharNameFromPredefinedCharSet(FontEncoding encoding,
+                                              uint8_t charcode) {
+  if (encoding == FontEncoding::kPdfDoc) {
     if (charcode < kPDFDocEncodingTableFirstChar)
       return nullptr;
 
@@ -1777,22 +1786,23 @@
     charcode -= kEncodingTableFirstChar;
   }
   switch (encoding) {
-    case PDFFONT_ENCODING_WINANSI:
+    case FontEncoding::kWinAnsi:
       return kAdobeWinAnsiEncodingNames[charcode];
-    case PDFFONT_ENCODING_MACROMAN:
+    case FontEncoding::kMacRoman:
       return kMacRomanEncodingNames[charcode];
-    case PDFFONT_ENCODING_MACEXPERT:
+    case FontEncoding::kMacExpert:
       return kMacExpertEncodingNames[charcode];
-    case PDFFONT_ENCODING_STANDARD:
+    case FontEncoding::kStandard:
       return kStandardEncodingNames[charcode];
-    case PDFFONT_ENCODING_ADOBE_SYMBOL:
+    case FontEncoding::kAdobeSymbol:
       return kAdobeSymbolEncodingNames[charcode];
-    case PDFFONT_ENCODING_ZAPFDINGBATS:
+    case FontEncoding::kZapfDingbats:
       return kZapfEncodingNames[charcode];
-    case PDFFONT_ENCODING_PDFDOC:
+    case FontEncoding::kPdfDoc:
       return kPDFDocEncodingNames[charcode];
+    default:
+      return nullptr;
   }
-  return nullptr;
 }
 
 wchar_t FT_UnicodeFromCharCode(int encoding, uint32_t charcode) {
@@ -1807,7 +1817,7 @@
       return kAdobeWinAnsiEncoding[(uint8_t)charcode];
     case FT_ENCODING_APPLE_ROMAN:
       return kMacRomanEncoding[(uint8_t)charcode];
-    case PDFFONT_ENCODING_PDFDOC:
+    case static_cast<int>(FontEncoding::kPdfDoc):
       return kPDFDocEncoding[(uint8_t)charcode];
   }
   return 0;
diff --git a/core/fpdfapi/font/cpdf_fontencoding.h b/core/fpdfapi/font/cpdf_fontencoding.h
index 41fe6f7..a23096a 100644
--- a/core/fpdfapi/font/cpdf_fontencoding.h
+++ b/core/fpdfapi/font/cpdf_fontencoding.h
@@ -12,21 +12,24 @@
 #include "core/fxcrt/string_pool_template.h"
 #include "core/fxcrt/weak_ptr.h"
 
-#define PDFFONT_ENCODING_BUILTIN 0
-#define PDFFONT_ENCODING_WINANSI 1
-#define PDFFONT_ENCODING_MACROMAN 2
-#define PDFFONT_ENCODING_MACEXPERT 3
-#define PDFFONT_ENCODING_STANDARD 4
-#define PDFFONT_ENCODING_ADOBE_SYMBOL 5
-#define PDFFONT_ENCODING_ZAPFDINGBATS 6
-#define PDFFONT_ENCODING_PDFDOC 7
-#define PDFFONT_ENCODING_MS_SYMBOL 8
+enum class FontEncoding {
+  kBuiltin = 0,
+  kWinAnsi = 1,
+  kMacRoman = 2,
+  kMacExpert = 3,
+  kStandard = 4,
+  kAdobeSymbol = 5,
+  kZapfDingbats = 6,
+  kPdfDoc = 7,
+  kMsSymbol = 8,
+};
 
 uint32_t FT_CharCodeFromUnicode(int encoding, wchar_t unicode);
 wchar_t FT_UnicodeFromCharCode(int encoding, uint32_t charcode);
 
-const uint16_t* PDF_UnicodesForPredefinedCharSet(int encoding);
-const char* PDF_CharNameFromPredefinedCharSet(int encoding, uint8_t charcode);
+const uint16_t* PDF_UnicodesForPredefinedCharSet(FontEncoding encoding);
+const char* PDF_CharNameFromPredefinedCharSet(FontEncoding encoding,
+                                              uint8_t charcode);
 
 class CPDF_Object;
 
@@ -34,7 +37,7 @@
  public:
   static constexpr size_t kEncodingTableSize = 256;
 
-  explicit CPDF_FontEncoding(int PredefinedEncoding);
+  explicit CPDF_FontEncoding(FontEncoding predefined_encoding);
 
   bool IsIdentical(const CPDF_FontEncoding* pAnother) const;
 
diff --git a/core/fpdfapi/font/cpdf_simplefont.cpp b/core/fpdfapi/font/cpdf_simplefont.cpp
index 77b7b02..3f88871 100644
--- a/core/fpdfapi/font/cpdf_simplefont.cpp
+++ b/core/fpdfapi/font/cpdf_simplefont.cpp
@@ -20,15 +20,15 @@
 
 namespace {
 
-void GetPredefinedEncoding(const ByteString& value, int* basemap) {
+void GetPredefinedEncoding(const ByteString& value, FontEncoding* basemap) {
   if (value == "WinAnsiEncoding")
-    *basemap = PDFFONT_ENCODING_WINANSI;
+    *basemap = FontEncoding::kWinAnsi;
   else if (value == "MacRomanEncoding")
-    *basemap = PDFFONT_ENCODING_MACROMAN;
+    *basemap = FontEncoding::kMacRoman;
   else if (value == "MacExpertEncoding")
-    *basemap = PDFFONT_ENCODING_MACEXPERT;
+    *basemap = FontEncoding::kMacExpert;
   else if (value == "PDFDocEncoding")
-    *basemap = PDFFONT_ENCODING_PDFDOC;
+    *basemap = FontEncoding::kPdfDoc;
 }
 
 }  // namespace
@@ -154,21 +154,21 @@
   const CPDF_Object* pEncoding = m_pFontDict->GetDirectObjectFor("Encoding");
   if (!pEncoding) {
     if (m_BaseFontName == "Symbol") {
-      m_BaseEncoding = bTrueType ? PDFFONT_ENCODING_MS_SYMBOL
-                                 : PDFFONT_ENCODING_ADOBE_SYMBOL;
-    } else if (!bEmbedded && m_BaseEncoding == PDFFONT_ENCODING_BUILTIN) {
-      m_BaseEncoding = PDFFONT_ENCODING_WINANSI;
+      m_BaseEncoding =
+          bTrueType ? FontEncoding::kMsSymbol : FontEncoding::kAdobeSymbol;
+    } else if (!bEmbedded && m_BaseEncoding == FontEncoding::kBuiltin) {
+      m_BaseEncoding = FontEncoding::kWinAnsi;
     }
     return;
   }
   if (pEncoding->IsName()) {
-    if (m_BaseEncoding == PDFFONT_ENCODING_ADOBE_SYMBOL ||
-        m_BaseEncoding == PDFFONT_ENCODING_ZAPFDINGBATS) {
+    if (m_BaseEncoding == FontEncoding::kAdobeSymbol ||
+        m_BaseEncoding == FontEncoding::kZapfDingbats) {
       return;
     }
     if (FontStyleIsSymbolic(m_Flags) && m_BaseFontName == "Symbol") {
       if (!bTrueType)
-        m_BaseEncoding = PDFFONT_ENCODING_ADOBE_SYMBOL;
+        m_BaseEncoding = FontEncoding::kAdobeSymbol;
       return;
     }
     ByteString bsEncoding = pEncoding->GetString();
@@ -183,15 +183,15 @@
   if (!pDict)
     return;
 
-  if (m_BaseEncoding != PDFFONT_ENCODING_ADOBE_SYMBOL &&
-      m_BaseEncoding != PDFFONT_ENCODING_ZAPFDINGBATS) {
+  if (m_BaseEncoding != FontEncoding::kAdobeSymbol &&
+      m_BaseEncoding != FontEncoding::kZapfDingbats) {
     ByteString bsEncoding = pDict->GetStringFor("BaseEncoding");
     if (bTrueType && bsEncoding == "MacExpertEncoding")
       bsEncoding = "WinAnsiEncoding";
     GetPredefinedEncoding(bsEncoding, &m_BaseEncoding);
   }
-  if ((!bEmbedded || bTrueType) && m_BaseEncoding == PDFFONT_ENCODING_BUILTIN)
-    m_BaseEncoding = PDFFONT_ENCODING_STANDARD;
+  if ((!bEmbedded || bTrueType) && m_BaseEncoding == FontEncoding::kBuiltin)
+    m_BaseEncoding = FontEncoding::kStandard;
 
   LoadDifferences(pDict);
 }
@@ -231,7 +231,7 @@
     LoadSubstFont();
   }
   if (!FontStyleIsSymbolic(m_Flags))
-    m_BaseEncoding = PDFFONT_ENCODING_STANDARD;
+    m_BaseEncoding = FontEncoding::kStandard;
   LoadPDFEncoding(!!m_pFontFile, m_Font.IsTTFont());
   LoadGlyphMap();
   m_CharNames.clear();
@@ -281,9 +281,9 @@
 }
 
 bool CPDF_SimpleFont::IsUnicodeCompatible() const {
-  return m_BaseEncoding != PDFFONT_ENCODING_BUILTIN &&
-         m_BaseEncoding != PDFFONT_ENCODING_ADOBE_SYMBOL &&
-         m_BaseEncoding != PDFFONT_ENCODING_ZAPFDINGBATS;
+  return m_BaseEncoding != FontEncoding::kBuiltin &&
+         m_BaseEncoding != FontEncoding::kAdobeSymbol &&
+         m_BaseEncoding != FontEncoding::kZapfDingbats;
 }
 
 WideString CPDF_SimpleFont::UnicodeFromCharCode(uint32_t charcode) const {
diff --git a/core/fpdfapi/font/cpdf_simplefont.h b/core/fpdfapi/font/cpdf_simplefont.h
index f0ce453..b854f79 100644
--- a/core/fpdfapi/font/cpdf_simplefont.h
+++ b/core/fpdfapi/font/cpdf_simplefont.h
@@ -45,8 +45,8 @@
   void LoadDifferences(const CPDF_Dictionary* encoding);
   void LoadPDFEncoding(bool bEmbedded, bool bTrueType);
 
-  CPDF_FontEncoding m_Encoding{PDFFONT_ENCODING_BUILTIN};
-  int m_BaseEncoding = PDFFONT_ENCODING_BUILTIN;
+  CPDF_FontEncoding m_Encoding{FontEncoding::kBuiltin};
+  FontEncoding m_BaseEncoding = FontEncoding::kBuiltin;
   bool m_bUseFontWidth = false;
   std::vector<ByteString> m_CharNames;
   uint16_t m_GlyphIndex[kInternalTableSize];
diff --git a/core/fpdfapi/font/cpdf_truetypefont.cpp b/core/fpdfapi/font/cpdf_truetypefont.cpp
index 047c338..9c0f494 100644
--- a/core/fpdfapi/font/cpdf_truetypefont.cpp
+++ b/core/fpdfapi/font/cpdf_truetypefont.cpp
@@ -26,9 +26,9 @@
   return 0;
 }
 
-bool IsWinAnsiOrMacRomanEncoding(int encoding) {
-  return encoding == PDFFONT_ENCODING_WINANSI ||
-         encoding == PDFFONT_ENCODING_MACROMAN;
+bool IsWinAnsiOrMacRomanEncoding(FontEncoding encoding) {
+  return encoding == FontEncoding::kWinAnsi ||
+         encoding == FontEncoding::kMacRoman;
 }
 
 }  // namespace
@@ -60,7 +60,7 @@
   if (!face)
     return;
 
-  const int base_encoding = DetermineEncoding();
+  const FontEncoding base_encoding = DetermineEncoding();
   if ((IsWinAnsiOrMacRomanEncoding(base_encoding) && m_CharNames.empty()) ||
       FontStyleIsNonSymbolic(m_Flags)) {
     if (!FXFT_Has_Glyph_Names(face) &&
@@ -120,7 +120,7 @@
     for (uint32_t charcode = 0; charcode < 256; charcode++)
       m_GlyphIndex[charcode] = GetGlyphIndexForMSSymbol(face, charcode);
     if (HasAnyGlyphIndex()) {
-      if (base_encoding != PDFFONT_ENCODING_BUILTIN) {
+      if (base_encoding != FontEncoding::kBuiltin) {
         for (uint32_t charcode = 0; charcode < 256; charcode++) {
           const char* name =
               GetAdobeCharName(base_encoding, m_CharNames, charcode);
@@ -152,7 +152,8 @@
       if (m_pFontFile) {
         m_Encoding.SetUnicode(charcode, charcode);
       } else {
-        const char* name = GetAdobeCharName(0, m_CharNames, charcode);
+        const char* name =
+            GetAdobeCharName(FontEncoding::kBuiltin, m_CharNames, charcode);
         if (name)
           m_Encoding.SetUnicode(charcode, PDF_UnicodeFromAdobeName(name));
         else if (pUnicodes)
@@ -194,7 +195,7 @@
   return CharmapType::kOther;
 }
 
-int CPDF_TrueTypeFont::DetermineEncoding() const {
+FontEncoding CPDF_TrueTypeFont::DetermineEncoding() const {
   if (!m_pFontFile || !FontStyleIsSymbolic(m_Flags) ||
       !IsWinAnsiOrMacRomanEncoding(m_BaseEncoding)) {
     return m_BaseEncoding;
@@ -219,10 +220,10 @@
       break;
   }
 
-  if (m_BaseEncoding == PDFFONT_ENCODING_WINANSI && !support_win)
-    return support_mac ? PDFFONT_ENCODING_MACROMAN : PDFFONT_ENCODING_BUILTIN;
-  if (m_BaseEncoding == PDFFONT_ENCODING_MACROMAN && !support_mac)
-    return support_win ? PDFFONT_ENCODING_WINANSI : PDFFONT_ENCODING_BUILTIN;
+  if (m_BaseEncoding == FontEncoding::kWinAnsi && !support_win)
+    return support_mac ? FontEncoding::kMacRoman : FontEncoding::kBuiltin;
+  if (m_BaseEncoding == FontEncoding::kMacRoman && !support_mac)
+    return support_win ? FontEncoding::kWinAnsi : FontEncoding::kBuiltin;
   return m_BaseEncoding;
 }
 
diff --git a/core/fpdfapi/font/cpdf_truetypefont.h b/core/fpdfapi/font/cpdf_truetypefont.h
index 26ef47b..12025cb 100644
--- a/core/fpdfapi/font/cpdf_truetypefont.h
+++ b/core/fpdfapi/font/cpdf_truetypefont.h
@@ -33,7 +33,7 @@
 
   bool HasAnyGlyphIndex() const;
   CharmapType DetermineCharmapType() const;
-  int DetermineEncoding() const;
+  FontEncoding DetermineEncoding() const;
   void SetGlyphIndicesFromFirstChar();
 };
 
diff --git a/core/fpdfapi/font/cpdf_type1font.cpp b/core/fpdfapi/font/cpdf_type1font.cpp
index 84d9e1f..af01b6d 100644
--- a/core/fpdfapi/font/cpdf_type1font.cpp
+++ b/core/fpdfapi/font/cpdf_type1font.cpp
@@ -101,11 +101,11 @@
     std::fill(std::begin(m_CharWidth), std::end(m_CharWidth), 600);
   }
   if (m_Base14Font == CFX_FontMapper::kSymbol)
-    m_BaseEncoding = PDFFONT_ENCODING_ADOBE_SYMBOL;
+    m_BaseEncoding = FontEncoding::kAdobeSymbol;
   else if (m_Base14Font == CFX_FontMapper::kDingbats)
-    m_BaseEncoding = PDFFONT_ENCODING_ZAPFDINGBATS;
+    m_BaseEncoding = FontEncoding::kZapfDingbats;
   else if (FontStyleIsNonSymbolic(m_Flags))
-    m_BaseEncoding = PDFFONT_ENCODING_STANDARD;
+    m_BaseEncoding = FontEncoding::kStandard;
   return LoadCommon();
 }
 
@@ -163,8 +163,8 @@
       }
     }
     FXFT_Select_Charmap(m_Font.GetFaceRec(), FT_ENCODING_UNICODE);
-    if (m_BaseEncoding == 0)
-      m_BaseEncoding = PDFFONT_ENCODING_STANDARD;
+    if (m_BaseEncoding == FontEncoding::kBuiltin)
+      m_BaseEncoding = FontEncoding::kStandard;
 
     for (uint32_t charcode = 0; charcode < kInternalTableSize; charcode++) {
       const char* name =
@@ -210,8 +210,8 @@
               FT_Get_Char_Index(m_Font.GetFaceRec(), charcode);
           wchar_t unicode = 0;
           if (m_GlyphIndex[charcode]) {
-            unicode =
-                FT_UnicodeFromCharCode(PDFFONT_ENCODING_STANDARD, charcode);
+            unicode = FT_UnicodeFromCharCode(
+                static_cast<int>(FontEncoding::kStandard), charcode);
           }
           char name_glyph[kInternalTableSize] = {};
           FT_Get_Glyph_Name(m_Font.GetFaceRec(), m_GlyphIndex[charcode],
@@ -271,8 +271,9 @@
         m_GlyphIndex[charcode] = FT_Get_Char_Index(
             m_Font.GetFaceRec(), static_cast<uint32_t>(charcode));
         if (m_GlyphIndex[charcode]) {
-          wchar_t unicode = FT_UnicodeFromCharCode(
-              PDFFONT_ENCODING_STANDARD, static_cast<uint32_t>(charcode));
+          wchar_t unicode =
+              FT_UnicodeFromCharCode(static_cast<int>(FontEncoding::kStandard),
+                                     static_cast<uint32_t>(charcode));
           if (unicode == 0) {
             char name_glyph[kInternalTableSize] = {};
             FT_Get_Glyph_Name(m_Font.GetFaceRec(), m_GlyphIndex[charcode],
diff --git a/core/fpdfdoc/cpdf_bafontmap.cpp b/core/fpdfdoc/cpdf_bafontmap.cpp
index fed8210..8180687 100644
--- a/core/fpdfdoc/cpdf_bafontmap.cpp
+++ b/core/fpdfdoc/cpdf_bafontmap.cpp
@@ -409,7 +409,7 @@
   if (sFontName == "ZapfDingbats")
     return pPageData->AddStandardFont(sFontName, nullptr);
 
-  static const CPDF_FontEncoding fe(PDFFONT_ENCODING_WINANSI);
+  static const CPDF_FontEncoding fe(FontEncoding::kWinAnsi);
   return pPageData->AddStandardFont(sFontName, &fe);
 }
 
diff --git a/core/fpdfdoc/cpdf_interactiveform.cpp b/core/fpdfdoc/cpdf_interactiveform.cpp
index b6eb591..c3a9c47 100644
--- a/core/fpdfdoc/cpdf_interactiveform.cpp
+++ b/core/fpdfdoc/cpdf_interactiveform.cpp
@@ -151,7 +151,7 @@
 
 RetainPtr<CPDF_Font> AddStandardFont(CPDF_Document* pDocument) {
   auto* pPageData = CPDF_DocPageData::FromDocument(pDocument);
-  static const CPDF_FontEncoding encoding(PDFFONT_ENCODING_WINANSI);
+  static const CPDF_FontEncoding encoding(FontEncoding::kWinAnsi);
   return pPageData->AddStandardFont(CFX_Font::kDefaultAnsiFontName, &encoding);
 }