• 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/include/fxcrt/fx_ucd.h"
8 
FX_GetUnicodeProperties(FX_WCHAR wch)9 FX_DWORD FX_GetUnicodeProperties(FX_WCHAR wch) {
10   size_t idx = static_cast<size_t>(wch);
11   if (idx < kTextLayoutCodePropertiesSize)
12     return kTextLayoutCodeProperties[(FX_WORD)wch];
13   return 0;
14 }
15 
16 #ifdef PDF_ENABLE_XFA
FX_IsCtrlCode(FX_WCHAR ch)17 FX_BOOL FX_IsCtrlCode(FX_WCHAR ch) {
18   FX_DWORD 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,FX_BOOL bRTL,FX_BOOL bVertical)23 FX_WCHAR FX_GetMirrorChar(FX_WCHAR wch, FX_BOOL bRTL, FX_BOOL bVertical) {
24   FX_DWORD dwProps = FX_GetUnicodeProperties(wch);
25   FX_DWORD 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,FX_DWORD dwProps,FX_BOOL bRTL,FX_BOOL bVertical)45 FX_WCHAR FX_GetMirrorChar(FX_WCHAR wch,
46                           FX_DWORD dwProps,
47                           FX_BOOL bRTL,
48                           FX_BOOL bVertical) {
49   FX_DWORD 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