• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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