summaryrefslogtreecommitdiff
path: root/core/src/fxcrt/fx_unicode.cpp
diff options
context:
space:
mode:
authorLei Zhang <thestig@chromium.org>2015-08-17 18:00:48 -0700
committerLei Zhang <thestig@chromium.org>2015-08-17 18:00:48 -0700
commit2ae87d2e8ddff79d0e96aad3db97e090db21fb99 (patch)
tree9bbae4e8d6b554a4b4b12fe0cfc5a8a5b54e43b7 /core/src/fxcrt/fx_unicode.cpp
parent1d9dbd53b205b2b4d9e75a7eeb95e80837917ea3 (diff)
downloadpdfium-2ae87d2e8ddff79d0e96aad3db97e090db21fb99.tar.xz
Clean up IFX_BidiChar
- Replace IFX_BidiChar with just CFX_BidiChar - Document implementation - Change out parameters to pointers - Remove dead code - Add an enum for bidi directions - Move several externs to a header - Add unit tests R=tsepez@chromium.org Review URL: https://codereview.chromium.org/1197643002 .
Diffstat (limited to 'core/src/fxcrt/fx_unicode.cpp')
-rw-r--r--core/src/fxcrt/fx_unicode.cpp55
1 files changed, 13 insertions, 42 deletions
diff --git a/core/src/fxcrt/fx_unicode.cpp b/core/src/fxcrt/fx_unicode.cpp
index f05aeb5efb..c7ab618200 100644
--- a/core/src/fxcrt/fx_unicode.cpp
+++ b/core/src/fxcrt/fx_unicode.cpp
@@ -6,58 +6,29 @@
#include "../../include/fxcrt/fx_ucd.h"
-extern const FX_DWORD gs_FX_TextLayout_CodeProperties[65536];
-extern const FX_WCHAR gs_FX_TextLayout_VerticalMirror[64];
-extern const FX_WCHAR gs_FX_TextLayout_BidiMirror[512];
FX_DWORD FX_GetUnicodeProperties(FX_WCHAR wch) {
- return gs_FX_TextLayout_CodeProperties[(FX_WORD)wch];
-}
-FX_BOOL FX_IsCtrlCode(FX_WCHAR ch) {
- FX_DWORD dwRet =
- (gs_FX_TextLayout_CodeProperties[(FX_WORD)ch] & FX_CHARTYPEBITSMASK);
- return dwRet == FX_CHARTYPE_Tab || dwRet == FX_CHARTYPE_Control;
-}
-FX_BOOL FX_IsRotationCode(FX_WCHAR ch) {
- return (gs_FX_TextLayout_CodeProperties[(FX_WORD)ch] & 0x8000) != 0;
-}
-FX_BOOL FX_IsCombinationChar(FX_WCHAR wch) {
- FX_DWORD dwProps =
- (gs_FX_TextLayout_CodeProperties[(FX_WORD)wch] & FX_CHARTYPEBITSMASK);
- return dwProps == FX_CHARTYPE_Combination;
-}
-FX_BOOL FX_IsBidiChar(FX_WCHAR wch) {
- FX_DWORD dwProps = gs_FX_TextLayout_CodeProperties[(FX_WORD)wch];
- int32_t iBidiCls = (dwProps & FX_BIDICLASSBITSMASK) >> FX_BIDICLASSBITS;
- return (FX_BIDICLASS_R == iBidiCls || FX_BIDICLASS_AL == iBidiCls);
+ size_t idx = static_cast<size_t>(wch);
+ if (idx < kTextLayoutCodePropertiesSize)
+ return kTextLayoutCodeProperties[(FX_WORD)wch];
+ return 0;
}
+
FX_WCHAR FX_GetMirrorChar(FX_WCHAR wch, FX_BOOL bRTL, FX_BOOL bVertical) {
- FX_DWORD dwProps = gs_FX_TextLayout_CodeProperties[(FX_WORD)wch];
+ FX_DWORD dwProps = FX_GetUnicodeProperties(wch);
FX_DWORD dwTemp = (dwProps & 0xFF800000);
if (bRTL && dwTemp < 0xFF800000) {
- wch = gs_FX_TextLayout_BidiMirror[dwTemp >> 23];
- dwProps = gs_FX_TextLayout_CodeProperties[(FX_WORD)wch];
- }
- if (bVertical) {
- dwTemp = (dwProps & 0x007E0000);
- if (dwTemp < 0x007E0000) {
- wch = gs_FX_TextLayout_VerticalMirror[dwTemp >> 17];
+ size_t idx = dwTemp >> 23;
+ if (idx < kFXTextLayoutBidiMirrorSize) {
+ wch = kFXTextLayoutBidiMirror[idx];
+ dwProps = FX_GetUnicodeProperties(wch);
}
}
- return wch;
-}
-FX_WCHAR FX_GetMirrorChar(FX_WCHAR wch,
- FX_DWORD dwProps,
- FX_BOOL bRTL,
- FX_BOOL bVertical) {
- FX_DWORD dwTemp = (dwProps & 0xFF800000);
- if (bRTL && dwTemp < 0xFF800000) {
- wch = gs_FX_TextLayout_BidiMirror[dwTemp >> 23];
- dwProps = gs_FX_TextLayout_CodeProperties[(FX_WORD)wch];
- }
if (bVertical) {
dwTemp = (dwProps & 0x007E0000);
if (dwTemp < 0x007E0000) {
- wch = gs_FX_TextLayout_VerticalMirror[dwTemp >> 17];
+ size_t idx = dwTemp >> 17;
+ if (idx < kFXTextLayoutVerticalMirrorSize)
+ wch = kFXTextLayoutVerticalMirror[idx];
}
}
return wch;