Revision control
++ // Copyright (C) 2018 The Qt Company Ltd.
++ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
++ // Qt-Security score:insignificant reason:build-tool
++
++ #include "collectionconfigreader.h"
++
++ #include <QtGui/QGuiApplication>
++
++ class QCG {
++ Q_DECLARE_TR_FUNCTIONS(QCollectionGenerator)
++ };
++
++ void CollectionConfigReader::raiseErrorWithLine()
++ {
++ raiseError(QCG::tr("Unknown token at line %1.").arg(lineNumber()));
++ }
++
++ void CollectionConfigReader::readData(const QByteArray &contents)
++ {
++ m_enableFilterFunctionality = true;
++ m_hideFilterFunctionality = true;
++ m_enableAddressBar = true;
++ m_hideAddressBar = true;
++ m_enableDocumentationManager = true;
++ m_enableFullTextSearchFallback = false;
++
++ addData(contents);
++ while (!atEnd()) {
++ readNext();
++ if (isStartElement()) {
++ if (name() == QLatin1String("QHelpCollectionProject")
++ && attributes().value(QLatin1String("version")) == QLatin1String("1.0"))
++ readConfig();
++ else
++ raiseError(QCG::tr("Unknown token at line %1. "
++ "Expected \"QtHelpCollectionProject\".")
++ .arg(lineNumber()));
++ }
++ }
++ }
++
++ void CollectionConfigReader::readConfig()
++ {
++ bool ok = false;
++ while (!atEnd()) {
++ readNext();
++ if (isStartElement()) {
++ if (name() == QLatin1String("assistant"))
++ readAssistantSettings();
++ else if (name() == QLatin1String("docFiles"))
++ readDocFiles();
++ else
++ raiseErrorWithLine();
++ } else if (isEndElement() && name() == QLatin1String("QHelpCollectionProject")) {
++ ok = true;
++ }
++ }
++ if (!ok && !hasError())
++ raiseError(QCG::tr("Missing end tags."));
++ }
++
++ void CollectionConfigReader::readAssistantSettings()
++ {
++ while (!atEnd()) {
++ readNext();
++ if (isStartElement()) {
++ if (name() == QLatin1String("title")) {
++ m_title = readElementText();
++ } else if (name() == QLatin1String("homePage")) {
++ m_homePage = readElementText();
++ } else if (name() == QLatin1String("startPage")) {
++ m_startPage = readElementText();
++ } else if (name() == QLatin1String("currentFilter")) {
++ m_currentFilter = readElementText();
++ } else if (name() == QLatin1String("applicationIcon")) {
++ m_applicationIcon = readElementText();
++ } else if (name() == QLatin1String("enableFilterFunctionality")) {
++ if (attributes().value(QLatin1String("visible")) == QLatin1String("true"))
++ m_hideFilterFunctionality = false;
++ if (readElementText() == QLatin1String("false"))
++ m_enableFilterFunctionality = false;
++ } else if (name() == QLatin1String("enableDocumentationManager")) {
++ if (readElementText() == QLatin1String("false"))
++ m_enableDocumentationManager = false;
++ } else if (name() == QLatin1String("enableAddressBar")) {
++ if (attributes().value(QLatin1String("visible")) == QLatin1String("true"))
++ m_hideAddressBar = false;
++ if (readElementText() == QLatin1String("false"))
++ m_enableAddressBar = false;
++ } else if (name() == QLatin1String("aboutMenuText")) {
++ readMenuTexts();
++ } else if (name() == QLatin1String("aboutDialog")) {
++ readAboutDialog();
++ } else if (name() == u"cacheDirectory") {
++ m_cacheDirRelativeToCollection =
++ attributes().value(QLatin1String("base"))
++ == QLatin1String("collection");
++ m_cacheDirectory = readElementText();
++ } else if (name() == QLatin1String("enableFullTextSearchFallback")) {
++ if (readElementText() == QLatin1String("true"))
++ m_enableFullTextSearchFallback = true;
++ } else {
++ raiseErrorWithLine();
++ }
++ } else if (isEndElement() && name() == QLatin1String("assistant")) {
++ break;
++ }
++ }
++ }
++
++ void CollectionConfigReader::readMenuTexts()
++ {
++ while (!atEnd()) {
++ readNext();
++ if (isStartElement()) {
++ if (name() == QLatin1String("text")) {
++ QString lang = attributes().value(QLatin1String("language")).toString();
++ if (lang.isEmpty())
++ lang = QLatin1String("default");
++ m_aboutMenuTexts.insert(lang, readElementText());
++ } else {
++ raiseErrorWithLine();
++ }
++ } else if (isEndElement() && name() == QLatin1String("aboutMenuText")) {
++ break;
++ }
++ }
++ }
++
++ void CollectionConfigReader::readAboutDialog()
++ {
++ while (!atEnd()) {
++ readNext();
++ if (isStartElement()) {
++ if (name() == QLatin1String("file")) {
++ QString lang = attributes().value(QLatin1String("language")).toString();
++ if (lang.isEmpty())
++ lang = QLatin1String("default");
++ m_aboutTextFiles.insert(lang, readElementText());
++ } else if (name() == QLatin1String("icon")) {
++ m_aboutIcon = readElementText();
++ } else {
++ raiseErrorWithLine();
++ }
++ } else if (isEndElement() && name() == QLatin1String("aboutDialog")) {
++ break;
++ }
++ }
++ }
++
++ void CollectionConfigReader::readDocFiles()
++ {
++ while (!atEnd()) {
++ readNext();
++ if (isStartElement()) {
++ if (name() == QLatin1String("generate")) {
++ readGenerate();
++ } else if (name() == QLatin1String("register")) {
++ readRegister();
++ } else {
++ raiseErrorWithLine();
++ }
++ } else if (isEndElement() && name() == QLatin1String("docFiles")) {
++ break;
++ }
++ }
++ }
++
++ void CollectionConfigReader::readGenerate()
++ {
++ while (!atEnd()) {
++ readNext();
++ if (isStartElement()) {
++ if (name() == QLatin1String("file"))
++ readFiles();
++ else
++ raiseErrorWithLine();
++ } else if (isEndElement() && name() == QLatin1String("generate")) {
++ break;
++ }
++ }
++ }
++
++ void CollectionConfigReader::readFiles()
++ {
++ QString input;
++ QString output;
++ while (!atEnd()) {
++ readNext();
++ if (isStartElement()) {
++ if (name() == QLatin1String("input"))
++ input = readElementText();
++ else if (name() == QLatin1String("output"))
++ output = readElementText();
++ else
++ raiseErrorWithLine();
++ } else if (isEndElement() && name() == QLatin1String("file")) {
++ break;
++ }
++ }
++ if (input.isEmpty() || output.isEmpty()) {
++ raiseError(QCG::tr("Missing input or output file for help file generation."));
++ return;
++ }
++ m_filesToGenerate.insert(input, output);
++ }
++
++ void CollectionConfigReader::readRegister()
++ {
++ while (!atEnd()) {
++ readNext();
++ if (isStartElement()) {
++ if (name() == QLatin1String("file"))
++ m_filesToRegister.append(readElementText());
++ else
++ raiseErrorWithLine();
++ } else if (isEndElement() && name() == QLatin1String("register")) {
++ break;
++ }
++ }
++ }
++
++