14d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Copyright 2014 PDFium Authors. All rights reserved. 24d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Use of this source code is governed by a BSD-style license that can be 34d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// found in the LICENSE file. 44d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 54d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 64d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 74d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#ifndef CORE_FXCRT_FX_EXT_H_ 84d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#define CORE_FXCRT_FX_EXT_H_ 94d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include <cctype> 114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include <cwctype> 124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include <memory> 134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fxcrt/fx_basic.h" 154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#define FX_INVALID_OFFSET static_cast<uint32_t>(-1) 174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannFX_FLOAT FXSYS_tan(FX_FLOAT a); 194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannFX_FLOAT FXSYS_logb(FX_FLOAT b, FX_FLOAT x); 204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannFX_FLOAT FXSYS_strtof(const FX_CHAR* pcsStr, 214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann int32_t iLength = -1, 224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann int32_t* pUsedLen = nullptr); 234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannFX_FLOAT FXSYS_wcstof(const FX_WCHAR* pwsStr, 244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann int32_t iLength = -1, 254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann int32_t* pUsedLen = nullptr); 264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannFX_WCHAR* FXSYS_wcsncpy(FX_WCHAR* dstStr, const FX_WCHAR* srcStr, size_t count); 274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannint32_t FXSYS_wcsnicmp(const FX_WCHAR* s1, const FX_WCHAR* s2, size_t count); 284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannint32_t FXSYS_strnicmp(const FX_CHAR* s1, const FX_CHAR* s2, size_t count); 294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmanninline bool FXSYS_islower(int32_t ch) { 314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return ch >= 'a' && ch <= 'z'; 324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmanninline bool FXSYS_isupper(int32_t ch) { 344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return ch >= 'A' && ch <= 'Z'; 354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmanninline int32_t FXSYS_tolower(int32_t ch) { 374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return ch < 'A' || ch > 'Z' ? ch : (ch + 0x20); 384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmanninline int32_t FXSYS_toupper(int32_t ch) { 404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return ch < 'a' || ch > 'z' ? ch : (ch - 0x20); 414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmanninline bool FXSYS_iswalpha(wchar_t wch) { 434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return (wch >= L'A' && wch <= L'Z') || (wch >= L'a' && wch <= L'z'); 444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmanninline bool FXSYS_iswdigit(wchar_t wch) { 464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return wch >= L'0' && wch <= L'9'; 474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmanninline bool FXSYS_iswalnum(wchar_t wch) { 494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return FXSYS_iswalpha(wch) || FXSYS_iswdigit(wch); 504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmanninline bool FXSYS_iswspace(FX_WCHAR c) { 524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return (c == 0x20) || (c == 0x0d) || (c == 0x0a) || (c == 0x09); 534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmanninline int FXSYS_toHexDigit(const FX_CHAR c) { 564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!std::isxdigit(c)) 574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return 0; 584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann char upchar = std::toupper(c); 594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return upchar > '9' ? upchar - 'A' + 10 : upchar - '0'; 604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmanninline bool FXSYS_isDecimalDigit(const FX_CHAR c) { 634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return !!std::isdigit(c); 644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmanninline bool FXSYS_isDecimalDigit(const FX_WCHAR c) { 674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return !!std::iswdigit(c); 684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmanninline int FXSYS_toDecimalDigit(const FX_CHAR c) { 714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return std::isdigit(c) ? c - '0' : 0; 724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmanninline int FXSYS_toDecimalDigit(const FX_WCHAR c) { 754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return std::iswdigit(c) ? c - L'0' : 0; 764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannFX_FLOAT FXSYS_FractionalScale(size_t scale_factor, int value); 794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannint FXSYS_FractionalScaleCount(); 804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid* FX_Random_MT_Start(uint32_t dwSeed); 824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid FX_Random_MT_Close(void* pContext); 834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannuint32_t FX_Random_MT_Generate(void* pContext); 844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid FX_Random_GenerateBase(uint32_t* pBuffer, int32_t iCount); 854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid FX_Random_GenerateMT(uint32_t* pBuffer, int32_t iCount); 864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid FX_Random_GenerateCrypto(uint32_t* pBuffer, int32_t iCount); 874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#ifdef PDF_ENABLE_XFA 894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannstruct FX_GUID { 904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann uint32_t data1; 914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann uint16_t data2; 924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann uint16_t data3; 934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann uint8_t data4[8]; 944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}; 954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid FX_GUID_CreateV4(FX_GUID* pGUID); 964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid FX_GUID_ToString(const FX_GUID* pGUID, 974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_ByteString& bsStr, 984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool bSeparator = true); 994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#endif // PDF_ENABLE_XFA 1004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 1014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#endif // CORE_FXCRT_FX_EXT_H_ 102