Files
Yajbir Singh f1b860b25c
Some checks failed
check / markdownlint (push) Has been cancelled
check / spellchecker (push) Has been cancelled
updated
2025-12-11 19:03:17 +05:30

224 lines
6.4 KiB
C++

/*
* (c) Copyright Ascensio System SIA 2010-2023
*
* This program is a free software product. You can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License (AGPL)
* version 3 as published by the Free Software Foundation. In accordance with
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
* that Ascensio System SIA expressly excludes the warranty of non-infringement
* of any third-party rights.
*
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
*
* You can contact Ascensio System SIA at 20A-6 Ernesta Birznieka-Upish
* street, Riga, Latvia, EU, LV-1050.
*
* The interactive user interfaces in modified source and object code versions
* of the Program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU AGPL version 3.
*
* Pursuant to Section 7(b) of the License you must retain the original Product
* logo when distributing the program. Pursuant to Section 7(e) we decline to
* grant you any rights under trademark law for use of our trademarks.
*
* All the Product's GUI elements, including illustrations and icon sets, as
* well as technical writing content are licensed under the terms of the
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
*
*/
#ifndef DOC_BUILDER_CONFIG
#define DOC_BUILDER_CONFIG
#include "../common/Directory.h"
#include "../common/File.h"
#include "../common/SystemUtils.h"
#include "../xml/include/xmlutils.h"
#include "../fontengine/TextHyphen.h"
#define VALUE_TO_STRING(x) #x
#define VALUE(x) VALUE_TO_STRING(x)
namespace NSDoctRenderer
{
class CAdditionalData
{
public:
CAdditionalData() {}
virtual ~CAdditionalData() {}
virtual std::string getParam(const std::wstring& name) { return ""; }
};
class CDocBuilderParams
{
public:
CDocBuilderParams() :
m_bCheckFonts(false),
m_sWorkDir(L""),
m_bSaveWithDoctrendererMode(false),
m_sArgumentJSON(""),
m_bIsSystemFonts(true)
{
}
public:
bool m_bCheckFonts;
std::wstring m_sWorkDir;
bool m_bSaveWithDoctrendererMode;
std::string m_sArgumentJSON;
bool m_bIsSystemFonts;
std::vector<std::wstring> m_arFontDirs;
};
class CDoctRendererConfig
{
public:
std::wstring m_strSdkPath;
std::vector<std::wstring> m_arrFiles;
std::wstring m_strAllFonts;
bool m_bIsNotUseConfigAllFontsDir;
bool m_bIsUseCache;
std::wstring m_sConsoleLogFile;
std::wstring m_sErrorsLogFile;
public:
CDoctRendererConfig() : m_bIsNotUseConfigAllFontsDir(false), m_bIsUseCache(true)
{
}
private:
std::wstring private_GetFile(const std::wstring& sConfigDir, const std::wstring& sFile)
{
if (NSFile::CFileBinary::Exists(sFile) && !NSFile::CFileBinary::Exists(sConfigDir + sFile))
return sFile;
return sConfigDir + sFile;
}
void private_LoadSDK_scripts(XmlUtils::CXmlNode& oNode, std::vector<std::wstring>& files, const std::wstring& sConfigDir)
{
std::vector<XmlUtils::CXmlNode> oNodes;
if (oNode.GetNodes(L"file", oNodes))
{
size_t nCount = oNodes.size();
XmlUtils::CXmlNode node;
for (size_t i = 0; i < nCount; ++i)
{
files.push_back(private_GetFile(sConfigDir, oNodes[i].GetText()));
}
}
}
public:
void SetAllFontsExternal(const std::wstring& sFilePath)
{
m_strAllFonts = private_GetFile(NSFile::GetProcessDirectory() + L"/", sFilePath);
m_bIsNotUseConfigAllFontsDir = true;
}
void Parse(const std::wstring& sWorkDir)
{
m_arrFiles.clear();
std::wstring sConfigDir = sWorkDir + L"/";
std::wstring sConfigPath = sConfigDir + L"DoctRenderer.config";
XmlUtils::CXmlNode oNode;
if (oNode.FromXmlFile(sConfigPath))
{
std::vector<XmlUtils::CXmlNode> oNodes;
if (oNode.GetNodes(L"file", oNodes))
{
size_t nCount = oNodes.size();
XmlUtils::CXmlNode node;
for (size_t i = 0; i < nCount; ++i)
{
m_arrFiles.push_back(private_GetFile(sConfigDir, oNodes[i].GetText()));
}
}
XmlUtils::CXmlNode oNodeDict;
if (oNode.GetNode(L"dictionaries", oNodeDict))
{
NSHyphen::CEngine::Init(private_GetFile(sConfigDir, oNodeDict.GetText()));
}
if (!m_bIsNotUseConfigAllFontsDir)
{
std::wstring sAllFontsPath = oNode.ReadNodeText(L"allfonts");
if (!sAllFontsPath.empty())
{
if (NSFile::CFileBinary::Exists(sConfigDir + sAllFontsPath))
m_strAllFonts = sConfigDir + sAllFontsPath;
else if (NSFile::CFileBinary::Exists(sAllFontsPath))
m_strAllFonts = sAllFontsPath;
else
{
std::wstring sAllFontsDir = NSFile::GetDirectoryName(sAllFontsPath);
if (NSDirectory::Exists(sConfigDir + sAllFontsDir))
m_strAllFonts = sConfigDir + sAllFontsPath;
else
m_strAllFonts = sAllFontsPath;
}
// на папку может не быть прав
if (!NSFile::CFileBinary::Exists(m_strAllFonts))
{
FILE* pFileNative = NSFile::CFileBinary::OpenFileNative(m_strAllFonts, L"wb");
if (!pFileNative)
{
std::wstring sAppDir = NSSystemUtils::GetAppDataDir();
if (NSDirectory::CreateDirectory(sAppDir + L"/docbuilder"))
{
m_strAllFonts = sAppDir + L"/docbuilder/AllFonts.js";
}
}
else
{
fclose(pFileNative);
NSFile::CFileBinary::Remove(m_strAllFonts);
}
}
}
}
}
m_strSdkPath = oNode.ReadNodeText(L"sdkjs");
if (!m_strSdkPath.empty())
{
if (0 == m_strSdkPath.find(L"./") || !NSDirectory::Exists(m_strSdkPath))
m_strSdkPath = sConfigDir + m_strSdkPath;
}
m_sConsoleLogFile = oNode.ReadNodeText(L"LogFileConsoleLog");
m_sErrorsLogFile = oNode.ReadNodeText(L"LogFileErrors");
if (!m_sConsoleLogFile.empty())
m_sConsoleLogFile = private_GetFile(sConfigDir, m_sConsoleLogFile);
if (!m_sErrorsLogFile.empty())
m_sErrorsLogFile = private_GetFile(sConfigDir, m_sErrorsLogFile);
}
char* GetVersion()
{
std::string sVersion = VALUE(INTVER);
size_t sSrcLen = sVersion.size();
if (sSrcLen == 0)
return NULL;
char* sRet = new char[sSrcLen + 1];
memcpy(sRet, sVersion.c_str(), sSrcLen);
sRet[sSrcLen] = '\0';
return sRet;
}
};
}
#endif // DOC_BUILDER_CONFIG