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; |