Reduce size of fx_bidi.cpp enum tables

Change-Id: I814ce28f979a68ee9c84e3c8a732afbe978cc747
Reviewed-on: https://pdfium-review.googlesource.com/c/48194
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fxcrt/fx_bidi.cpp b/core/fxcrt/fx_bidi.cpp
index 4106ff6..a9aa6c8 100644
--- a/core/fxcrt/fx_bidi.cpp
+++ b/core/fxcrt/fx_bidi.cpp
@@ -23,7 +23,11 @@
 constexpr int32_t kBidiMaxLevel = 61;
 #endif  // NDEBUG
 
-enum FX_BIDIWEAKSTATE {
+#undef PACK_NIBBLES
+#define PACK_NIBBLES(hi, lo) \
+  ((static_cast<uint32_t>(hi) << 4) + static_cast<uint32_t>(lo))
+
+enum FX_BIDIWEAKSTATE : uint8_t {
   FX_BWSxa = 0,
   FX_BWSxr,
   FX_BWSxl,
@@ -46,15 +50,11 @@
   FX_BWSlet
 };
 
-#undef PACK_NIBBLES
-#define PACK_NIBBLES(hi, lo) \
-  ((static_cast<uint32_t>(hi) << 4) + static_cast<uint32_t>(lo))
-
 // NOTE: Range of FX_BIDICLASS prevents encoding all possible values in this
 // manner, but the ones used manage to fit. Except that I suspect that 0xF
 // was intended to be used as a sentinel, even though it also means kRLE.
 // TODO(tsepez): pick a better representation.
-enum FX_BIDIWEAKACTION {
+enum FX_BIDIWEAKACTION : uint16_t {
   FX_BWAIX = 0x100,
   FX_BWAXX = 0x0F,
   FX_BWAxxx = 0xFF,
@@ -79,7 +79,7 @@
   FX_BWALxx = PACK_NIBBLES(FX_BIDICLASS::kL, 0x0F),
 };
 
-enum FX_BIDINEUTRALSTATE {
+enum FX_BIDINEUTRALSTATE : uint8_t {
   FX_BNSr = 0,
   FX_BNSl,
   FX_BNSrn,
@@ -88,7 +88,11 @@
   FX_BNSna
 };
 
-enum FX_BIDINEUTRALACTION {
+enum FX_BIDINEUTRALACTION : uint16_t {
+  // For placeholders in table.
+  FX_BNAZero = 0,
+
+  // Other values.
   FX_BNAnL = PACK_NIBBLES(0, FX_BIDICLASS::kL),
   FX_BNAEn = PACK_NIBBLES(FX_BIDICLASS::kAN, 0),
   FX_BNARn = PACK_NIBBLES(FX_BIDICLASS::kR, 0),
@@ -108,7 +112,7 @@
     FX_BIDICLASS::kPDF, FX_BIDICLASS::kON,
 };
 
-const int32_t gc_FX_BidiWeakStates[][10] = {
+const FX_BIDIWEAKSTATE gc_FX_BidiWeakStates[20][10] = {
     {FX_BWSao, FX_BWSxl, FX_BWSxr, FX_BWScn, FX_BWScn, FX_BWSxa, FX_BWSxa,
      FX_BWSao, FX_BWSao, FX_BWSao},
     {FX_BWSro, FX_BWSxl, FX_BWSxr, FX_BWSra, FX_BWSre, FX_BWSxa, FX_BWSxr,
@@ -151,7 +155,7 @@
      FX_BWSlo, FX_BWSlo, FX_BWSlet},
 };
 
-const int32_t gc_FX_BidiWeakActions[][10] = {
+const FX_BIDIWEAKACTION gc_FX_BidiWeakActions[20][10] = {
     {FX_BWAxxx, FX_BWAxxx, FX_BWAxxx, FX_BWAxxx, FX_BWAxxA, FX_BWAxxR,
      FX_BWAxxR, FX_BWAxxN, FX_BWAxxN, FX_BWAxxN},
     {FX_BWAxxx, FX_BWAxxx, FX_BWAxxx, FX_BWAxxx, FX_BWAxxE, FX_BWAxxR,
@@ -194,7 +198,7 @@
      FX_BWAxxL, FX_BWAxxN, FX_BWAxxN, FX_BWAxxL},
 };
 
-const int32_t gc_FX_BidiNeutralStates[][5] = {
+const FX_BIDINEUTRALSTATE gc_FX_BidiNeutralStates[6][5] = {
     {FX_BNSrn, FX_BNSl, FX_BNSr, FX_BNSr, FX_BNSr},
     {FX_BNSln, FX_BNSl, FX_BNSr, FX_BNSa, FX_BNSl},
     {FX_BNSrn, FX_BNSl, FX_BNSr, FX_BNSr, FX_BNSr},
@@ -202,12 +206,13 @@
     {FX_BNSna, FX_BNSl, FX_BNSr, FX_BNSa, FX_BNSl},
     {FX_BNSna, FX_BNSl, FX_BNSr, FX_BNSa, FX_BNSl},
 };
-const int32_t gc_FX_BidiNeutralActions[][5] = {
-    {FX_BNAIn, 0, 0, 0, 0},
-    {FX_BNAIn, 0, 0, 0, static_cast<uint32_t>(FX_BIDICLASS::kL)},
+
+const FX_BIDINEUTRALACTION gc_FX_BidiNeutralActions[6][5] = {
+    {FX_BNAIn, FX_BNAZero, FX_BNAZero, FX_BNAZero, FX_BNAZero},
+    {FX_BNAIn, FX_BNAZero, FX_BNAZero, FX_BNAZero, FX_BNAnL},
     {FX_BNAIn, FX_BNAEn, FX_BNARn, FX_BNARn, FX_BNARn},
     {FX_BNAIn, FX_BNALn, FX_BNAEn, FX_BNAEn, FX_BNALnL},
-    {FX_BNAIn, 0, 0, 0, static_cast<uint32_t>(FX_BIDICLASS::kL)},
+    {FX_BNAIn, FX_BNAZero, FX_BNAZero, FX_BNAZero, FX_BNAnL},
     {FX_BNAIn, FX_BNAEn, FX_BNARn, FX_BNARn, FX_BNAEn},
 };