diff --git a/core/fxge/apple/apple_int.h b/core/fxge/apple/apple_int.h
index 0462938..07484a4 100644
--- a/core/fxge/apple/apple_int.h
+++ b/core/fxge/apple/apple_int.h
@@ -18,40 +18,6 @@
 #include <Carbon/Carbon.h>
 #endif
 
-typedef enum eFXIOSFONTCHARSET {
-  eFXFontCharsetDEFAULT = 0,
-  eFXFontCharsetANSI = 1,
-  eFXFontCharsetSYMBOL = 1 << 1,
-  eFXFontCharsetSHIFTJIS = 1 << 2,
-  eFXFontCharsetHANGEUL = 1 << 3,
-  eFXFontCharsetGB2312 = 1 << 4,
-  eFXFontCharsetCHINESEBIG5 = 1 << 5,
-  eFXFontCharsetTHAI = 1 << 6,
-  eFXFontCharsetEASTEUROPE = 1 << 7,
-  eFXFontCharsetRUSSIAN = 1 << 8,
-  eFXFontCharsetGREEK = 1 << 9,
-  eFXFontCharsetTURKISH = 1 << 10,
-  eFXFontCharsetHEBREW = 1 << 11,
-  eFXFontCharsetARABIC = 1 << 12,
-  eFXFontCharsetBALTIC = 1 << 13,
-} FX_IOSCHARSET;
-
-FX_IOSCHARSET FX_GetiOSCharset(int charset);
-typedef enum eFXIOSFONTFLAG {
-  eFXFontFlagBold = 1,
-  eFXFontFlagItalic = 1 << 1,
-  eFXFontFlagFixedPitch = 1 << 2,
-  eFXFontFlagSerif = 1 << 3,
-  eFXFontFlagScript = 1 << 4,
-} FX_IOSFONTFLAG;
-
-typedef struct IOS_FONTDATA_ {
-  uint32_t nHashCode;
-  const char* psName;
-  uint32_t charsets;
-  uint32_t styles;
-} IOS_FONTDATA;
-
 class CQuartz2D {
  public:
   void* createGraphics(CFX_DIBitmap* bitmap);
@@ -180,11 +146,6 @@
   int32_t m_horzSize;
   int32_t m_vertSize;
 };
-
-uint32_t FX_GetHashCode(const FX_CHAR* pStr);
-uint32_t FX_IOSGetMatchFamilyNameHashcode(const FX_CHAR* pFontName);
-uint32_t FX_IOSGetFamilyNamesCount();
-const FX_CHAR* FX_IOSGetFamilyName(uint32_t uIndex);
-#endif
+#endif  // _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
 
 #endif  // CORE_FXGE_APPLE_APPLE_INT_H_
diff --git a/core/fxge/apple/fx_mac_imp.cpp b/core/fxge/apple/fx_mac_imp.cpp
index 489ce81..4ddc7db 100644
--- a/core/fxge/apple/fx_mac_imp.cpp
+++ b/core/fxge/apple/fx_mac_imp.cpp
@@ -8,10 +8,13 @@
 #include "core/fxge/include/fx_ge.h"
 
 #if _FX_OS_ == _FX_MACOSX_
-static const struct {
+
+namespace {
+
+const struct {
   const FX_CHAR* m_pName;
   const FX_CHAR* m_pSubstName;
-} Base14Substs[] = {
+} g_Base14Substs[] = {
     {"Courier", "Courier New"},
     {"Courier-Bold", "Courier New Bold"},
     {"Courier-BoldOblique", "Courier New Bold Italic"},
@@ -40,21 +43,18 @@
                 int& iExact) override;
 };
 
-#define JAPAN_GOTHIC "Hiragino Kaku Gothic Pro W6"
-#define JAPAN_MINCHO "Hiragino Mincho Pro W6"
-static void GetJapanesePreference(CFX_ByteString& face,
-                                  int weight,
-                                  int pitch_family) {
-  if (face.Find("Gothic") >= 0) {
-    face = JAPAN_GOTHIC;
+const char JAPAN_GOTHIC[] = "Hiragino Kaku Gothic Pro W6";
+const char JAPAN_MINCHO[] = "Hiragino Mincho Pro W6";
+
+void GetJapanesePreference(CFX_ByteString* face, int weight, int pitch_family) {
+  if (face->Find("Gothic") >= 0) {
+    *face = JAPAN_GOTHIC;
     return;
   }
-  if (!(pitch_family & FXFONT_FF_ROMAN) && weight > 400) {
-    face = JAPAN_GOTHIC;
-  } else {
-    face = JAPAN_MINCHO;
-  }
+  *face = ((pitch_family & FXFONT_FF_ROMAN) || weight <= 400) ? JAPAN_MINCHO
+                                                              : JAPAN_GOTHIC;
 }
+
 void* CFX_MacFontInfo::MapFont(int weight,
                                FX_BOOL bItalic,
                                int charset,
@@ -62,29 +62,28 @@
                                const FX_CHAR* cstr_face,
                                int& iExact) {
   CFX_ByteString face = cstr_face;
-  int iBaseFont;
-  for (iBaseFont = 0; iBaseFont < 12; iBaseFont++)
-    if (face == CFX_ByteStringC(Base14Substs[iBaseFont].m_pName)) {
-      face = Base14Substs[iBaseFont].m_pSubstName;
+  for (size_t i = 0; i < FX_ArraySize(g_Base14Substs); ++i) {
+    if (face == CFX_ByteStringC(g_Base14Substs[i].m_pName)) {
+      face = g_Base14Substs[i].m_pSubstName;
       iExact = TRUE;
+      return GetFont(face.c_str());
       break;
     }
-  if (iBaseFont < 12) {
-    return GetFont(face.c_str());
   }
+
   auto it = m_FontList.find(face);
   if (it != m_FontList.end())
     return it->second;
 
-  if (charset == FXFONT_ANSI_CHARSET && (pitch_family & FXFONT_FF_FIXEDPITCH)) {
+  if (charset == FXFONT_ANSI_CHARSET && (pitch_family & FXFONT_FF_FIXEDPITCH))
     return GetFont("Courier New");
-  }
-  if (charset == FXFONT_ANSI_CHARSET || charset == FXFONT_SYMBOL_CHARSET) {
+
+  if (charset == FXFONT_ANSI_CHARSET || charset == FXFONT_SYMBOL_CHARSET)
     return nullptr;
-  }
+
   switch (charset) {
     case FXFONT_SHIFTJIS_CHARSET:
-      GetJapanesePreference(face, weight, pitch_family);
+      GetJapanesePreference(&face, weight, pitch_family);
       break;
     case FXFONT_GB2312_CHARSET:
       face = "STSong";
@@ -99,6 +98,8 @@
   return it != m_FontList.end() ? it->second : nullptr;
 }
 
+}  // namespace
+
 std::unique_ptr<IFX_SystemFontInfo> IFX_SystemFontInfo::CreateDefault(
     const char** pUnused) {
   CFX_MacFontInfo* pInfo(new CFX_MacFontInfo);
@@ -112,8 +113,10 @@
   m_pPlatformData = new CApplePlatform;
   m_pFontMgr->SetSystemFontInfo(IFX_SystemFontInfo::CreateDefault(nullptr));
 }
+
 void CFX_GEModule::DestroyPlatform() {
-  delete (CApplePlatform*)m_pPlatformData;
+  delete reinterpret_cast<CApplePlatform*>(m_pPlatformData);
   m_pPlatformData = nullptr;
 }
-#endif
+
+#endif  // _FX_OS_ == _FX_MACOSX_
