1 // Copyright 2014 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6
7 #include "core/fxcrt/fx_ucd.h"
8
FX_GetUnicodeProperties(FX_WCHAR wch)9 uint32_t FX_GetUnicodeProperties(FX_WCHAR wch) {
10 size_t idx = static_cast<size_t>(wch);
11 if (idx < kTextLayoutCodePropertiesSize)
12 return kTextLayoutCodeProperties[(uint16_t)wch];
13 return 0;
14 }
15
16 #ifdef PDF_ENABLE_XFA
FX_IsCtrlCode(FX_WCHAR ch)17 bool FX_IsCtrlCode(FX_WCHAR ch) {
18 uint32_t dwRet = (FX_GetUnicodeProperties(ch) & FX_CHARTYPEBITSMASK);
19 return dwRet == FX_CHARTYPE_Tab || dwRet == FX_CHARTYPE_Control;
20 }
21 #endif // PDF_ENABLE_XFA
22
FX_GetMirrorChar(FX_WCHAR wch,bool bRTL,bool bVertical)23 FX_WCHAR FX_GetMirrorChar(FX_WCHAR wch, bool bRTL, bool bVertical) {
24 uint32_t dwProps = FX_GetUnicodeProperties(wch);
25 uint32_t dwTemp = (dwProps & 0xFF800000);
26 if (bRTL && dwTemp < 0xFF800000) {
27 size_t idx = dwTemp >> 23;
28 if (idx < kFXTextLayoutBidiMirrorSize) {
29 wch = kFXTextLayoutBidiMirror[idx];
30 dwProps = FX_GetUnicodeProperties(wch);
31 }
32 }
33 if (bVertical) {
34 dwTemp = (dwProps & 0x007E0000);
35 if (dwTemp < 0x007E0000) {
36 size_t idx = dwTemp >> 17;
37 if (idx < kFXTextLayoutVerticalMirrorSize)
38 wch = kFXTextLayoutVerticalMirror[idx];
39 }
40 }
41 return wch;
42 }
43
44 #ifdef PDF_ENABLE_XFA
FX_GetMirrorChar(FX_WCHAR wch,uint32_t dwProps,bool bRTL,bool bVertical)45 FX_WCHAR FX_GetMirrorChar(FX_WCHAR wch,
46 uint32_t dwProps,
47 bool bRTL,
48 bool bVertical) {
49 uint32_t dwTemp = (dwProps & 0xFF800000);
50 if (bRTL && dwTemp < 0xFF800000) {
51 size_t idx = dwTemp >> 23;
52 if (idx < kFXTextLayoutBidiMirrorSize) {
53 wch = kFXTextLayoutBidiMirror[idx];
54 dwProps = FX_GetUnicodeProperties(wch);
55 }
56 }
57 if (bVertical) {
58 dwTemp = (dwProps & 0x007E0000);
59 if (dwTemp < 0x007E0000) {
60 size_t idx = dwTemp >> 17;
61 if (idx < kFXTextLayoutVerticalMirrorSize)
62 wch = kFXTextLayoutVerticalMirror[idx];
63 }
64 }
65 return wch;
66 }
67 #endif // PDF_ENABLE_XFA
68