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