| Index: core/src/fxcrt/fx_unicode.cpp
|
| diff --git a/core/src/fxcrt/fx_unicode.cpp b/core/src/fxcrt/fx_unicode.cpp
|
| index f05aeb5efbe933dbe7efdf0d519877900ed0bdb0..c7ab618200debe2702810979248c267c4615801e 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;
|
|
|