diff --git a/core/fpdftext/cpdf_textpage.cpp b/core/fpdftext/cpdf_textpage.cpp
index 073f7f3..e758ede 100644
--- a/core/fpdftext/cpdf_textpage.cpp
+++ b/core/fpdftext/cpdf_textpage.cpp
@@ -148,7 +148,8 @@
     if (wChar)
       str += wChar;
   }
-  return CFX_BidiString(str).OverallDirection() == CFX_BidiChar::RIGHT;
+  return CFX_BidiString(str).OverallDirection() ==
+         CFX_BidiChar::Direction::kRight;
 }
 
 int GetCharWidth(uint32_t charCode, CPDF_Font* pFont) {
@@ -734,14 +735,14 @@
     bidi.SetOverallDirectionRight();
   CFX_BidiChar::Direction eCurrentDirection = bidi.OverallDirection();
   for (const auto& segment : bidi) {
-    if (segment.direction == CFX_BidiChar::RIGHT ||
-        (segment.direction == CFX_BidiChar::NEUTRAL &&
-         eCurrentDirection == CFX_BidiChar::RIGHT)) {
-      eCurrentDirection = CFX_BidiChar::RIGHT;
+    if (segment.direction == CFX_BidiChar::Direction::kRight ||
+        (segment.direction == CFX_BidiChar::Direction::kNeutral &&
+         eCurrentDirection == CFX_BidiChar::Direction::kRight)) {
+      eCurrentDirection = CFX_BidiChar::Direction::kRight;
       for (int m = segment.start + segment.count; m > segment.start; --m)
         AddCharInfoByRLDirection(str[m - 1], m_TempCharList[m - 1]);
     } else {
-      eCurrentDirection = CFX_BidiChar::LEFT;
+      eCurrentDirection = CFX_BidiChar::Direction::kLeft;
       for (int m = segment.start; m < segment.start + segment.count; ++m)
         AddCharInfoByLRDirection(str[m], m_TempCharList[m]);
     }
diff --git a/core/fxcrt/fx_bidi.cpp b/core/fxcrt/fx_bidi.cpp
index 48b6afa..491403b 100644
--- a/core/fxcrt/fx_bidi.cpp
+++ b/core/fxcrt/fx_bidi.cpp
@@ -12,7 +12,8 @@
 #include "third_party/base/check.h"
 
 CFX_BidiChar::CFX_BidiChar()
-    : m_CurrentSegment({0, 0, NEUTRAL}), m_LastSegment({0, 0, NEUTRAL}) {}
+    : m_CurrentSegment({0, 0, Direction::kNeutral}),
+      m_LastSegment({0, 0, Direction::kNeutral}) {}
 
 bool CFX_BidiChar::AppendChar(wchar_t wch) {
   Direction direction;
@@ -20,14 +21,14 @@
     case FX_BIDICLASS::kL:
     case FX_BIDICLASS::kAN:
     case FX_BIDICLASS::kEN:
-      direction = LEFT;
+      direction = Direction::kLeft;
       break;
     case FX_BIDICLASS::kR:
     case FX_BIDICLASS::kAL:
-      direction = RIGHT;
+      direction = Direction::kRight;
       break;
     default:
-      direction = NEUTRAL;
+      direction = Direction::kNeutral;
       break;
   }
 
@@ -40,7 +41,7 @@
 }
 
 bool CFX_BidiChar::EndChar() {
-  StartNewSegment(NEUTRAL);
+  StartNewSegment(Direction::kNeutral);
   return m_LastSegment.count > 0;
 }
 
@@ -60,15 +61,15 @@
   if (bidi.EndChar())
     m_Order.push_back(bidi.GetSegmentInfo());
 
-  size_t nR2L = std::count_if(m_Order.begin(), m_Order.end(),
-                              [](const CFX_BidiChar::Segment& seg) {
-                                return seg.direction == CFX_BidiChar::RIGHT;
-                              });
+  size_t nR2L = std::count_if(
+      m_Order.begin(), m_Order.end(), [](const CFX_BidiChar::Segment& seg) {
+        return seg.direction == CFX_BidiChar::Direction::kRight;
+      });
 
-  size_t nL2R = std::count_if(m_Order.begin(), m_Order.end(),
-                              [](const CFX_BidiChar::Segment& seg) {
-                                return seg.direction == CFX_BidiChar::LEFT;
-                              });
+  size_t nL2R = std::count_if(
+      m_Order.begin(), m_Order.end(), [](const CFX_BidiChar::Segment& seg) {
+        return seg.direction == CFX_BidiChar::Direction::kLeft;
+      });
 
   if (nR2L > 0 && nR2L >= nL2R)
     SetOverallDirectionRight();
@@ -77,13 +78,13 @@
 CFX_BidiString::~CFX_BidiString() = default;
 
 CFX_BidiChar::Direction CFX_BidiString::OverallDirection() const {
-  DCHECK(m_eOverallDirection != CFX_BidiChar::NEUTRAL);
+  DCHECK(m_eOverallDirection != CFX_BidiChar::Direction::kNeutral);
   return m_eOverallDirection;
 }
 
 void CFX_BidiString::SetOverallDirectionRight() {
-  if (m_eOverallDirection != CFX_BidiChar::RIGHT) {
+  if (m_eOverallDirection != CFX_BidiChar::Direction::kRight) {
     std::reverse(m_Order.begin(), m_Order.end());
-    m_eOverallDirection = CFX_BidiChar::RIGHT;
+    m_eOverallDirection = CFX_BidiChar::Direction::kRight;
   }
 }
diff --git a/core/fxcrt/fx_bidi.h b/core/fxcrt/fx_bidi.h
index 9bc0b17..7d7bca3 100644
--- a/core/fxcrt/fx_bidi.h
+++ b/core/fxcrt/fx_bidi.h
@@ -16,7 +16,7 @@
 // Processes characters and group them into segments based on text direction.
 class CFX_BidiChar {
  public:
-  enum Direction { NEUTRAL, LEFT, RIGHT };
+  enum class Direction { kNeutral, kLeft, kRight };
   struct Segment {
     int32_t start;        // Start position.
     int32_t count;        // Character count.
@@ -65,7 +65,7 @@
  private:
   const WideString& m_Str;
   std::vector<CFX_BidiChar::Segment> m_Order;
-  CFX_BidiChar::Direction m_eOverallDirection = CFX_BidiChar::LEFT;
+  CFX_BidiChar::Direction m_eOverallDirection = CFX_BidiChar::Direction::kLeft;
 };
 
 #endif  // CORE_FXCRT_FX_BIDI_H_
diff --git a/core/fxcrt/fx_bidi_unittest.cpp b/core/fxcrt/fx_bidi_unittest.cpp
index ad598a6..56d4554 100644
--- a/core/fxcrt/fx_bidi_unittest.cpp
+++ b/core/fxcrt/fx_bidi_unittest.cpp
@@ -18,7 +18,7 @@
   CFX_BidiChar::Segment info;
 
   info = bidi.GetSegmentInfo();
-  EXPECT_EQ(CFX_BidiChar::NEUTRAL, info.direction);
+  EXPECT_EQ(CFX_BidiChar::Direction::kNeutral, info.direction);
   EXPECT_EQ(0, info.start);
   EXPECT_EQ(0, info.count);
   EXPECT_FALSE(bidi.EndChar());
@@ -37,13 +37,13 @@
   EXPECT_FALSE(bidi.AppendChar(kLeftChar));
 
   info = bidi.GetSegmentInfo();
-  EXPECT_EQ(CFX_BidiChar::NEUTRAL, info.direction);
+  EXPECT_EQ(CFX_BidiChar::Direction::kNeutral, info.direction);
   EXPECT_EQ(0, info.start);
   EXPECT_EQ(0, info.count);
 
   EXPECT_TRUE(bidi.EndChar());
   info = bidi.GetSegmentInfo();
-  EXPECT_EQ(CFX_BidiChar::LEFT, info.direction);
+  EXPECT_EQ(CFX_BidiChar::Direction::kLeft, info.direction);
   EXPECT_EQ(0, info.start);
   EXPECT_EQ(3, info.count);
 
@@ -71,13 +71,13 @@
   EXPECT_FALSE(bidi.AppendChar(kNeutralChar));
   EXPECT_TRUE(bidi.AppendChar(kRightChar));
   info = bidi.GetSegmentInfo();
-  EXPECT_EQ(CFX_BidiChar::NEUTRAL, info.direction);
+  EXPECT_EQ(CFX_BidiChar::Direction::kNeutral, info.direction);
   EXPECT_EQ(3, info.start);
   EXPECT_EQ(4, info.count);
 
   EXPECT_TRUE(bidi.EndChar());
   info = bidi.GetSegmentInfo();
-  EXPECT_EQ(CFX_BidiChar::RIGHT, info.direction);
+  EXPECT_EQ(CFX_BidiChar::Direction::kRight, info.direction);
   EXPECT_EQ(7, info.start);
   EXPECT_EQ(1, info.count);
 
@@ -105,13 +105,13 @@
   EXPECT_FALSE(bidi.AppendChar(kRightChar));
   EXPECT_TRUE(bidi.AppendChar(kLeftChar));
   info = bidi.GetSegmentInfo();
-  EXPECT_EQ(CFX_BidiChar::RIGHT, info.direction);
+  EXPECT_EQ(CFX_BidiChar::Direction::kRight, info.direction);
   EXPECT_EQ(3, info.start);
   EXPECT_EQ(4, info.count);
 
   EXPECT_TRUE(bidi.EndChar());
   info = bidi.GetSegmentInfo();
-  EXPECT_EQ(CFX_BidiChar::LEFT, info.direction);
+  EXPECT_EQ(CFX_BidiChar::Direction::kLeft, info.direction);
   EXPECT_EQ(7, info.start);
   EXPECT_EQ(1, info.count);
 
@@ -120,7 +120,7 @@
 
 TEST(fxcrt, BidiStringEmpty) {
   CFX_BidiString bidi(L"");
-  EXPECT_EQ(CFX_BidiChar::LEFT, bidi.OverallDirection());
+  EXPECT_EQ(CFX_BidiChar::Direction::kLeft, bidi.OverallDirection());
   EXPECT_TRUE(bidi.begin() == bidi.end());
 }
 
@@ -128,26 +128,26 @@
   {
     const wchar_t str[] = {kNeutralChar, 0};
     CFX_BidiString bidi(str);
-    EXPECT_EQ(CFX_BidiChar::LEFT, bidi.OverallDirection());
+    EXPECT_EQ(CFX_BidiChar::Direction::kLeft, bidi.OverallDirection());
 
     auto it = bidi.begin();
     ASSERT_FALSE(it == bidi.end());
     EXPECT_EQ(0, it->start);
     EXPECT_EQ(1, it->count);
-    EXPECT_EQ(CFX_BidiChar::NEUTRAL, it->direction);
+    EXPECT_EQ(CFX_BidiChar::Direction::kNeutral, it->direction);
     ++it;
     EXPECT_TRUE(it == bidi.end());
   }
   {
     const wchar_t str[] = {kNeutralChar, kNeutralChar, kNeutralChar, 0};
     CFX_BidiString bidi(str);
-    EXPECT_EQ(CFX_BidiChar::LEFT, bidi.OverallDirection());
+    EXPECT_EQ(CFX_BidiChar::Direction::kLeft, bidi.OverallDirection());
 
     auto it = bidi.begin();
     ASSERT_FALSE(it == bidi.end());
     EXPECT_EQ(0, it->start);
     EXPECT_EQ(3, it->count);
-    EXPECT_EQ(CFX_BidiChar::NEUTRAL, it->direction);
+    EXPECT_EQ(CFX_BidiChar::Direction::kNeutral, it->direction);
     ++it;
     EXPECT_TRUE(it == bidi.end());
   }
@@ -157,19 +157,19 @@
   {
     const wchar_t str[] = {kLeftChar, 0};
     CFX_BidiString bidi(str);
-    EXPECT_EQ(CFX_BidiChar::LEFT, bidi.OverallDirection());
+    EXPECT_EQ(CFX_BidiChar::Direction::kLeft, bidi.OverallDirection());
 
     auto it = bidi.begin();
     ASSERT_FALSE(it == bidi.end());
     EXPECT_EQ(0, it->start);
     EXPECT_EQ(0, it->count);
-    EXPECT_EQ(CFX_BidiChar::NEUTRAL, it->direction);
+    EXPECT_EQ(CFX_BidiChar::Direction::kNeutral, it->direction);
     ASSERT_FALSE(it == bidi.end());
 
     ++it;
     EXPECT_EQ(0, it->start);
     EXPECT_EQ(1, it->count);
-    EXPECT_EQ(CFX_BidiChar::LEFT, it->direction);
+    EXPECT_EQ(CFX_BidiChar::Direction::kLeft, it->direction);
     ASSERT_FALSE(it == bidi.end());
 
     ++it;
@@ -178,19 +178,19 @@
   {
     const wchar_t str[] = {kLeftChar, kLeftChar, kLeftChar, 0};
     CFX_BidiString bidi(str);
-    EXPECT_EQ(CFX_BidiChar::LEFT, bidi.OverallDirection());
+    EXPECT_EQ(CFX_BidiChar::Direction::kLeft, bidi.OverallDirection());
 
     auto it = bidi.begin();
     ASSERT_FALSE(it == bidi.end());
     EXPECT_EQ(0, it->start);
     EXPECT_EQ(0, it->count);
-    EXPECT_EQ(CFX_BidiChar::NEUTRAL, it->direction);
+    EXPECT_EQ(CFX_BidiChar::Direction::kNeutral, it->direction);
     ASSERT_FALSE(it == bidi.end());
 
     ++it;
     EXPECT_EQ(0, it->start);
     EXPECT_EQ(3, it->count);
-    EXPECT_EQ(CFX_BidiChar::LEFT, it->direction);
+    EXPECT_EQ(CFX_BidiChar::Direction::kLeft, it->direction);
     ASSERT_FALSE(it == bidi.end());
 
     ++it;
@@ -202,19 +202,19 @@
   {
     const wchar_t str[] = {kRightChar, 0};
     CFX_BidiString bidi(str);
-    EXPECT_EQ(CFX_BidiChar::RIGHT, bidi.OverallDirection());
+    EXPECT_EQ(CFX_BidiChar::Direction::kRight, bidi.OverallDirection());
 
     auto it = bidi.begin();
     EXPECT_EQ(0, it->start);
     EXPECT_EQ(1, it->count);
-    EXPECT_EQ(CFX_BidiChar::RIGHT, it->direction);
+    EXPECT_EQ(CFX_BidiChar::Direction::kRight, it->direction);
     ASSERT_FALSE(it == bidi.end());
 
     ++it;
     ASSERT_FALSE(it == bidi.end());
     EXPECT_EQ(0, it->start);
     EXPECT_EQ(0, it->count);
-    EXPECT_EQ(CFX_BidiChar::NEUTRAL, it->direction);
+    EXPECT_EQ(CFX_BidiChar::Direction::kNeutral, it->direction);
     ASSERT_FALSE(it == bidi.end());
 
     ++it;
@@ -223,19 +223,19 @@
   {
     const wchar_t str[] = {kRightChar, kRightChar, kRightChar, 0};
     CFX_BidiString bidi(str);
-    EXPECT_EQ(CFX_BidiChar::RIGHT, bidi.OverallDirection());
+    EXPECT_EQ(CFX_BidiChar::Direction::kRight, bidi.OverallDirection());
 
     auto it = bidi.begin();
     EXPECT_EQ(0, it->start);
     EXPECT_EQ(3, it->count);
-    EXPECT_EQ(CFX_BidiChar::RIGHT, it->direction);
+    EXPECT_EQ(CFX_BidiChar::Direction::kRight, it->direction);
     ASSERT_FALSE(it == bidi.end());
 
     ++it;
     ASSERT_FALSE(it == bidi.end());
     EXPECT_EQ(0, it->start);
     EXPECT_EQ(0, it->count);
-    EXPECT_EQ(CFX_BidiChar::NEUTRAL, it->direction);
+    EXPECT_EQ(CFX_BidiChar::Direction::kNeutral, it->direction);
     ASSERT_FALSE(it == bidi.end());
 
     ++it;
@@ -246,37 +246,37 @@
 TEST(fxcrt, BidiStringLeftNeutralLeftRight) {
   const wchar_t str[] = {kLeftChar, kNeutralChar, kLeftChar, kRightChar, 0};
   CFX_BidiString bidi(str);
-  EXPECT_EQ(CFX_BidiChar::LEFT, bidi.OverallDirection());
+  EXPECT_EQ(CFX_BidiChar::Direction::kLeft, bidi.OverallDirection());
 
   auto it = bidi.begin();
   ASSERT_FALSE(it == bidi.end());
   EXPECT_EQ(0, it->start);
   EXPECT_EQ(0, it->count);
-  EXPECT_EQ(CFX_BidiChar::NEUTRAL, it->direction);
+  EXPECT_EQ(CFX_BidiChar::Direction::kNeutral, it->direction);
   ASSERT_FALSE(it == bidi.end());
 
   ++it;
   EXPECT_EQ(0, it->start);
   EXPECT_EQ(1, it->count);
-  EXPECT_EQ(CFX_BidiChar::LEFT, it->direction);
+  EXPECT_EQ(CFX_BidiChar::Direction::kLeft, it->direction);
   ASSERT_FALSE(it == bidi.end());
 
   ++it;
   EXPECT_EQ(1, it->start);
   EXPECT_EQ(1, it->count);
-  EXPECT_EQ(CFX_BidiChar::NEUTRAL, it->direction);
+  EXPECT_EQ(CFX_BidiChar::Direction::kNeutral, it->direction);
   ASSERT_FALSE(it == bidi.end());
 
   ++it;
   EXPECT_EQ(2, it->start);
   EXPECT_EQ(1, it->count);
-  EXPECT_EQ(CFX_BidiChar::LEFT, it->direction);
+  EXPECT_EQ(CFX_BidiChar::Direction::kLeft, it->direction);
   ASSERT_FALSE(it == bidi.end());
 
   ++it;
   EXPECT_EQ(3, it->start);
   EXPECT_EQ(1, it->count);
-  EXPECT_EQ(CFX_BidiChar::RIGHT, it->direction);
+  EXPECT_EQ(CFX_BidiChar::Direction::kRight, it->direction);
   ASSERT_FALSE(it == bidi.end());
 
   ++it;
@@ -286,37 +286,37 @@
 TEST(fxcrt, BidiStringRightNeutralLeftRight) {
   const wchar_t str[] = {kRightChar, kNeutralChar, kLeftChar, kRightChar, 0};
   CFX_BidiString bidi(str);
-  EXPECT_EQ(CFX_BidiChar::RIGHT, bidi.OverallDirection());
+  EXPECT_EQ(CFX_BidiChar::Direction::kRight, bidi.OverallDirection());
 
   auto it = bidi.begin();
   EXPECT_EQ(3, it->start);
   EXPECT_EQ(1, it->count);
-  EXPECT_EQ(CFX_BidiChar::RIGHT, it->direction);
+  EXPECT_EQ(CFX_BidiChar::Direction::kRight, it->direction);
   ASSERT_FALSE(it == bidi.end());
 
   ++it;
   EXPECT_EQ(2, it->start);
   EXPECT_EQ(1, it->count);
-  EXPECT_EQ(CFX_BidiChar::LEFT, it->direction);
+  EXPECT_EQ(CFX_BidiChar::Direction::kLeft, it->direction);
   ASSERT_FALSE(it == bidi.end());
 
   ++it;
   EXPECT_EQ(1, it->start);
   EXPECT_EQ(1, it->count);
-  EXPECT_EQ(CFX_BidiChar::NEUTRAL, it->direction);
+  EXPECT_EQ(CFX_BidiChar::Direction::kNeutral, it->direction);
   ASSERT_FALSE(it == bidi.end());
 
   ++it;
   EXPECT_EQ(0, it->start);
   EXPECT_EQ(1, it->count);
-  EXPECT_EQ(CFX_BidiChar::RIGHT, it->direction);
+  EXPECT_EQ(CFX_BidiChar::Direction::kRight, it->direction);
   ASSERT_FALSE(it == bidi.end());
 
   ++it;
   ASSERT_FALSE(it == bidi.end());
   EXPECT_EQ(0, it->start);
   EXPECT_EQ(0, it->count);
-  EXPECT_EQ(CFX_BidiChar::NEUTRAL, it->direction);
+  EXPECT_EQ(CFX_BidiChar::Direction::kNeutral, it->direction);
   ASSERT_FALSE(it == bidi.end());
 
   ++it;
@@ -326,39 +326,39 @@
 TEST(fxcrt, BidiStringReverse) {
   const wchar_t str[] = {kLeftChar, kNeutralChar, kRightChar, kLeftChar, 0};
   CFX_BidiString bidi(str);
-  EXPECT_EQ(CFX_BidiChar::LEFT, bidi.OverallDirection());
+  EXPECT_EQ(CFX_BidiChar::Direction::kLeft, bidi.OverallDirection());
   bidi.SetOverallDirectionRight();
 
   auto it = bidi.begin();
   ASSERT_FALSE(it == bidi.end());
   EXPECT_EQ(3, it->start);
   EXPECT_EQ(1, it->count);
-  EXPECT_EQ(CFX_BidiChar::LEFT, it->direction);
+  EXPECT_EQ(CFX_BidiChar::Direction::kLeft, it->direction);
 
   ++it;
   ASSERT_FALSE(it == bidi.end());
   EXPECT_EQ(2, it->start);
   EXPECT_EQ(1, it->count);
-  EXPECT_EQ(CFX_BidiChar::RIGHT, it->direction);
+  EXPECT_EQ(CFX_BidiChar::Direction::kRight, it->direction);
   ASSERT_FALSE(it == bidi.end());
 
   ++it;
   ASSERT_FALSE(it == bidi.end());
   EXPECT_EQ(1, it->start);
   EXPECT_EQ(1, it->count);
-  EXPECT_EQ(CFX_BidiChar::NEUTRAL, it->direction);
+  EXPECT_EQ(CFX_BidiChar::Direction::kNeutral, it->direction);
 
   ++it;
   ASSERT_FALSE(it == bidi.end());
   EXPECT_EQ(0, it->start);
   EXPECT_EQ(1, it->count);
-  EXPECT_EQ(CFX_BidiChar::LEFT, it->direction);
+  EXPECT_EQ(CFX_BidiChar::Direction::kLeft, it->direction);
 
   ++it;
   ASSERT_FALSE(it == bidi.end());
   EXPECT_EQ(0, it->start);
   EXPECT_EQ(0, it->count);
-  EXPECT_EQ(CFX_BidiChar::NEUTRAL, it->direction);
+  EXPECT_EQ(CFX_BidiChar::Direction::kNeutral, it->direction);
 
   ++it;
   EXPECT_TRUE(it == bidi.end());
