Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1012)

Unified Diff: core/src/fxcrt/fx_unicode.cpp

Issue 1423103002: XFA: Manual merge of Clean up IFX_BidiChar (Closed) Base URL: https://pdfium.googlesource.com/pdfium@xfa
Patch Set: address comments Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « core/src/fxcrt/fx_bidi_unittest.cpp ('k') | pdfium.gyp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: core/src/fxcrt/fx_unicode.cpp
diff --git a/core/src/fxcrt/fx_unicode.cpp b/core/src/fxcrt/fx_unicode.cpp
index 67ff009513ec4c6fb993a9893d7bab08ffbe0b81..105301e0a87d49b096683e1106406bb6bf5c619e 100644
--- a/core/src/fxcrt/fx_unicode.cpp
+++ b/core/src/fxcrt/fx_unicode.cpp
@@ -7,54 +7,56 @@
#include "../../include/fxcrt/fx_ucd.h"
FX_DWORD FX_GetUnicodeProperties(FX_WCHAR wch) {
- return kTextLayoutCodeProperties[(FX_WORD)wch];
+ size_t idx = static_cast<size_t>(wch);
+ if (idx < kTextLayoutCodePropertiesSize)
+ return kTextLayoutCodeProperties[(FX_WORD)wch];
+ return 0;
}
+
FX_BOOL FX_IsCtrlCode(FX_WCHAR ch) {
- FX_DWORD dwRet =
- (kTextLayoutCodeProperties[(FX_WORD)ch] & FX_CHARTYPEBITSMASK);
+ FX_DWORD dwRet = (FX_GetUnicodeProperties(ch) & FX_CHARTYPEBITSMASK);
return dwRet == FX_CHARTYPE_Tab || dwRet == FX_CHARTYPE_Control;
}
-FX_BOOL FX_IsRotationCode(FX_WCHAR ch) {
- return (kTextLayoutCodeProperties[(FX_WORD)ch] & 0x8000) != 0;
-}
-FX_BOOL FX_IsCombinationChar(FX_WCHAR wch) {
- FX_DWORD dwProps =
- (kTextLayoutCodeProperties[(FX_WORD)wch] & FX_CHARTYPEBITSMASK);
- return dwProps == FX_CHARTYPE_Combination;
-}
-FX_BOOL FX_IsBidiChar(FX_WCHAR wch) {
- FX_DWORD dwProps = kTextLayoutCodeProperties[(FX_WORD)wch];
- int32_t iBidiCls = (dwProps & FX_BIDICLASSBITSMASK) >> FX_BIDICLASSBITS;
- return (FX_BIDICLASS_R == iBidiCls || FX_BIDICLASS_AL == iBidiCls);
-}
+
FX_WCHAR FX_GetMirrorChar(FX_WCHAR wch, FX_BOOL bRTL, FX_BOOL bVertical) {
- FX_DWORD dwProps = kTextLayoutCodeProperties[(FX_WORD)wch];
+ FX_DWORD dwProps = FX_GetUnicodeProperties(wch);
FX_DWORD dwTemp = (dwProps & 0xFF800000);
if (bRTL && dwTemp < 0xFF800000) {
- wch = kFXTextLayoutBidiMirror[dwTemp >> 23];
- dwProps = kTextLayoutCodeProperties[(FX_WORD)wch];
+ size_t idx = dwTemp >> 23;
+ if (idx < kFXTextLayoutBidiMirrorSize) {
+ wch = kFXTextLayoutBidiMirror[idx];
+ dwProps = FX_GetUnicodeProperties(wch);
+ }
}
if (bVertical) {
dwTemp = (dwProps & 0x007E0000);
if (dwTemp < 0x007E0000) {
- wch = kFXTextLayoutVerticalMirror[dwTemp >> 17];
+ size_t idx = dwTemp >> 17;
+ if (idx < kFXTextLayoutVerticalMirrorSize)
+ wch = kFXTextLayoutVerticalMirror[idx];
}
}
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 = kFXTextLayoutBidiMirror[dwTemp >> 23];
- dwProps = kTextLayoutCodeProperties[(FX_WORD)wch];
+ size_t idx = dwTemp >> 23;
+ if (idx < kFXTextLayoutBidiMirrorSize) {
+ wch = kFXTextLayoutBidiMirror[idx];
+ dwProps = FX_GetUnicodeProperties(wch);
+ }
}
if (bVertical) {
dwTemp = (dwProps & 0x007E0000);
if (dwTemp < 0x007E0000) {
- wch = kFXTextLayoutVerticalMirror[dwTemp >> 17];
+ size_t idx = dwTemp >> 17;
+ if (idx < kFXTextLayoutVerticalMirrorSize)
+ wch = kFXTextLayoutVerticalMirror[idx];
}
}
return wch;
« no previous file with comments | « core/src/fxcrt/fx_bidi_unittest.cpp ('k') | pdfium.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698