Index: core/src/fxcrt/fx_unicode.cpp |
diff --git a/core/src/fxcrt/fx_unicode.cpp b/core/src/fxcrt/fx_unicode.cpp |
index 4fd0bc58a6a8015ddb0300b24d40704446a3d223..fe97a14f46a86d9d3c5d7dbb7480303f3835b6fb 100644 |
--- a/core/src/fxcrt/fx_unicode.cpp |
+++ b/core/src/fxcrt/fx_unicode.cpp |
@@ -13,6 +13,13 @@ FX_DWORD FX_GetUnicodeProperties(FX_WCHAR wch) { |
return 0; |
} |
+#ifdef PDF_ENABLE_XFA |
+FX_BOOL FX_IsCtrlCode(FX_WCHAR ch) { |
+ FX_DWORD dwRet = (FX_GetUnicodeProperties(ch) & FX_CHARTYPEBITSMASK); |
+ return dwRet == FX_CHARTYPE_Tab || dwRet == FX_CHARTYPE_Control; |
+} |
+ |
+#endif |
FX_WCHAR FX_GetMirrorChar(FX_WCHAR wch, FX_BOOL bRTL, FX_BOOL bVertical) { |
FX_DWORD dwProps = FX_GetUnicodeProperties(wch); |
FX_DWORD dwTemp = (dwProps & 0xFF800000); |
@@ -33,3 +40,28 @@ FX_WCHAR FX_GetMirrorChar(FX_WCHAR wch, FX_BOOL bRTL, FX_BOOL bVertical) { |
} |
return wch; |
} |
+#ifdef PDF_ENABLE_XFA |
+ |
+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) { |
+ size_t idx = dwTemp >> 23; |
+ if (idx < kFXTextLayoutBidiMirrorSize) { |
+ wch = kFXTextLayoutBidiMirror[idx]; |
+ dwProps = FX_GetUnicodeProperties(wch); |
+ } |
+ } |
+ if (bVertical) { |
+ dwTemp = (dwProps & 0x007E0000); |
+ if (dwTemp < 0x007E0000) { |
+ size_t idx = dwTemp >> 17; |
+ if (idx < kFXTextLayoutVerticalMirrorSize) |
+ wch = kFXTextLayoutVerticalMirror[idx]; |
+ } |
+ } |
+ return wch; |
+} |
+#endif |