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 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 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 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 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