diff --git a/core/fxcrt/fx_arabic.cpp b/core/fxcrt/fx_arabic.cpp
index 191350e..01a1a2a 100644
--- a/core/fxcrt/fx_arabic.cpp
+++ b/core/fxcrt/fx_arabic.cpp
@@ -114,6 +114,23 @@
     {0x064F, 0xFC61}, {0x0650, 0xFC62},
 };
 
+const FX_ARBFORMTABLE* ParseChar(const CFX_Char* pTC,
+                                 FX_WCHAR& wChar,
+                                 FX_CHARTYPE& eType) {
+  if (!pTC) {
+    eType = FX_CHARTYPE_Unknown;
+    wChar = 0xFEFF;
+    return nullptr;
+  }
+  eType = (FX_CHARTYPE)pTC->GetCharType();
+  wChar = (FX_WCHAR)pTC->m_wCharCode;
+  const FX_ARBFORMTABLE* pFT = FX_GetArabicFormTable(wChar);
+  if (!pFT || eType >= FX_CHARTYPE_ArabicNormal)
+    eType = FX_CHARTYPE_Unknown;
+
+  return pFT;
+}
+
 }  // namespace
 
 const FX_ARBFORMTABLE* FX_GetArabicFormTable(FX_WCHAR unicode) {
@@ -145,26 +162,30 @@
   return shadda;
 }
 
-FX_BOOL CFX_ArabicChar::IsArabicChar(FX_WCHAR wch) const {
+namespace pdfium {
+namespace arabic {
+
+bool IsArabicChar(FX_WCHAR wch) {
   uint32_t dwRet =
       kTextLayoutCodeProperties[(uint16_t)wch] & FX_CHARTYPEBITSMASK;
   return dwRet >= FX_CHARTYPE_ArabicAlef;
 }
-FX_BOOL CFX_ArabicChar::IsArabicFormChar(FX_WCHAR wch) const {
+
+bool IsArabicFormChar(FX_WCHAR wch) {
   return (kTextLayoutCodeProperties[(uint16_t)wch] & FX_CHARTYPEBITSMASK) ==
          FX_CHARTYPE_ArabicForm;
 }
-FX_WCHAR CFX_ArabicChar::GetFormChar(FX_WCHAR wch,
-                                     FX_WCHAR prev,
-                                     FX_WCHAR next) const {
+
+FX_WCHAR GetFormChar(FX_WCHAR wch, FX_WCHAR prev, FX_WCHAR next) {
   CFX_Char c(wch, kTextLayoutCodeProperties[(uint16_t)wch]);
   CFX_Char p(prev, kTextLayoutCodeProperties[(uint16_t)prev]);
   CFX_Char n(next, kTextLayoutCodeProperties[(uint16_t)next]);
   return GetFormChar(&c, &p, &n);
 }
-FX_WCHAR CFX_ArabicChar::GetFormChar(const CFX_Char* cur,
-                                     const CFX_Char* prev,
-                                     const CFX_Char* next) const {
+
+FX_WCHAR GetFormChar(const CFX_Char* cur,
+                     const CFX_Char* prev,
+                     const CFX_Char* next) {
   FX_CHARTYPE eCur;
   FX_WCHAR wCur;
   const FX_ARBFORMTABLE* ft = ParseChar(cur, wCur, eCur);
@@ -184,37 +205,22 @@
   if (ePrev < FX_CHARTYPE_ArabicAlef) {
     if (bAlef) {
       return FX_GetArabicFromAlefTable(wNext);
-    } else {
-      return (eNext < FX_CHARTYPE_ArabicAlef) ? ft->wIsolated : ft->wInitial;
     }
-  } else {
-    if (bAlef) {
-      wCur = FX_GetArabicFromAlefTable(wNext);
-      return (ePrev != FX_CHARTYPE_ArabicDistortion) ? wCur : ++wCur;
-    } else if (ePrev == FX_CHARTYPE_ArabicAlef ||
-               ePrev == FX_CHARTYPE_ArabicSpecial) {
-      return (eNext < FX_CHARTYPE_ArabicAlef) ? ft->wIsolated : ft->wInitial;
-    } else {
-      return (eNext < FX_CHARTYPE_ArabicAlef) ? ft->wFinal : ft->wMedial;
-    }
+    return (eNext < FX_CHARTYPE_ArabicAlef) ? ft->wIsolated : ft->wInitial;
   }
+  if (bAlef) {
+    wCur = FX_GetArabicFromAlefTable(wNext);
+    return (ePrev != FX_CHARTYPE_ArabicDistortion) ? wCur : ++wCur;
+  }
+  if (ePrev == FX_CHARTYPE_ArabicAlef || ePrev == FX_CHARTYPE_ArabicSpecial) {
+    return (eNext < FX_CHARTYPE_ArabicAlef) ? ft->wIsolated : ft->wInitial;
+  }
+  return (eNext < FX_CHARTYPE_ArabicAlef) ? ft->wFinal : ft->wMedial;
 }
-const FX_ARBFORMTABLE* CFX_ArabicChar::ParseChar(const CFX_Char* pTC,
-                                                 FX_WCHAR& wChar,
-                                                 FX_CHARTYPE& eType) const {
-  if (pTC == NULL) {
-    eType = FX_CHARTYPE_Unknown;
-    wChar = 0xFEFF;
-    return NULL;
-  }
-  eType = (FX_CHARTYPE)pTC->GetCharType();
-  wChar = (FX_WCHAR)pTC->m_wCharCode;
-  const FX_ARBFORMTABLE* pFT = FX_GetArabicFormTable(wChar);
-  if (pFT == NULL || eType >= FX_CHARTYPE_ArabicNormal) {
-    eType = FX_CHARTYPE_Unknown;
-  }
-  return pFT;
-}
+
+}  // namespace arabic
+}  // namespace pdfium
+
 void FX_BidiReverseString(CFX_WideString& wsText,
                           int32_t iStart,
                           int32_t iCount) {
diff --git a/core/fxcrt/include/fx_arabic.h b/core/fxcrt/include/fx_arabic.h
index 96fa795..2617d189 100644
--- a/core/fxcrt/include/fx_arabic.h
+++ b/core/fxcrt/include/fx_arabic.h
@@ -14,25 +14,18 @@
 #define FX_BidiGetDeferredType(a) (((a) >> 4) & 0x0F)
 #define FX_BidiGetResolvedType(a) ((a)&0x0F)
 
-class CFX_ArabicChar {
- public:
-  void Release() { delete this; }
+namespace pdfium {
+namespace arabic {
 
-  FX_BOOL IsArabicChar(FX_WCHAR wch) const;
-  FX_BOOL IsArabicFormChar(FX_WCHAR wch) const;
+bool IsArabicChar(FX_WCHAR wch);
+bool IsArabicFormChar(FX_WCHAR wch);
+FX_WCHAR GetFormChar(FX_WCHAR wch, FX_WCHAR prev = 0, FX_WCHAR next = 0);
+FX_WCHAR GetFormChar(const CFX_Char* cur,
+                     const CFX_Char* prev,
+                     const CFX_Char* next);
 
-  FX_WCHAR GetFormChar(FX_WCHAR wch,
-                       FX_WCHAR prev = 0,
-                       FX_WCHAR next = 0) const;
-  FX_WCHAR GetFormChar(const CFX_Char* cur,
-                       const CFX_Char* prev,
-                       const CFX_Char* next) const;
-
- protected:
-  const FX_ARBFORMTABLE* ParseChar(const CFX_Char* pTC,
-                                   FX_WCHAR& wChar,
-                                   FX_CHARTYPE& eType) const;
-};
+}  // namespace arabic
+}  // namespace pdfium
 
 void FX_BidiReverseString(CFX_WideString& wsText,
                           int32_t iStart,
diff --git a/xfa/fgas/layout/fgas_rtfbreak.cpp b/xfa/fgas/layout/fgas_rtfbreak.cpp
index b44af96..aaef7ae 100644
--- a/xfa/fgas/layout/fgas_rtfbreak.cpp
+++ b/xfa/fgas/layout/fgas_rtfbreak.cpp
@@ -15,7 +15,6 @@
 
 CFX_RTFBreak::CFX_RTFBreak(uint32_t dwPolicies)
     : m_dwPolicies(dwPolicies),
-      m_pArabicChar(NULL),
       m_iBoundaryStart(0),
       m_iBoundaryEnd(2000000),
       m_dwLayoutStyles(0),
@@ -50,13 +49,11 @@
       m_pCurLine(NULL),
       m_iReady(0),
       m_iTolerance(0) {
-  m_pArabicChar = new CFX_ArabicChar;
   m_pCurLine = &m_RTFLine1;
 }
 CFX_RTFBreak::~CFX_RTFBreak() {
   Reset();
   m_PositionedTabs.RemoveAll();
-  m_pArabicChar->Release();
   if (m_pUserData != NULL) {
     m_pUserData->Release();
   }
@@ -343,7 +340,7 @@
     &CFX_RTFBreak::AppendChar_Others,      &CFX_RTFBreak::AppendChar_Others,
 };
 uint32_t CFX_RTFBreak::AppendChar(FX_WCHAR wch) {
-  ASSERT(m_pFont != NULL && m_pCurLine != NULL && m_pArabicChar != NULL);
+  ASSERT(m_pFont && m_pCurLine);
   if (m_bCharCode) {
     return AppendChar_CharCode(wch);
   }
@@ -520,7 +517,7 @@
     if (pLastChar != NULL) {
       iLineWidth -= pLastChar->m_iCharWidth;
       CFX_RTFChar* pPrevChar = GetLastChar(2);
-      wForm = m_pArabicChar->GetFormChar(pLastChar, pPrevChar, pCurChar);
+      wForm = pdfium::arabic::GetFormChar(pLastChar, pPrevChar, pCurChar);
       bAlef = (wForm == 0xFEFF &&
                pLastChar->GetCharType() == FX_CHARTYPE_ArabicAlef);
       int32_t iLastRotation = pLastChar->m_nRotation + m_iLineRotation;
@@ -544,8 +541,8 @@
       iCharWidth = 0;
     }
   }
-  wForm =
-      m_pArabicChar->GetFormChar(pCurChar, (bAlef ? NULL : pLastChar), NULL);
+  wForm = pdfium::arabic::GetFormChar(pCurChar, bAlef ? nullptr : pLastChar,
+                                      nullptr);
   if (m_bVertical != FX_IsOdd(iRotation)) {
     iCharWidth = 1000;
   } else if (!m_pFont->GetCharWidth(wForm, iCharWidth, m_bCharCode) &&
@@ -1268,7 +1265,7 @@
             } else {
               wNext = 0xFEFF;
             }
-            wForm = m_pArabicChar->GetFormChar(wch, wPrev, wNext);
+            wForm = pdfium::arabic::GetFormChar(wch, wPrev, wNext);
           } else if (bRTLPiece || bVerticalChar) {
             wForm = FX_GetMirrorChar(wch, dwProps, bRTLPiece, bVerticalChar);
           } else if (dwCharType == FX_CHARTYPE_Numeric && bArabicNumber) {
diff --git a/xfa/fgas/layout/fgas_rtfbreak.h b/xfa/fgas/layout/fgas_rtfbreak.h
index 95de85b..d595ad3 100644
--- a/xfa/fgas/layout/fgas_rtfbreak.h
+++ b/xfa/fgas/layout/fgas_rtfbreak.h
@@ -14,7 +14,6 @@
 #include "xfa/fgas/layout/fgas_textbreak.h"
 #include "xfa/fgas/layout/fgas_unicode.h"
 
-class CFX_ArabicChar;
 class IFX_Unknown;
 class IFX_Font;
 
@@ -293,7 +292,6 @@
 
  protected:
   uint32_t m_dwPolicies;
-  CFX_ArabicChar* m_pArabicChar;
   int32_t m_iBoundaryStart;
   int32_t m_iBoundaryEnd;
   uint32_t m_dwLayoutStyles;
diff --git a/xfa/fgas/layout/fgas_textbreak.cpp b/xfa/fgas/layout/fgas_textbreak.cpp
index 86fecbe..4b4ef1f 100644
--- a/xfa/fgas/layout/fgas_textbreak.cpp
+++ b/xfa/fgas/layout/fgas_textbreak.cpp
@@ -16,7 +16,6 @@
 
 CFX_TxtBreak::CFX_TxtBreak(uint32_t dwPolicies)
     : m_dwPolicies(dwPolicies),
-      m_pArabicChar(NULL),
       m_iLineWidth(2000000),
       m_dwLayoutStyles(0),
       m_bVertical(FALSE),
@@ -51,7 +50,6 @@
       m_iVerScale(100),
       m_iCharSpace(0) {
   m_bPagination = (m_dwPolicies & FX_TXTBREAKPOLICY_Pagination) != 0;
-  m_pArabicChar = new CFX_ArabicChar;
   if (m_bPagination) {
     m_pTxtLine1 = new CFX_TxtLine(sizeof(CFX_Char));
     m_pTxtLine2 = new CFX_TxtLine(sizeof(CFX_Char));
@@ -66,7 +64,6 @@
   Reset();
   delete m_pTxtLine1;
   delete m_pTxtLine2;
-  m_pArabicChar->Release();
 }
 void CFX_TxtBreak::SetLineWidth(FX_FLOAT fLineWidth) {
   m_iLineWidth = FXSYS_round(fLineWidth * 20000.0f);
@@ -465,7 +462,7 @@
         iLineWidth -= iCharWidth;
       }
       CFX_Char* pPrevChar = GetLastChar(2);
-      wForm = m_pArabicChar->GetFormChar(pLastChar, pPrevChar, pCurChar);
+      wForm = pdfium::arabic::GetFormChar(pLastChar, pPrevChar, pCurChar);
       bAlef = (wForm == 0xFEFF &&
                pLastChar->GetCharType() == FX_CHARTYPE_ArabicAlef);
       int32_t iLastRotation = pLastChar->m_nRotation + m_iLineRotation;
@@ -488,7 +485,7 @@
     }
   }
   m_dwCharType = dwType;
-  wForm = m_pArabicChar->GetFormChar(pCurChar, bAlef ? NULL : pLastChar, NULL);
+  wForm = pdfium::arabic::GetFormChar(pCurChar, bAlef ? NULL : pLastChar, NULL);
   if (m_bCombText) {
     iCharWidth = m_iCombWidth;
   } else {
@@ -1268,7 +1265,7 @@
       } else {
         wNext = 0xFEFF;
       }
-      wForm = m_pArabicChar->GetFormChar(wch, wPrev, wNext);
+      wForm = pdfium::arabic::GetFormChar(wch, wPrev, wNext);
       bLam = (wPrev == 0x0644 && wch == 0x0644 && wNext == 0x0647);
     } else if (dwCharType == FX_CHARTYPE_Combination) {
       wForm = wch;
diff --git a/xfa/fgas/layout/fgas_textbreak.h b/xfa/fgas/layout/fgas_textbreak.h
index 41bd8f4..6d961f2 100644
--- a/xfa/fgas/layout/fgas_textbreak.h
+++ b/xfa/fgas/layout/fgas_textbreak.h
@@ -12,7 +12,6 @@
 #include "xfa/fgas/crt/fgas_utils.h"
 #include "xfa/fgas/layout/fgas_unicode.h"
 
-class CFX_ArabicChar;
 class CFX_Char;
 class CFX_TxtChar;
 class CFX_TxtPiece;
@@ -270,7 +269,6 @@
  protected:
   uint32_t m_dwPolicies;
   FX_BOOL m_bPagination;
-  CFX_ArabicChar* m_pArabicChar;
   int32_t m_iLineWidth;
   uint32_t m_dwLayoutStyles;
   FX_BOOL m_bVertical;
