Fix some nits in fx_unicode.cpp.
- Remove an extra dummy element in |kFXTextLayoutBidiMirror|.
- Replace a 0x1ff value with |kMirrorMax|.
- Use |kMirrorMax| in FX_GetMirrorChar() and remove |kMirrorBitMask|.
- Change a check to an assert in FX_GetMirrorChar().
- Use constexpr in more places.
Change-Id: I9b89d20cb4e663467842ee39db5a8c46a7d46c71
Reviewed-on: https://pdfium-review.googlesource.com/c/48196
Commit-Queue: Lei Zhang <thestig@chromium.org>
Reviewed-by: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fxcrt/fx_unicode.cpp b/core/fxcrt/fx_unicode.cpp
index 2b49ea2..2aa33d4 100644
--- a/core/fxcrt/fx_unicode.cpp
+++ b/core/fxcrt/fx_unicode.cpp
@@ -18,19 +18,18 @@
constexpr uint16_t kMirrorBitPos = 5;
constexpr uint16_t kMirrorBitCount = 9;
-constexpr uint16_t kMirrorBitMask =
- (((1 << kMirrorBitCount) - 1) << kMirrorBitPos);
+constexpr uint16_t kMirrorMax = (1 << kMirrorBitCount) - 1;
#undef CHARPROP____
#define CHARPROP____(mirror, ct, bd, bt) \
((mirror << kMirrorBitPos) | \
(static_cast<uint16_t>(FX_BIDICLASS::bd) << kBidiClassBitPos)),
-const uint16_t kTextLayoutCodeProperties[] = {
+constexpr uint16_t kTextLayoutCodeProperties[] = {
#include "core/fxcrt/fx_ucddata.inc"
};
#undef CHARPROP____
-const size_t kTextLayoutCodePropertiesSize =
+constexpr size_t kTextLayoutCodePropertiesSize =
FX_ArraySize(kTextLayoutCodeProperties);
static_assert(kTextLayoutCodePropertiesSize == 65536, "missing characters");
@@ -58,12 +57,12 @@
#define CHARPROP____(mirror, ct, bd, bt) \
((static_cast<uint16_t>(FX_CHARTYPE::ct) << kCharTypeBitPos) | \
(static_cast<uint16_t>(FX_BREAKPROPERTY::bt) << kBreakTypeBitPos)),
-const uint16_t kExtendedTextLayoutCodeProperties[] = {
+constexpr uint16_t kExtendedTextLayoutCodeProperties[] = {
#include "core/fxcrt/fx_ucddata.inc"
};
#undef CHARPROP____
-const size_t kExtendedTextLayoutCodePropertiesSize =
+constexpr size_t kExtendedTextLayoutCodePropertiesSize =
FX_ArraySize(kExtendedTextLayoutCodeProperties);
static_assert(kExtendedTextLayoutCodePropertiesSize == 65536,
@@ -78,7 +77,7 @@
#endif // PDF_ENBABLE_XFA
-const uint16_t kFXTextLayoutBidiMirror[] = {
+constexpr uint16_t kFXTextLayoutBidiMirror[] = {
0x0029, 0x0028, 0x003E, 0x003C, 0x005D, 0x005B, 0x007D, 0x007B, 0x00BB,
0x00AB, 0x0F3B, 0x0F3A, 0x0F3D, 0x0F3C, 0x169C, 0x169B, 0x2019, 0x2018,
0x201D, 0x201C, 0x203A, 0x2039, 0x2046, 0x2045, 0x207E, 0x207D, 0x208E,
@@ -119,16 +118,16 @@
0x300C, 0x300F, 0x300E, 0x3011, 0x3010, 0x3015, 0x3014, 0x3017, 0x3016,
0x3019, 0x3018, 0x301B, 0x301A, 0xFE5A, 0xFE59, 0xFE5C, 0xFE5B, 0xFE5E,
0xFE5D, 0xFE65, 0xFE64, 0xFF09, 0xFF08, 0xFF1E, 0xFF1C, 0xFF3D, 0xFF3B,
- 0xFF5D, 0xFF5B, 0xFF60, 0xFF5F, 0xFF63, 0xFF62, 0xFFFF,
+ 0xFF5D, 0xFF5B, 0xFF60, 0xFF5F, 0xFF63, 0xFF62,
};
-const size_t kFXTextLayoutBidiMirrorSize =
+constexpr size_t kFXTextLayoutBidiMirrorSize =
FX_ArraySize(kFXTextLayoutBidiMirror);
// Check that the mirror indicies in the fx_ucddata.inc table are in bounds.
#undef CHARPROP____
-#define CHARPROP____(mirror, ct, bd, bt) \
- static_assert(mirror == 0x1ffu || mirror < kFXTextLayoutBidiMirrorSize, \
+#define CHARPROP____(mirror, ct, bd, bt) \
+ static_assert(mirror == kMirrorMax || mirror < kFXTextLayoutBidiMirrorSize, \
"Bad mirror index");
#include "core/fxcrt/fx_ucddata.inc"
#undef CHARPROP____
@@ -137,11 +136,11 @@
wchar_t FX_GetMirrorChar(wchar_t wch) {
uint16_t prop = GetUnicodeProperties(wch);
- uint16_t temp = (prop & kMirrorBitMask);
- if (temp == kMirrorBitMask)
+ size_t idx = prop >> kMirrorBitPos;
+ if (idx == kMirrorMax)
return wch;
- size_t idx = temp >> kMirrorBitPos;
- return idx < kFXTextLayoutBidiMirrorSize ? kFXTextLayoutBidiMirror[idx] : wch;
+ ASSERT(idx < kFXTextLayoutBidiMirrorSize);
+ return kFXTextLayoutBidiMirror[idx];
}
FX_BIDICLASS FX_GetBidiClass(wchar_t wch) {