diff --git a/core/fxcrt/fx_ucddata.cpp b/core/fxcrt/fx_ucddata.cpp
index 527eacf..7985f94 100644
--- a/core/fxcrt/fx_ucddata.cpp
+++ b/core/fxcrt/fx_ucddata.cpp
@@ -8,6 +8,8 @@
 
 #include "core/fxcrt/fx_memory.h"
 
+namespace fxcrt {
+
 const uint32_t kTextLayoutCodeProperties[] = {
     0xfffe9a93, 0xfffe9a93, 0xfffe9a93, 0xfffe9a93, 0xfffe9a93, 0xfffe9a93,
     0xfffe9a93, 0xfffe9a93, 0xfffe9a93, 0xfffe8ae5, 0xfffe9b5c, 0xfffe9ada,
@@ -10937,6 +10939,23 @@
 const size_t kTextLayoutCodePropertiesSize =
     FX_ArraySize(kTextLayoutCodeProperties);
 
+static_assert(kTextLayoutCodePropertiesSize == 65536, "missing characters");
+
+static_assert((kBreakTypeBitMask | kBidiClassBitMask | kCharTypeBitMask |
+               kField2BitMask | kMirrorBitMask) == 0xffffffff,
+              "missing bits in mask");
+
+static_assert((kBreakTypeBitMask & kBidiClassBitMask) == 0, "overlapping bits");
+static_assert((kBreakTypeBitMask & kCharTypeBitMask) == 0, "overlapping bits");
+static_assert((kBreakTypeBitMask & kField2BitMask) == 0, "overlapping bits");
+static_assert((kBreakTypeBitMask & kMirrorBitMask) == 0, "overlapping bits");
+static_assert((kBidiClassBitMask & kCharTypeBitMask) == 0, "overlapping bits");
+static_assert((kBidiClassBitMask & kField2BitMask) == 0, "overlapping bits");
+static_assert((kBidiClassBitMask & kMirrorBitMask) == 0, "overlapping bits");
+static_assert((kCharTypeBitMask & kField2BitMask) == 0, "overlapping bits");
+static_assert((kCharTypeBitMask & kMirrorBitMask) == 0, "overlapping bits");
+static_assert((kField2BitMask & kMirrorBitMask) == 0, "overlapping bits");
+
 const uint16_t kFXTextLayoutBidiMirror[] = {
     0x0029, 0x0028, 0x003E, 0x003C, 0x005D, 0x005B, 0x007D, 0x007B, 0x00BB,
     0x00AB, 0x0F3B, 0x0F3A, 0x0F3D, 0x0F3C, 0x169C, 0x169B, 0x2019, 0x2018,
@@ -10999,3 +11018,5 @@
 
 const size_t kFXTextLayoutBidiMirrorSize =
     FX_ArraySize(kFXTextLayoutBidiMirror);
+
+}  // namespace fxcrt
diff --git a/core/fxcrt/fx_ucddata.h b/core/fxcrt/fx_ucddata.h
index 78a6b97..3296333 100644
--- a/core/fxcrt/fx_ucddata.h
+++ b/core/fxcrt/fx_ucddata.h
@@ -9,10 +9,61 @@
 
 #include "core/fxcrt/fx_system.h"
 
+namespace fxcrt {
+
+// Format of uint32_t values in kTextLayoutCodeProperties[].
+constexpr uint32_t kBreakTypeBitPos = 0;
+constexpr uint32_t kBreakTypeBitCount = 6;
+constexpr uint32_t kBreakTypeBitMask =
+    (((1u << kBreakTypeBitCount) - 1) << kBreakTypeBitPos);
+
+constexpr uint32_t kBidiClassBitPos = 6;
+constexpr uint32_t kBidiClassBitCount = 5;
+constexpr uint32_t kBidiClassBitMask =
+    (((1u << kBidiClassBitCount) - 1) << kBidiClassBitPos);
+
+constexpr uint32_t kCharTypeBitPos = 11;
+constexpr uint32_t kCharTypeBitCount = 4;
+constexpr uint32_t kCharTypeBitMask =
+    (((1u << kCharTypeBitCount) - 1) << kCharTypeBitPos);
+
+// TODO(tsepez): Unknown, possibly unused field.
+constexpr uint32_t kField2BitPos = 15;
+constexpr uint32_t kField2BitCount = 8;
+constexpr uint32_t kField2BitMask =
+    (((1 << kField2BitCount) - 1) << kField2BitPos);
+
+constexpr uint32_t kMirrorBitPos = 23;
+constexpr uint32_t kMirrorBitCount = 9;
+constexpr uint32_t kMirrorBitMask =
+    (((1 << kMirrorBitCount) - 1) << kMirrorBitPos);
+
 extern const uint32_t kTextLayoutCodeProperties[];
 extern const size_t kTextLayoutCodePropertiesSize;
 
 extern const uint16_t kFXTextLayoutBidiMirror[];
 extern const size_t kFXTextLayoutBidiMirrorSize;
 
+}  // namespace fxcrt
+
+using fxcrt::kBidiClassBitCount;
+using fxcrt::kBidiClassBitMask;
+using fxcrt::kBidiClassBitPos;
+using fxcrt::kBreakTypeBitCount;
+using fxcrt::kBreakTypeBitMask;
+using fxcrt::kBreakTypeBitPos;
+using fxcrt::kCharTypeBitCount;
+using fxcrt::kCharTypeBitMask;
+using fxcrt::kCharTypeBitPos;
+using fxcrt::kField2BitCount;
+using fxcrt::kField2BitMask;
+using fxcrt::kField2BitPos;
+using fxcrt::kFXTextLayoutBidiMirror;
+using fxcrt::kFXTextLayoutBidiMirrorSize;
+using fxcrt::kMirrorBitCount;
+using fxcrt::kMirrorBitMask;
+using fxcrt::kMirrorBitPos;
+using fxcrt::kTextLayoutCodeProperties;
+using fxcrt::kTextLayoutCodePropertiesSize;
+
 #endif  // CORE_FXCRT_FX_UCDDATA_H_
diff --git a/core/fxcrt/fx_unicode.cpp b/core/fxcrt/fx_unicode.cpp
index aafdba1..303ef34 100644
--- a/core/fxcrt/fx_unicode.cpp
+++ b/core/fxcrt/fx_unicode.cpp
@@ -10,14 +10,11 @@
 
 namespace {
 
-constexpr uint32_t kMirrorBits = 23;
-constexpr uint32_t kMirrorMask = 0x1FFU << kMirrorBits;
-
 wchar_t GetMirrorChar(wchar_t wch, uint32_t dwProps) {
-  uint32_t dwTemp = (dwProps & kMirrorMask);
-  if (dwTemp == kMirrorMask)
+  uint32_t dwTemp = (dwProps & kMirrorBitMask);
+  if (dwTemp == kMirrorBitMask)
     return wch;
-  size_t idx = dwTemp >> kMirrorBits;
+  size_t idx = dwTemp >> kMirrorBitPos;
   return idx < kFXTextLayoutBidiMirrorSize ? kFXTextLayoutBidiMirror[idx] : wch;
 }
 
@@ -35,6 +32,20 @@
 }
 
 #ifdef PDF_ENABLE_XFA
+static_assert(FX_CHARTYPEBITS == kCharTypeBitPos, "positions must match");
+
+FX_CHARTYPE GetCharTypeFromProp(uint32_t prop) {
+  uint32_t result = (prop & kCharTypeBitMask);
+  ASSERT(result <= FX_CHARTYPE_Arabic);
+  return static_cast<FX_CHARTYPE>(result);
+}
+
+uint32_t GetBreakPropertyFromProp(uint32_t prop) {
+  uint32_t result = (prop & kBreakTypeBitMask) >> kBreakTypeBitPos;
+  ASSERT(result <= kBreakPropertyTB);
+  return result;
+}
+
 wchar_t FX_GetMirrorChar(wchar_t wch, uint32_t dwProps) {
   return GetMirrorChar(wch, dwProps);
 }
diff --git a/core/fxcrt/fx_unicode.h b/core/fxcrt/fx_unicode.h
index 9611011..e701a76 100644
--- a/core/fxcrt/fx_unicode.h
+++ b/core/fxcrt/fx_unicode.h
@@ -19,7 +19,6 @@
 constexpr uint8_t kBreakPropertyTB = 37;  // Highest, don't know what this is.
 
 constexpr uint32_t FX_CHARTYPEBITS = 11;
-constexpr uint32_t FX_CHARTYPEBITSMASK = 0xF << FX_CHARTYPEBITS;
 
 enum FX_CHARTYPE {
   FX_CHARTYPE_Unknown = 0,
@@ -37,16 +36,11 @@
   FX_CHARTYPE_Arabic = (12 << FX_CHARTYPEBITS),
 };
 
-inline FX_CHARTYPE GetCharTypeFromProp(uint32_t prop) {
-  return static_cast<FX_CHARTYPE>(prop & FX_CHARTYPEBITSMASK);
-}
+FX_CHARTYPE GetCharTypeFromProp(uint32_t prop);
 
-inline uint32_t GetBreakPropertyFromProp(uint32_t prop) {
-  // Analagous to ULineBreak in icu's uchar.h, but permuted order, and a
-  // subset lacking some more recent additions.
-  ASSERT((prop & 0x3f) <= kBreakPropertyTB);
-  return prop & 0x3f;
-}
+// Analagous to ULineBreak in icu's uchar.h, but permuted order, and a
+// subset lacking some more recent additions.
+uint32_t GetBreakPropertyFromProp(uint32_t prop);
 
 wchar_t FX_GetMirrorChar(wchar_t wch, uint32_t dwProps);
 
diff --git a/xfa/fgas/layout/cfx_rtfbreak.cpp b/xfa/fgas/layout/cfx_rtfbreak.cpp
index 70a5756..70488da 100644
--- a/xfa/fgas/layout/cfx_rtfbreak.cpp
+++ b/xfa/fgas/layout/cfx_rtfbreak.cpp
@@ -752,7 +752,7 @@
     wchar_t wch = pText->pStr[i];
     int32_t iWidth = pText->pWidths[i];
     uint32_t dwProps = FX_GetUnicodeProperties(wch);
-    uint32_t dwCharType = (dwProps & FX_CHARTYPEBITSMASK);
+    uint32_t dwCharType = GetCharTypeFromProp(dwProps);
     if (iWidth == 0) {
       if (dwCharType == FX_CHARTYPE_ArabicAlef)
         wPrev = 0xFEFF;
diff --git a/xfa/fgas/layout/cfx_txtbreak.cpp b/xfa/fgas/layout/cfx_txtbreak.cpp
index 9d14305..96bf9bd 100644
--- a/xfa/fgas/layout/cfx_txtbreak.cpp
+++ b/xfa/fgas/layout/cfx_txtbreak.cpp
@@ -18,7 +18,7 @@
 namespace {
 
 bool IsCtrlCode(wchar_t ch) {
-  uint32_t dwRet = (FX_GetUnicodeProperties(ch) & FX_CHARTYPEBITSMASK);
+  uint32_t dwRet = GetCharTypeFromProp(FX_GetUnicodeProperties(ch));
   return dwRet == FX_CHARTYPE_Tab || dwRet == FX_CHARTYPE_Control;
 }
 
@@ -728,7 +728,7 @@
             int32_t iNextAbsolute = iNext + pTxtRun->iStart;
             wNext = pEngine->GetChar(iNextAbsolute);
             dwProps = FX_GetUnicodeProperties(wNext);
-            if ((dwProps & FX_CHARTYPEBITSMASK) != FX_CHARTYPE_Combination)
+            if (GetCharTypeFromProp(dwProps) != FX_CHARTYPE_Combination)
               break;
 
             iNext++;
@@ -744,7 +744,7 @@
 
             wNext = pStr[j];
             dwProps = FX_GetUnicodeProperties(wNext);
-          } while ((dwProps & FX_CHARTYPEBITSMASK) == FX_CHARTYPE_Combination);
+          } while (GetCharTypeFromProp(dwProps) == FX_CHARTYPE_Combination);
           if (i + j >= iLength)
             wNext = 0xFEFF;
         }
@@ -876,8 +876,7 @@
           }
           if (wForm == wch && wLast != 0xFEFF) {
             uint32_t dwLastProps = FX_GetUnicodeProperties(wLast);
-            if ((dwLastProps & FX_CHARTYPEBITSMASK) ==
-                FX_CHARTYPE_Combination) {
+            if (GetCharTypeFromProp(dwLastProps) == FX_CHARTYPE_Combination) {
               FX_RECT rtBox;
               if (pFont->GetCharBBox(wLast, &rtBox))
                 pCharPos->m_Origin.y -= fFontSize * rtBox.Height() / iMaxHeight;
