ImagingTools Core SDK
CSdlTools.h
1// SPDX-License-Identifier: LGPL-2.1-or-later OR GPL-2.0-or-later OR GPL-3.0-or-later OR LicenseRef-ImtCore-Commercial
2#pragma once
3
4// Qt includes
5#include <QtCore/QSet>
6
7// ACF includes
8#include <icomp/TReferenceMember.h>
9#include <iprm/IOptionsManager.h>
10
11// ImtCore includes
12#include <imtsdl/CSdlUnion.h>
13#include <imtsdl/CSdlRequest.h>
14#include <imtsdl/ISdlProcessArgumentsParser.h>
15#include <imtsdl/ISdlTypeListProvider.h>
16#include <imtsdl/ISdlEnumListProvider.h>
17#include <imtsdl/ISdlUnionListProvider.h>
18
19class QTextStream;
20
21namespace iprm
22{
23class IParamsSet;
24}
25
26
27namespace imtsdl
28{
29
30
31class ISdlProcessArgumentsParser;
32
33
36{
37public:
38 // static variables
43 static QString s_sdlGlobalPrefix;
44
45public:
46 typedef icomp::TReferenceMember<iprm::IParamsSet> SchemaParamsCompPtr;
47 typedef icomp::TReferenceMember<ISdlProcessArgumentsParser> ArgumentParserCompPtr;
48
49 static void WrapTypeToList(QString& text);
50
51 [[nodiscard]] static QString ConvertTypeWithNamespace(
52 const CSdlField& sdlField,
53 const QString& relatedNamespace,
54 const ISdlTypeListProvider& listProvider,
55 const ISdlEnumListProvider& enumProvider,
56 const ISdlUnionListProvider& unionProvider,
57 bool* isCustomPtr = nullptr,
58 bool* isComplexPtr = nullptr,
59 bool* isArrayPtr = nullptr,
60 bool* isEnumPtr = nullptr,
61 bool* isUnionPtr = nullptr);
62
63 [[nodiscard]] static QString OptListConvertTypeWithNamespace(
64 const CSdlField& sdlField,
65 const QString& relatedNamespace,
66 const ISdlTypeListProvider& listProvider,
67 const ISdlEnumListProvider& enumProvider,
68 const ISdlUnionListProvider& unionProvider,
69 bool listWrap = false,
70 bool* isCustomPtr = nullptr,
71 bool* isComplexPtr = nullptr,
72 bool* isArrayPtr = nullptr,
73 bool* isEnumPtr = nullptr,
74 bool* isUnionPtr = nullptr);
75
76 [[nodiscard]] static QString ResolveRelativePath(const QString& path, const QStringList& lookupPaths);
77
78 static QString ConvertType(const CSdlField& sdlField, bool* isCustomPtr = nullptr, bool* isComplexPtr = nullptr, bool* isArrayPtr = nullptr);
79 static QString ConvertType(const QString& sdlTypeName, bool* isCustomPtr = nullptr, bool* isComplexPtr = nullptr);
80 static QString ConvertTypeOrEnum(const CSdlField& sdlField, const SdlEnumList& enumList, bool* isCustomPtr = nullptr, bool* isComplexPtr = nullptr, bool* isArrayPtr = nullptr, bool* isEnumPtr = nullptr);
82 static QString ConvertTypeOrEnumOrUnion(const CSdlField& sdlField, const SdlEnumList& enumList, const SdlUnionList& unionList, bool* isCustomPtr = nullptr, bool* isComplexPtr = nullptr, bool* isArrayPtr = nullptr, bool* isEnumPtr = nullptr, bool* isUnion = nullptr);
83
84 static QString QmlConvertType(const QString& sdlTypeName, bool* isCustomPtr = nullptr);
85
86 static void FeedStream(QTextStream& stream, uint lines = 1, bool flush = true);
87 static void FeedLineHorizontally(QString& line, uint indents = 1, char indentDelimiter = '\t');
88 static void FeedStreamHorizontally(QTextStream& stream, uint indents = 1, char indentDelimiter = '\t');
89
90 [[nodiscard]] static QString GetCapitalizedValue(const QString& inputValue);
91 [[nodiscard]] static QString GetDecapitalizedValue(const QString& inputValue);
92 [[nodiscard]] static bool IsTypeHasFundamentalTypes(const CSdlType& sdlType, QSet<QString>* foundTypesPtr = nullptr);
93 [[nodiscard]] static bool IsTypeHasFundamentalTypes(const CSdlRequest& sdlRequest, QSet<QString>* foundTypesPtr = nullptr);
94 [[nodiscard]] static bool IsTypeHasNonFundamentalTypes(const CSdlType& sdlType, QSet<QString>* foundTypesPtr = nullptr);
95 [[nodiscard]] static bool IsTypeHasNonFundamentalTypes(const CSdlRequest& sdlRequest, QSet<QString>* foundTypesPtr = nullptr);
96 [[nodiscard]] static QString GetFromVariantConversionString(const CSdlField& sdlField);
97
98 [[nodiscard]] static QString GetFromVariantConversionStringExt(const CSdlField& sdlField, bool singleValue = false);
99 [[nodiscard]] static bool EnsureFieldHasValidType(const CSdlField& sdlField, const SdlTypeList& typeList, const SdlEnumList& enumList, const SdlUnionList& unionList);
100 [[nodiscard]] static bool GetSdlTypeForField(const CSdlField& sdlField, const SdlTypeList& typeList, CSdlType& sdlType);
101 [[nodiscard]] static bool GetSdlEnumForField(const CSdlField& sdlField, const SdlEnumList& enumList, CSdlEnum& sdlEnum);
102 [[nodiscard]] static bool GetSdlUnionForField(const CSdlField& sdlField, const SdlUnionList& unionList, CSdlUnion& sdlUnion);
104 [[nodiscard]] static std::shared_ptr<CSdlEntryBase> GetSdlTypeOrEnumOrUnionForField(const CSdlField& sdlField, const SdlTypeList& typeList, const SdlEnumList& enumList, const SdlUnionList& unionList);
105
106 [[nodiscard]] static std::shared_ptr<CSdlEntryBase> FindEntryByName(const QString& entryName, const SdlTypeList& typeList, const SdlEnumList& enumList = SdlEnumList(), const SdlUnionList& unionList = SdlUnionList());
107
108 [[nodiscard]] static QString GetNamespaceAcceptableString(const QString& originalText);
109 [[nodiscard]] static QString GetFileSystemAcceptableEntryPath(const QString& originalText);
110 [[nodiscard]] static QString BuildNamespaceFromComponents(const QString& schemaNamespace, const QString& schemaName, const QString& versionName);
111 [[nodiscard]] static QString BuildNamespaceFromParams(const iprm::IParamsSet& schemaParams, bool addVersion = true, bool addPrefix = false);
112 [[nodiscard]] static QString BuildQmlImportDeclarationFromParams(const iprm::IParamsSet& schemaParams, const QString& suffix, bool addVersion = true);
113 [[nodiscard]] static QString GetNamespaceFromParamsOrArguments(
114 const SchemaParamsCompPtr& schemaParamsCompPtr,
115 const ArgumentParserCompPtr& argumentParamsCompPtr, bool addVersion = true);
116 [[nodiscard]] static QString GetNamespaceFromParamsOrArguments(
117 const iprm::IParamsSet* schemaParamsPtr,
118 const ISdlProcessArgumentsParser* argumentParamsPtr, bool addVersion = true);
119
121 [[nodiscard]] static QMap<QString/*type*/, QString/*path*/> CalculateTargetCppFilesFromSchemaParams(const iprm::IParamsSet& schemaParams, const ISdlProcessArgumentsParser& argumentParser, bool relativePath = false);
122
124 [[nodiscard]] static QString GetCompleteOutputPath(const iprm::IParamsSet& schemaParams, const ISdlProcessArgumentsParser& argumentParser, bool cleanPath, bool cppPath);
125 [[nodiscard]] static QString GetCompleteOutputPath(const icomp::TReferenceMember<iprm::IParamsSet>& schemaParamsCompPtr, const ISdlProcessArgumentsParser& argumentParser, bool cleanPath, bool cppPath);
126
128 [[nodiscard]] static QString GetTempOutputPathFromParams(const iprm::IParamsSet* paramsPtr, const QString& fallbackPath = QString());
129
130 [[nodiscard]] static QString ProcessTemplateString(const iprm::IParamsSet& schemaParams, const QString& templateString, const QString& outputDirPath);
131 [[nodiscard]] static bool UpdateTypeInfo(CSdlEntryBase& sdlEntry, const iprm::IParamsSet* schemaParamsPtr, const imtsdl::ISdlProcessArgumentsParser* argumentParserPtr);
132
133 [[nodiscard]] static QStringList GetAutoJoinedCppFilePaths(const iprm::IParamsSet& schemaParams, const ISdlProcessArgumentsParser& argParser);
134 [[nodiscard]] static QString GetQmlModuleNameFromParamsOrArguments(
135 const iprm::IParamsSet* schemaParamsPtr,
136 const imtsdl::ISdlProcessArgumentsParser* argumentParamsPtr);
137 [[nodiscard]] static QString GetQmlModuleNameFromParamsOrArguments(
138 const SchemaParamsCompPtr& schemaParamsCompPtr,
139 const ArgumentParserCompPtr& argumentParamsCompPtr);
140
141 [[nodiscard]] static QString GetAutoDefinedQmlBasePath(const iprm::IParamsSet& schemaParams, const QString& baseDirPath);
142 [[nodiscard]] static QString GetAutoDefinedQmlQrcFilePath(const iprm::IParamsSet& schemaParamsCompPtr, const QString& baseDirPath);
143
144 [[nodiscard]] static QString GetEscapedNamespace(const QString& aNamespace, const QString& relatedNamespace);
145
146 static void GenerateListTempValueCode(QTextStream& stream, const CSdlField& sdlField, QString& tempVariableName, uint indents = 1);
147
148 static void PrintFiles(const QString& filePath, const QStringList& files, const iprm::IOptionsManager& depsList);
149 static void PrintFiles(std::ostream& outStream, const QStringList& files, imtsdl::ISdlProcessArgumentsParser::GeneratorType projectCodeGenerator = imtsdl::ISdlProcessArgumentsParser::GT_CMAKE);
150
151 [[nodiscard]] static QString GetTypeVersion(const CSdlEntryBase& sdlType);
152
153 [[nodiscard]] static IncludeDirective CreateCxxDirective(const QString& path);
154 [[nodiscard]] static IncludeDirective CreateQtDirective(const QString& path);
155 [[nodiscard]] static IncludeDirective CreateAcfDirective(const QString& path);
156 [[nodiscard]] static IncludeDirective CreateImtDirective(const QString& path);
157 [[nodiscard]] static IncludeDirective CreateCustomDirective(const QString& path);
158
159private:
160 [[nodiscard]] static QMap<QString/*type*/, QString/*path*/> CalculateTargetCppFilesFromSchemaParams(const iprm::IParamsSet& schemaParams, const QString& baseDirPath, const QString& defaultName = QString());
161
162};
163
164
165} // namespace imtsdl
static QString ConvertTypeOrEnumOrUnion(const CSdlField &sdlField, const SdlEnumList &enumList, const SdlUnionList &unionList, bool *isCustomPtr=nullptr, bool *isComplexPtr=nullptr, bool *isArrayPtr=nullptr, bool *isEnumPtr=nullptr, bool *isUnion=nullptr)
static std::shared_ptr< CSdlEntryBase > GetSdlTypeOrEnumOrUnionForField(const CSdlField &sdlField, const SdlTypeList &typeList, const SdlEnumList &enumList, const SdlUnionList &unionList)
static QMap< QString, QString > CalculateTargetCppFilesFromSchemaParams(const iprm::IParamsSet &schemaParams, const ISdlProcessArgumentsParser &argumentParser, bool relativePath=false)
static QString GetCompleteOutputPath(const iprm::IParamsSet &schemaParams, const ISdlProcessArgumentsParser &argumentParser, bool cleanPath, bool cppPath)
resolves a complete output path from schema params and template(if enabled) if template is not enable...
static QString GetTempOutputPathFromParams(const iprm::IParamsSet *paramsPtr, const QString &fallbackPath=QString())
extracts a temp path from paramsPtr ant returns it on successfull, returns fallbackPath otherwise
static QString s_sdlGlobalPrefix
Defines an SDL scheme namespace prefix.
Definition CSdlTools.h:43