1// Copyright (C) 2018 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#include "collectionconfigreader.h"
5
6#include <QtGui/QGuiApplication>
7
8class QCG {
9 Q_DECLARE_TR_FUNCTIONS(QCollectionGenerator)
10};
11
12void CollectionConfigReader::raiseErrorWithLine()
13{
14 raiseError(message: QCG::tr(sourceText: "Unknown token at line %1.").arg(a: lineNumber()));
15}
16
17void CollectionConfigReader::readData(const QByteArray &contents)
18{
19 m_enableFilterFunctionality = true;
20 m_hideFilterFunctionality = true;
21 m_enableAddressBar = true;
22 m_hideAddressBar = true;
23 m_enableDocumentationManager = true;
24 m_enableFullTextSearchFallback = false;
25
26 addData(data: contents);
27 while (!atEnd()) {
28 readNext();
29 if (isStartElement()) {
30 if (name() == QLatin1String("QHelpCollectionProject")
31 && attributes().value(qualifiedName: QLatin1String("version")) == QLatin1String("1.0"))
32 readConfig();
33 else
34 raiseError(message: QCG::tr(sourceText: "Unknown token at line %1. "
35 "Expected \"QtHelpCollectionProject\".")
36 .arg(a: lineNumber()));
37 }
38 }
39}
40
41void CollectionConfigReader::readConfig()
42{
43 bool ok = false;
44 while (!atEnd()) {
45 readNext();
46 if (isStartElement()) {
47 if (name() == QLatin1String("assistant"))
48 readAssistantSettings();
49 else if (name() == QLatin1String("docFiles"))
50 readDocFiles();
51 else
52 raiseErrorWithLine();
53 } else if (isEndElement() && name() == QLatin1String("QHelpCollectionProject")) {
54 ok = true;
55 }
56 }
57 if (!ok && !hasError())
58 raiseError(message: QCG::tr(sourceText: "Missing end tags."));
59}
60
61void CollectionConfigReader::readAssistantSettings()
62{
63 while (!atEnd()) {
64 readNext();
65 if (isStartElement()) {
66 if (name() == QLatin1String("title")) {
67 m_title = readElementText();
68 } else if (name() == QLatin1String("homePage")) {
69 m_homePage = readElementText();
70 } else if (name() == QLatin1String("startPage")) {
71 m_startPage = readElementText();
72 } else if (name() == QLatin1String("currentFilter")) {
73 m_currentFilter = readElementText();
74 } else if (name() == QLatin1String("applicationIcon")) {
75 m_applicationIcon = readElementText();
76 } else if (name() == QLatin1String("enableFilterFunctionality")) {
77 if (attributes().value(qualifiedName: QLatin1String("visible")) == QLatin1String("true"))
78 m_hideFilterFunctionality = false;
79 if (readElementText() == QLatin1String("false"))
80 m_enableFilterFunctionality = false;
81 } else if (name() == QLatin1String("enableDocumentationManager")) {
82 if (readElementText() == QLatin1String("false"))
83 m_enableDocumentationManager = false;
84 } else if (name() == QLatin1String("enableAddressBar")) {
85 if (attributes().value(qualifiedName: QLatin1String("visible")) == QLatin1String("true"))
86 m_hideAddressBar = false;
87 if (readElementText() == QLatin1String("false"))
88 m_enableAddressBar = false;
89 } else if (name() == QLatin1String("aboutMenuText")) {
90 readMenuTexts();
91 } else if (name() == QLatin1String("aboutDialog")) {
92 readAboutDialog();
93 } else if (name() == u"cacheDirectory") {
94 m_cacheDirRelativeToCollection =
95 attributes().value(qualifiedName: QLatin1String("base"))
96 == QLatin1String("collection");
97 m_cacheDirectory = readElementText();
98 } else if (name() == QLatin1String("enableFullTextSearchFallback")) {
99 if (readElementText() == QLatin1String("true"))
100 m_enableFullTextSearchFallback = true;
101 } else {
102 raiseErrorWithLine();
103 }
104 } else if (isEndElement() && name() == QLatin1String("assistant")) {
105 break;
106 }
107 }
108}
109
110void CollectionConfigReader::readMenuTexts()
111{
112 while (!atEnd()) {
113 readNext();
114 if (isStartElement()) {
115 if (name() == QLatin1String("text")) {
116 QString lang = attributes().value(qualifiedName: QLatin1String("language")).toString();
117 if (lang.isEmpty())
118 lang = QLatin1String("default");
119 m_aboutMenuTexts.insert(key: lang, value: readElementText());
120 } else {
121 raiseErrorWithLine();
122 }
123 } else if (isEndElement() && name() == QLatin1String("aboutMenuText")) {
124 break;
125 }
126 }
127}
128
129void CollectionConfigReader::readAboutDialog()
130{
131 while (!atEnd()) {
132 readNext();
133 if (isStartElement()) {
134 if (name() == QLatin1String("file")) {
135 QString lang = attributes().value(qualifiedName: QLatin1String("language")).toString();
136 if (lang.isEmpty())
137 lang = QLatin1String("default");
138 m_aboutTextFiles.insert(key: lang, value: readElementText());
139 } else if (name() == QLatin1String("icon")) {
140 m_aboutIcon = readElementText();
141 } else {
142 raiseErrorWithLine();
143 }
144 } else if (isEndElement() && name() == QLatin1String("aboutDialog")) {
145 break;
146 }
147 }
148}
149
150void CollectionConfigReader::readDocFiles()
151{
152 while (!atEnd()) {
153 readNext();
154 if (isStartElement()) {
155 if (name() == QLatin1String("generate")) {
156 readGenerate();
157 } else if (name() == QLatin1String("register")) {
158 readRegister();
159 } else {
160 raiseErrorWithLine();
161 }
162 } else if (isEndElement() && name() == QLatin1String("docFiles")) {
163 break;
164 }
165 }
166}
167
168void CollectionConfigReader::readGenerate()
169{
170 while (!atEnd()) {
171 readNext();
172 if (isStartElement()) {
173 if (name() == QLatin1String("file"))
174 readFiles();
175 else
176 raiseErrorWithLine();
177 } else if (isEndElement() && name() == QLatin1String("generate")) {
178 break;
179 }
180 }
181}
182
183void CollectionConfigReader::readFiles()
184{
185 QString input;
186 QString output;
187 while (!atEnd()) {
188 readNext();
189 if (isStartElement()) {
190 if (name() == QLatin1String("input"))
191 input = readElementText();
192 else if (name() == QLatin1String("output"))
193 output = readElementText();
194 else
195 raiseErrorWithLine();
196 } else if (isEndElement() && name() == QLatin1String("file")) {
197 break;
198 }
199 }
200 if (input.isEmpty() || output.isEmpty()) {
201 raiseError(message: QCG::tr(sourceText: "Missing input or output file for help file generation."));
202 return;
203 }
204 m_filesToGenerate.insert(key: input, value: output);
205}
206
207void CollectionConfigReader::readRegister()
208{
209 while (!atEnd()) {
210 readNext();
211 if (isStartElement()) {
212 if (name() == QLatin1String("file"))
213 m_filesToRegister.append(t: readElementText());
214 else
215 raiseErrorWithLine();
216 } else if (isEndElement() && name() == QLatin1String("register")) {
217 break;
218 }
219 }
220}
221
222
223

source code of qttools/src/assistant/qhelpgenerator/collectionconfigreader.cpp