diff --git a/core/fxcrt/fx_bidi.cpp b/core/fxcrt/fx_bidi.cpp
index 8b20cfb..5b5b198 100644
--- a/core/fxcrt/fx_bidi.cpp
+++ b/core/fxcrt/fx_bidi.cpp
@@ -13,9 +13,37 @@
 
 #ifdef PDF_ENABLE_XFA
 #include "core/fxcrt/fx_extension.h"
+#endif  // PDF_ENABLE_XFA
 
 namespace {
 
+enum FX_BIDICLASS {
+  FX_BIDICLASS_ON = 0,    // Other Neutral
+  FX_BIDICLASS_L = 1,     // Left Letter
+  FX_BIDICLASS_R = 2,     // Right Letter
+  FX_BIDICLASS_AN = 3,    // Arabic Number
+  FX_BIDICLASS_EN = 4,    // European Number
+  FX_BIDICLASS_AL = 5,    // Arabic Letter
+  FX_BIDICLASS_NSM = 6,   // Non-spacing Mark
+  FX_BIDICLASS_CS = 7,    // Common Number Separator
+  FX_BIDICLASS_ES = 8,    // European Separator
+  FX_BIDICLASS_ET = 9,    // European Number Terminator
+  FX_BIDICLASS_BN = 10,   // Boundary Neutral
+  FX_BIDICLASS_S = 11,    // Segment Separator
+  FX_BIDICLASS_WS = 12,   // Whitespace
+  FX_BIDICLASS_B = 13,    // Paragraph Separator
+  FX_BIDICLASS_RLO = 14,  // Right-to-Left Override
+  FX_BIDICLASS_RLE = 15,  // Right-to-Left Embedding
+  FX_BIDICLASS_LRO = 16,  // Left-to-Right Override
+  FX_BIDICLASS_LRE = 17,  // Left-to-Right Embedding
+  FX_BIDICLASS_PDF = 18,  // Pop Directional Format
+  FX_BIDICLASS_N = FX_BIDICLASS_ON,
+};
+constexpr uint32_t FX_BIDICLASSBITS = 6;
+constexpr uint32_t FX_BIDICLASSBITSMASK = 0x1F << FX_BIDICLASSBITS;
+
+#ifdef PDF_ENABLE_XFA
+
 #ifndef NDEBUG
 constexpr int32_t kBidiMaxLevel = 61;
 #endif  // NDEBUG
@@ -510,10 +538,10 @@
   }
 };
 
-}  // namespace
-
 #endif  // PDF_ENABLE_XFA
 
+}  // namespace
+
 CFX_BidiChar::CFX_BidiChar()
     : m_CurrentSegment({0, 0, NEUTRAL}), m_LastSegment({0, 0, NEUTRAL}) {}
 
diff --git a/core/fxcrt/fx_ucd.h b/core/fxcrt/fx_ucd.h
index 50f3801..bca830f 100644
--- a/core/fxcrt/fx_ucd.h
+++ b/core/fxcrt/fx_ucd.h
@@ -9,32 +9,6 @@
 
 #include "core/fxcrt/cfx_retain_ptr.h"
 
-constexpr uint32_t FX_BIDICLASSBITS = 6;
-constexpr uint32_t FX_BIDICLASSBITSMASK = 0x1F << FX_BIDICLASSBITS;
-
-enum FX_BIDICLASS {
-  FX_BIDICLASS_ON = 0,    // Other Neutral
-  FX_BIDICLASS_L = 1,     // Left Letter
-  FX_BIDICLASS_R = 2,     // Right Letter
-  FX_BIDICLASS_AN = 3,    // Arabic Number
-  FX_BIDICLASS_EN = 4,    // European Number
-  FX_BIDICLASS_AL = 5,    // Arabic Letter
-  FX_BIDICLASS_NSM = 6,   // Non-spacing Mark
-  FX_BIDICLASS_CS = 7,    // Common Number Separator
-  FX_BIDICLASS_ES = 8,    // European Separator
-  FX_BIDICLASS_ET = 9,    // European Number Terminator
-  FX_BIDICLASS_BN = 10,   // Boundary Neutral
-  FX_BIDICLASS_S = 11,    // Segment Separator
-  FX_BIDICLASS_WS = 12,   // Whitespace
-  FX_BIDICLASS_B = 13,    // Paragraph Separator
-  FX_BIDICLASS_RLO = 14,  // Right-to-Left Override
-  FX_BIDICLASS_RLE = 15,  // Right-to-Left Embedding
-  FX_BIDICLASS_LRO = 16,  // Left-to-Right Override
-  FX_BIDICLASS_LRE = 17,  // Left-to-Right Embedding
-  FX_BIDICLASS_PDF = 18,  // Pop Directional Format
-  FX_BIDICLASS_N = FX_BIDICLASS_ON,
-};
-
 extern const uint32_t kTextLayoutCodeProperties[];
 extern const size_t kTextLayoutCodePropertiesSize;
 
@@ -42,53 +16,13 @@
 extern const size_t kFXTextLayoutBidiMirrorSize;
 
 uint32_t FX_GetUnicodeProperties(wchar_t wch);
-
 wchar_t FX_GetMirrorChar(wchar_t wch);
 
 #ifdef PDF_ENABLE_XFA
 
-// As defined in http://www.unicode.org/reports/tr14/
-enum FXCHAR_BREAKPROP {
-  FX_CBP_OP = 0,   // Opening Punctuation
-  FX_CBP_CL = 1,   // Closing Punctuation
-  FX_CBP_QU = 2,   // Ambiguous Quotation
-  FX_CBP_GL = 3,   // Non-breaking ("Glue")
-  FX_CBP_NS = 4,   // Non Starter
-  FX_CBP_EX = 5,   // Exclamation/Interrogation
-  FX_CBP_SY = 6,   // Symbols Allowing Breaks
-  FX_CBP_IS = 7,   // Infix Separator (Numeric)
-  FX_CBP_PR = 8,   // Prefix (Numeric)
-  FX_CBP_PO = 9,   // Postfix (Numeric)
-  FX_CBP_NU = 10,  // Numeric
-  FX_CBP_AL = 11,  // Ordinary Alphabetic and Symbol Characters
-  FX_CBP_ID = 12,  // Ideographic
-  FX_CBP_IN = 13,  // Inseparable
-  FX_CBP_HY = 14,  // Hyphen
-  FX_CBP_BA = 15,  // Break Opportunity After
-  FX_CBP_BB = 16,  // Break Opportunity Before
-  FX_CBP_B2 = 17,  // Break Opportunity Before and After
-  FX_CBP_ZW = 18,  // Zero Width Space
-  FX_CBP_CM = 19,  // Attached Characters and Combining Marks
-  FX_CBP_WJ = 20,  // Word Joiner
-  FX_CBP_H2 = 21,  // Hangul LV Syllable
-  FX_CBP_H3 = 22,  // Hangul LVT Syllable
-  FX_CBP_JL = 23,  // Hangul Leading Jamo
-  FX_CBP_JV = 24,  // Hangul Vowel Jamo
-  FX_CBP_JT = 25,  // Hangul Trailing Jamo
-
-  FX_CBP_BK = 26,  // Mandatory Break
-  FX_CBP_CR = 27,  // Carriage Return
-  FX_CBP_LF = 28,  // Line Feed
-  FX_CBP_NL = 29,  // Next Line
-  FX_CBP_SA = 30,  // Complex Context (South East Asian)
-  FX_CBP_SG = 31,  // Surrogate
-  FX_CBP_CB = 32,  // Contingent Break Opportunity
-  FX_CBP_XX = 33,  // Unknown
-  FX_CBP_AI = 34,  // Ambiguous (Alphabetic or Ideographic)
-  FX_CBP_SP = 35,  // Space
-  FX_CBP_NONE = 36,
-  FX_CBP_TB = 37,  // ?
-};
+// As defined in http://www.unicode.org/reports/tr14
+constexpr uint8_t kBreakPropertySpace = 35;
+constexpr uint8_t kBreakPropertyTB = 37;  // Don't know what this is ...
 
 constexpr uint32_t FX_CHARTYPEBITS = 11;
 constexpr uint32_t FX_CHARTYPEBITSMASK = 0xF << FX_CHARTYPEBITS;
@@ -108,6 +42,7 @@
   FX_CHARTYPE_ArabicForm = (11 << FX_CHARTYPEBITS),
   FX_CHARTYPE_Arabic = (12 << FX_CHARTYPEBITS),
 };
+
 inline FX_CHARTYPE GetCharTypeFromProp(uint32_t prop) {
   return static_cast<FX_CHARTYPE>(prop & FX_CHARTYPEBITSMASK);
 }
diff --git a/xfa/fgas/layout/cfx_rtfbreak.cpp b/xfa/fgas/layout/cfx_rtfbreak.cpp
index a097361..be5780f 100644
--- a/xfa/fgas/layout/cfx_rtfbreak.cpp
+++ b/xfa/fgas/layout/cfx_rtfbreak.cpp
@@ -565,16 +565,18 @@
     uint32_t nCur = nCodeProp & 0x003F;
     bool bNeedBreak = false;
     FX_LINEBREAKTYPE eType;
-    if (nCur == FX_CBP_TB) {
+    if (nCur == kBreakPropertyTB) {
       bNeedBreak = true;
-      eType = nNext == FX_CBP_TB ? FX_LBT_PROHIBITED_BRK
-                                 : gs_FX_LineBreak_PairTable[nCur][nNext];
+      eType = nNext == kBreakPropertyTB
+                  ? FX_LBT_PROHIBITED_BRK
+                  : gs_FX_LineBreak_PairTable[nCur][nNext];
     } else {
-      if (nCur == FX_CBP_SP)
+      if (nCur == kBreakPropertySpace)
         bNeedBreak = true;
 
-      eType = nNext == FX_CBP_SP ? FX_LBT_PROHIBITED_BRK
-                                 : gs_FX_LineBreak_PairTable[nCur][nNext];
+      eType = nNext == kBreakPropertySpace
+                  ? FX_LBT_PROHIBITED_BRK
+                  : gs_FX_LineBreak_PairTable[nCur][nNext];
     }
     if (bAllChars)
       pCur->m_nBreakType = eType;
diff --git a/xfa/fgas/layout/cfx_txtbreak.cpp b/xfa/fgas/layout/cfx_txtbreak.cpp
index 3ba7640..2ea64d2 100644
--- a/xfa/fgas/layout/cfx_txtbreak.cpp
+++ b/xfa/fgas/layout/cfx_txtbreak.cpp
@@ -548,14 +548,15 @@
     pCur = &ca[iLength];
     nCodeProp = pCur->char_props();
     nCur = nCodeProp & 0x003F;
-    if (nNext == FX_CBP_SP)
+    if (nNext == kBreakPropertySpace)
       eType = FX_LBT_PROHIBITED_BRK;
     else
       eType = gs_FX_LineBreak_PairTable[nCur][nNext];
     if (bAllChars)
       pCur->m_nBreakType = static_cast<uint8_t>(eType);
     if (!bOnlyBrk) {
-      if (m_bSingleLine || iEndPos <= m_iLineWidth || nCur == FX_CBP_SP) {
+      if (m_bSingleLine || iEndPos <= m_iLineWidth ||
+          nCur == kBreakPropertySpace) {
         if (eType == FX_LBT_DIRECT_BRK && iBreak < 0) {
           iBreak = iLength;
           iBreakPos = iEndPos;
