/**************************************************************************** ** ** Copyright (C) 2021 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the tools applications of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:COMM$ ** ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** $QT_END_LICENSE$ ** ** ** ** ** ** ** ** ****************************************************************************/ /* doc.h */ #ifndef DOC_H #define DOC_H #include "location.h" #include #include #include QT_BEGIN_NAMESPACE class Atom; class CodeMarker; class DocPrivate; class Quoter; class Text; class DitaRef; typedef QPair ArgLocPair; typedef QVector ArgList; typedef QMap QStringMap; typedef QMultiMap QStringMultiMap; struct Topic { QString topic; QString args; Topic() {} Topic(QString &t, const QString &a) : topic(t), args(a) {} bool isEmpty() const { return topic.isEmpty(); } void clear() { topic.clear(); args.clear(); } }; typedef QVector TopicList; typedef QVector DitaRefList; class DitaRef { public: DitaRef() {} virtual ~DitaRef() {} const QString &navtitle() const { return navtitle_; } const QString &href() const { return href_; } void setNavtitle(const QString &t) { navtitle_ = t; } void setHref(const QString &t) { href_ = t; } virtual bool isMapRef() const = 0; virtual const DitaRefList *subrefs() const { return nullptr; } virtual void appendSubref(DitaRef *) {} private: QString navtitle_; QString href_; }; class TopicRef : public DitaRef { public: TopicRef() {} ~TopicRef() override; bool isMapRef() const override { return false; } const DitaRefList *subrefs() const override { return &subrefs_; } void appendSubref(DitaRef *t) override { subrefs_.append(t); } private: DitaRefList subrefs_; }; class MapRef : public DitaRef { public: MapRef() {} bool isMapRef() const override { return true; } }; class Doc { Q_DECLARE_TR_FUNCTIONS(QDoc::Doc) public: // the order is important enum Sections { NoSection = -2, Part = -1, Chapter = 1, Section1 = 1, Section2 = 2, Section3 = 3, Section4 = 4 }; Doc() : priv(nullptr) {} Doc(const Location &start_loc, const Location &end_loc, const QString &source, const QSet &metaCommandSet, const QSet &topics); Doc(const Doc &doc); ~Doc(); Doc &operator=(const Doc &doc); void simplifyEnumDoc(); void setBody(const Text &body); const DitaRefList &ditamap() const; const Location &location() const; const Location &startLocation() const; const Location &endLocation() const; bool isEmpty() const; const QString &source() const; const Text &body() const; Text briefText(bool inclusive = false) const; Text trimmedBriefText(const QString &className) const; Text legaleseText() const; Sections granularity() const; const QSet ¶meterNames() const; const QStringList &enumItemNames() const; const QStringList &omitEnumItemNames() const; const QSet &metaCommandsUsed() const; const TopicList &topicsUsed() const; ArgList metaCommandArgs(const QString &metaCommand) const; const QVector &alsoList() const; bool hasTableOfContents() const; bool hasKeywords() const; bool hasTargets() const; bool isInternal() const; bool isMarkedReimp() const; const QVector &tableOfContents() const; const QVector &tableOfContentsLevels() const; const QVector &keywords() const; const QVector &targets() const; const QStringMultiMap &metaTagMap() const; static void initialize(); static void terminate(); static QString alias(const QString &english); static void trimCStyleComment(Location &location, QString &str); static QString resolveFile(const Location &location, const QString &fileName, QString *userFriendlyFilePath = nullptr); static CodeMarker *quoteFromFile(const Location &location, Quoter "er, const QString &fileName); static QString canonicalTitle(const QString &title); private: void detach(); DocPrivate *priv; }; Q_DECLARE_TYPEINFO(Doc, Q_MOVABLE_TYPE); typedef QVector DocList; QT_END_NAMESPACE #endif