diff options
author | Lei Zhang <thestig@chromium.org> | 2015-08-17 18:00:48 -0700 |
---|---|---|
committer | Lei Zhang <thestig@chromium.org> | 2015-08-17 18:00:48 -0700 |
commit | 2ae87d2e8ddff79d0e96aad3db97e090db21fb99 (patch) | |
tree | 9bbae4e8d6b554a4b4b12fe0cfc5a8a5b54e43b7 /core/src/fxcrt/fx_unicode.cpp | |
parent | 1d9dbd53b205b2b4d9e75a7eeb95e80837917ea3 (diff) | |
download | pdfium-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.cpp | 55 |
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; |