summaryrefslogtreecommitdiffstats
path: root/src/qdoc/qdoc/src/qdoc/helpprojectwriter.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/qdoc/qdoc/src/qdoc/helpprojectwriter.h')
-rw-r--r--src/qdoc/qdoc/src/qdoc/helpprojectwriter.h106
1 files changed, 106 insertions, 0 deletions
diff --git a/src/qdoc/qdoc/src/qdoc/helpprojectwriter.h b/src/qdoc/qdoc/src/qdoc/helpprojectwriter.h
new file mode 100644
index 000000000..11dd67fb1
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/helpprojectwriter.h
@@ -0,0 +1,106 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#ifndef HELPPROJECTWRITER_H
+#define HELPPROJECTWRITER_H
+
+#include "node.h"
+
+#include <QtCore/qstring.h>
+#include <QtCore/qxmlstream.h>
+
+#include <utility>
+
+QT_BEGIN_NAMESPACE
+
+class QDocDatabase;
+class Generator;
+
+using NodeTypeSet = QSet<unsigned char>;
+
+struct SubProject
+{
+ QString m_title {};
+ QString m_indexTitle {};
+ NodeTypeSet m_selectors {};
+ bool m_sortPages {};
+ QString m_type {};
+ QHash<QString, const Node *> m_nodes {};
+ QStringList m_groups {};
+};
+
+/*
+ * Name is the human-readable name to be shown in Assistant.
+ * Ids is a list of unique identifiers.
+ * Ref is the location of the documentation for the keyword.
+ */
+struct Keyword {
+ QString m_name {};
+ QStringList m_ids {};
+ QString m_ref {};
+ Keyword(QString name, const QString &id, QString ref)
+ : m_name(std::move(name)), m_ids(QStringList(id)), m_ref(std::move(ref))
+ {
+ }
+ Keyword(QString name, QStringList ids, QString ref)
+ : m_name(std::move(name)), m_ids(std::move(ids)), m_ref(std::move(ref))
+ {
+ }
+ bool operator<(const Keyword &o) const
+ {
+ // Order by name; use ref as a secondary sort key
+ return (m_name == o.m_name) ? m_ref < o.m_ref : m_name < o.m_name;
+ }
+};
+
+struct HelpProject
+{
+ using NodeStatusSet = QSet<unsigned char>;
+
+ QString m_name {};
+ QString m_helpNamespace {};
+ QString m_virtualFolder {};
+ QString m_version {};
+ QString m_fileName {};
+ QString m_indexRoot {};
+ QString m_indexTitle {};
+ QList<Keyword> m_keywords {};
+ QSet<QString> m_files {};
+ QSet<QString> m_extraFiles {};
+ QSet<QString> m_filterAttributes {};
+ QHash<QString, QSet<QString>> m_customFilters {};
+ QSet<QString> m_excluded {};
+ QList<SubProject> m_subprojects {};
+ QHash<const Node *, NodeStatusSet> m_memberStatus {};
+ bool m_includeIndexNodes {};
+};
+
+
+class HelpProjectWriter
+{
+public:
+ HelpProjectWriter(const QString &defaultFileName, Generator *g);
+ void reset(const QString &defaultFileName, Generator *g);
+ void addExtraFile(const QString &file);
+ void generate();
+
+private:
+ void generateProject(HelpProject &project);
+ void generateSections(HelpProject &project, QXmlStreamWriter &writer, const Node *node);
+ bool generateSection(HelpProject &project, QXmlStreamWriter &writer, const Node *node);
+ Keyword keywordDetails(const Node *node) const;
+ void writeNode(HelpProject &project, QXmlStreamWriter &writer, const Node *node);
+ void readSelectors(SubProject &subproject, const QStringList &selectors);
+ void addMembers(HelpProject &project, QXmlStreamWriter &writer, const Node *node);
+ void writeSection(QXmlStreamWriter &writer, const QString &path, const QString &value);
+
+ QDocDatabase *m_qdb {};
+ Generator *m_gen {};
+
+ QString m_outputDir {};
+ QList<HelpProject> m_projects {};
+};
+
+QT_END_NAMESPACE
+
+#endif