Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
rcc_p.h
Go to the documentation of this file.
1// Copyright (C) 2018 The Qt Company Ltd.
2// Copyright (C) 2018 Intel Corporation.
3// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
4// Qt-Security score:significant reason:default
5
6//
7// W A R N I N G
8// -------------
9//
10// This file is not part of the Qt API. It exists for the convenience
11// of Qt Designer. This header
12// file may change from version to version without notice, or even be removed.
13//
14// We mean it.
15// Note: This is a copy of qtbase/src/tools/rcc/rcc.h.
16
17#ifndef RCC_H
18#define RCC_H
19
20#include <qstringlist.h>
21#include <qhash.h>
22#include <qstring.h>
23
24typedef struct ZSTD_CCtx_s ZSTD_CCtx;
25
26QT_BEGIN_NAMESPACE
27
28class RCCFileInfo;
29class QIODevice;
30class QTextStream;
31
32
34{
35 RCCResourceLibrary(const RCCResourceLibrary &);
36 RCCResourceLibrary &operator=(const RCCResourceLibrary &);
37
38public:
39 RCCResourceLibrary(quint8 formatVersion);
41
42 bool output(QIODevice &outDevice, QIODevice &tempDevice, QIODevice &errorDevice);
43
44 bool readFiles(bool listMode, QIODevice &errorDevice);
45
47 void setFormat(Format f) { m_format = f; }
48 Format format() const { return m_format; }
49
50 void setInputFiles(const QStringList &files) { m_fileNames = files; }
51 QStringList inputFiles() const { return m_fileNames; }
52
54
55 // Return a map of resource identifier (':/newPrefix/images/p1.png') to file.
56 typedef QHash<QString, QString> ResourceDataFileMap;
58
59 void setVerbose(bool b) { m_verbose = b; }
60 bool verbose() const { return m_verbose; }
61
62 void setInitName(const QString &name) { m_initName = name; }
63 QString initName() const { return m_initName; }
64
65 void setOutputName(const QString &name) { m_outputName = name; }
66 QString outputName() const { return m_outputName; }
67
71
72 Best = 99,
73 None = -1
74 };
75
76 static CompressionAlgorithm parseCompressionAlgorithm(QStringView algo, QString *errorMsg);
77 void setCompressionAlgorithm(CompressionAlgorithm algo) { m_compressionAlgo = algo; }
78 CompressionAlgorithm compressionAlgorithm() const { return m_compressionAlgo; }
79
80 static int parseCompressionLevel(CompressionAlgorithm algo, const QString &level, QString *errorMsg);
81 void setCompressLevel(int c) { m_compressLevel = c; }
82 int compressLevel() const { return m_compressLevel; }
83
84 void setCompressThreshold(int t) { m_compressThreshold = t; }
85 int compressThreshold() const { return m_compressThreshold; }
86
87 void setResourceRoot(const QString &root) { m_resourceRoot = root; }
88 QString resourceRoot() const { return m_resourceRoot; }
89
90 void setUseNameSpace(bool v) { m_useNameSpace = v; }
91 bool useNameSpace() const { return m_useNameSpace; }
92
93 QStringList failedResources() const { return m_failedResources; }
94
95 int formatVersion() const { return m_formatVersion; }
96
97 void setNoZstd(bool v) { m_noZstd = v; }
98 bool noZstd() const { return m_noZstd; }
99
100private:
101 struct Strings {
102 Strings();
103 const QString TAG_RCC;
104 const QString TAG_RESOURCE;
105 const QString TAG_FILE;
106 const QString ATTRIBUTE_LANG;
107 const QString ATTRIBUTE_PREFIX;
108 const QString ATTRIBUTE_ALIAS;
109 const QString ATTRIBUTE_EMPTY;
110 const QString ATTRIBUTE_THRESHOLD;
111 const QString ATTRIBUTE_COMPRESS;
112 const QString ATTRIBUTE_COMPRESSALGO;
113 };
114 friend class RCCFileInfo;
115 void reset();
116 bool addFile(const QString &alias, RCCFileInfo file);
117 bool interpretResourceFile(QIODevice *inputDevice, const QString &file,
118 QString currentPath = QString(), bool listMode = false);
119 bool writeHeader();
120 bool writeDataBlobs();
121 bool writeDataNames();
122 bool writeDataStructure();
123 bool writeInitializer();
124 void writeMangleNamespaceFunction(const QByteArray &name);
125 void writeAddNamespaceFunction(const QByteArray &name);
126 void writeDecimal(int value);
127 void writeHex(quint8 number);
128 void write2HexDigits(quint8 number);
129 void writeNumber2(quint16 number);
130 void writeNumber4(quint32 number);
131 void writeNumber8(quint64 number);
132 void writeChar(char c) { m_out.append(c); }
133 void writeByteArray(const QByteArray &);
134 void write(const char *, int len);
135 void writeString(const char *s) { write(s, static_cast<int>(strlen(s))); }
136
137#if QT_CONFIG(zstd)
139#endif
140
141 const Strings m_strings;
142 RCCFileInfo *m_root;
143 QStringList m_fileNames;
144 QString m_resourceRoot;
145 QString m_initName;
146 QString m_outputName;
147 Format m_format;
148 bool m_verbose;
149 CompressionAlgorithm m_compressionAlgo;
150 int m_compressLevel;
151 int m_compressThreshold;
152 int m_treeOffset;
153 int m_namesOffset;
154 int m_dataOffset;
155 quint32 m_overallFlags;
156 bool m_useNameSpace;
157 QStringList m_failedResources;
158 QIODevice *m_errorDevice;
159 QIODevice *m_outDevice;
160 QByteArray m_out;
161 quint8 m_formatVersion;
162 bool m_noZstd;
163};
164
165QT_END_NAMESPACE
166
167#endif // RCC_H
\inmodule QtCore
Definition qdir.h:22
Definition qfile.h:71
\inmodule QtCore
Definition qhash.h:844
int m_flags
Definition rcc.cpp:121
bool m_isEmpty
Definition rcc.cpp:133
int m_compressLevel
Definition rcc.cpp:130
QFileInfo m_fileInfo
Definition rcc.cpp:125
@ CompressedZstd
Definition rcc.cpp:78
@ Compressed
Definition rcc.cpp:76
@ Directory
Definition rcc.cpp:77
@ NoFlags
Definition rcc.cpp:75
RCCFileInfo(const QString &name, const QFileInfo &fileInfo, QLocale::Language language, QLocale::Territory territory, uint flags, RCCResourceLibrary::CompressionAlgorithm compressAlgo, int compressLevel, int compressThreshold, bool noZstd, bool isEmpty)
int m_compressThreshold
Definition rcc.cpp:131
RCCFileInfo()=default
RCCFileInfo & operator=(RCCFileInfo &&other)=delete
bool m_noZstd
Definition rcc.cpp:132
RCCFileInfo & operator=(const RCCFileInfo &)=delete
RCCFileInfo * m_parent
Definition rcc.cpp:126
qint64 m_childOffset
Definition rcc.cpp:137
RCCResourceLibrary::CompressionAlgorithm m_compressAlgo
Definition rcc.cpp:129
qint64 m_nameOffset
Definition rcc.cpp:135
qint64 writeDataName(RCCResourceLibrary &, qint64 offset)
Definition rcc.cpp:422
RCCFileInfo(RCCFileInfo &&)=default
QLocale::Language m_language
Definition rcc.cpp:122
qint64 writeDataBlob(RCCResourceLibrary &lib, qint64 offset, QString *errorMessage)
Definition rcc.cpp:221
QString m_name
Definition rcc.cpp:124
QString resourceName() const
Definition rcc.cpp:167
qint64 m_dataOffset
Definition rcc.cpp:136
~RCCFileInfo()
Definition rcc.cpp:162
void writeDataInfo(RCCResourceLibrary &lib)
Definition rcc.cpp:176
RCCFileInfo(const RCCFileInfo &)=delete
QLocale::Territory m_territory
Definition rcc.cpp:123
QMultiHash< QString, RCCFileInfo * > m_children
Definition rcc.cpp:127
RCCResourceLibrary(quint8 formatVersion)
Definition rcc.cpp:495
ResourceDataFileMap resourceDataFileMap() const
Definition rcc.cpp:916
bool readFiles(bool listMode, QIODevice &errorDevice)
Definition rcc.cpp:837
QStringList failedResources() const
Definition rcc.h:82
bool noZstd() const
Definition rcc.h:87
bool verbose() const
Definition rcc.h:49
QStringList dataFiles() const
Definition rcc.cpp:878
int formatVersion() const
Definition rcc.h:84
Format format() const
Definition rcc.h:37
QStringList inputFiles() const
Definition rcc.h:40
void setNoZstd(bool v)
Definition rcc.h:86
void setResourceRoot(const QString &root)
Definition rcc.h:76
static int parseCompressionLevel(CompressionAlgorithm algo, const QString &level, QString *errorMsg)
Definition rcc.cpp:947
bool useNameSpace() const
Definition rcc.h:80
int compressLevel() const
Definition rcc.h:71
bool output(QIODevice &outDevice, QIODevice &tempDevice, QIODevice &errorDevice)
Definition rcc.cpp:973
void setVerbose(bool b)
Definition rcc.h:48
void setInitName(const QString &name)
Definition rcc.h:51
void setCompressionAlgorithm(CompressionAlgorithm algo)
Definition rcc.h:66
int compressThreshold() const
Definition rcc.h:74
void setCompressThreshold(int t)
Definition rcc.h:73
CompressionAlgorithm compressionAlgorithm() const
Definition rcc.h:67
void setCompressLevel(int c)
Definition rcc.h:70
void setFormat(Format f)
Definition rcc.h:36
QString resourceRoot() const
Definition rcc.h:77
void setOutputName(const QString &name)
Definition rcc.h:54
QHash< QString, QString > ResourceDataFileMap
Definition rcc_p.h:56
QString initName() const
Definition rcc.h:52
QString outputName() const
Definition rcc.h:55
void setUseNameSpace(bool v)
Definition rcc.h:79
void setInputFiles(const QStringList &files)
Definition rcc.h:39
static CompressionAlgorithm parseCompressionAlgorithm(QStringView algo, QString *errorMsg)
Definition rcc.cpp:924
#define qPrintable(string)
Definition qstring.h:1705
#define QStringLiteral(str)
Definition qstring.h:1847
static bool parseBoolean(QStringView value, QString *errorMsg)
Definition rcc.cpp:527
static const char hexDigits[]
Definition rcc.cpp:1051
RCCXmlTag
Definition rcc.cpp:520
@ RccTag
Definition rcc.cpp:521
@ ResourceTag
Definition rcc.cpp:522
@ FileTag
Definition rcc.cpp:523
@ CONSTANT_USENAMESPACE
Definition rcc.cpp:34
@ CONSTANT_ZSTDCOMPRESSLEVEL_CHECK
Definition rcc.cpp:36
@ CONSTANT_COMPRESSLEVEL_DEFAULT
Definition rcc.cpp:35
@ CONSTANT_ZSTDCOMPRESSLEVEL_STORE
Definition rcc.cpp:37
@ CONSTANT_COMPRESSTHRESHOLD_DEFAULT
Definition rcc.cpp:38
static QString msgOpenReadFailed(const QString &fname, const QString &why)
Definition rcc.cpp:57
Q_DECLARE_TYPEINFO(RCCXmlTag, Q_PRIMITIVE_TYPE)
static void resourceDataFileMapRecursion(const RCCFileInfo *m_root, const QString &path, RCCResourceLibrary::ResourceDataFileMap &m)
Definition rcc.cpp:901
result_type operator()(const RCCFileInfo *left, const RCCFileInfo *right) const
Definition rcc.cpp:1317