From ed6658c2c82e2d91f34d57e88b61648fb301baf4 Mon Sep 17 00:00:00 2001 From: Paul Wicking Date: Tue, 17 Dec 2019 06:44:19 +0100 Subject: clang-format QDoc This patch is the result of formatting all of QDoc's source with clang-format. The clang-format style is from the qt5 super repo's _clang-format definition. The purpose is unify the style across the code, to avoid spending too much time on style related issues in reviews and cleanup patches. Future changes to QDoc can benefit from using git-clang-format in combination with the git commit hook provided in qtrepotools.git as mentioned in this email to the dev list: https://lists.qt-project.org/pipermail/development/2019-October/037682.html Change-Id: I8af6a051c8334b5f35862a4dcd3becce8ac500c2 Reviewed-by: Martin Smith --- src/qdoc/atom.cpp | 193 +++-- src/qdoc/atom.h | 80 +- src/qdoc/clangcodeparser.cpp | 280 ++++--- src/qdoc/codechunk.cpp | 70 +- src/qdoc/codechunk.h | 24 +- src/qdoc/codemarker.cpp | 102 +-- src/qdoc/codemarker.h | 30 +- src/qdoc/codeparser.cpp | 51 +- src/qdoc/codeparser.h | 186 +++-- src/qdoc/config.cpp | 161 ++--- src/qdoc/config.h | 47 +- src/qdoc/cppcodemarker.cpp | 112 ++- src/qdoc/cppcodemarker.h | 3 +- src/qdoc/cppcodeparser.cpp | 314 ++++---- src/qdoc/cppcodeparser.h | 30 +- src/qdoc/doc.cpp | 827 +++++++++------------ src/qdoc/doc.h | 32 +- src/qdoc/editdistance.cpp | 20 +- src/qdoc/generator.cpp | 530 ++++++-------- src/qdoc/generator.h | 57 +- src/qdoc/helpprojectwriter.cpp | 221 +++--- src/qdoc/helpprojectwriter.h | 20 +- src/qdoc/htmlgenerator.cpp | 1403 +++++++++++++++--------------------- src/qdoc/htmlgenerator.h | 110 +-- src/qdoc/jscodemarker.cpp | 35 +- src/qdoc/jscodemarker.h | 6 +- src/qdoc/location.cpp | 52 +- src/qdoc/location.h | 22 +- src/qdoc/main.cpp | 103 +-- src/qdoc/node.cpp | 463 ++++++------ src/qdoc/node.h | 292 ++++---- src/qdoc/openedlist.cpp | 8 +- src/qdoc/openedlist.h | 6 +- src/qdoc/parameters.cpp | 61 +- src/qdoc/parameters.h | 28 +- src/qdoc/puredocparser.cpp | 11 +- src/qdoc/qdoccommandlineparser.cpp | 63 +- src/qdoc/qdocdatabase.cpp | 72 +- src/qdoc/qdocdatabase.h | 133 ++-- src/qdoc/qdocindexfiles.cpp | 558 +++++++------- src/qdoc/qdocindexfiles.h | 18 +- src/qdoc/qdoctagfiles.cpp | 149 ++-- src/qdoc/qmlcodemarker.cpp | 45 +- src/qdoc/qmlcodemarker.h | 8 +- src/qdoc/qmlcodeparser.cpp | 58 +- src/qdoc/qmlcodeparser.h | 6 +- src/qdoc/qmlmarkupvisitor.cpp | 57 +- src/qdoc/qmlmarkupvisitor.h | 15 +- src/qdoc/qmlvisitor.cpp | 170 ++--- src/qdoc/qmlvisitor.h | 18 +- src/qdoc/quoter.cpp | 34 +- src/qdoc/quoter.h | 21 +- src/qdoc/sections.cpp | 162 ++--- src/qdoc/sections.h | 55 +- src/qdoc/text.cpp | 41 +- src/qdoc/text.h | 30 +- src/qdoc/tokenizer.cpp | 145 ++-- src/qdoc/tokenizer.h | 118 ++- src/qdoc/tree.cpp | 148 ++-- src/qdoc/tree.h | 80 +- src/qdoc/utilities.cpp | 36 +- src/qdoc/utilities.h | 9 +- src/qdoc/webxmlgenerator.cpp | 131 ++-- src/qdoc/webxmlgenerator.h | 9 +- src/qdoc/xmlgenerator.cpp | 45 +- src/qdoc/xmlgenerator.h | 4 +- src/qdoc/yyindent.cpp | 112 ++- 67 files changed, 3911 insertions(+), 4629 deletions(-) diff --git a/src/qdoc/atom.cpp b/src/qdoc/atom.cpp index ecbea2013..298d2bbd4 100644 --- a/src/qdoc/atom.cpp +++ b/src/qdoc/atom.cpp @@ -145,98 +145,97 @@ QT_BEGIN_NAMESPACE QString Atom::noError_ = QString(); -static const struct { +static const struct +{ const char *english; int no; -} atms[] = { - { "AnnotatedList", Atom::AnnotatedList }, - { "AutoLink", Atom::AutoLink }, - { "BaseName", Atom::BaseName }, - { "br", Atom::BR}, - { "BriefLeft", Atom::BriefLeft }, - { "BriefRight", Atom::BriefRight }, - { "C", Atom::C }, - { "CaptionLeft", Atom::CaptionLeft }, - { "CaptionRight", Atom::CaptionRight }, - { "Code", Atom::Code }, - { "CodeBad", Atom::CodeBad }, - { "CodeNew", Atom::CodeNew }, - { "CodeOld", Atom::CodeOld }, - { "CodeQuoteArgument", Atom::CodeQuoteArgument }, - { "CodeQuoteCommand", Atom::CodeQuoteCommand }, - { "DivLeft", Atom::DivLeft }, - { "DivRight", Atom::DivRight }, - { "EndQmlText", Atom::EndQmlText }, - { "ExampleFileLink", Atom::ExampleFileLink}, - { "ExampleImageLink", Atom::ExampleImageLink}, - { "FootnoteLeft", Atom::FootnoteLeft }, - { "FootnoteRight", Atom::FootnoteRight }, - { "FormatElse", Atom::FormatElse }, - { "FormatEndif", Atom::FormatEndif }, - { "FormatIf", Atom::FormatIf }, - { "FormattingLeft", Atom::FormattingLeft }, - { "FormattingRight", Atom::FormattingRight }, - { "GeneratedList", Atom::GeneratedList }, - { "hr", Atom::HR}, - { "Image", Atom::Image }, - { "ImageText", Atom::ImageText }, - { "ImportantLeft", Atom::ImportantLeft }, - { "ImportantRight", Atom::ImportantRight }, - { "InlineImage", Atom::InlineImage }, - { "JavaScript", Atom::JavaScript }, - { "EndJavaScript", Atom::EndJavaScript }, - { "Keyword", Atom::Keyword }, - { "LegaleseLeft", Atom::LegaleseLeft }, - { "LegaleseRight", Atom::LegaleseRight }, - { "LineBreak", Atom::LineBreak }, - { "Link", Atom::Link }, - { "LinkNode", Atom::LinkNode }, - { "ListLeft", Atom::ListLeft }, - { "ListItemNumber", Atom::ListItemNumber }, - { "ListTagLeft", Atom::ListTagLeft }, - { "ListTagRight", Atom::ListTagRight }, - { "ListItemLeft", Atom::ListItemLeft }, - { "ListItemRight", Atom::ListItemRight }, - { "ListRight", Atom::ListRight }, - { "NavAutoLink", Atom::NavAutoLink }, - { "NavLink", Atom::NavLink }, - { "Nop", Atom::Nop }, - { "NoteLeft", Atom::NoteLeft }, - { "NoteRight", Atom::NoteRight }, - { "ParaLeft", Atom::ParaLeft }, - { "ParaRight", Atom::ParaRight }, - { "Qml", Atom::Qml}, - { "QmlText", Atom::QmlText }, - { "QuotationLeft", Atom::QuotationLeft }, - { "QuotationRight", Atom::QuotationRight }, - { "RawString", Atom::RawString }, - { "SectionLeft", Atom::SectionLeft }, - { "SectionRight", Atom::SectionRight }, - { "SectionHeadingLeft", Atom::SectionHeadingLeft }, - { "SectionHeadingRight", Atom::SectionHeadingRight }, - { "SidebarLeft", Atom::SidebarLeft }, - { "SidebarRight", Atom::SidebarRight }, - { "SinceList", Atom::SinceList }, - { "SinceTagLeft", Atom::SinceTagLeft }, - { "SinceTagRight", Atom::SinceTagRight }, - { "SnippetCommand", Atom::SnippetCommand }, - { "SnippetIdentifier", Atom::SnippetIdentifier }, - { "SnippetLocation", Atom::SnippetLocation }, - { "String", Atom::String }, - { "TableLeft", Atom::TableLeft }, - { "TableRight", Atom::TableRight }, - { "TableHeaderLeft", Atom::TableHeaderLeft }, - { "TableHeaderRight", Atom::TableHeaderRight }, - { "TableRowLeft", Atom::TableRowLeft }, - { "TableRowRight", Atom::TableRowRight }, - { "TableItemLeft", Atom::TableItemLeft }, - { "TableItemRight", Atom::TableItemRight }, - { "TableOfContents", Atom::TableOfContents }, - { "Target", Atom::Target }, - { "UnhandledFormat", Atom::UnhandledFormat }, - { "UnknownCommand", Atom::UnknownCommand }, - { nullptr, 0 } -}; +} atms[] = { { "AnnotatedList", Atom::AnnotatedList }, + { "AutoLink", Atom::AutoLink }, + { "BaseName", Atom::BaseName }, + { "br", Atom::BR }, + { "BriefLeft", Atom::BriefLeft }, + { "BriefRight", Atom::BriefRight }, + { "C", Atom::C }, + { "CaptionLeft", Atom::CaptionLeft }, + { "CaptionRight", Atom::CaptionRight }, + { "Code", Atom::Code }, + { "CodeBad", Atom::CodeBad }, + { "CodeNew", Atom::CodeNew }, + { "CodeOld", Atom::CodeOld }, + { "CodeQuoteArgument", Atom::CodeQuoteArgument }, + { "CodeQuoteCommand", Atom::CodeQuoteCommand }, + { "DivLeft", Atom::DivLeft }, + { "DivRight", Atom::DivRight }, + { "EndQmlText", Atom::EndQmlText }, + { "ExampleFileLink", Atom::ExampleFileLink }, + { "ExampleImageLink", Atom::ExampleImageLink }, + { "FootnoteLeft", Atom::FootnoteLeft }, + { "FootnoteRight", Atom::FootnoteRight }, + { "FormatElse", Atom::FormatElse }, + { "FormatEndif", Atom::FormatEndif }, + { "FormatIf", Atom::FormatIf }, + { "FormattingLeft", Atom::FormattingLeft }, + { "FormattingRight", Atom::FormattingRight }, + { "GeneratedList", Atom::GeneratedList }, + { "hr", Atom::HR }, + { "Image", Atom::Image }, + { "ImageText", Atom::ImageText }, + { "ImportantLeft", Atom::ImportantLeft }, + { "ImportantRight", Atom::ImportantRight }, + { "InlineImage", Atom::InlineImage }, + { "JavaScript", Atom::JavaScript }, + { "EndJavaScript", Atom::EndJavaScript }, + { "Keyword", Atom::Keyword }, + { "LegaleseLeft", Atom::LegaleseLeft }, + { "LegaleseRight", Atom::LegaleseRight }, + { "LineBreak", Atom::LineBreak }, + { "Link", Atom::Link }, + { "LinkNode", Atom::LinkNode }, + { "ListLeft", Atom::ListLeft }, + { "ListItemNumber", Atom::ListItemNumber }, + { "ListTagLeft", Atom::ListTagLeft }, + { "ListTagRight", Atom::ListTagRight }, + { "ListItemLeft", Atom::ListItemLeft }, + { "ListItemRight", Atom::ListItemRight }, + { "ListRight", Atom::ListRight }, + { "NavAutoLink", Atom::NavAutoLink }, + { "NavLink", Atom::NavLink }, + { "Nop", Atom::Nop }, + { "NoteLeft", Atom::NoteLeft }, + { "NoteRight", Atom::NoteRight }, + { "ParaLeft", Atom::ParaLeft }, + { "ParaRight", Atom::ParaRight }, + { "Qml", Atom::Qml }, + { "QmlText", Atom::QmlText }, + { "QuotationLeft", Atom::QuotationLeft }, + { "QuotationRight", Atom::QuotationRight }, + { "RawString", Atom::RawString }, + { "SectionLeft", Atom::SectionLeft }, + { "SectionRight", Atom::SectionRight }, + { "SectionHeadingLeft", Atom::SectionHeadingLeft }, + { "SectionHeadingRight", Atom::SectionHeadingRight }, + { "SidebarLeft", Atom::SidebarLeft }, + { "SidebarRight", Atom::SidebarRight }, + { "SinceList", Atom::SinceList }, + { "SinceTagLeft", Atom::SinceTagLeft }, + { "SinceTagRight", Atom::SinceTagRight }, + { "SnippetCommand", Atom::SnippetCommand }, + { "SnippetIdentifier", Atom::SnippetIdentifier }, + { "SnippetLocation", Atom::SnippetLocation }, + { "String", Atom::String }, + { "TableLeft", Atom::TableLeft }, + { "TableRight", Atom::TableRight }, + { "TableHeaderLeft", Atom::TableHeaderLeft }, + { "TableHeaderRight", Atom::TableHeaderRight }, + { "TableRowLeft", Atom::TableRowLeft }, + { "TableRowRight", Atom::TableRowRight }, + { "TableItemLeft", Atom::TableItemLeft }, + { "TableItemRight", Atom::TableItemRight }, + { "TableOfContents", Atom::TableOfContents }, + { "Target", Atom::Target }, + { "UnhandledFormat", Atom::UnhandledFormat }, + { "UnknownCommand", Atom::UnknownCommand }, + { nullptr, 0 } }; /*! \fn Atom::Atom(AtomType type, const QString &string) @@ -333,7 +332,8 @@ QString Atom::typeString() const int i = 0; while (atms[i].english != nullptr) { if (atms[i].no != i) - Location::internalError(QCoreApplication::translate("QDoc::Atom", "atom %1 missing").arg(i)); + Location::internalError( + QCoreApplication::translate("QDoc::Atom", "atom %1 missing").arg(i)); ++i; } deja = true; @@ -365,10 +365,7 @@ void Atom::dump() const str.replace(QRegExp(QLatin1String("[^\x20-\x7e]")), QLatin1String("?")); if (!str.isEmpty()) str = QLatin1String(" \"") + str + QLatin1Char('"'); - fprintf(stderr, - " %-15s%s\n", - typeString().toLatin1().data(), - str.toLatin1().data()); + fprintf(stderr, " %-15s%s\n", typeString().toLatin1().data(), str.toLatin1().data()); } /*! @@ -400,13 +397,13 @@ void LinkAtom::resolveSquareBracketParams() if (resolved_) return; const QStringList params = squareBracketParams_.toLower().split(QLatin1Char(' ')); - for (const auto ¶m : params) { + for (const auto ¶m : params) { if (!domain_) { domain_ = QDocDatabase::qdocDB()->findTree(param); if (domain_) { - continue; + continue; } - } + } if (goal_ == Node::NoType) { goal_ = Node::goal(param); if (goal_ != Node::NoType) diff --git a/src/qdoc/atom.h b/src/qdoc/atom.h index 9ad1d2b7a..f7cb0b654 100644 --- a/src/qdoc/atom.h +++ b/src/qdoc/atom.h @@ -134,20 +134,14 @@ public: friend class LinkAtom; - Atom(const QString &string) - : next_(nullptr), type_(Link) - { - strs << string; - } + Atom(const QString &string) : next_(nullptr), type_(Link) { strs << string; } - Atom(AtomType type, const QString &string = "") - : next_(nullptr), type_(type) + Atom(AtomType type, const QString &string = "") : next_(nullptr), type_(type) { strs << string; } - Atom(AtomType type, const QString &p1, const QString &p2) - : next_(nullptr), type_(type) + Atom(AtomType type, const QString &p1, const QString &p2) : next_(nullptr), type_(type) { strs << p1; if (!p2.isEmpty()) @@ -170,7 +164,7 @@ public: previous->next_ = this; } - virtual ~Atom() { } + virtual ~Atom() {} void appendChar(QChar ch) { strs[0] += ch; } void appendString(const QString &string) { strs[0] += string; } @@ -196,7 +190,7 @@ public: virtual Tree *domain() { return nullptr; } virtual Node::NodeType goal() { return Node::NoType; } virtual const QString &error() { return noError_; } - virtual void resolveSquareBracketParams() { } + virtual void resolveSquareBracketParams() {} protected: static QString noError_; @@ -211,13 +205,29 @@ public: LinkAtom(const QString &p1, const QString &p2); LinkAtom(const LinkAtom &t); LinkAtom(Atom *previous, const LinkAtom &t); - ~LinkAtom() override { } + ~LinkAtom() override {} bool isLinkAtom() const override { return true; } - Node::Genus genus() override { resolveSquareBracketParams(); return genus_; } - bool specifiesDomain() override { resolveSquareBracketParams(); return (domain_ != nullptr); } - Tree *domain() override { resolveSquareBracketParams(); return domain_; } - Node::NodeType goal() override { resolveSquareBracketParams(); return goal_; } + Node::Genus genus() override + { + resolveSquareBracketParams(); + return genus_; + } + bool specifiesDomain() override + { + resolveSquareBracketParams(); + return (domain_ != nullptr); + } + Tree *domain() override + { + resolveSquareBracketParams(); + return domain_; + } + Node::NodeType goal() override + { + resolveSquareBracketParams(); + return goal_; + } const QString &error() override { return error_; } void resolveSquareBracketParams() override; @@ -230,26 +240,26 @@ protected: QString squareBracketParams_; }; -#define ATOM_FORMATTING_BOLD "bold" -#define ATOM_FORMATTING_INDEX "index" -#define ATOM_FORMATTING_ITALIC "italic" -#define ATOM_FORMATTING_LINK "link" -#define ATOM_FORMATTING_PARAMETER "parameter" -#define ATOM_FORMATTING_SPAN "span " -#define ATOM_FORMATTING_SUBSCRIPT "subscript" -#define ATOM_FORMATTING_SUPERSCRIPT "superscript" -#define ATOM_FORMATTING_TELETYPE "teletype" -#define ATOM_FORMATTING_UICONTROL "uicontrol" -#define ATOM_FORMATTING_UNDERLINE "underline" +#define ATOM_FORMATTING_BOLD "bold" +#define ATOM_FORMATTING_INDEX "index" +#define ATOM_FORMATTING_ITALIC "italic" +#define ATOM_FORMATTING_LINK "link" +#define ATOM_FORMATTING_PARAMETER "parameter" +#define ATOM_FORMATTING_SPAN "span " +#define ATOM_FORMATTING_SUBSCRIPT "subscript" +#define ATOM_FORMATTING_SUPERSCRIPT "superscript" +#define ATOM_FORMATTING_TELETYPE "teletype" +#define ATOM_FORMATTING_UICONTROL "uicontrol" +#define ATOM_FORMATTING_UNDERLINE "underline" -#define ATOM_LIST_BULLET "bullet" -#define ATOM_LIST_TAG "tag" -#define ATOM_LIST_VALUE "value" -#define ATOM_LIST_LOWERALPHA "loweralpha" -#define ATOM_LIST_LOWERROMAN "lowerroman" -#define ATOM_LIST_NUMERIC "numeric" -#define ATOM_LIST_UPPERALPHA "upperalpha" -#define ATOM_LIST_UPPERROMAN "upperroman" +#define ATOM_LIST_BULLET "bullet" +#define ATOM_LIST_TAG "tag" +#define ATOM_LIST_VALUE "value" +#define ATOM_LIST_LOWERALPHA "loweralpha" +#define ATOM_LIST_LOWERROMAN "lowerroman" +#define ATOM_LIST_NUMERIC "numeric" +#define ATOM_LIST_UPPERALPHA "upperalpha" +#define ATOM_LIST_UPPERROMAN "upperroman" QT_END_NAMESPACE diff --git a/src/qdoc/clangcodeparser.cpp b/src/qdoc/clangcodeparser.cpp index 2e96a092d..5e04c344e 100644 --- a/src/qdoc/clangcodeparser.cpp +++ b/src/qdoc/clangcodeparser.cpp @@ -67,7 +67,7 @@ static CXTranslationUnit_Flags flags_ = static_cast(0); static CXIndex index_ = nullptr; #ifndef QT_NO_DEBUG_STREAM -template +template static QDebug operator<<(QDebug debug, const std::vector &v) { QDebugStateSaver saver(debug); @@ -90,10 +90,13 @@ static QDebug operator<<(QDebug debug, const std::vector &v) T can be any functor that is callable with a CXCursor parameter and returns a CXChildVisitResult (in other word compatible with function */ -template bool visitChildrenLambda(CXCursor cursor, T &&lambda) +template +bool visitChildrenLambda(CXCursor cursor, T &&lambda) { - CXCursorVisitor visitor = [](CXCursor c, CXCursor , CXClientData client_data) -> CXChildVisitResult - { return (*static_cast(client_data))(c); }; + CXCursorVisitor visitor = [](CXCursor c, CXCursor, + CXClientData client_data) -> CXChildVisitResult { + return (*static_cast(client_data))(c); + }; return clang_visitChildren(cursor, visitor, &lambda); } @@ -107,7 +110,6 @@ static QString fromCXString(CXString &&string) return ret; } - /*! convert a CXSourceLocation to a qdoc Location */ @@ -125,12 +127,17 @@ static Location fromCXSourceLocation(CXSourceLocation location) /*! convert a CX_CXXAccessSpecifier to Node::Access */ -static Node::Access fromCX_CXXAccessSpecifier(CX_CXXAccessSpecifier spec) { +static Node::Access fromCX_CXXAccessSpecifier(CX_CXXAccessSpecifier spec) +{ switch (spec) { - case CX_CXXPrivate: return Node::Private; - case CX_CXXProtected: return Node::Protected; - case CX_CXXPublic: return Node::Public; - default: return Node::Public; + case CX_CXXPrivate: + return Node::Private; + case CX_CXXProtected: + return Node::Protected; + case CX_CXXPublic: + return Node::Public; + default: + return Node::Public; } } @@ -154,7 +161,6 @@ static QString getSpelling(CXSourceRange range) return QString::fromUtf8(file.read(offset2 - offset1)); } - /*! Returns the function name from a given cursor representing a function declaration. This is usually clang_getCursorSpelling, but @@ -163,9 +169,9 @@ static QString getSpelling(CXSourceRange range) QString functionName(CXCursor cursor) { if (clang_getCursorKind(cursor) == CXCursor_ConversionFunction) { - // For a CXCursor_ConversionFunction we don't want the spelling which would be something like - // "operator type-parameter-0-0" or "operator unsigned int". - // we want the actual name as spelled; + // For a CXCursor_ConversionFunction we don't want the spelling which would be something + // like "operator type-parameter-0-0" or "operator unsigned int". we want the actual name as + // spelled; QString type = fromCXString(clang_getTypeSpelling(clang_getCursorResultType(cursor))); if (type.isEmpty()) return fromCXString(clang_getCursorSpelling(cursor)); @@ -185,7 +191,8 @@ QString functionName(CXCursor cursor) Reconstruct the qualified path name of a function that is being overridden. */ -static QString reconstructQualifiedPathForCursor(CXCursor cur) { +static QString reconstructQualifiedPathForCursor(CXCursor cur) +{ QString path; auto kind = clang_getCursorKind(cur); while (!clang_isInvalid(kind) && kind != CXCursor_TranslationUnit) { @@ -219,7 +226,8 @@ static QString reconstructQualifiedPathForCursor(CXCursor cur) { Find the node from the QDocDatabase \a qdb that corrseponds to the declaration represented by the cursor \a cur, if it exists. */ -static Node *findNodeForCursor(QDocDatabase *qdb, CXCursor cur) { +static Node *findNodeForCursor(QDocDatabase *qdb, CXCursor cur) +{ auto kind = clang_getCursorKind(cur); if (clang_isInvalid(kind)) return nullptr; @@ -308,7 +316,8 @@ static Node *findNodeForCursor(QDocDatabase *qdb, CXCursor cur) { corrseponds to the declaration represented by the cursor \a cur, if it exists. */ -static Node *findFunctionNodeForCursor(QDocDatabase *qdb, CXCursor cur) { +static Node *findFunctionNodeForCursor(QDocDatabase *qdb, CXCursor cur) +{ auto kind = clang_getCursorKind(cur); if (clang_isInvalid(kind)) return nullptr; @@ -375,10 +384,13 @@ static Node *findFunctionNodeForCursor(QDocDatabase *qdb, CXCursor cur) { return nullptr; } -class ClangVisitor { +class ClangVisitor +{ public: ClangVisitor(QDocDatabase *qdb, const QHash &allHeaders) - : qdb_(qdb), parent_(qdb->primaryTreeRoot()), allHeaders_(allHeaders) { } + : qdb_(qdb), parent_(qdb->primaryTreeRoot()), allHeaders_(allHeaders) + { + } QDocDatabase *qdocDB() { return qdb_; } @@ -425,6 +437,7 @@ public: } Node *nodeForCommentAtLocation(CXSourceLocation loc, CXSourceLocation nextCommentLoc); + private: /*! SimpleLoc represents a simple location in the main source file, @@ -433,7 +446,8 @@ private: struct SimpleLoc { unsigned int line, column; - friend bool operator<(const SimpleLoc &a, const SimpleLoc &b) { + friend bool operator<(const SimpleLoc &a, const SimpleLoc &b) + { return a.line != b.line ? a.line < b.line : a.column < b.column; } }; @@ -452,7 +466,8 @@ private: /*! Returns true if the symbol should be ignored for the documentation. */ - bool ignoredSymbol(const QString &symbolName) { + bool ignoredSymbol(const QString &symbolName) + { if (symbolName == QLatin1String("QPrivateSignal")) return true; return false; @@ -464,7 +479,8 @@ private: example: 'QLinkedList::iterator' -> 'iterator' */ - QString adjustTypeName(const QString &typeName) { + QString adjustTypeName(const QString &typeName) + { auto parent = parent_->parent(); if (parent && parent->isClassNode()) { QStringRef typeNameConstRemoved(&typeName); @@ -473,7 +489,7 @@ private: auto parentName = parent->fullName(); if (typeNameConstRemoved.startsWith(parentName) - && typeNameConstRemoved.mid(parentName.size(), 2) == QLatin1String("::")) { + && typeNameConstRemoved.mid(parentName.size(), 2) == QLatin1String("::")) { QString result = typeName; result.remove(typeNameConstRemoved.position(), parentName.size() + 2); return result; @@ -484,7 +500,8 @@ private: CXChildVisitResult visitSource(CXCursor cursor, CXSourceLocation loc); CXChildVisitResult visitHeader(CXCursor cursor, CXSourceLocation loc); - CXChildVisitResult visitFnSignature(CXCursor cursor, CXSourceLocation loc, Node **fnNode, bool &ignoreSignature); + CXChildVisitResult visitFnSignature(CXCursor cursor, CXSourceLocation loc, Node **fnNode, + bool &ignoreSignature); void parseProperty(const QString &spelling, const Location &loc); void readParameterNamesAndAttributes(FunctionNode *fn, CXCursor cursor); Aggregate *getSemanticParent(CXCursor cursor); @@ -524,7 +541,8 @@ Aggregate *ClangVisitor::getSemanticParent(CXCursor cursor) return parent_; } -CXChildVisitResult ClangVisitor::visitFnSignature(CXCursor cursor, CXSourceLocation , Node **fnNode, bool &ignoreSignature) +CXChildVisitResult ClangVisitor::visitFnSignature(CXCursor cursor, CXSourceLocation, Node **fnNode, + bool &ignoreSignature) { switch (clang_getCursorKind(cursor)) { case CXCursor_FunctionDecl: @@ -582,7 +600,8 @@ CXChildVisitResult ClangVisitor::visitHeader(CXCursor cursor, CXSourceLocation l if (!clang_isCursorDefinition(cursor)) return CXChildVisit_Continue; - if (findNodeForCursor(qdb_, cursor)) // Was already parsed, propably in another translation unit + if (findNodeForCursor(qdb_, + cursor)) // Was already parsed, propably in another translation unit return CXChildVisit_Continue; QString className = fromCXString(clang_getCursorSpelling(cursor)); @@ -610,7 +629,6 @@ CXChildVisitResult ClangVisitor::visitHeader(CXCursor cursor, CXSourceLocation l QScopedValueRollback setParent(parent_, classe); return visitChildren(cursor); - } case CXCursor_CXXBaseSpecifier: { if (!parent_->isClassNode()) @@ -633,7 +651,8 @@ CXChildVisitResult ClangVisitor::visitHeader(CXCursor cursor, CXSourceLocation l QString namespaceName = fromCXString(clang_getCursorDisplayName(cursor)); NamespaceNode *ns = nullptr; if (parent_) - ns = static_cast(parent_->findNonfunctionChild(namespaceName, &Node::isNamespace)); + ns = static_cast( + parent_->findNonfunctionChild(namespaceName, &Node::isNamespace)); if (!ns) { ns = new NamespaceNode(parent_, namespaceName); ns->setAccess(Node::Public); @@ -648,7 +667,8 @@ CXChildVisitResult ClangVisitor::visitHeader(CXCursor cursor, CXSourceLocation l case CXCursor_Constructor: case CXCursor_Destructor: case CXCursor_ConversionFunction: { - if (findNodeForCursor(qdb_, cursor)) // Was already parsed, propably in another translation unit + if (findNodeForCursor(qdb_, + cursor)) // Was already parsed, propably in another translation unit return CXChildVisit_Continue; QString name = functionName(cursor); if (ignoredSymbol(name)) @@ -679,14 +699,16 @@ CXChildVisitResult ClangVisitor::visitHeader(CXCursor cursor, CXSourceLocation l else if (kind == CXCursor_Destructor) fn->setMetaness(FunctionNode::Dtor); else - fn->setReturnType(adjustTypeName(fromCXString( - clang_getTypeSpelling(clang_getResultType(funcType))))); + fn->setReturnType(adjustTypeName( + fromCXString(clang_getTypeSpelling(clang_getResultType(funcType))))); fn->setStatic(clang_CXXMethod_isStatic(cursor)); fn->setConst(clang_CXXMethod_isConst(cursor)); - fn->setVirtualness(!clang_CXXMethod_isVirtual(cursor) ? FunctionNode::NonVirtual - : clang_CXXMethod_isPureVirtual(cursor) ? FunctionNode::PureVirtual - : FunctionNode::NormalVirtual); + fn->setVirtualness(!clang_CXXMethod_isVirtual(cursor) + ? FunctionNode::NonVirtual + : clang_CXXMethod_isPureVirtual(cursor) + ? FunctionNode::PureVirtual + : FunctionNode::NormalVirtual); CXRefQualifierKind refQualKind = clang_Type_getCXXRefQualifier(funcType); if (refQualKind == CXRefQualifier_LValue) fn->setRef(true); @@ -746,7 +768,7 @@ CXChildVisitResult ClangVisitor::visitHeader(CXCursor cursor, CXSourceLocation l Aggregate *ns = parent_; while (ns && ns->isClassNode()) ns = ns->parent(); - QScopedValueRollbacksetParent(parent_, ns); + QScopedValueRollback setParent(parent_, ns); // Visit the friend functions return visitChildren(cursor); } @@ -774,7 +796,6 @@ CXChildVisitResult ClangVisitor::visitHeader(CXCursor cursor, CXSourceLocation l if (clang_getCursorKind(cur) != CXCursor_EnumConstantDecl) return CXChildVisit_Continue; - QString value; visitChildrenLambda(cur, [&](CXCursor cur) { if (clang_isExpression(clang_getCursorKind(cur))) { @@ -799,7 +820,8 @@ CXChildVisitResult ClangVisitor::visitHeader(CXCursor cursor, CXSourceLocation l } case CXCursor_FieldDecl: case CXCursor_VarDecl: { - if (findNodeForCursor(qdb_, cursor)) // Was already parsed, propably in another translation unit + if (findNodeForCursor(qdb_, + cursor)) // Was already parsed, propably in another translation unit return CXChildVisit_Continue; auto access = fromCX_CXXAccessSpecifier(clang_getCXXAccessSpecifier(cursor)); auto var = new VariableNode(parent_, fromCXString(clang_getCursorSpelling(cursor))); @@ -810,7 +832,8 @@ CXChildVisitResult ClangVisitor::visitHeader(CXCursor cursor, CXSourceLocation l return CXChildVisit_Continue; } case CXCursor_TypedefDecl: { - if (findNodeForCursor(qdb_, cursor)) // Was already parsed, propably in another translation unit + if (findNodeForCursor(qdb_, + cursor)) // Was already parsed, propably in another translation unit return CXChildVisit_Continue; TypedefNode *td = new TypedefNode(parent_, fromCXString(clang_getCursorSpelling(cursor))); td->setAccess(fromCX_CXXAccessSpecifier(clang_getCXXAccessSpecifier(cursor))); @@ -818,13 +841,14 @@ CXChildVisitResult ClangVisitor::visitHeader(CXCursor cursor, CXSourceLocation l // Search to see if this is a Q_DECLARE_FLAGS (if the type is QFlags) visitChildrenLambda(cursor, [&](CXCursor cur) { if (clang_getCursorKind(cur) != CXCursor_TemplateRef - || fromCXString(clang_getCursorSpelling(cur)) != QLatin1String("QFlags")) + || fromCXString(clang_getCursorSpelling(cur)) != QLatin1String("QFlags")) return CXChildVisit_Continue; // Found QFlags visitChildrenLambda(cursor, [&](CXCursor cur) { if (clang_getCursorKind(cur) != CXCursor_TypeRef) return CXChildVisit_Continue; - auto *en = findNodeForCursor(qdb_, clang_getTypeDeclaration(clang_getCursorType(cur))); + auto *en = + findNodeForCursor(qdb_, clang_getTypeDeclaration(clang_getCursorType(cur))); if (en && en->isEnumType()) static_cast(en)->setFlagsType(td); return CXChildVisit_Break; @@ -836,10 +860,10 @@ CXChildVisitResult ClangVisitor::visitHeader(CXCursor cursor, CXSourceLocation l default: if (clang_isDeclaration(kind) && parent_->isClassNode()) { // maybe a static_assert (which is not exposed from the clang API) - QString spelling = getSpelling(clang_getCursorExtent(cursor)); + QString spelling = getSpelling(clang_getCursorExtent(cursor)); if (spelling.startsWith(QLatin1String("Q_PROPERTY")) - || spelling.startsWith(QLatin1String("QDOC_PROPERTY")) - || spelling.startsWith(QLatin1String("Q_OVERRIDE"))) { + || spelling.startsWith(QLatin1String("QDOC_PROPERTY")) + || spelling.startsWith(QLatin1String("Q_OVERRIDE"))) { parseProperty(spelling, fromCXSourceLocation(loc)); } } @@ -907,7 +931,7 @@ void ClangVisitor::parseProperty(const QString &spelling, const Location &loc) QString name = part.at(1); if (name.at(0) == QChar('*')) { type.append(QChar('*')); - name.remove(0,1); + name.remove(0, 1); } auto *property = new PropertyNode(parent_, name); property->setAccess(Node::Public); @@ -923,7 +947,7 @@ void ClangVisitor::parseProperty(const QString &spelling, const Location &loc) property->setFinal(); } if (i < part.size()) { - QString value = part.at(i++); + QString value = part.at(i++); if (key == "READ") { qdb_->addPropertyFunction(property, value, PropertyNode::Getter); } else if (key == "WRITE") { @@ -990,14 +1014,14 @@ Node *ClangVisitor::nodeForCommentAtLocation(CXSourceLocation loc, CXSourceLocat // make sure the previous decl was finished. if (decl_it != declMap_.begin()) { - CXSourceLocation prevDeclEnd = clang_getRangeEnd(clang_getCursorExtent(*(decl_it-1))); + CXSourceLocation prevDeclEnd = clang_getRangeEnd(clang_getCursorExtent(*(decl_it - 1))); unsigned int prevDeclLine; clang_getPresumedLocation(prevDeclEnd, nullptr, &prevDeclLine, nullptr); if (prevDeclLine >= docloc.line) { // The previous declaration was still going. This is only valid if the previous // declaration is a parent of the next declaration. auto parent = clang_getCursorLexicalParent(*decl_it); - if (!clang_equalCursors(parent, *(decl_it-1))) + if (!clang_equalCursors(parent, *(decl_it - 1))) return nullptr; } } @@ -1039,12 +1063,12 @@ void ClangCodeParser::initializeParser(const Config &config) includePaths_.resize(squeezedArgs.size()); std::transform(squeezedArgs.begin(), squeezedArgs.end(), includePaths_.begin(), [](const QString &s) { - QByteArray path(s.toUtf8()); - QFileInfo fi(QDir::current(), s); - if (fi.exists()) - path = fi.canonicalFilePath().toUtf8(); - return path.prepend("-I"); - }); + QByteArray path(s.toUtf8()); + QFileInfo fi(QDir::current(), s); + if (fi.exists()) + path = fi.canonicalFilePath().toUtf8(); + return path.prepend("-I"); + }); CppCodeParser::initializeParser(config); pchFileDir_.reset(nullptr); allHeaders_.clear(); @@ -1073,8 +1097,8 @@ void ClangCodeParser::initializeParser(const Config &config) } } } - qCDebug(lcQdoc).nospace() << __FUNCTION__ << " Clang v" << CINDEX_VERSION_MAJOR - << '.' << CINDEX_VERSION_MINOR; + qCDebug(lcQdoc).nospace() << __FUNCTION__ << " Clang v" << CINDEX_VERSION_MAJOR << '.' + << CINDEX_VERSION_MINOR; } /*! @@ -1096,7 +1120,12 @@ QString ClangCodeParser::language() */ QStringList ClangCodeParser::headerFileNameFilter() { - return QStringList() << "*.ch" << "*.h" << "*.h++" << "*.hh" << "*.hpp" << "*.hxx"; + return QStringList() << "*.ch" + << "*.h" + << "*.h++" + << "*.hh" + << "*.hpp" + << "*.hxx"; } /*! @@ -1105,7 +1134,11 @@ QStringList ClangCodeParser::headerFileNameFilter() */ QStringList ClangCodeParser::sourceFileNameFilter() { - return QStringList() << "*.c++" << "*.cc" << "*.cpp" << "*.cxx" << "*.mm"; + return QStringList() << "*.c++" + << "*.cc" + << "*.cpp" + << "*.cxx" + << "*.mm"; } /*! @@ -1158,8 +1191,8 @@ static QVector includePathsFromHeaders(const QHash QVector result; for (auto it = allHeaders.cbegin(); it != allHeaders.cend(); ++it) { const QByteArray path = "-I" + it.value().toLatin1(); - const QByteArray parent = "-I" - + QDir::cleanPath(it.value() + QLatin1String("/../")).toLatin1(); + const QByteArray parent = + "-I" + QDir::cleanPath(it.value() + QLatin1String("/../")).toLatin1(); if (!result.contains(path)) result.append(path); if (!result.contains(parent)) @@ -1191,7 +1224,8 @@ bool ClangCodeParser::getMoreArgs() of reasonable places to look for include files and use that list instead. */ - Location::logToStdErrAlways("No include paths passed to qdoc; guessing reasonable include paths"); + Location::logToStdErrAlways( + "No include paths passed to qdoc; guessing reasonable include paths"); guessedIncludePaths = true; auto forest = qdb_->searchOrder(); @@ -1199,8 +1233,7 @@ bool ClangCodeParser::getMoreArgs() QString basicIncludeDir = QDir::cleanPath(QString(Config::installDir + "/../include")); moreArgs_ += "-I" + basicIncludeDir.toLatin1(); moreArgs_ += includePathsFromHeaders(allHeaders_); - } - else { + } else { moreArgs_ = includePaths_; } @@ -1217,22 +1250,28 @@ void ClangCodeParser::buildPCH() if (!pchFileDir_ && !moduleHeader().isEmpty()) { pchFileDir_.reset(new QTemporaryDir(QDir::tempPath() + QLatin1String("/qdoc_pch"))); if (pchFileDir_->isValid()) { - //const QByteArray module = qdb_->primaryTreeRoot()->tree()->camelCaseModuleName().toUtf8(); + // const QByteArray module = + // qdb_->primaryTreeRoot()->tree()->camelCaseModuleName().toUtf8(); const QByteArray module = moduleHeader().toUtf8(); QByteArray header; QByteArray privateHeaderDir; Location::logToStdErrAlways("Build & visit PCH for " + moduleHeader()); // A predicate for std::find_if() to locate a path to the module's header // (e.g. QtGui/QtGui) to be used as pre-compiled header - struct FindPredicate { + struct FindPredicate + { enum SearchType { Any, Module, Private }; QByteArray &candidate_; const QByteArray &module_; SearchType type_; - FindPredicate(QByteArray &candidate, const QByteArray &module, SearchType type = Any) - : candidate_(candidate), module_(module), type_(type) {} + FindPredicate(QByteArray &candidate, const QByteArray &module, + SearchType type = Any) + : candidate_(candidate), module_(module), type_(type) + { + } - bool operator()(const QByteArray &p) const { + bool operator()(const QByteArray &p) const + { if (type_ != Any && !p.endsWith(module_)) return false; candidate_ = p + "/"; @@ -1255,27 +1294,25 @@ void ClangCodeParser::buildPCH() // First, search for an include path that contains the module name, then any path QByteArray candidate; - auto it = std::find_if(includePaths_.begin(), - includePaths_.end(), + auto it = std::find_if(includePaths_.begin(), includePaths_.end(), FindPredicate(candidate, module, FindPredicate::Module)); if (it == includePaths_.end()) - it = std::find_if(includePaths_.begin(), - includePaths_.end(), + it = std::find_if(includePaths_.begin(), includePaths_.end(), FindPredicate(candidate, module, FindPredicate::Any)); if (it != includePaths_.end()) header = candidate; // Find the path to module's private headers - currently unused - it = std::find_if(includePaths_.begin(), - includePaths_.end(), + it = std::find_if(includePaths_.begin(), includePaths_.end(), FindPredicate(candidate, module, FindPredicate::Private)); if (it != includePaths_.end()) privateHeaderDir = candidate; if (header.isEmpty()) { qWarning() << "(qdoc) Could not find the module header in include paths for module" - << module << " (include paths: "<< includePaths_ << ")"; - qWarning() << " Artificial module header built from header dirs in qdocconf file"; + << module << " (include paths: " << includePaths_ << ")"; + qWarning() << " Artificial module header built from header dirs in qdocconf " + "file"; } args_.push_back("-xc++"); CXTranslationUnit tu; @@ -1285,11 +1322,11 @@ void ClangCodeParser::buildPCH() QTextStream out(&tmpHeaderFile); if (header.isEmpty()) { for (auto it = allHeaders_.constKeyValueBegin(); - it != allHeaders_.constKeyValueEnd(); ++it) { - if (!(*it).first.endsWith(QLatin1String("_p.h")) && - !(*it).first.startsWith(QLatin1String("moc_"))) { - QString line = QLatin1String("#include \"") + (*it).second + - QLatin1String("/") + (*it).first + QLatin1String("\""); + it != allHeaders_.constKeyValueEnd(); ++it) { + if (!(*it).first.endsWith(QLatin1String("_p.h")) + && !(*it).first.startsWith(QLatin1String("moc_"))) { + QString line = QLatin1String("#include \"") + (*it).second + + QLatin1String("/") + (*it).first + QLatin1String("\""); out << line << "\n"; } } @@ -1306,25 +1343,27 @@ void ClangCodeParser::buildPCH() out << line << "\n"; } } - tmpHeaderFile.close(); + tmpHeaderFile.close(); } if (printParsingErrors_ == 0) - Location::logToStdErrAlways("clang not printing errors; include paths were guessed"); - CXErrorCode err = clang_parseTranslationUnit2(index_, - tmpHeader.toLatin1().data(), - args_.data(), static_cast(args_.size()), nullptr, 0, - flags_ | CXTranslationUnit_ForSerialization, &tu); - qCDebug(lcQdoc) << __FUNCTION__ << "clang_parseTranslationUnit2(" - << tmpHeader << args_ << ") returns" << err; + Location::logToStdErrAlways( + "clang not printing errors; include paths were guessed"); + CXErrorCode err = + clang_parseTranslationUnit2(index_, tmpHeader.toLatin1().data(), args_.data(), + static_cast(args_.size()), nullptr, 0, + flags_ | CXTranslationUnit_ForSerialization, &tu); + qCDebug(lcQdoc) << __FUNCTION__ << "clang_parseTranslationUnit2(" << tmpHeader << args_ + << ") returns" << err; if (!err && tu) { pchName_ = pchFileDir_->path().toUtf8() + "/" + module + ".pch"; - auto error = clang_saveTranslationUnit(tu, pchName_.constData(), clang_defaultSaveOptions(tu)); + auto error = clang_saveTranslationUnit(tu, pchName_.constData(), + clang_defaultSaveOptions(tu)); if (error) { Location::logToStdErrAlways("Could not save PCH file for " + moduleHeader()); pchName_.clear(); - } - else { - // Visit the header now, as token from pre-compiled header won't be visited later + } else { + // Visit the header now, as token from pre-compiled header won't be visited + // later CXCursor cur = clang_getTranslationUnitCursor(tu); ClangVisitor visitor(qdb_, allHeaders_); visitor.visitChildren(cur); @@ -1351,7 +1390,9 @@ void ClangCodeParser::precompileHeaders() for (const auto &p : qAsConst(moreArgs_)) args_.push_back(p.constData()); - flags_ = static_cast(CXTranslationUnit_Incomplete | CXTranslationUnit_SkipFunctionBodies | CXTranslationUnit_KeepGoing); + flags_ = static_cast(CXTranslationUnit_Incomplete + | CXTranslationUnit_SkipFunctionBodies + | CXTranslationUnit_KeepGoing); // 1 as 2nd parameter tells clang to report parser errors. index_ = clang_createIndex(1, printParsingErrors_); buildPCH(); @@ -1372,7 +1413,7 @@ static float getUnpatchedVersion(QString t) Call matchDocsAndStuff() to do all the parsing and tree building. */ -void ClangCodeParser::parseSourceFile(const Location &/*location*/, const QString &filePath) +void ClangCodeParser::parseSourceFile(const Location & /*location*/, const QString &filePath) { /* The set of open namespaces is cleared before parsing @@ -1380,7 +1421,9 @@ void ClangCodeParser::parseSourceFile(const Location &/*location*/, const QStrin */ qdb_->clearOpenNamespaces(); currentFile_ = filePath; - flags_ = static_cast(CXTranslationUnit_Incomplete | CXTranslationUnit_SkipFunctionBodies | CXTranslationUnit_KeepGoing); + flags_ = static_cast(CXTranslationUnit_Incomplete + | CXTranslationUnit_SkipFunctionBodies + | CXTranslationUnit_KeepGoing); index_ = clang_createIndex(1, 0); getDefaultArgs(); @@ -1394,10 +1437,11 @@ void ClangCodeParser::parseSourceFile(const Location &/*location*/, const QStrin args_.push_back(p.constData()); CXTranslationUnit tu; - CXErrorCode err = clang_parseTranslationUnit2(index_, filePath.toLocal8Bit(), args_.data(), - static_cast(args_.size()), nullptr, 0, flags_, &tu); - qCDebug(lcQdoc) << __FUNCTION__ << "clang_parseTranslationUnit2(" - << filePath << args_ << ") returns" << err; + CXErrorCode err = + clang_parseTranslationUnit2(index_, filePath.toLocal8Bit(), args_.data(), + static_cast(args_.size()), nullptr, 0, flags_, &tu); + qCDebug(lcQdoc) << __FUNCTION__ << "clang_parseTranslationUnit2(" << filePath << args_ + << ") returns" << err; if (err || !tu) { qWarning() << "(qdoc) Could not parse source file" << filePath << " error code:" << err; clang_disposeIndex(index_); @@ -1422,7 +1466,7 @@ void ClangCodeParser::parseSourceFile(const Location &/*location*/, const QStrin auto loc = fromCXSourceLocation(clang_getTokenLocation(tu, tokens[i])); auto end_loc = fromCXSourceLocation(clang_getRangeEnd(clang_getTokenExtent(tu, tokens[i]))); - Doc::trimCStyleComment(loc,comment); + Doc::trimCStyleComment(loc, comment); // Doc constructor parses the comment. Doc doc(loc, end_loc, comment, commands, topicCommands()); @@ -1442,9 +1486,9 @@ void ClangCodeParser::parseSourceFile(const Location &/*location*/, const QStrin if (i + 1 < numTokens) { // Try to find the next declaration. CXSourceLocation nextCommentLoc = commentLoc; - while (i + 2 < numTokens && clang_getTokenKind(tokens[i+1]) != CXToken_Comment) + while (i + 2 < numTokens && clang_getTokenKind(tokens[i + 1]) != CXToken_Comment) ++i; // already skip all the tokens that are not comments - nextCommentLoc = clang_getTokenLocation(tu, tokens[i+1]); + nextCommentLoc = clang_getTokenLocation(tu, tokens[i + 1]); n = visitor.nodeForCommentAtLocation(commentLoc, nextCommentLoc); } @@ -1464,7 +1508,8 @@ void ClangCodeParser::parseSourceFile(const Location &/*location*/, const QStrin "topic command (e.g., '\\%1', '\\%2') in the " "comment and no function definition following " "the comment.") - .arg(COMMAND_FN).arg(COMMAND_PAGE)); + .arg(COMMAND_FN) + .arg(COMMAND_PAGE)); } } } else { @@ -1498,7 +1543,9 @@ Node *ClangCodeParser::parseFnArg(const Location &location, const QString &fnArg QString tag = fnArg.left(end + 1); fnNode = qdb_->findFunctionNodeForTag(tag); if (!fnNode) { - location.error(ClangCodeParser::tr("tag \\fn %1 not used in any include file in current module").arg(tag)); + location.error(ClangCodeParser::tr( + "tag \\fn %1 not used in any include file in current module") + .arg(tag)); } else { /* The function node was found. Use the formal @@ -1536,9 +1583,9 @@ Node *ClangCodeParser::parseFnArg(const Location &location, const QString &fnArg } return fnNode; } - CXTranslationUnit_Flags flags = static_cast(CXTranslationUnit_Incomplete | - CXTranslationUnit_SkipFunctionBodies | - CXTranslationUnit_KeepGoing); + CXTranslationUnit_Flags flags = static_cast( + CXTranslationUnit_Incomplete | CXTranslationUnit_SkipFunctionBodies + | CXTranslationUnit_KeepGoing); // Change 2nd parameter to 1 to make clang report errors. CXIndex index = clang_createIndex(1, Utilities::debugging() ? 1 : 0); @@ -1558,15 +1605,10 @@ Node *ClangCodeParser::parseFnArg(const Location &location, const QString &fnArg const char *dummyFileName = "/fn_dummyfile.cpp"; CXUnsavedFile unsavedFile { dummyFileName, fn.constData(), static_cast(fn.size()) }; - CXErrorCode err = clang_parseTranslationUnit2(index, dummyFileName, - args.data(), - args.size(), - &unsavedFile, - 1, - flags, - &tu); - qCDebug(lcQdoc) << __FUNCTION__ << "clang_parseTranslationUnit2(" - << dummyFileName << args << ") returns" << err; + CXErrorCode err = clang_parseTranslationUnit2(index, dummyFileName, args.data(), args.size(), + &unsavedFile, 1, flags, &tu); + qCDebug(lcQdoc) << __FUNCTION__ << "clang_parseTranslationUnit2(" << dummyFileName << args + << ") returns" << err; if (err || !tu) { location.error(ClangCodeParser::tr("clang could not parse \\fn %1").arg(fnArg)); clang_disposeTranslationUnit(tu); @@ -1609,10 +1651,12 @@ Node *ClangCodeParser::parseFnArg(const Location &location, const QString &fnArg } } if (report) { - location.warning(ClangCodeParser::tr("clang found diagnostics parsing \\fn %1").arg(fnArg)); + location.warning(ClangCodeParser::tr("clang found diagnostics parsing \\fn %1") + .arg(fnArg)); for (unsigned i = 0; i < diagnosticCount; ++i) { CXDiagnostic diagnostic = clang_getDiagnostic(tu, i); - location.report(tr(" %1").arg(fromCXString(clang_formatDiagnostic(diagnostic, 0)))); + location.report(tr(" %1").arg( + fromCXString(clang_formatDiagnostic(diagnostic, 0)))); } } } diff --git a/src/qdoc/codechunk.cpp b/src/qdoc/codechunk.cpp index 27f26fdd6..d6293432e 100644 --- a/src/qdoc/codechunk.cpp +++ b/src/qdoc/codechunk.cpp @@ -40,47 +40,45 @@ QT_BEGIN_NAMESPACE enum { Other, Alnum, Gizmo, Comma, LBrace, RBrace, RAngle, Colon, Paren }; // entries 128 and above are Other -static const int charCategory[256] = { - Other, Other, Other, Other, Other, Other, Other, Other, - Other, Other, Other, Other, Other, Other, Other, Other, - Other, Other, Other, Other, Other, Other, Other, Other, - Other, Other, Other, Other, Other, Other, Other, Other, - // ! " # $ % & ' - Other, Other, Other, Other, Other, Gizmo, Gizmo, Other, - // ( ) * + , - . / - Paren, Paren, Gizmo, Gizmo, Comma, Other, Other, Gizmo, - // 0 1 2 3 4 5 6 7 - Alnum, Alnum, Alnum, Alnum, Alnum, Alnum, Alnum, Alnum, - // 8 9 : ; < = > ? - Alnum, Alnum, Colon, Other, Other, Gizmo, RAngle, Gizmo, - // @ A B C D E F G - Other, Alnum, Alnum, Alnum, Alnum, Alnum, Alnum, Alnum, - // H I J K L M N O - Alnum, Alnum, Alnum, Alnum, Alnum, Alnum, Alnum, Alnum, - // P Q R S T U V W - Alnum, Alnum, Alnum, Alnum, Alnum, Alnum, Alnum, Alnum, - // X Y Z [ \ ] ^ _ - Alnum, Alnum, Alnum, Other, Other, Other, Gizmo, Alnum, - // ` a b c d e f g - Other, Alnum, Alnum, Alnum, Alnum, Alnum, Alnum, Alnum, - // h i j k l m n o - Alnum, Alnum, Alnum, Alnum, Alnum, Alnum, Alnum, Alnum, - // p q r s t u v w - Alnum, Alnum, Alnum, Alnum, Alnum, Alnum, Alnum, Alnum, - // x y z { | } ~ - Alnum, Alnum, Alnum, LBrace, Gizmo, RBrace, Other, Other -}; +static const int charCategory[256] = { Other, Other, Other, Other, Other, Other, Other, Other, + Other, Other, Other, Other, Other, Other, Other, Other, + Other, Other, Other, Other, Other, Other, Other, Other, + Other, Other, Other, Other, Other, Other, Other, Other, + // ! " # $ % & ' + Other, Other, Other, Other, Other, Gizmo, Gizmo, Other, + // ( ) * + , - . / + Paren, Paren, Gizmo, Gizmo, Comma, Other, Other, Gizmo, + // 0 1 2 3 4 5 6 7 + Alnum, Alnum, Alnum, Alnum, Alnum, Alnum, Alnum, Alnum, + // 8 9 : ; < = > ? + Alnum, Alnum, Colon, Other, Other, Gizmo, RAngle, Gizmo, + // @ A B C D E F G + Other, Alnum, Alnum, Alnum, Alnum, Alnum, Alnum, Alnum, + // H I J K L M N O + Alnum, Alnum, Alnum, Alnum, Alnum, Alnum, Alnum, Alnum, + // P Q R S T U V W + Alnum, Alnum, Alnum, Alnum, Alnum, Alnum, Alnum, Alnum, + // X Y Z [ \ ] ^ _ + Alnum, Alnum, Alnum, Other, Other, Other, Gizmo, Alnum, + // ` a b c d e f g + Other, Alnum, Alnum, Alnum, Alnum, Alnum, Alnum, Alnum, + // h i j k l m n o + Alnum, Alnum, Alnum, Alnum, Alnum, Alnum, Alnum, Alnum, + // p q r s t u v w + Alnum, Alnum, Alnum, Alnum, Alnum, Alnum, Alnum, Alnum, + // x y z { | } ~ + Alnum, Alnum, Alnum, LBrace, Gizmo, RBrace, Other, Other }; static const bool needSpace[9][9] = { /* [ a + , { } > : ) */ - /* [ */ { false, false, false, false, false, true, false, false, false }, - /* a */ { false, true, true, false, false, true, false, false, false }, - /* + */ { false, true, false, false, false, true, false, true, false }, - /* , */ { true, true, true, true, true, true, true, true, false }, + /* [ */ { false, false, false, false, false, true, false, false, false }, + /* a */ { false, true, true, false, false, true, false, false, false }, + /* + */ { false, true, false, false, false, true, false, true, false }, + /* , */ { true, true, true, true, true, true, true, true, false }, /* { */ { false, false, false, false, false, false, false, false, false }, /* } */ { false, false, false, false, false, false, false, false, false }, - /* > */ { true, true, true, false, true, true, true, false, false }, - /* : */ { false, false, true, true, true, true, true, false, false }, + /* > */ { true, true, true, false, true, true, true, false, false }, + /* : */ { false, false, true, true, true, true, true, false, false }, /* ( */ { false, false, false, false, false, false, false, false, false }, }; diff --git a/src/qdoc/codechunk.h b/src/qdoc/codechunk.h index b7cda1324..0ccc26304 100644 --- a/src/qdoc/codechunk.h +++ b/src/qdoc/codechunk.h @@ -46,7 +46,11 @@ public: CodeChunk(const QString &str) : s(str), hotspot(-1) {} void append(const QString &lexeme); - void appendHotspot() { if (hotspot == -1) hotspot = s.length(); } + void appendHotspot() + { + if (hotspot == -1) + hotspot = s.length(); + } bool isEmpty() const { return s.isEmpty(); } void clear() { s.clear(); } @@ -60,27 +64,33 @@ private: int hotspot; }; -inline bool operator==(const CodeChunk& c, const CodeChunk& d) { +inline bool operator==(const CodeChunk &c, const CodeChunk &d) +{ return c.toString() == d.toString(); } -inline bool operator!=(const CodeChunk& c, const CodeChunk& d) { +inline bool operator!=(const CodeChunk &c, const CodeChunk &d) +{ return !(c == d); } -inline bool operator<(const CodeChunk& c, const CodeChunk& d) { +inline bool operator<(const CodeChunk &c, const CodeChunk &d) +{ return c.toString() < d.toString(); } -inline bool operator>(const CodeChunk& c, const CodeChunk& d) { +inline bool operator>(const CodeChunk &c, const CodeChunk &d) +{ return d < c; } -inline bool operator<=(const CodeChunk& c, const CodeChunk& d) { +inline bool operator<=(const CodeChunk &c, const CodeChunk &d) +{ return !(c > d); } -inline bool operator>=(const CodeChunk& c, const CodeChunk& d) { +inline bool operator>=(const CodeChunk &c, const CodeChunk &d) +{ return !(c < d); } diff --git a/src/qdoc/codemarker.cpp b/src/qdoc/codemarker.cpp index f9b1a163e..000bf97f0 100644 --- a/src/qdoc/codemarker.cpp +++ b/src/qdoc/codemarker.cpp @@ -152,15 +152,14 @@ QString CodeMarker::stringForNode(const Node *node) { if (sizeof(const Node *) == sizeof(ulong)) { return QString::number(reinterpret_cast(node)); - } - else { + } else { return QString::number(reinterpret_cast(node)); } } -static const QString samp = QLatin1String("&"); -static const QString slt = QLatin1String("<"); -static const QString sgt = QLatin1String(">"); +static const QString samp = QLatin1String("&"); +static const QString slt = QLatin1String("<"); +static const QString sgt = QLatin1String(">"); static const QString squot = QLatin1String("""); QString CodeMarker::protect(const QString &str) @@ -171,11 +170,20 @@ QString CodeMarker::protect(const QString &str) const QChar *data = str.constData(); for (int i = 0; i != n; ++i) { switch (data[i].unicode()) { - case '&': marked += samp; break; - case '<': marked += slt; break; - case '>': marked += sgt; break; - case '"': marked += squot; break; - default : marked += data[i]; + case '&': + marked += samp; + break; + case '<': + marked += slt; + break; + case '>': + marked += sgt; + break; + case '"': + marked += squot; + break; + default: + marked += data[i]; } } return marked; @@ -188,11 +196,20 @@ void CodeMarker::appendProtectedString(QString *output, const QStringRef &str) const QChar *data = str.constData(); for (int i = 0; i != n; ++i) { switch (data[i].unicode()) { - case '&': *output += samp; break; - case '<': *output += slt; break; - case '>': *output += sgt; break; - case '"': *output += squot; break; - default : *output += data[i]; + case '&': + *output += samp; + break; + case '<': + *output += slt; + break; + case '>': + *output += sgt; + break; + case '"': + *output += squot; + break; + default: + *output += data[i]; } } } @@ -208,12 +225,10 @@ QString CodeMarker::typified(const QString &string, bool trailingSpace) ch = string.at(i); QChar lower = ch.toLower(); - if ((lower >= QLatin1Char('a') && lower <= QLatin1Char('z')) - || ch.digitValue() >= 0 || ch == QLatin1Char('_') - || ch == QLatin1Char(':')) { + if ((lower >= QLatin1Char('a') && lower <= QLatin1Char('z')) || ch.digitValue() >= 0 + || ch == QLatin1Char('_') || ch == QLatin1Char(':')) { pendingWord += ch; - } - else { + } else { if (!pendingWord.isEmpty()) { bool isProbablyType = (pendingWord != QLatin1String("const")); if (isProbablyType) @@ -242,9 +257,8 @@ QString CodeMarker::typified(const QString &string, bool trailingSpace) } } if (trailingSpace && string.size()) { - if (!string.endsWith(QLatin1Char('*')) - && !string.endsWith(QLatin1Char('&'))) - result += QLatin1Char(' '); + if (!string.endsWith(QLatin1Char('*')) && !string.endsWith(QLatin1Char('&'))) + result += QLatin1Char(' '); } return result; } @@ -295,8 +309,8 @@ QString CodeMarker::taggedNode(const Node *node) tag = QLatin1String("@unknown"); break; } - return (QLatin1Char('<') + tag + QLatin1Char('>') + protect(name) - + QLatin1String("')); + return (QLatin1Char('<') + tag + QLatin1Char('>') + protect(name) + QLatin1String("')); } QString CodeMarker::taggedQmlNode(const Node *node) @@ -326,14 +340,14 @@ QString CodeMarker::taggedQmlNode(const Node *node) } else { tag = QLatin1String("@unknown"); } - return QLatin1Char('<') + tag + QLatin1Char('>') + protect(node->name()) - + QLatin1String("'); + return QLatin1Char('<') + tag + QLatin1Char('>') + protect(node->name()) + QLatin1String("'); } QString CodeMarker::linkTag(const Node *node, const QString &body) { - return QLatin1String("<@link node=\"") + stringForNode(node) - + QLatin1String("\">") + body + QLatin1String(""); + return QLatin1String("<@link node=\"") + stringForNode(node) + QLatin1String("\">") + body + + QLatin1String(""); } static QString encode(const QString &string) @@ -345,32 +359,27 @@ QStringList CodeMarker::macRefsForNode(Node *node) { QString result = QLatin1String("cpp/"); switch (node->nodeType()) { - case Node::Class: - { + case Node::Class: { const ClassNode *classe = static_cast(node); { result += QLatin1String("cl/"); } result += macName(classe); // ### Maybe plainName? - } - break; - case Node::Enum: - { + } break; + case Node::Enum: { QStringList stringList; stringList << encode(result + QLatin1String("tag/") + macName(node)); const auto enumItemNames = node->doc().enumItemNames(); for (const auto &name : enumItemNames) { // ### Write a plainEnumValue() and use it here - stringList << encode(result + QLatin1String("econst/") + - macName(node->parent(), name)); + stringList << encode(result + QLatin1String("econst/") + macName(node->parent(), name)); } return stringList; } case Node::Typedef: result += QLatin1String("tdef/") + macName(node); break; - case Node::Function: - { + case Node::Function: { bool isMacro = false; Q_UNUSED(isMacro); const FunctionNode *func = static_cast(node); @@ -381,27 +390,22 @@ QStringList CodeMarker::macRefsForNode(Node *node) if (func->isMacro()) { result += QLatin1String("macro/"); - } - else if (func->isStatic()) { + } else if (func->isStatic()) { result += QLatin1String("clm/"); - } - else if (!func->parent()->name().isEmpty()) { + } else if (!func->parent()->name().isEmpty()) { result += QLatin1String("instm/"); - } - else { + } else { result += QLatin1String("func/"); } result += macName(func); if (result.endsWith(QLatin1String("()"))) result.chop(2); - } - break; + } break; case Node::Variable: result += QLatin1String("data/") + macName(node); break; - case Node::Property: - { + case Node::Property: { const NodeList list = static_cast(node)->functions(); QStringList stringList; for (auto *node : list) { diff --git a/src/qdoc/codemarker.h b/src/qdoc/codemarker.h index 4a6264ea6..e17b82903 100644 --- a/src/qdoc/codemarker.h +++ b/src/qdoc/codemarker.h @@ -44,22 +44,30 @@ public: virtual void initializeMarker(const Config &config); virtual void terminateMarker(); - virtual bool recognizeCode(const QString & /*code*/) { return true; } + virtual bool recognizeCode(const QString & /*code*/) { return true; } virtual bool recognizeExtension(const QString & /*extension*/) { return true; } virtual bool recognizeLanguage(const QString & /*language*/) { return false; } virtual Atom::AtomType atomType() const { return Atom::Code; } - virtual QString markedUpCode(const QString &code, - const Node * /*relative*/, - const Location & /*location*/) { return protect(code); } - virtual QString markedUpSynopsis(const Node * /*node*/, - const Node * /*relative*/, - Section::Style /*style*/) { return QString(); } + virtual QString markedUpCode(const QString &code, const Node * /*relative*/, + const Location & /*location*/) + { + return protect(code); + } + virtual QString markedUpSynopsis(const Node * /*node*/, const Node * /*relative*/, + Section::Style /*style*/) + { + return QString(); + } virtual QString markedUpQmlItem(const Node *, bool) { return QString(); } virtual QString markedUpName(const Node * /*node*/) { return QString(); } - virtual QString markedUpFullName(const Node * /*node*/, - const Node * /*relative*/) { return QString(); } - virtual QString markedUpEnumValue(const QString & /*enumValue*/, - const Node * /*relative*/) { return QString(); } + virtual QString markedUpFullName(const Node * /*node*/, const Node * /*relative*/) + { + return QString(); + } + virtual QString markedUpEnumValue(const QString & /*enumValue*/, const Node * /*relative*/) + { + return QString(); + } virtual QString markedUpIncludes(const QStringList & /*includes*/) { return QString(); } virtual QString functionBeginRegExp(const QString & /*funcName*/) { return QString(); } virtual QString functionEndRegExp(const QString & /*funcName*/) { return QString(); } diff --git a/src/qdoc/codeparser.cpp b/src/qdoc/codeparser.cpp index b8d884a13..4f4589823 100644 --- a/src/qdoc/codeparser.cpp +++ b/src/qdoc/codeparser.cpp @@ -157,42 +157,23 @@ static QSet commonMetaCommands_; const QSet &CodeParser::commonMetaCommands() { if (commonMetaCommands_.isEmpty()) { - commonMetaCommands_ << COMMAND_ABSTRACT - << COMMAND_DEPRECATED - << COMMAND_INGROUP - << COMMAND_INJSMODULE - << COMMAND_INMODULE - << COMMAND_INPUBLICGROUP - << COMMAND_INQMLMODULE - << COMMAND_INTERNAL - << COMMAND_MAINCLASS - << COMMAND_NOAUTOLIST - << COMMAND_NONREENTRANT - << COMMAND_OBSOLETE - << COMMAND_PAGEKEYWORDS - << COMMAND_PRELIMINARY - << COMMAND_QMLABSTRACT - << COMMAND_QMLDEFAULT - << COMMAND_QMLINHERITS - << COMMAND_QMLREADONLY - << COMMAND_QTVARIABLE - << COMMAND_REENTRANT - << COMMAND_SINCE - << COMMAND_STARTPAGE - << COMMAND_SUBTITLE - << COMMAND_THREADSAFE - << COMMAND_TITLE - << COMMAND_WRAPPER; - } + commonMetaCommands_ << COMMAND_ABSTRACT << COMMAND_DEPRECATED << COMMAND_INGROUP + << COMMAND_INJSMODULE << COMMAND_INMODULE << COMMAND_INPUBLICGROUP + << COMMAND_INQMLMODULE << COMMAND_INTERNAL << COMMAND_MAINCLASS + << COMMAND_NOAUTOLIST << COMMAND_NONREENTRANT << COMMAND_OBSOLETE + << COMMAND_PAGEKEYWORDS << COMMAND_PRELIMINARY << COMMAND_QMLABSTRACT + << COMMAND_QMLDEFAULT << COMMAND_QMLINHERITS << COMMAND_QMLREADONLY + << COMMAND_QTVARIABLE << COMMAND_REENTRANT << COMMAND_SINCE + << COMMAND_STARTPAGE << COMMAND_SUBTITLE << COMMAND_THREADSAFE + << COMMAND_TITLE << COMMAND_WRAPPER; + } return commonMetaCommands_; } /*! \internal */ -void CodeParser::extractPageLinkAndDesc(const QString &arg, - QString *link, - QString *desc) +void CodeParser::extractPageLinkAndDesc(const QString &arg, QString *link, QString *desc) { QRegExp bracedRegExp(QLatin1String("\\{([^{}]*)\\}(?:\\{([^{}]*)\\})?")); @@ -201,14 +182,12 @@ void CodeParser::extractPageLinkAndDesc(const QString &arg, *desc = bracedRegExp.cap(2); if (desc->isEmpty()) *desc = *link; - } - else { + } else { int spaceAt = arg.indexOf(QLatin1Char(' ')); if (arg.contains(QLatin1String(".html")) && spaceAt != -1) { *link = arg.leftRef(spaceAt).trimmed().toString(); *desc = arg.midRef(spaceAt).trimmed().toString(); - } - else { + } else { *link = arg; *desc = arg; } @@ -311,7 +290,9 @@ void CodeParser::checkModuleInclusion(Node *n) if (n->isInAPI() && !n->name().isEmpty()) { n->doc().location().warning(tr("%1 %2 has no \\inmodule command; " "using project name by default: %3") - .arg(word).arg(n->name()).arg(Generator::defaultModuleName())); + .arg(word) + .arg(n->name()) + .arg(Generator::defaultModuleName())); } } } diff --git a/src/qdoc/codeparser.h b/src/qdoc/codeparser.h index b9a85fb75..7e1e551e4 100644 --- a/src/qdoc/codeparser.h +++ b/src/qdoc/codeparser.h @@ -55,7 +55,7 @@ public: virtual QStringList sourceFileNameFilter() = 0; virtual void parseHeaderFile(const Location &location, const QString &filePath); virtual void parseSourceFile(const Location &location, const QString &filePath) = 0; - virtual void precompileHeaders() { } + virtual void precompileHeaders() {} virtual Node *parseFnArg(const Location &, const QString &) { return nullptr; } bool isParsingH() const; @@ -76,9 +76,7 @@ public: protected: const QSet &commonMetaCommands(); - static void extractPageLinkAndDesc(const QString &arg, - QString *link, - QString *desc); + static void extractPageLinkAndDesc(const QString &arg, QString *link, QString *desc); static bool showInternal() { return showInternal_; } QString moduleHeader_; QString currentFile_; @@ -90,96 +88,96 @@ private: static bool singleExec_; }; -#define COMMAND_ABSTRACT Doc::alias(QLatin1String("abstract")) -#define COMMAND_AUDIENCE Doc::alias(QLatin1String("audience")) -#define COMMAND_AUTHOR Doc::alias(QLatin1String("author")) -#define COMMAND_CATEGORY Doc::alias(QLatin1String("category")) -#define COMMAND_CLASS Doc::alias(QLatin1String("class")) -#define COMMAND_COMPONENT Doc::alias(QLatin1String("component")) -#define COMMAND_CONTENTSPAGE Doc::alias(QLatin1String("contentspage")) -#define COMMAND_COPYRHOLDER Doc::alias(QLatin1String("copyrholder")) -#define COMMAND_COPYRYEAR Doc::alias(QLatin1String("copyryear")) -#define COMMAND_DEPRECATED Doc::alias(QLatin1String("deprecated")) // ### don't document -#define COMMAND_DONTDOCUMENT Doc::alias(QLatin1String("dontdocument")) -#define COMMAND_DITAMAP Doc::alias(QLatin1String("ditamap")) -#define COMMAND_ENUM Doc::alias(QLatin1String("enum")) -#define COMMAND_EXAMPLE Doc::alias(QLatin1String("example")) -#define COMMAND_EXTERNALPAGE Doc::alias(QLatin1String("externalpage")) -#define COMMAND_FN Doc::alias(QLatin1String("fn")) -#define COMMAND_GROUP Doc::alias(QLatin1String("group")) -#define COMMAND_HEADERFILE Doc::alias(QLatin1String("headerfile")) -#define COMMAND_INGROUP Doc::alias(QLatin1String("ingroup")) -#define COMMAND_INHEADERFILE Doc::alias(QLatin1String("inheaderfile")) -#define COMMAND_INJSMODULE Doc::alias(QLatin1String("injsmodule")) -#define COMMAND_INMODULE Doc::alias(QLatin1String("inmodule")) // ### don't document -#define COMMAND_INPUBLICGROUP Doc::alias(QLatin1String("inpublicgroup")) -#define COMMAND_INQMLMODULE Doc::alias(QLatin1String("inqmlmodule")) -#define COMMAND_INTERNAL Doc::alias(QLatin1String("internal")) -#define COMMAND_JSATTACHEDMETHOD Doc::alias(QLatin1String("jsattachedmethod")) -#define COMMAND_JSATTACHEDPROPERTY Doc::alias(QLatin1String("jsattachedproperty")) -#define COMMAND_JSATTACHEDSIGNAL Doc::alias(QLatin1String("jsattachedsignal")) -#define COMMAND_JSBASICTYPE Doc::alias(QLatin1String("jsbasictype")) -#define COMMAND_JSMETHOD Doc::alias(QLatin1String("jsmethod")) -#define COMMAND_JSMODULE Doc::alias(QLatin1String("jsmodule")) -#define COMMAND_JSPROPERTY Doc::alias(QLatin1String("jsproperty")) -#define COMMAND_JSPROPERTYGROUP Doc::alias(QLatin1String("jspropertygroup")) -#define COMMAND_JSSIGNAL Doc::alias(QLatin1String("jssignal")) -#define COMMAND_JSTYPE Doc::alias(QLatin1String("jstype")) -#define COMMAND_LICENSEDESCRIPTION Doc::alias(QLatin1String("licensedescription")) -#define COMMAND_LICENSENAME Doc::alias(QLatin1String("licensename")) -#define COMMAND_LICENSEYEAR Doc::alias(QLatin1String("licenseyear")) -#define COMMAND_LIFECYCLEVERSION Doc::alias(QLatin1String("lifecycleversion")) -#define COMMAND_LIFECYCLEWSTATUS Doc::alias(QLatin1String("lifecyclestatus")) -#define COMMAND_MACRO Doc::alias(QLatin1String("macro")) -#define COMMAND_MAINCLASS Doc::alias(QLatin1String("mainclass")) -#define COMMAND_MODULE Doc::alias(QLatin1String("module")) -#define COMMAND_NAMESPACE Doc::alias(QLatin1String("namespace")) -#define COMMAND_NEXTPAGE Doc::alias(QLatin1String("nextpage")) -#define COMMAND_NOAUTOLIST Doc::alias(QLatin1String("noautolist")) -#define COMMAND_NONREENTRANT Doc::alias(QLatin1String("nonreentrant")) -#define COMMAND_OBSOLETE Doc::alias(QLatin1String("obsolete")) -#define COMMAND_OVERLOAD Doc::alias(QLatin1String("overload")) -#define COMMAND_PAGE Doc::alias(QLatin1String("page")) -#define COMMAND_PAGEKEYWORDS Doc::alias(QLatin1String("pagekeywords")) -#define COMMAND_PERMISSIONS Doc::alias(QLatin1String("permissions")) -#define COMMAND_PRELIMINARY Doc::alias(QLatin1String("preliminary")) -#define COMMAND_PREVIOUSPAGE Doc::alias(QLatin1String("previouspage")) -#define COMMAND_PRODNAME Doc::alias(QLatin1String("prodname")) -#define COMMAND_PROPERTY Doc::alias(QLatin1String("property")) -#define COMMAND_PUBLISHER Doc::alias(QLatin1String("publisher")) -#define COMMAND_QMLABSTRACT Doc::alias(QLatin1String("qmlabstract")) -#define COMMAND_QMLATTACHEDMETHOD Doc::alias(QLatin1String("qmlattachedmethod")) -#define COMMAND_QMLATTACHEDPROPERTY Doc::alias(QLatin1String("qmlattachedproperty")) -#define COMMAND_QMLATTACHEDSIGNAL Doc::alias(QLatin1String("qmlattachedsignal")) -#define COMMAND_QMLBASICTYPE Doc::alias(QLatin1String("qmlbasictype")) -#define COMMAND_QMLCLASS Doc::alias(QLatin1String("qmlclass")) -#define COMMAND_QMLDEFAULT Doc::alias(QLatin1String("default")) -#define COMMAND_QMLINHERITS Doc::alias(QLatin1String("inherits")) -#define COMMAND_QMLINSTANTIATES Doc::alias(QLatin1String("instantiates")) -#define COMMAND_QMLMETHOD Doc::alias(QLatin1String("qmlmethod")) -#define COMMAND_QMLMODULE Doc::alias(QLatin1String("qmlmodule")) -#define COMMAND_QMLPROPERTY Doc::alias(QLatin1String("qmlproperty")) -#define COMMAND_QMLPROPERTYGROUP Doc::alias(QLatin1String("qmlpropertygroup")) -#define COMMAND_QMLREADONLY Doc::alias(QLatin1String("readonly")) -#define COMMAND_QMLSIGNAL Doc::alias(QLatin1String("qmlsignal")) -#define COMMAND_QMLTYPE Doc::alias(QLatin1String("qmltype")) -#define COMMAND_QTVARIABLE Doc::alias(QLatin1String("qtvariable")) -#define COMMAND_REENTRANT Doc::alias(QLatin1String("reentrant")) -#define COMMAND_REIMP Doc::alias(QLatin1String("reimp")) -#define COMMAND_RELATES Doc::alias(QLatin1String("relates")) -#define COMMAND_RELEASEDATE Doc::alias(QLatin1String("releasedate")) -#define COMMAND_SINCE Doc::alias(QLatin1String("since")) -#define COMMAND_STRUCT Doc::alias(QLatin1String("struct")) -#define COMMAND_SUBTITLE Doc::alias(QLatin1String("subtitle")) -#define COMMAND_STARTPAGE Doc::alias(QLatin1String("startpage")) -#define COMMAND_THREADSAFE Doc::alias(QLatin1String("threadsafe")) -#define COMMAND_TITLE Doc::alias(QLatin1String("title")) -#define COMMAND_TYPEALIAS Doc::alias(QLatin1String("typealias")) -#define COMMAND_TYPEDEF Doc::alias(QLatin1String("typedef")) -#define COMMAND_VARIABLE Doc::alias(QLatin1String("variable")) -#define COMMAND_VERSION Doc::alias(QLatin1String("version")) -#define COMMAND_UNION Doc::alias(QLatin1String("union")) -#define COMMAND_WRAPPER Doc::alias(QLatin1String("wrapper")) +#define COMMAND_ABSTRACT Doc::alias(QLatin1String("abstract")) +#define COMMAND_AUDIENCE Doc::alias(QLatin1String("audience")) +#define COMMAND_AUTHOR Doc::alias(QLatin1String("author")) +#define COMMAND_CATEGORY Doc::alias(QLatin1String("category")) +#define COMMAND_CLASS Doc::alias(QLatin1String("class")) +#define COMMAND_COMPONENT Doc::alias(QLatin1String("component")) +#define COMMAND_CONTENTSPAGE Doc::alias(QLatin1String("contentspage")) +#define COMMAND_COPYRHOLDER Doc::alias(QLatin1String("copyrholder")) +#define COMMAND_COPYRYEAR Doc::alias(QLatin1String("copyryear")) +#define COMMAND_DEPRECATED Doc::alias(QLatin1String("deprecated")) // ### don't document +#define COMMAND_DONTDOCUMENT Doc::alias(QLatin1String("dontdocument")) +#define COMMAND_DITAMAP Doc::alias(QLatin1String("ditamap")) +#define COMMAND_ENUM Doc::alias(QLatin1String("enum")) +#define COMMAND_EXAMPLE Doc::alias(QLatin1String("example")) +#define COMMAND_EXTERNALPAGE Doc::alias(QLatin1String("externalpage")) +#define COMMAND_FN Doc::alias(QLatin1String("fn")) +#define COMMAND_GROUP Doc::alias(QLatin1String("group")) +#define COMMAND_HEADERFILE Doc::alias(QLatin1String("headerfile")) +#define COMMAND_INGROUP Doc::alias(QLatin1String("ingroup")) +#define COMMAND_INHEADERFILE Doc::alias(QLatin1String("inheaderfile")) +#define COMMAND_INJSMODULE Doc::alias(QLatin1String("injsmodule")) +#define COMMAND_INMODULE Doc::alias(QLatin1String("inmodule")) // ### don't document +#define COMMAND_INPUBLICGROUP Doc::alias(QLatin1String("inpublicgroup")) +#define COMMAND_INQMLMODULE Doc::alias(QLatin1String("inqmlmodule")) +#define COMMAND_INTERNAL Doc::alias(QLatin1String("internal")) +#define COMMAND_JSATTACHEDMETHOD Doc::alias(QLatin1String("jsattachedmethod")) +#define COMMAND_JSATTACHEDPROPERTY Doc::alias(QLatin1String("jsattachedproperty")) +#define COMMAND_JSATTACHEDSIGNAL Doc::alias(QLatin1String("jsattachedsignal")) +#define COMMAND_JSBASICTYPE Doc::alias(QLatin1String("jsbasictype")) +#define COMMAND_JSMETHOD Doc::alias(QLatin1String("jsmethod")) +#define COMMAND_JSMODULE Doc::alias(QLatin1String("jsmodule")) +#define COMMAND_JSPROPERTY Doc::alias(QLatin1String("jsproperty")) +#define COMMAND_JSPROPERTYGROUP Doc::alias(QLatin1String("jspropertygroup")) +#define COMMAND_JSSIGNAL Doc::alias(QLatin1String("jssignal")) +#define COMMAND_JSTYPE Doc::alias(QLatin1String("jstype")) +#define COMMAND_LICENSEDESCRIPTION Doc::alias(QLatin1String("licensedescription")) +#define COMMAND_LICENSENAME Doc::alias(QLatin1String("licensename")) +#define COMMAND_LICENSEYEAR Doc::alias(QLatin1String("licenseyear")) +#define COMMAND_LIFECYCLEVERSION Doc::alias(QLatin1String("lifecycleversion")) +#define COMMAND_LIFECYCLEWSTATUS Doc::alias(QLatin1String("lifecyclestatus")) +#define COMMAND_MACRO Doc::alias(QLatin1String("macro")) +#define COMMAND_MAINCLASS Doc::alias(QLatin1String("mainclass")) +#define COMMAND_MODULE Doc::alias(QLatin1String("module")) +#define COMMAND_NAMESPACE Doc::alias(QLatin1String("namespace")) +#define COMMAND_NEXTPAGE Doc::alias(QLatin1String("nextpage")) +#define COMMAND_NOAUTOLIST Doc::alias(QLatin1String("noautolist")) +#define COMMAND_NONREENTRANT Doc::alias(QLatin1String("nonreentrant")) +#define COMMAND_OBSOLETE Doc::alias(QLatin1String("obsolete")) +#define COMMAND_OVERLOAD Doc::alias(QLatin1String("overload")) +#define COMMAND_PAGE Doc::alias(QLatin1String("page")) +#define COMMAND_PAGEKEYWORDS Doc::alias(QLatin1String("pagekeywords")) +#define COMMAND_PERMISSIONS Doc::alias(QLatin1String("permissions")) +#define COMMAND_PRELIMINARY Doc::alias(QLatin1String("preliminary")) +#define COMMAND_PREVIOUSPAGE Doc::alias(QLatin1String("previouspage")) +#define COMMAND_PRODNAME Doc::alias(QLatin1String("prodname")) +#define COMMAND_PROPERTY Doc::alias(QLatin1String("property")) +#define COMMAND_PUBLISHER Doc::alias(QLatin1String("publisher")) +#define COMMAND_QMLABSTRACT Doc::alias(QLatin1String("qmlabstract")) +#define COMMAND_QMLATTACHEDMETHOD Doc::alias(QLatin1String("qmlattachedmethod")) +#define COMMAND_QMLATTACHEDPROPERTY Doc::alias(QLatin1String("qmlattachedproperty")) +#define COMMAND_QMLATTACHEDSIGNAL Doc::alias(QLatin1String("qmlattachedsignal")) +#define COMMAND_QMLBASICTYPE Doc::alias(QLatin1String("qmlbasictype")) +#define COMMAND_QMLCLASS Doc::alias(QLatin1String("qmlclass")) +#define COMMAND_QMLDEFAULT Doc::alias(QLatin1String("default")) +#define COMMAND_QMLINHERITS Doc::alias(QLatin1String("inherits")) +#define COMMAND_QMLINSTANTIATES Doc::alias(QLatin1String("instantiates")) +#define COMMAND_QMLMETHOD Doc::alias(QLatin1String("qmlmethod")) +#define COMMAND_QMLMODULE Doc::alias(QLatin1String("qmlmodule")) +#define COMMAND_QMLPROPERTY Doc::alias(QLatin1String("qmlproperty")) +#define COMMAND_QMLPROPERTYGROUP Doc::alias(QLatin1String("qmlpropertygroup")) +#define COMMAND_QMLREADONLY Doc::alias(QLatin1String("readonly")) +#define COMMAND_QMLSIGNAL Doc::alias(QLatin1String("qmlsignal")) +#define COMMAND_QMLTYPE Doc::alias(QLatin1String("qmltype")) +#define COMMAND_QTVARIABLE Doc::alias(QLatin1String("qtvariable")) +#define COMMAND_REENTRANT Doc::alias(QLatin1String("reentrant")) +#define COMMAND_REIMP Doc::alias(QLatin1String("reimp")) +#define COMMAND_RELATES Doc::alias(QLatin1String("relates")) +#define COMMAND_RELEASEDATE Doc::alias(QLatin1String("releasedate")) +#define COMMAND_SINCE Doc::alias(QLatin1String("since")) +#define COMMAND_STRUCT Doc::alias(QLatin1String("struct")) +#define COMMAND_SUBTITLE Doc::alias(QLatin1String("subtitle")) +#define COMMAND_STARTPAGE Doc::alias(QLatin1String("startpage")) +#define COMMAND_THREADSAFE Doc::alias(QLatin1String("threadsafe")) +#define COMMAND_TITLE Doc::alias(QLatin1String("title")) +#define COMMAND_TYPEALIAS Doc::alias(QLatin1String("typealias")) +#define COMMAND_TYPEDEF Doc::alias(QLatin1String("typedef")) +#define COMMAND_VARIABLE Doc::alias(QLatin1String("variable")) +#define COMMAND_VERSION Doc::alias(QLatin1String("version")) +#define COMMAND_UNION Doc::alias(QLatin1String("union")) +#define COMMAND_WRAPPER Doc::alias(QLatin1String("wrapper")) QT_END_NAMESPACE diff --git a/src/qdoc/config.cpp b/src/qdoc/config.cpp index 079ffd0e5..73f29d56a 100644 --- a/src/qdoc/config.cpp +++ b/src/qdoc/config.cpp @@ -94,7 +94,8 @@ QString ConfigStrings::OUTPUTFORMATS = QStringLiteral("outputformats"); QString ConfigStrings::OUTPUTPREFIXES = QStringLiteral("outputprefixes"); QString ConfigStrings::OUTPUTSUFFIXES = QStringLiteral("outputsuffixes"); QString ConfigStrings::PROJECT = QStringLiteral("project"); -QString ConfigStrings::REDIRECTDOCUMENTATIONTODEVNULL = QStringLiteral("redirectdocumentationtodevnull"); +QString ConfigStrings::REDIRECTDOCUMENTATIONTODEVNULL = + QStringLiteral("redirectdocumentationtodevnull"); QString ConfigStrings::QHP = QStringLiteral("qhp"); QString ConfigStrings::QUOTINGINFORMATION = QStringLiteral("quotinginformation"); QString ConfigStrings::SCRIPTDIRS = QStringLiteral("scriptdirs"); @@ -205,7 +206,7 @@ void MetaStack::process(QChar ch, const Location &location) top().next.clear(); for (const auto &prefix : prefixes) { - for (const auto &suffix: suffixes) + for (const auto &suffix : suffixes) top().next << prefix + suffix; } } else if (ch == QLatin1Char(',') && count() > 1) { @@ -256,8 +257,7 @@ QMap Config::includeFilesMap_; internal state variables to either default values or to ones defined in command line arguments \a args. */ -Config::Config(const QString &programName, const QStringList &args) - : prog(programName) +Config::Config(const QString &programName, const QStringList &args) : prog(programName) { ++numInstances; processCommandLineOptions(args); @@ -309,7 +309,7 @@ void Config::reset() #undef SET setListFlag(CONFIG_NOLINKERRORS, m_parser.isSet(m_parser.noLinkErrorsOption) - || qEnvironmentVariableIsSet("QDOC_NOLINKERRORS")); + || qEnvironmentVariableIsSet("QDOC_NOLINKERRORS")); // CONFIG_DEFINES and CONFIG_INCLUDEPATHS are set in load() } @@ -418,12 +418,11 @@ void Config::setIndexDirs() { m_indexDirs = m_parser.values(m_parser.indexDirOption); auto it = std::remove_if(m_indexDirs.begin(), m_indexDirs.end(), - [](const QString &s) { return !QFile::exists(s); }); + [](const QString &s) { return !QFile::exists(s); }); - std::for_each(it, m_indexDirs.end(), - [](const QString &s) { - Location::logToStdErrAlways(tr("Cannot find index directory: %1").arg(s)); - }); + std::for_each(it, m_indexDirs.end(), [](const QString &s) { + Location::logToStdErrAlways(tr("Cannot find index directory: %1").arg(s)); + }); m_indexDirs.erase(it, m_indexDirs.end()); } @@ -517,13 +516,13 @@ QString Config::getString(const QString &var, const QString &defaultString) cons QString value(""); int i = configVars.size() - 1; while (i >= 0) { - const ConfigVar& cv = configVars[i]; + const ConfigVar &cv = configVars[i]; if (!cv.location_.isEmpty()) const_cast(this)->lastLocation_ = cv.location_; if (!cv.values_.isEmpty()) { if (!cv.plus_) value.clear(); - for (int j=0; j= 0) { - const ConfigVar& cv = configVars[i]; + const ConfigVar &cv = configVars[i]; if (!cv.location_.isEmpty()) const_cast(this)->lastLocation_ = cv.location_; if (!cv.plus_) @@ -610,7 +609,7 @@ QStringList Config::getCanonicalPathList(const QString &var, bool validate) cons const QStringList &sl = cv.values_; if (!sl.isEmpty()) { t.reserve(t.size() + sl.size()); - for (int i=0; i &excludedDirs, const QSet &excludedFiles) { @@ -794,10 +792,8 @@ QStringList Config::getExampleImageFiles(const QSet &excludedDirs, \a location is used for obtaining the file and line numbers for report qdoc errors. */ -QString Config::findFile(const Location &location, - const QStringList &files, - const QStringList &dirs, - const QString &fileName, +QString Config::findFile(const Location &location, const QStringList &files, + const QStringList &dirs, const QString &fileName, QString *userFriendlyFilePath) { if (fileName.isEmpty() || fileName.startsWith(QLatin1Char('/'))) { @@ -811,8 +807,7 @@ QString Config::findFile(const Location &location, QString firstComponent = components.first(); for (const auto &file : files) { - if (file == firstComponent || - file.endsWith(QLatin1Char('/') + firstComponent)) { + if (file == firstComponent || file.endsWith(QLatin1Char('/') + firstComponent)) { fileInfo.setFile(file); if (!fileInfo.exists()) location.fatal(tr("File '%1' does not exist").arg(file)); @@ -854,18 +849,12 @@ QString Config::findFile(const Location &location, /*! */ -QString Config::findFile(const Location &location, - const QStringList &files, - const QStringList &dirs, - const QString &fileBase, - const QStringList &fileExtensions, - QString *userFriendlyFilePath) +QString Config::findFile(const Location &location, const QStringList &files, + const QStringList &dirs, const QString &fileBase, + const QStringList &fileExtensions, QString *userFriendlyFilePath) { for (const auto &extension : fileExtensions) { - QString filePath = findFile(location, - files, - dirs, - fileBase + QLatin1Char('.') + extension, + QString filePath = findFile(location, files, dirs, fileBase + QLatin1Char('.') + extension, userFriendlyFilePath); if (!filePath.isEmpty()) return filePath; @@ -880,15 +869,14 @@ QString Config::findFile(const Location &location, the file and line number where a qdoc error occurred. The constructed output file name is returned. */ -QString Config::copyFile(const Location &location, - const QString &sourceFilePath, - const QString &userFriendlySourceFilePath, - const QString &targetDirPath) +QString Config::copyFile(const Location &location, const QString &sourceFilePath, + const QString &userFriendlySourceFilePath, const QString &targetDirPath) { QFile inFile(sourceFilePath); if (!inFile.open(QFile::ReadOnly)) { location.warning(tr("Cannot open input file for copy: '%1': %2") - .arg(sourceFilePath).arg(inFile.errorString())); + .arg(sourceFilePath) + .arg(inFile.errorString())); return QString(); } @@ -903,7 +891,8 @@ QString Config::copyFile(const Location &location, QFile outFile(outFileName); if (!outFile.open(QFile::WriteOnly)) { location.warning(tr("Cannot open output file for copy: '%1': %2") - .arg(outFileName).arg(outFile.errorString())); + .arg(outFileName) + .arg(outFile.errorString())); return QString(); } @@ -945,8 +934,7 @@ bool Config::removeDirContents(const QString &dir) if (entry.isFile()) { if (!dirInfo.remove(entry.fileName())) ok = false; - } - else if (entry.isDir()) { + } else if (entry.isDir()) { if (entry.fileName() != QLatin1String(".") && entry.fileName() != QLatin1String("..")) { if (removeDirContents(entry.absoluteFilePath())) { if (!dirInfo.rmdir(entry.fileName())) @@ -966,12 +954,8 @@ bool Config::removeDirContents(const QString &dir) */ bool Config::isMetaKeyChar(QChar ch) { - return ch.isLetterOrNumber() - || ch == QLatin1Char('_') - || ch == QLatin1Char('.') - || ch == QLatin1Char('{') - || ch == QLatin1Char('}') - || ch == QLatin1Char(','); + return ch.isLetterOrNumber() || ch == QLatin1Char('_') || ch == QLatin1Char('.') + || ch == QLatin1Char('{') || ch == QLatin1Char('}') || ch == QLatin1Char(','); } /*! @@ -985,10 +969,13 @@ QStringList Config::loadMaster(const QString &fileName) if (!fin.open(QFile::ReadOnly | QFile::Text)) { if (!Config::installDir.isEmpty()) { int prefix = location.filePath().length() - location.fileName().length(); - fin.setFileName(Config::installDir + QLatin1Char('/') + fileName.right(fileName.length() - prefix)); + fin.setFileName(Config::installDir + QLatin1Char('/') + + fileName.right(fileName.length() - prefix)); } if (!fin.open(QFile::ReadOnly | QFile::Text)) - location.fatal(tr("Cannot open master qdocconf file '%1': %2").arg(fileName).arg(fin.errorString())); + location.fatal(tr("Cannot open master qdocconf file '%1': %2") + .arg(fileName) + .arg(fin.errorString())); } QTextStream stream(&fin); #ifndef QT_NO_TEXTCODEC @@ -1018,20 +1005,20 @@ void Config::load(Location location, const QString &fileName) QDir::setCurrent(path); QRegExp keySyntax(QLatin1String("\\w+(?:\\.\\w+)*")); -#define SKIP_CHAR() \ - do { \ - location.advance(c); \ - ++i; \ - c = text.at(i); \ - cc = c.unicode(); \ -} while (0) +#define SKIP_CHAR() \ + do { \ + location.advance(c); \ + ++i; \ + c = text.at(i); \ + cc = c.unicode(); \ + } while (0) -#define SKIP_SPACES() \ - while (c.isSpace() && cc != '\n') \ +#define SKIP_SPACES() \ + while (c.isSpace() && cc != '\n') \ SKIP_CHAR() -#define PUT_CHAR() \ - word += c; \ +#define PUT_CHAR() \ + word += c; \ SKIP_CHAR(); if (location.depth() > 16) @@ -1041,7 +1028,8 @@ void Config::load(Location location, const QString &fileName) if (!fin.open(QFile::ReadOnly | QFile::Text)) { if (!Config::installDir.isEmpty()) { int prefix = location.filePath().length() - location.fileName().length(); - fin.setFileName(Config::installDir + QLatin1Char('/') + fileName.right(fileName.length() - prefix)); + fin.setFileName(Config::installDir + QLatin1Char('/') + + fileName.right(fileName.length() - prefix)); } if (!fin.open(QFile::ReadOnly | QFile::Text)) location.fatal(tr("Cannot open file '%1': %2").arg(fileName).arg(fin.errorString())); @@ -1111,8 +1099,7 @@ void Config::load(Location location, const QString &fileName) const QByteArray val = qgetenv(var.toLatin1().data()); if (val.isNull()) { location.fatal(tr("Environment variable '%1' undefined").arg(var)); - } - else { + } else { includeFile += QString::fromLatin1(val); } } @@ -1133,8 +1120,7 @@ void Config::load(Location location, const QString &fileName) Here is the recursive call. */ load(location, QFileInfo(QDir(path), includeFile).filePath()); - } - else { + } else { /* It wasn't an include statement, so it's something else. We must see either '=' or '+=' next. If not, fatal error. @@ -1155,26 +1141,22 @@ void Config::load(Location location, const QString &fileName) SKIP_CHAR(); if (cc == '\n') { SKIP_CHAR(); - } - else if (cc > '0' && cc < '8') { + } else if (cc > '0' && cc < '8') { word += QChar(c.digitValue()); SKIP_CHAR(); - } - else if ((metaCharPos = QString::fromLatin1("abfnrtv").indexOf(c)) != -1) { + } else if ((metaCharPos = QString::fromLatin1("abfnrtv").indexOf(c)) + != -1) { word += QLatin1Char("\a\b\f\n\r\t\v"[metaCharPos]); SKIP_CHAR(); - } - else { + } else { PUT_CHAR(); } - } - else if (c.isSpace() || cc == '#') { + } else if (c.isSpace() || cc == '#') { if (inQuote) { if (cc == '\n') location.fatal(tr("Unterminated string")); PUT_CHAR(); - } - else { + } else { if (!word.isEmpty()) { if (metWord) stringValue += QLatin1Char(' '); @@ -1188,8 +1170,7 @@ void Config::load(Location location, const QString &fileName) break; SKIP_SPACES(); } - } - else if (cc == '"') { + } else if (cc == '"') { if (inQuote) { if (!prevWordQuoted) stringValue += QLatin1Char(' '); @@ -1202,8 +1183,7 @@ void Config::load(Location location, const QString &fileName) } inQuote = !inQuote; SKIP_CHAR(); - } - else if (cc == '$') { + } else if (cc == '$') { QString var; SKIP_CHAR(); while (c.isLetterOrNumber() || cc == '_') { @@ -1214,13 +1194,11 @@ void Config::load(Location location, const QString &fileName) const QByteArray val = qgetenv(var.toLatin1().constData()); if (val.isNull()) { location.fatal(tr("Environment variable '%1' undefined").arg(var)); - } - else { + } else { word += QString::fromLatin1(val); } } - } - else { + } else { if (!inQuote && cc == '=') location.fatal(tr("Unexpected '='")); PUT_CHAR(); @@ -1231,7 +1209,8 @@ void Config::load(Location location, const QString &fileName) keyLoc.fatal(tr("Invalid key '%1'").arg(key)); ConfigVarMultimap::Iterator i; - i = configVars_.insert(key, ConfigVar(key, rhsValues, QDir::currentPath(), keyLoc)); + i = configVars_.insert(key, + ConfigVar(key, rhsValues, QDir::currentPath(), keyLoc)); i.value().plus_ = plus; } } @@ -1256,13 +1235,12 @@ bool Config::isFileExcluded(const QString &fileName, const QSet &exclud return excludedFiles.contains(fileName); } -QStringList Config::getFilesHere(const QString &uncleanDir, - const QString &nameFilter, - const Location &location, - const QSet &excludedDirs, +QStringList Config::getFilesHere(const QString &uncleanDir, const QString &nameFilter, + const Location &location, const QSet &excludedDirs, const QSet &excludedFiles) { - QString dir = location.isEmpty() ? QDir::cleanPath(uncleanDir) : QDir(uncleanDir).canonicalPath(); + QString dir = + location.isEmpty() ? QDir::cleanPath(uncleanDir) : QDir(uncleanDir).canonicalPath(); QStringList result; if (excludedDirs.contains(dir)) return result; @@ -1273,7 +1251,7 @@ QStringList Config::getFilesHere(const QString &uncleanDir, dirInfo.setSorting(QDir::Name); dirInfo.setFilter(QDir::Files); QStringList fileNames = dirInfo.entryList(); - for (const auto &file: qAsConst(fileNames)) { + for (const auto &file : qAsConst(fileNames)) { if (!file.startsWith(QLatin1Char('~'))) { QString s = dirInfo.filePath(file); QString c = QDir::cleanPath(s); @@ -1283,10 +1261,11 @@ QStringList Config::getFilesHere(const QString &uncleanDir, } dirInfo.setNameFilters(QStringList(QLatin1String("*"))); - dirInfo.setFilter(QDir::Dirs|QDir::NoDotAndDotDot); + dirInfo.setFilter(QDir::Dirs | QDir::NoDotAndDotDot); fileNames = dirInfo.entryList(); for (const auto &file : fileNames) - result += getFilesHere(dirInfo.filePath(file), nameFilter, location, excludedDirs, excludedFiles); + result += getFilesHere(dirInfo.filePath(file), nameFilter, location, excludedDirs, + excludedFiles); return result; } diff --git a/src/qdoc/config.h b/src/qdoc/config.h index 7006f002a..85a12c0b3 100644 --- a/src/qdoc/config.h +++ b/src/qdoc/config.h @@ -48,20 +48,26 @@ QT_BEGIN_NAMESPACE This struct contains all the information for one config variable found in a qdocconf file. */ -struct ConfigVar { +struct ConfigVar +{ bool plus_; QString name_; QStringList values_; QString currentPath_; Location location_; - ConfigVar() : plus_(false) { } + ConfigVar() : plus_(false) {} - ConfigVar(const QString &name, const QStringList &values, const QString &dir) - : plus_(true), name_(name), values_(values), currentPath_(dir) { } + ConfigVar(const QString &name, const QStringList &values, const QString &dir) + : plus_(true), name_(name), values_(values), currentPath_(dir) + { + } - ConfigVar(const QString &name, const QStringList &values, const QString &dir, const Location &loc) - : plus_(false), name_(name), values_(values), currentPath_(dir), location_(loc) { } + ConfigVar(const QString &name, const QStringList &values, const QString &dir, + const Location &loc) + : plus_(false), name_(name), values_(values), currentPath_(dir), location_(loc) + { + } }; /* @@ -103,34 +109,29 @@ public: QVector getRegExpList(const QString &var) const; QSet subVars(const QString &var) const; void subVarsAndValues(const QString &var, ConfigVarMultimap &t) const; - QStringList getAllFiles(const QString &filesVar, - const QString &dirsVar, + QStringList getAllFiles(const QString &filesVar, const QString &dirsVar, const QSet &excludedDirs = QSet(), const QSet &excludedFiles = QSet()); QString getIncludeFilePath(const QString &fileName) const; - QStringList getExampleQdocFiles(const QSet &excludedDirs, const QSet &excludedFiles); - QStringList getExampleImageFiles(const QSet &excludedDirs, const QSet &excludedFiles); + QStringList getExampleQdocFiles(const QSet &excludedDirs, + const QSet &excludedFiles); + QStringList getExampleImageFiles(const QSet &excludedDirs, + const QSet &excludedFiles); static QStringList loadMaster(const QString &fileName); static bool isFileExcluded(const QString &fileName, const QSet &excludedFiles); - static QStringList getFilesHere(const QString &dir, - const QString &nameFilter, + static QStringList getFilesHere(const QString &dir, const QString &nameFilter, const Location &location = Location(), const QSet &excludedDirs = QSet(), const QSet &excludedFiles = QSet()); - static QString findFile(const Location &location, - const QStringList &files, - const QStringList &dirs, - const QString &fileName, + static QString findFile(const Location &location, const QStringList &files, + const QStringList &dirs, const QString &fileName, QString *userFriendlyFilePath = nullptr); - static QString findFile(const Location &location, - const QStringList &files, - const QStringList &dirs, - const QString &fileBase, + static QString findFile(const Location &location, const QStringList &files, + const QStringList &dirs, const QString &fileBase, const QStringList &fileExtensions, QString *userFriendlyFilePath = nullptr); - static QString copyFile(const Location &location, - const QString &sourceFilePath, + static QString copyFile(const Location &location, const QString &sourceFilePath, const QString &userFriendlySourceFilePath, const QString &targetDirPath); static int numParams(const QString &value); @@ -174,7 +175,7 @@ private: QString prog; Location loc; Location lastLocation_; - ConfigVarMultimap configVars_; + ConfigVarMultimap configVars_; static QMap uncompressedFiles; static QMap extractedDirs; diff --git a/src/qdoc/cppcodemarker.cpp b/src/qdoc/cppcodemarker.cpp index 843e24db6..550e01328 100644 --- a/src/qdoc/cppcodemarker.cpp +++ b/src/qdoc/cppcodemarker.cpp @@ -62,7 +62,7 @@ CppCodeMarker::~CppCodeMarker() /*! Returns \c true. */ -bool CppCodeMarker::recognizeCode(const QString &/* code */) +bool CppCodeMarker::recognizeCode(const QString & /* code */) { return true; } @@ -74,20 +74,9 @@ bool CppCodeMarker::recognizeCode(const QString &/* code */) bool CppCodeMarker::recognizeExtension(const QString &extension) { QByteArray ext = extension.toLatin1(); - return ext == "c" || - ext == "c++" || - ext == "qdoc" || - ext == "qtt" || - ext == "qtx" || - ext == "cc" || - ext == "cpp" || - ext == "cxx" || - ext == "ch" || - ext == "h" || - ext == "h++" || - ext == "hh" || - ext == "hpp" || - ext == "hxx"; + return ext == "c" || ext == "c++" || ext == "qdoc" || ext == "qtt" || ext == "qtx" + || ext == "cc" || ext == "cpp" || ext == "cxx" || ext == "ch" || ext == "h" + || ext == "h++" || ext == "hh" || ext == "hpp" || ext == "hxx"; } /*! @@ -106,15 +95,13 @@ Atom::AtomType CppCodeMarker::atomType() const return Atom::Code; } -QString CppCodeMarker::markedUpCode(const QString &code, - const Node *relative, +QString CppCodeMarker::markedUpCode(const QString &code, const Node *relative, const Location &location) { return addMarkUp(code, relative, location); } -QString CppCodeMarker::markedUpSynopsis(const Node *node, - const Node * /* relative */, +QString CppCodeMarker::markedUpSynopsis(const Node *node, const Node * /* relative */, Section::Style style) { const int MaxEnumValues = 6; @@ -133,13 +120,9 @@ QString CppCodeMarker::markedUpSynopsis(const Node *node, name = "<@name>" + name + ""; if (style == Section::Details) { - if (!node->isRelatedNonmember() && - !node->isProxyNode() && - !node->parent()->name().isEmpty() && - !node->parent()->isHeader() && - !node->isProperty() && - !node->isQmlNode() && - !node->isJsNode()) { + if (!node->isRelatedNonmember() && !node->isProxyNode() && !node->parent()->name().isEmpty() + && !node->parent()->isHeader() && !node->isProperty() && !node->isQmlNode() + && !node->isJsNode()) { name.prepend(taggedNode(node->parent()) + "::"); } } @@ -152,7 +135,7 @@ QString CppCodeMarker::markedUpSynopsis(const Node *node, synopsis = "class " + name; break; case Node::Function: - func = (const FunctionNode *) node; + func = (const FunctionNode *)node; if (style != Section::AllMembers && !func->returnType().isEmpty()) synopsis = typified(func->returnType(), true); @@ -195,17 +178,17 @@ QString CppCodeMarker::markedUpSynopsis(const Node *node, if (func->isPureVirtual()) synopsis.append(" = 0"); if (func->isRef()) - synopsis.append(" &"); + synopsis.append(" &"); else if (func->isRefRef()) - synopsis.append(" &&"); + synopsis.append(" &&"); } else if (style == Section::AllMembers) { if (!func->returnType().isEmpty() && func->returnType() != "void") synopsis += " : " + typified(func->returnType()); } else { if (func->isRef()) - synopsis.append(" &"); + synopsis.append(" &"); else if (func->isRefRef()) - synopsis.append(" &&"); + synopsis.append(" &&"); QStringList bracketed; if (func->isStatic()) { bracketed += "static"; @@ -256,7 +239,7 @@ QString CppCodeMarker::markedUpSynopsis(const Node *node, } } else { for (int i = 0; i < documentedItems.size(); ++i) { - if (i < MaxEnumValues-2 || i == documentedItems.size()-1) { + if (i < MaxEnumValues - 2 || i == documentedItems.size() - 1) { if (i != 0) synopsis += ", "; synopsis += documentedItems.at(i); @@ -287,8 +270,7 @@ QString CppCodeMarker::markedUpSynopsis(const Node *node, if (style == Section::AllMembers) { synopsis = name + " : " + typified(variable->dataType()); } else { - synopsis = typified(variable->leftType(), true) + - name + protect(variable->rightType()); + synopsis = typified(variable->leftType(), true) + name + protect(variable->rightType()); } break; default: @@ -423,8 +405,8 @@ QString CppCodeMarker::markedUpIncludes(const QStringList &includes) QString code; for (const auto &include : includes) - code += "<@preprocessor>#include <<@headerfile>" - + include + ">\n"; + code += "<@preprocessor>#include <<@headerfile>" + include + + ">\n"; return code; } @@ -433,7 +415,7 @@ QString CppCodeMarker::functionBeginRegExp(const QString &funcName) return QLatin1Char('^') + QRegExp::escape(funcName) + QLatin1Char('$'); } -QString CppCodeMarker::functionEndRegExp(const QString &/* funcName */) +QString CppCodeMarker::functionEndRegExp(const QString & /* funcName */) { return "^\\}$"; } @@ -451,8 +433,7 @@ QString CppCodeMarker::functionEndRegExp(const QString &/* funcName */) @type */ -QString CppCodeMarker::addMarkUp(const QString &in, - const Node * /* relative */, +QString CppCodeMarker::addMarkUp(const QString &in, const Node * /* relative */, const Location & /* location */) { static QSet types; @@ -462,26 +443,42 @@ QString CppCodeMarker::addMarkUp(const QString &in, // initialize statics Q_ASSERT(keywords.isEmpty()); static const QString typeTable[] = { - QLatin1String("bool"), QLatin1String("char"), QLatin1String("double"), QLatin1String("float"), QLatin1String("int"), QLatin1String("long"), QLatin1String("short"), - QLatin1String("signed"), QLatin1String("unsigned"), QLatin1String("uint"), QLatin1String("ulong"), QLatin1String("ushort"), QLatin1String("uchar"), QLatin1String("void"), - QLatin1String("qlonglong"), QLatin1String("qulonglong"), - QLatin1String("qint"), QLatin1String("qint8"), QLatin1String("qint16"), QLatin1String("qint32"), QLatin1String("qint64"), - QLatin1String("quint"), QLatin1String("quint8"), QLatin1String("quint16"), QLatin1String("quint32"), QLatin1String("quint64"), - QLatin1String("qreal"), QLatin1String("cond") + QLatin1String("bool"), QLatin1String("char"), QLatin1String("double"), + QLatin1String("float"), QLatin1String("int"), QLatin1String("long"), + QLatin1String("short"), QLatin1String("signed"), QLatin1String("unsigned"), + QLatin1String("uint"), QLatin1String("ulong"), QLatin1String("ushort"), + QLatin1String("uchar"), QLatin1String("void"), QLatin1String("qlonglong"), + QLatin1String("qulonglong"), QLatin1String("qint"), QLatin1String("qint8"), + QLatin1String("qint16"), QLatin1String("qint32"), QLatin1String("qint64"), + QLatin1String("quint"), QLatin1String("quint8"), QLatin1String("quint16"), + QLatin1String("quint32"), QLatin1String("quint64"), QLatin1String("qreal"), + QLatin1String("cond") }; static const QString keywordTable[] = { - QLatin1String("and"), QLatin1String("and_eq"), QLatin1String("asm"), QLatin1String("auto"), QLatin1String("bitand"), QLatin1String("bitor"), QLatin1String("break"), - QLatin1String("case"), QLatin1String("catch"), QLatin1String("class"), QLatin1String("compl"), QLatin1String("const"), QLatin1String("const_cast"), - QLatin1String("continue"), QLatin1String("default"), QLatin1String("delete"), QLatin1String("do"), QLatin1String("dynamic_cast"), QLatin1String("else"), - QLatin1String("enum"), QLatin1String("explicit"), QLatin1String("export"), QLatin1String("extern"), QLatin1String("false"), QLatin1String("for"), QLatin1String("friend"), - QLatin1String("goto"), QLatin1String("if"), QLatin1String("include"), QLatin1String("inline"), QLatin1String("monitor"), QLatin1String("mutable"), QLatin1String("namespace"), - QLatin1String("new"), QLatin1String("not"), QLatin1String("not_eq"), QLatin1String("operator"), QLatin1String("or"), QLatin1String("or_eq"), QLatin1String("private"), QLatin1String("protected"), - QLatin1String("public"), QLatin1String("register"), QLatin1String("reinterpret_cast"), QLatin1String("return"), QLatin1String("sizeof"), - QLatin1String("static"), QLatin1String("static_cast"), QLatin1String("struct"), QLatin1String("switch"), QLatin1String("template"), QLatin1String("this"), - QLatin1String("throw"), QLatin1String("true"), QLatin1String("try"), QLatin1String("typedef"), QLatin1String("typeid"), QLatin1String("typename"), QLatin1String("union"), - QLatin1String("using"), QLatin1String("virtual"), QLatin1String("volatile"), QLatin1String("wchar_t"), QLatin1String("while"), QLatin1String("xor"), - QLatin1String("xor_eq"), QLatin1String("synchronized"), + QLatin1String("and"), QLatin1String("and_eq"), QLatin1String("asm"), + QLatin1String("auto"), QLatin1String("bitand"), QLatin1String("bitor"), + QLatin1String("break"), QLatin1String("case"), QLatin1String("catch"), + QLatin1String("class"), QLatin1String("compl"), QLatin1String("const"), + QLatin1String("const_cast"), QLatin1String("continue"), QLatin1String("default"), + QLatin1String("delete"), QLatin1String("do"), QLatin1String("dynamic_cast"), + QLatin1String("else"), QLatin1String("enum"), QLatin1String("explicit"), + QLatin1String("export"), QLatin1String("extern"), QLatin1String("false"), + QLatin1String("for"), QLatin1String("friend"), QLatin1String("goto"), + QLatin1String("if"), QLatin1String("include"), QLatin1String("inline"), + QLatin1String("monitor"), QLatin1String("mutable"), QLatin1String("namespace"), + QLatin1String("new"), QLatin1String("not"), QLatin1String("not_eq"), + QLatin1String("operator"), QLatin1String("or"), QLatin1String("or_eq"), + QLatin1String("private"), QLatin1String("protected"), QLatin1String("public"), + QLatin1String("register"), QLatin1String("reinterpret_cast"), QLatin1String("return"), + QLatin1String("sizeof"), QLatin1String("static"), QLatin1String("static_cast"), + QLatin1String("struct"), QLatin1String("switch"), QLatin1String("template"), + QLatin1String("this"), QLatin1String("throw"), QLatin1String("true"), + QLatin1String("try"), QLatin1String("typedef"), QLatin1String("typeid"), + QLatin1String("typename"), QLatin1String("union"), QLatin1String("using"), + QLatin1String("virtual"), QLatin1String("volatile"), QLatin1String("wchar_t"), + QLatin1String("while"), QLatin1String("xor"), QLatin1String("xor_eq"), + QLatin1String("synchronized"), // Qt specific QLatin1String("signals"), QLatin1String("slots"), QLatin1String("emit") }; @@ -494,8 +491,7 @@ QString CppCodeMarker::addMarkUp(const QString &in, for (int j = sizeof(keywordTable) / sizeof(QString) - 1; j; --j) keywords.insert(keywordTable[j]); } -#define readChar() \ - ch = (i < code.length()) ? code[i++].cell() : EOF +#define readChar() ch = (i < code.length()) ? code[i++].cell() : EOF QString code = in; QString out; diff --git a/src/qdoc/cppcodemarker.h b/src/qdoc/cppcodemarker.h index 2a8456103..b585bce48 100644 --- a/src/qdoc/cppcodemarker.h +++ b/src/qdoc/cppcodemarker.h @@ -45,7 +45,8 @@ public: bool recognizeExtension(const QString &ext) override; bool recognizeLanguage(const QString &lang) override; Atom::AtomType atomType() const override; - QString markedUpCode(const QString &code, const Node *relative, const Location &location) override; + QString markedUpCode(const QString &code, const Node *relative, + const Location &location) override; QString markedUpSynopsis(const Node *node, const Node *relative, Section::Style style) override; QString markedUpQmlItem(const Node *node, bool summary) override; QString markedUpName(const Node *node) override; diff --git a/src/qdoc/cppcodeparser.cpp b/src/qdoc/cppcodeparser.cpp index ce92448de..6a5087583 100644 --- a/src/qdoc/cppcodeparser.cpp +++ b/src/qdoc/cppcodeparser.cpp @@ -62,56 +62,26 @@ static QSet metaCommands_; CppCodeParser::CppCodeParser() { if (topicCommands_.isEmpty()) { - topicCommands_ << COMMAND_CLASS - << COMMAND_DITAMAP - << COMMAND_DONTDOCUMENT - << COMMAND_ENUM - << COMMAND_EXAMPLE - << COMMAND_EXTERNALPAGE - << COMMAND_FN - << COMMAND_GROUP - << COMMAND_HEADERFILE - << COMMAND_MACRO - << COMMAND_MODULE - << COMMAND_NAMESPACE - << COMMAND_PAGE - << COMMAND_PROPERTY - << COMMAND_TYPEALIAS - << COMMAND_TYPEDEF - << COMMAND_VARIABLE - << COMMAND_QMLTYPE - << COMMAND_QMLPROPERTY - << COMMAND_QMLPROPERTYGROUP // mws 13/03/2019 - << COMMAND_QMLATTACHEDPROPERTY - << COMMAND_QMLSIGNAL - << COMMAND_QMLATTACHEDSIGNAL - << COMMAND_QMLMETHOD - << COMMAND_QMLATTACHEDMETHOD - << COMMAND_QMLBASICTYPE - << COMMAND_QMLMODULE - << COMMAND_JSTYPE - << COMMAND_JSPROPERTY - << COMMAND_JSPROPERTYGROUP // mws 13/03/2019 - << COMMAND_JSATTACHEDPROPERTY - << COMMAND_JSSIGNAL - << COMMAND_JSATTACHEDSIGNAL - << COMMAND_JSMETHOD - << COMMAND_JSATTACHEDMETHOD - << COMMAND_JSBASICTYPE - << COMMAND_JSMODULE - << COMMAND_STRUCT - << COMMAND_UNION; + topicCommands_ << COMMAND_CLASS << COMMAND_DITAMAP << COMMAND_DONTDOCUMENT << COMMAND_ENUM + << COMMAND_EXAMPLE << COMMAND_EXTERNALPAGE << COMMAND_FN << COMMAND_GROUP + << COMMAND_HEADERFILE << COMMAND_MACRO << COMMAND_MODULE << COMMAND_NAMESPACE + << COMMAND_PAGE << COMMAND_PROPERTY << COMMAND_TYPEALIAS << COMMAND_TYPEDEF + << COMMAND_VARIABLE << COMMAND_QMLTYPE << COMMAND_QMLPROPERTY + << COMMAND_QMLPROPERTYGROUP // mws 13/03/2019 + << COMMAND_QMLATTACHEDPROPERTY << COMMAND_QMLSIGNAL + << COMMAND_QMLATTACHEDSIGNAL << COMMAND_QMLMETHOD + << COMMAND_QMLATTACHEDMETHOD << COMMAND_QMLBASICTYPE << COMMAND_QMLMODULE + << COMMAND_JSTYPE << COMMAND_JSPROPERTY + << COMMAND_JSPROPERTYGROUP // mws 13/03/2019 + << COMMAND_JSATTACHEDPROPERTY << COMMAND_JSSIGNAL << COMMAND_JSATTACHEDSIGNAL + << COMMAND_JSMETHOD << COMMAND_JSATTACHEDMETHOD << COMMAND_JSBASICTYPE + << COMMAND_JSMODULE << COMMAND_STRUCT << COMMAND_UNION; } if (metaCommands_.isEmpty()) { metaCommands_ = commonMetaCommands(); - metaCommands_ << COMMAND_CONTENTSPAGE - << COMMAND_INHEADERFILE - << COMMAND_NEXTPAGE - << COMMAND_OVERLOAD - << COMMAND_PREVIOUSPAGE - << COMMAND_QMLINSTANTIATES - << COMMAND_REIMP - << COMMAND_RELATES; + metaCommands_ << COMMAND_CONTENTSPAGE << COMMAND_INHEADERFILE << COMMAND_NEXTPAGE + << COMMAND_OVERLOAD << COMMAND_PREVIOUSPAGE << COMMAND_QMLINSTANTIATES + << COMMAND_REIMP << COMMAND_RELATES; } } @@ -148,11 +118,10 @@ void CppCodeParser::initializeParser(const Config &config) nodeTypeTestFuncMap_.insert(COMMAND_PROPERTY, &Node::isProperty); nodeTypeTestFuncMap_.insert(COMMAND_VARIABLE, &Node::isVariable); - exampleFiles = config.getCanonicalPathList(CONFIG_EXAMPLES); exampleDirs = config.getCanonicalPathList(CONFIG_EXAMPLEDIRS); - QStringList exampleFilePatterns = config.getStringList( - CONFIG_EXAMPLES + Config::dot + CONFIG_FILEEXTENSIONS); + QStringList exampleFilePatterns = + config.getStringList(CONFIG_EXAMPLES + Config::dot + CONFIG_FILEEXTENSIONS); // Used for excluding dirs and files from the list of example files const auto &excludeDirsList = config.getCanonicalPathList(CONFIG_EXCLUDEDIRS); @@ -165,8 +134,8 @@ void CppCodeParser::initializeParser(const Config &config) else exampleNameFilter = "*.cpp *.h *.js *.xq *.svg *.xml *.dita *.ui"; - QStringList exampleImagePatterns = config.getStringList( - CONFIG_EXAMPLES + Config::dot + CONFIG_IMAGEEXTENSIONS); + QStringList exampleImagePatterns = + config.getStringList(CONFIG_EXAMPLES + Config::dot + CONFIG_IMAGEEXTENSIONS); if (!exampleImagePatterns.isEmpty()) exampleImageFilter = exampleImagePatterns.join(' '); @@ -215,15 +184,13 @@ const QSet &CppCodeParser::topicCommands() /*! Process the topic \a command found in the \a doc with argument \a arg. */ -Node *CppCodeParser::processTopicCommand(const Doc &doc, - const QString &command, +Node *CppCodeParser::processTopicCommand(const Doc &doc, const QString &command, const ArgLocPair &arg) { ExtraFuncData extra; if (command == COMMAND_FN) { Q_UNREACHABLE(); - } - else if (nodeTypeMap_.contains(command)) { + } else if (nodeTypeMap_.contains(command)) { /* We should only get in here if the command refers to something that can appear in a C++ namespace, @@ -232,7 +199,7 @@ Node *CppCodeParser::processTopicCommand(const Doc &doc, this way to allow the writer to refer to the entity without including the namespace qualifier. */ - Node::NodeType type = nodeTypeMap_[command]; + Node::NodeType type = nodeTypeMap_[command]; QStringList words = arg.first.split(QLatin1Char(' ')); QStringList path; int idx = 0; @@ -247,11 +214,12 @@ Node *CppCodeParser::processTopicCommand(const Doc &doc, node = qdb_->findNodeByNameAndType(path, nodeTypeTestFuncMap_[command]); if (node == nullptr) { if (isWorthWarningAbout(doc)) { - doc.location().warning(tr("Cannot find '%1' specified with '\\%2' in any header file") - .arg(arg.first).arg(command)); + doc.location().warning( + tr("Cannot find '%1' specified with '\\%2' in any header file") + .arg(arg.first) + .arg(command)); } - } - else if (node->isAggregate()) { + } else if (node->isAggregate()) { if (type == Node::Namespace) { NamespaceNode *ns = static_cast(node); ns->markSeen(); @@ -260,10 +228,8 @@ Node *CppCodeParser::processTopicCommand(const Doc &doc, /* This treats a class as a namespace. */ - if ((type == Node::Class) || - (type == Node::Namespace) || - (type == Node::Struct) || - (type == Node::Union)) { + if ((type == Node::Class) || (type == Node::Namespace) || (type == Node::Struct) + || (type == Node::Union)) { if (path.size() > 1) { path.pop_back(); QString ns = path.join(QLatin1String("::")); @@ -272,54 +238,46 @@ Node *CppCodeParser::processTopicCommand(const Doc &doc, } } return node; - } - else if (command == COMMAND_EXAMPLE) { + } else if (command == COMMAND_EXAMPLE) { if (Config::generateExamples) { ExampleNode *en = new ExampleNode(qdb_->primaryTreeRoot(), arg.first); en->setLocation(doc.startLocation()); setExampleFileLists(en); return en; } - } - else if (command == COMMAND_EXTERNALPAGE) { + } else if (command == COMMAND_EXTERNALPAGE) { ExternalPageNode *epn = new ExternalPageNode(qdb_->primaryTreeRoot(), arg.first); epn->setLocation(doc.startLocation()); return epn; - } - else if (command == COMMAND_HEADERFILE) { + } else if (command == COMMAND_HEADERFILE) { HeaderNode *hn = new HeaderNode(qdb_->primaryTreeRoot(), arg.first); hn->setLocation(doc.startLocation()); return hn; - } - else if (command == COMMAND_GROUP) { + } else if (command == COMMAND_GROUP) { CollectionNode *cn = qdb_->addGroup(arg.first); cn->setLocation(doc.startLocation()); cn->markSeen(); return cn; - } - else if (command == COMMAND_MODULE) { + } else if (command == COMMAND_MODULE) { CollectionNode *cn = qdb_->addModule(arg.first); cn->setLocation(doc.startLocation()); cn->markSeen(); return cn; - } - else if (command == COMMAND_QMLMODULE) { + } else if (command == COMMAND_QMLMODULE) { QStringList blankSplit = arg.first.split(QLatin1Char(' ')); CollectionNode *cn = qdb_->addQmlModule(blankSplit[0]); cn->setLogicalModuleInfo(blankSplit); cn->setLocation(doc.startLocation()); cn->markSeen(); return cn; - } - else if (command == COMMAND_JSMODULE) { + } else if (command == COMMAND_JSMODULE) { QStringList blankSplit = arg.first.split(QLatin1Char(' ')); CollectionNode *cn = qdb_->addJsModule(blankSplit[0]); cn->setLogicalModuleInfo(blankSplit); cn->setLocation(doc.startLocation()); cn->markSeen(); return cn; - } - else if (command == COMMAND_PAGE) { + } else if (command == COMMAND_PAGE) { Node::PageType ptype = Node::ArticlePage; QStringList args = arg.first.split(QLatin1Char(' ')); if (args.size() > 1) { @@ -365,18 +323,14 @@ Node *CppCodeParser::processTopicCommand(const Doc &doc, n->setLocation(doc.startLocation()); return n; } else if (command == COMMAND_JSBASICTYPE) { - QmlBasicTypeNode *n = new QmlBasicTypeNode(qdb_->primaryTreeRoot(), arg.first, Node::JsBasicType); + QmlBasicTypeNode *n = + new QmlBasicTypeNode(qdb_->primaryTreeRoot(), arg.first, Node::JsBasicType); n->setLocation(doc.startLocation()); return n; - } - else if ((command == COMMAND_QMLSIGNAL) || - (command == COMMAND_QMLMETHOD) || - (command == COMMAND_QMLATTACHEDSIGNAL) || - (command == COMMAND_QMLATTACHEDMETHOD) || - (command == COMMAND_JSSIGNAL) || - (command == COMMAND_JSMETHOD) || - (command == COMMAND_JSATTACHEDSIGNAL) || - (command == COMMAND_JSATTACHEDMETHOD)) { + } else if ((command == COMMAND_QMLSIGNAL) || (command == COMMAND_QMLMETHOD) + || (command == COMMAND_QMLATTACHEDSIGNAL) || (command == COMMAND_QMLATTACHEDMETHOD) + || (command == COMMAND_JSSIGNAL) || (command == COMMAND_JSMETHOD) + || (command == COMMAND_JSATTACHEDSIGNAL) || (command == COMMAND_JSATTACHEDMETHOD)) { Q_UNREACHABLE(); } return nullptr; @@ -401,11 +355,8 @@ Node *CppCodeParser::processTopicCommand(const Doc &doc, \note The two QML types \e{Component} and \e{QtObject} never have a module qualifier. */ -bool CppCodeParser::splitQmlPropertyArg(const QString &arg, - QString &type, - QString &module, - QString &qmlTypeName, - QString &name, +bool CppCodeParser::splitQmlPropertyArg(const QString &arg, QString &type, QString &module, + QString &qmlTypeName, QString &name, const Location &location) { QStringList blankSplit = arg.split(QLatin1Char(' ')); @@ -426,8 +377,7 @@ bool CppCodeParser::splitQmlPropertyArg(const QString &arg, } QString msg = "Unrecognizable QML module/component qualifier for " + arg; location.warning(tr(msg.toLatin1().data())); - } - else { + } else { QString msg = "Missing property type for " + arg; location.warning(tr(msg.toLatin1().data())); } @@ -463,15 +413,16 @@ void CppCodeParser::processQmlProperties(const Doc &doc, NodeList &nodes, DocLis if (qmlType == nullptr) qmlType = new QmlTypeNode(qdb_->primaryTreeRoot(), qmlTypeName); - for (int i=0; ifindQmlType(module, qmlTypeName)) { - QString msg = tr("All properties in a group must belong to the same type: '%1'").arg(arg); + QString msg = tr("All properties in a group must belong to the same type: '%1'") + .arg(arg); doc.startLocation().warning(msg); continue; } @@ -488,7 +439,8 @@ void CppCodeParser::processQmlProperties(const Doc &doc, NodeList &nodes, DocLis sharedNodes << qpn; } } else { - doc.startLocation().warning(tr("Command '\\%1'; not allowed with QML/JS property commands").arg(cmd)); + doc.startLocation().warning( + tr("Command '\\%1'; not allowed with QML/JS property commands").arg(cmd)); } } @@ -522,10 +474,8 @@ const QSet &CppCodeParser::metaCommands() \a node is guaranteed to be non-null. */ -void CppCodeParser::processMetaCommand(const Doc &doc, - const QString &command, - const ArgLocPair &argLocPair, - Node *node) +void CppCodeParser::processMetaCommand(const Doc &doc, const QString &command, + const ArgLocPair &argLocPair, Node *node) { QString arg = argLocPair.first; if (command == COMMAND_INHEADERFILE) { @@ -533,8 +483,7 @@ void CppCodeParser::processMetaCommand(const Doc &doc, static_cast(node)->addIncludeFile(arg); else doc.location().warning(tr("Ignored '\\%1'").arg(COMMAND_INHEADERFILE)); - } - else if (command == COMMAND_OVERLOAD) { + } else if (command == COMMAND_OVERLOAD) { /* Note that this might set the overload flag of the primary function. This is ok because the overload @@ -547,8 +496,7 @@ void CppCodeParser::processMetaCommand(const Doc &doc, static_cast(node)->setOverloadFlags(); else doc.location().warning(tr("Ignored '\\%1'").arg(COMMAND_OVERLOAD)); - } - else if (command == COMMAND_REIMP) { + } else if (command == COMMAND_REIMP) { if (node->parent() && !node->parent()->isInternal()) { if (node->isFunction()) { FunctionNode *fn = static_cast(node); @@ -558,38 +506,37 @@ void CppCodeParser::processMetaCommand(const Doc &doc, // set, issue a warning. if (fn->overridesThis().isEmpty() && isWorthWarningAbout(doc)) { doc.location().warning(tr("Cannot find base function for '\\%1' in %2()") - .arg(COMMAND_REIMP).arg(node->name()), + .arg(COMMAND_REIMP) + .arg(node->name()), tr("The function either doesn't exist in any " "base class with the same signature or it " "exists but isn't virtual.")); } fn->setReimpFlag(); - } - else { - doc.location().warning(tr("Ignored '\\%1' in %2").arg(COMMAND_REIMP).arg(node->name())); + } else { + doc.location().warning( + tr("Ignored '\\%1' in %2").arg(COMMAND_REIMP).arg(node->name())); } } - } - else if (command == COMMAND_RELATES) { + } else if (command == COMMAND_RELATES) { QStringList path = arg.split("::"); Aggregate *aggregate = qdb_->findRelatesNode(path); if (aggregate == nullptr) aggregate = new ProxyNode(node->root(), arg); if (node->parent() == aggregate) { // node is already a child of aggregate - doc.location().warning(tr("Invalid '\\%1' (already a member of '%2')") - .arg(COMMAND_RELATES, arg)); + doc.location().warning( + tr("Invalid '\\%1' (already a member of '%2')").arg(COMMAND_RELATES, arg)); } else { if (node->isAggregate()) { doc.location().warning(tr("Invalid '\\%1' not allowed in '\\%2'") - .arg(COMMAND_RELATES, node->nodeTypeString())); + .arg(COMMAND_RELATES, node->nodeTypeString())); } else if (!node->isRelatedNonmember() && //!node->parent()->name().isEmpty() && - !node->parent()->isNamespace() && - !node->parent()->isHeader()) { + !node->parent()->isNamespace() && !node->parent()->isHeader()) { if (!doc.isInternal()) { doc.location().warning(tr("Invalid '\\%1' ('%2' must be global)") - .arg(COMMAND_RELATES, node->name())); + .arg(COMMAND_RELATES, node->name())); } } else if (!node->isRelatedNonmember() && !node->parent()->isHeader()) { aggregate->adoptChild(node); @@ -603,51 +550,41 @@ void CppCodeParser::processMetaCommand(const Doc &doc, Node *clone = node->clone(aggregate); if (clone == nullptr) { doc.location().warning(tr("Invalid '\\%1' (multiple uses not allowed in '%2')") - .arg(COMMAND_RELATES, node->nodeTypeString())); + .arg(COMMAND_RELATES, node->nodeTypeString())); } else { clone->setRelatedNonmember(true); } } } - } - else if (command == COMMAND_CONTENTSPAGE) { + } else if (command == COMMAND_CONTENTSPAGE) { setLink(node, Node::ContentsLink, arg); - } - else if (command == COMMAND_NEXTPAGE) { + } else if (command == COMMAND_NEXTPAGE) { setLink(node, Node::NextLink, arg); - } - else if (command == COMMAND_PREVIOUSPAGE) { + } else if (command == COMMAND_PREVIOUSPAGE) { setLink(node, Node::PreviousLink, arg); - } - else if (command == COMMAND_STARTPAGE) { + } else if (command == COMMAND_STARTPAGE) { setLink(node, Node::StartLink, arg); - } - else if (command == COMMAND_QMLINHERITS) { + } else if (command == COMMAND_QMLINHERITS) { if (node->name() == arg) doc.location().warning(tr("%1 tries to inherit itself").arg(arg)); else if (node->isQmlType() || node->isJsType()) { QmlTypeNode *qmlType = static_cast(node); qmlType->setQmlBaseName(arg); } - } - else if (command == COMMAND_QMLINSTANTIATES) { + } else if (command == COMMAND_QMLINSTANTIATES) { if (node->isQmlType() || node->isJsType()) { ClassNode *classNode = qdb_->findClassNode(arg.split("::")); if (classNode) node->setClassNode(classNode); else doc.location().warning(tr("C++ class %1 not found: \\instantiates %1").arg(arg)); - } - else + } else doc.location().warning(tr("\\instantiates is only allowed in \\qmltype")); - } - else if (command == COMMAND_QMLDEFAULT) { + } else if (command == COMMAND_QMLDEFAULT) { node->markDefault(); - } - else if (command == COMMAND_QMLREADONLY) { + } else if (command == COMMAND_QMLREADONLY) { node->markReadOnly(1); - } - else if ((command == COMMAND_QMLABSTRACT) || (command == COMMAND_ABSTRACT)) { + } else if ((command == COMMAND_QMLABSTRACT) || (command == COMMAND_ABSTRACT)) { if (node->isQmlType() || node->isJsType()) node->setAbstract(true); } else if (command == COMMAND_DEPRECATED) { @@ -656,13 +593,14 @@ void CppCodeParser::processMetaCommand(const Doc &doc, // Note: \ingroup and \inpublicgroup are the same (and now recognized as such). qdb_->addToGroup(arg, node); } else if (command == COMMAND_INMODULE) { - qdb_->addToModule(arg,node); + qdb_->addToModule(arg, node); } else if (command == COMMAND_INQMLMODULE) { - qdb_->addToQmlModule(arg,node); + qdb_->addToQmlModule(arg, node); } else if (command == COMMAND_INJSMODULE) { qdb_->addToJsModule(arg, node); } else if (command == COMMAND_MAINCLASS) { - node->doc().location().warning(tr("'\\mainclass' is deprecated. Consider '\\ingroup mainclasses'")); + node->doc().location().warning( + tr("'\\mainclass' is deprecated. Consider '\\ingroup mainclasses'")); } else if (command == COMMAND_OBSOLETE) { node->setStatus(Node::Obsolete); } else if (command == COMMAND_NONREENTRANT) { @@ -695,8 +633,9 @@ void CppCodeParser::processMetaCommand(const Doc &doc, } else if (command == COMMAND_QTVARIABLE) { node->setQtVariable(arg); if (!node->isModule() && !node->isQmlModule()) - doc.location().warning(tr("Command '\\%1' is only meaningful in '\\module' and '\\qmlmodule'.") - .arg(COMMAND_QTVARIABLE)); + doc.location().warning( + tr("Command '\\%1' is only meaningful in '\\module' and '\\qmlmodule'.") + .arg(COMMAND_QTVARIABLE)); } else if (command == COMMAND_NOAUTOLIST) { node->setNoAutoList(true); } @@ -721,7 +660,8 @@ void CppCodeParser::processMetaCommands(const Doc &doc, Node *node) /*! Parse QML/JS signal/method topic commands. */ -FunctionNode *CppCodeParser::parseOtherFuncArg(const QString &topic, const Location &location, const QString &funcArg) +FunctionNode *CppCodeParser::parseOtherFuncArg(const QString &topic, const Location &location, + const QString &funcArg) { QString funcName; QString returnType; @@ -827,42 +767,40 @@ FunctionNode *CppCodeParser::parseMacroArg(const Location &location, const QStri oldMacroNode->doc().location().warning(tr("(The previous doc is here)")); } return macro; - } +} void CppCodeParser::setExampleFileLists(PageNode *pn) { QString examplePath = pn->name(); - QString proFileName = examplePath + QLatin1Char('/') + examplePath.split(QLatin1Char('/')).last() + ".pro"; - QString fullPath = Config::findFile(pn->doc().location(), - exampleFiles, - exampleDirs, - proFileName); + QString proFileName = + examplePath + QLatin1Char('/') + examplePath.split(QLatin1Char('/')).last() + ".pro"; + QString fullPath = + Config::findFile(pn->doc().location(), exampleFiles, exampleDirs, proFileName); if (fullPath.isEmpty()) { QString tmp = proFileName; proFileName = examplePath + QLatin1Char('/') + "qbuild.pro"; - fullPath = Config::findFile(pn->doc().location(), - exampleFiles, - exampleDirs, - proFileName); + fullPath = Config::findFile(pn->doc().location(), exampleFiles, exampleDirs, proFileName); if (fullPath.isEmpty()) { - proFileName = examplePath + QLatin1Char('/') + examplePath.split(QLatin1Char('/')).last() + ".qmlproject"; - fullPath = Config::findFile(pn->doc().location(), - exampleFiles, - exampleDirs, - proFileName); + proFileName = examplePath + QLatin1Char('/') + + examplePath.split(QLatin1Char('/')).last() + ".qmlproject"; + fullPath = + Config::findFile(pn->doc().location(), exampleFiles, exampleDirs, proFileName); if (fullPath.isEmpty()) { - proFileName = examplePath + QLatin1Char('/') + examplePath.split(QLatin1Char('/')).last() + ".pyproject"; - fullPath = Config::findFile(pn->doc().location(), - exampleFiles, - exampleDirs, + proFileName = examplePath + QLatin1Char('/') + + examplePath.split(QLatin1Char('/')).last() + ".pyproject"; + fullPath = Config::findFile(pn->doc().location(), exampleFiles, exampleDirs, proFileName); if (fullPath.isEmpty()) { - QString details = QLatin1String("Example directories: ") + exampleDirs.join(QLatin1Char(' ')); + QString details = QLatin1String("Example directories: ") + + exampleDirs.join(QLatin1Char(' ')); if (!exampleFiles.isEmpty()) - details += QLatin1String(", example files: ") + exampleFiles.join(QLatin1Char(' ')); - pn->location().warning(tr("Cannot find file '%1' or '%2'").arg(tmp).arg(proFileName), details); - pn->location().warning(tr(" EXAMPLE PATH DOES NOT EXIST: %1").arg(examplePath), details); + details += QLatin1String(", example files: ") + + exampleFiles.join(QLatin1Char(' ')); + pn->location().warning( + tr("Cannot find file '%1' or '%2'").arg(tmp).arg(proFileName), details); + pn->location().warning(tr(" EXAMPLE PATH DOES NOT EXIST: %1").arg(examplePath), + details); return; } } @@ -874,11 +812,13 @@ void CppCodeParser::setExampleFileLists(PageNode *pn) sizeOfBoringPartOfName = sizeOfBoringPartOfName - 2; fullPath.truncate(fullPath.lastIndexOf('/')); - QStringList exampleFiles = Config::getFilesHere(fullPath, exampleNameFilter, Location(), excludeDirs, excludeFiles); + QStringList exampleFiles = Config::getFilesHere(fullPath, exampleNameFilter, Location(), + excludeDirs, excludeFiles); // Search for all image files under the example project, excluding doc/images directory. QSet excludeDocDirs(excludeDirs); excludeDocDirs.insert(QDir(fullPath).canonicalPath() + "/doc/images"); - QStringList imageFiles = Config::getFilesHere(fullPath, exampleImageFilter, Location(), excludeDocDirs, excludeFiles); + QStringList imageFiles = Config::getFilesHere(fullPath, exampleImageFilter, Location(), + excludeDocDirs, excludeFiles); if (!exampleFiles.isEmpty()) { // move main.cpp and to the end, if it exists QString mainCpp; @@ -889,12 +829,13 @@ void CppCodeParser::setExampleFileLists(PageNode *pn) mainCpp = fileName; return true; } - return fileName.contains("/qrc_") || fileName.contains("/moc_") || fileName.contains("/ui_"); + return fileName.contains("/qrc_") || fileName.contains("/moc_") + || fileName.contains("/ui_"); }; - exampleFiles.erase(std::remove_if(exampleFiles.begin(), exampleFiles.end(), - isGeneratedOrMainCpp), - exampleFiles.end()); + exampleFiles.erase( + std::remove_if(exampleFiles.begin(), exampleFiles.end(), isGeneratedOrMainCpp), + exampleFiles.end()); if (!mainCpp.isEmpty()) exampleFiles.append(mainCpp); @@ -918,10 +859,8 @@ void CppCodeParser::setExampleFileLists(PageNode *pn) */ bool CppCodeParser::isJSMethodTopic(const QString &t) { - return (t == COMMAND_JSSIGNAL || - t == COMMAND_JSMETHOD || - t == COMMAND_JSATTACHEDSIGNAL || - t == COMMAND_JSATTACHEDMETHOD); + return (t == COMMAND_JSSIGNAL || t == COMMAND_JSMETHOD || t == COMMAND_JSATTACHEDSIGNAL + || t == COMMAND_JSATTACHEDMETHOD); } /*! @@ -930,10 +869,8 @@ bool CppCodeParser::isJSMethodTopic(const QString &t) */ bool CppCodeParser::isQMLMethodTopic(const QString &t) { - return (t == COMMAND_QMLSIGNAL || - t == COMMAND_QMLMETHOD || - t == COMMAND_QMLATTACHEDSIGNAL || - t == COMMAND_QMLATTACHEDMETHOD); + return (t == COMMAND_QMLSIGNAL || t == COMMAND_QMLMETHOD || t == COMMAND_QMLATTACHEDSIGNAL + || t == COMMAND_QMLATTACHEDMETHOD); } /*! @@ -954,7 +891,8 @@ bool CppCodeParser::isQMLPropertyTopic(const QString &t) return (t == COMMAND_QMLPROPERTY || t == COMMAND_QMLATTACHEDPROPERTY); } -void CppCodeParser::processTopicArgs(const Doc &doc, const QString &topic, NodeList &nodes, DocList &docs) +void CppCodeParser::processTopicArgs(const Doc &doc, const QString &topic, NodeList &nodes, + DocList &docs) { if (isQMLPropertyTopic(topic) || isJSPropertyTopic(topic)) { processQmlProperties(doc, nodes, docs); diff --git a/src/qdoc/cppcodeparser.h b/src/qdoc/cppcodeparser.h index d6b1cead0..04e556dc6 100644 --- a/src/qdoc/cppcodeparser.h +++ b/src/qdoc/cppcodeparser.h @@ -41,14 +41,17 @@ class CppCodeParser : public CodeParser { Q_DECLARE_TR_FUNCTIONS(QDoc::CppCodeParser) - struct ExtraFuncData { + struct ExtraFuncData + { Aggregate *root; // Used as the parent. Node::NodeType type; // The node type: Function, etc. bool isAttached; // If true, the method is attached. - bool isMacro; // If true, we are parsing a macro signature. - ExtraFuncData() : root(nullptr), type(Node::Function), isAttached(false), isMacro(false) { } + bool isMacro; // If true, we are parsing a macro signature. + ExtraFuncData() : root(nullptr), type(Node::Function), isAttached(false), isMacro(false) {} ExtraFuncData(Aggregate *r, Node::NodeType t, bool a) - : root(r), type(t), isAttached(a), isMacro(false) { } + : root(r), type(t), isAttached(a), isMacro(false) + { + } }; public: @@ -60,7 +63,8 @@ public: QStringList headerFileNameFilter() override; QStringList sourceFileNameFilter() override; FunctionNode *parseMacroArg(const Location &location, const QString ¯oArg); - FunctionNode *parseOtherFuncArg(const QString &topic, const Location &location, const QString &funcArg); + FunctionNode *parseOtherFuncArg(const QString &topic, const Location &location, + const QString &funcArg); static bool isJSMethodTopic(const QString &t); static bool isQMLMethodTopic(const QString &t); static bool isJSPropertyTopic(const QString &t); @@ -69,17 +73,13 @@ public: protected: static const QSet &topicCommands(); static const QSet &metaCommands(); - virtual Node *processTopicCommand(const Doc &doc, - const QString &command, + virtual Node *processTopicCommand(const Doc &doc, const QString &command, const ArgLocPair &arg); void processQmlProperties(const Doc &doc, NodeList &nodes, DocList &docs); - bool splitQmlPropertyArg(const QString &arg, - QString &type, - QString &module, - QString &element, - QString &name, - const Location &location); - void processMetaCommand(const Doc &doc, const QString &command, const ArgLocPair &argLocPair, Node *node); + bool splitQmlPropertyArg(const QString &arg, QString &type, QString &module, QString &element, + QString &name, const Location &location); + void processMetaCommand(const Doc &doc, const QString &command, const ArgLocPair &argLocPair, + Node *node); void processMetaCommands(const Doc &doc, Node *node); void processMetaCommands(NodeList &nodes, DocList &docs); void processTopicArgs(const Doc &doc, const QString &topic, NodeList &nodes, DocList &docs); @@ -89,7 +89,7 @@ private: void setExampleFileLists(PageNode *pn); protected: - typedef bool (Node::*NodeTypeTestFunc) () const; + typedef bool (Node::*NodeTypeTestFunc)() const; QMap nodeTypeTestFuncMap_; QMap nodeTypeMap_; diff --git a/src/qdoc/doc.cpp b/src/qdoc/doc.cpp index 83033ca51..9929a2a2a 100644 --- a/src/qdoc/doc.cpp +++ b/src/qdoc/doc.cpp @@ -174,117 +174,116 @@ enum { NOT_A_CMD }; -static struct { +static struct +{ const char *english; int no; QString *alias; -} cmds[] = { - { "a", CMD_A, nullptr }, - { "annotatedlist", CMD_ANNOTATEDLIST, nullptr }, - { "b", CMD_B, nullptr }, - { "badcode", CMD_BADCODE, nullptr }, - { "bold", CMD_BOLD, nullptr }, - { "br", CMD_BR, nullptr }, - { "brief", CMD_BRIEF, nullptr }, - { "c", CMD_C, nullptr }, - { "caption", CMD_CAPTION, nullptr }, - { "code", CMD_CODE, nullptr }, - { "codeline", CMD_CODELINE, nullptr }, - { "div", CMD_DIV, nullptr}, - { "dots", CMD_DOTS, nullptr }, - { "e", CMD_E, nullptr }, - { "else", CMD_ELSE, nullptr }, - { "endcode", CMD_ENDCODE, nullptr }, - { "enddiv", CMD_ENDDIV, nullptr }, - { "endfootnote", CMD_ENDFOOTNOTE, nullptr }, - { "endif", CMD_ENDIF, nullptr }, - { "endlegalese", CMD_ENDLEGALESE, nullptr }, - { "endlink", CMD_ENDLINK, nullptr }, - { "endlist", CMD_ENDLIST, nullptr }, - { "endmapref", CMD_ENDMAPREF, nullptr }, - { "endomit", CMD_ENDOMIT, nullptr }, - { "endquotation", CMD_ENDQUOTATION, nullptr }, - { "endraw", CMD_ENDRAW, nullptr }, - { "endsection1", CMD_ENDSECTION1, nullptr }, // ### don't document for now - { "endsection2", CMD_ENDSECTION2, nullptr }, // ### don't document for now - { "endsection3", CMD_ENDSECTION3, nullptr }, // ### don't document for now - { "endsection4", CMD_ENDSECTION4, nullptr }, // ### don't document for now - { "endsidebar", CMD_ENDSIDEBAR, nullptr }, - { "endtable", CMD_ENDTABLE, nullptr }, - { "endtopicref", CMD_ENDTOPICREF, nullptr }, - { "footnote", CMD_FOOTNOTE, nullptr }, - { "generatelist", CMD_GENERATELIST, nullptr }, - { "granularity", CMD_GRANULARITY, nullptr }, // ### don't document for now - { "header", CMD_HEADER, nullptr }, - { "hr", CMD_HR, nullptr }, - { "i", CMD_I, nullptr}, - { "if", CMD_IF, nullptr }, - { "image", CMD_IMAGE, nullptr }, - { "important", CMD_IMPORTANT, nullptr }, - { "include", CMD_INCLUDE, nullptr }, - { "inlineimage", CMD_INLINEIMAGE, nullptr }, - { "index", CMD_INDEX, nullptr }, // ### don't document for now - { "input", CMD_INPUT, nullptr }, - { "keyword", CMD_KEYWORD, nullptr }, - { "l", CMD_L, nullptr }, - { "legalese", CMD_LEGALESE, nullptr}, - { "li", CMD_LI, nullptr}, - { "link", CMD_LINK, nullptr }, - { "list", CMD_LIST, nullptr }, - { "mapref", CMD_MAPREF, nullptr }, - { "meta", CMD_META, nullptr }, - { "newcode", CMD_NEWCODE, nullptr }, - { "note", CMD_NOTE, nullptr }, - { "o", CMD_O, nullptr }, - { "oldcode", CMD_OLDCODE, nullptr }, - { "omit", CMD_OMIT, nullptr }, - { "omitvalue", CMD_OMITVALUE, nullptr }, - { "overload", CMD_OVERLOAD, nullptr }, - { "printline", CMD_PRINTLINE, nullptr }, - { "printto", CMD_PRINTTO, nullptr }, - { "printuntil", CMD_PRINTUNTIL, nullptr }, - { "quotation", CMD_QUOTATION, nullptr }, - { "quotefile", CMD_QUOTEFILE, nullptr }, - { "quotefromfile", CMD_QUOTEFROMFILE, nullptr }, - { "quotefunction", CMD_QUOTEFUNCTION, nullptr }, - { "raw", CMD_RAW, nullptr }, - { "row", CMD_ROW, nullptr }, - { "sa", CMD_SA, nullptr }, - { "section1", CMD_SECTION1, nullptr }, - { "section2", CMD_SECTION2, nullptr }, - { "section3", CMD_SECTION3, nullptr }, - { "section4", CMD_SECTION4, nullptr }, - { "sidebar", CMD_SIDEBAR, nullptr }, - { "sincelist", CMD_SINCELIST, nullptr }, - { "skipline", CMD_SKIPLINE, nullptr }, - { "skipto", CMD_SKIPTO, nullptr }, - { "skipuntil", CMD_SKIPUNTIL, nullptr }, - { "snippet", CMD_SNIPPET, nullptr }, - { "span", CMD_SPAN, nullptr }, - { "sub", CMD_SUB, nullptr }, - { "sup", CMD_SUP, nullptr }, - { "table", CMD_TABLE, nullptr }, - { "tableofcontents", CMD_TABLEOFCONTENTS, nullptr }, - { "target", CMD_TARGET, nullptr }, - { "topicref", CMD_TOPICREF, nullptr }, - { "tt", CMD_TT, nullptr }, - { "uicontrol", CMD_UICONTROL, nullptr }, - { "underline", CMD_UNDERLINE, nullptr }, - { "unicode", CMD_UNICODE, nullptr }, - { "value", CMD_VALUE, nullptr }, - { "warning", CMD_WARNING, nullptr }, - { "qml", CMD_QML, nullptr }, - { "endqml", CMD_ENDQML, nullptr }, - { "cpp", CMD_CPP, nullptr }, - { "endcpp", CMD_ENDCPP, nullptr }, - { "qmltext", CMD_QMLTEXT, nullptr }, - { "endqmltext", CMD_ENDQMLTEXT, nullptr }, - { "cpptext", CMD_CPPTEXT, nullptr }, - { "endcpptext", CMD_ENDCPPTEXT, nullptr }, - { "js", CMD_JS, nullptr }, - { "endjs", CMD_ENDJS, nullptr}, - { nullptr, 0, nullptr } -}; +} cmds[] = { { "a", CMD_A, nullptr }, + { "annotatedlist", CMD_ANNOTATEDLIST, nullptr }, + { "b", CMD_B, nullptr }, + { "badcode", CMD_BADCODE, nullptr }, + { "bold", CMD_BOLD, nullptr }, + { "br", CMD_BR, nullptr }, + { "brief", CMD_BRIEF, nullptr }, + { "c", CMD_C, nullptr }, + { "caption", CMD_CAPTION, nullptr }, + { "code", CMD_CODE, nullptr }, + { "codeline", CMD_CODELINE, nullptr }, + { "div", CMD_DIV, nullptr }, + { "dots", CMD_DOTS, nullptr }, + { "e", CMD_E, nullptr }, + { "else", CMD_ELSE, nullptr }, + { "endcode", CMD_ENDCODE, nullptr }, + { "enddiv", CMD_ENDDIV, nullptr }, + { "endfootnote", CMD_ENDFOOTNOTE, nullptr }, + { "endif", CMD_ENDIF, nullptr }, + { "endlegalese", CMD_ENDLEGALESE, nullptr }, + { "endlink", CMD_ENDLINK, nullptr }, + { "endlist", CMD_ENDLIST, nullptr }, + { "endmapref", CMD_ENDMAPREF, nullptr }, + { "endomit", CMD_ENDOMIT, nullptr }, + { "endquotation", CMD_ENDQUOTATION, nullptr }, + { "endraw", CMD_ENDRAW, nullptr }, + { "endsection1", CMD_ENDSECTION1, nullptr }, // ### don't document for now + { "endsection2", CMD_ENDSECTION2, nullptr }, // ### don't document for now + { "endsection3", CMD_ENDSECTION3, nullptr }, // ### don't document for now + { "endsection4", CMD_ENDSECTION4, nullptr }, // ### don't document for now + { "endsidebar", CMD_ENDSIDEBAR, nullptr }, + { "endtable", CMD_ENDTABLE, nullptr }, + { "endtopicref", CMD_ENDTOPICREF, nullptr }, + { "footnote", CMD_FOOTNOTE, nullptr }, + { "generatelist", CMD_GENERATELIST, nullptr }, + { "granularity", CMD_GRANULARITY, nullptr }, // ### don't document for now + { "header", CMD_HEADER, nullptr }, + { "hr", CMD_HR, nullptr }, + { "i", CMD_I, nullptr }, + { "if", CMD_IF, nullptr }, + { "image", CMD_IMAGE, nullptr }, + { "important", CMD_IMPORTANT, nullptr }, + { "include", CMD_INCLUDE, nullptr }, + { "inlineimage", CMD_INLINEIMAGE, nullptr }, + { "index", CMD_INDEX, nullptr }, // ### don't document for now + { "input", CMD_INPUT, nullptr }, + { "keyword", CMD_KEYWORD, nullptr }, + { "l", CMD_L, nullptr }, + { "legalese", CMD_LEGALESE, nullptr }, + { "li", CMD_LI, nullptr }, + { "link", CMD_LINK, nullptr }, + { "list", CMD_LIST, nullptr }, + { "mapref", CMD_MAPREF, nullptr }, + { "meta", CMD_META, nullptr }, + { "newcode", CMD_NEWCODE, nullptr }, + { "note", CMD_NOTE, nullptr }, + { "o", CMD_O, nullptr }, + { "oldcode", CMD_OLDCODE, nullptr }, + { "omit", CMD_OMIT, nullptr }, + { "omitvalue", CMD_OMITVALUE, nullptr }, + { "overload", CMD_OVERLOAD, nullptr }, + { "printline", CMD_PRINTLINE, nullptr }, + { "printto", CMD_PRINTTO, nullptr }, + { "printuntil", CMD_PRINTUNTIL, nullptr }, + { "quotation", CMD_QUOTATION, nullptr }, + { "quotefile", CMD_QUOTEFILE, nullptr }, + { "quotefromfile", CMD_QUOTEFROMFILE, nullptr }, + { "quotefunction", CMD_QUOTEFUNCTION, nullptr }, + { "raw", CMD_RAW, nullptr }, + { "row", CMD_ROW, nullptr }, + { "sa", CMD_SA, nullptr }, + { "section1", CMD_SECTION1, nullptr }, + { "section2", CMD_SECTION2, nullptr }, + { "section3", CMD_SECTION3, nullptr }, + { "section4", CMD_SECTION4, nullptr }, + { "sidebar", CMD_SIDEBAR, nullptr }, + { "sincelist", CMD_SINCELIST, nullptr }, + { "skipline", CMD_SKIPLINE, nullptr }, + { "skipto", CMD_SKIPTO, nullptr }, + { "skipuntil", CMD_SKIPUNTIL, nullptr }, + { "snippet", CMD_SNIPPET, nullptr }, + { "span", CMD_SPAN, nullptr }, + { "sub", CMD_SUB, nullptr }, + { "sup", CMD_SUP, nullptr }, + { "table", CMD_TABLE, nullptr }, + { "tableofcontents", CMD_TABLEOFCONTENTS, nullptr }, + { "target", CMD_TARGET, nullptr }, + { "topicref", CMD_TOPICREF, nullptr }, + { "tt", CMD_TT, nullptr }, + { "uicontrol", CMD_UICONTROL, nullptr }, + { "underline", CMD_UNDERLINE, nullptr }, + { "unicode", CMD_UNICODE, nullptr }, + { "value", CMD_VALUE, nullptr }, + { "warning", CMD_WARNING, nullptr }, + { "qml", CMD_QML, nullptr }, + { "endqml", CMD_ENDQML, nullptr }, + { "cpp", CMD_CPP, nullptr }, + { "endcpp", CMD_ENDCPP, nullptr }, + { "qmltext", CMD_QMLTEXT, nullptr }, + { "endqmltext", CMD_ENDQMLTEXT, nullptr }, + { "cpptext", CMD_CPPTEXT, nullptr }, + { "endcpptext", CMD_ENDCPPTEXT, nullptr }, + { "js", CMD_JS, nullptr }, + { "endjs", CMD_ENDJS, nullptr }, + { nullptr, 0, nullptr } }; typedef QHash QHash_QString_int; typedef QHash QHash_QString_Macro; @@ -296,24 +295,20 @@ Q_GLOBAL_STATIC(QHash_QString_Macro, macroHash) class DocPrivateExtra { public: - Doc::Sections granularity_; - Doc::Sections section_; // ### - QVector tableOfContents_; - QVector tableOfContentsLevels_; - QVector keywords_; - QVector targets_; - QStringMultiMap metaMap_; - - DocPrivateExtra() - : granularity_(Doc::Part) - , section_(Doc::NoSection) - { } + Doc::Sections granularity_; + Doc::Sections section_; // ### + QVector tableOfContents_; + QVector tableOfContentsLevels_; + QVector keywords_; + QVector targets_; + QStringMultiMap metaMap_; + + DocPrivateExtra() : granularity_(Doc::Part), section_(Doc::NoSection) {} }; struct Shared // ### get rid of { - Shared() - : count(1) { } + Shared() : count(1) {} void ref() { ++count; } bool deref() { return (--count == 0); } @@ -323,8 +318,7 @@ struct Shared // ### get rid of static QString cleanLink(const QString &link) { int colonPos = link.indexOf(':'); - if ((colonPos == -1) || - (!link.startsWith("file:") && !link.startsWith("mailto:"))) + if ((colonPos == -1) || (!link.startsWith("file:") && !link.startsWith("mailto:"))) return link; return link.mid(colonPos + 1).simplified(); } @@ -334,8 +328,7 @@ typedef QMap CommandMap; class DocPrivate : public Shared { public: - DocPrivate(const Location &start = Location::null, - const Location &end = Location::null, + DocPrivate(const Location &start = Location::null, const Location &end = Location::null, const QString &source = QString()); ~DocPrivate(); @@ -361,9 +354,7 @@ public: DitaRefList ditamap_; }; -DocPrivate::DocPrivate(const Location &start, - const Location &end, - const QString &source) +DocPrivate::DocPrivate(const Location &start, const Location &end, const QString &source) : start_loc(start), end_loc(end), src(source), @@ -404,9 +395,7 @@ bool DocPrivate::isEnumDocSimplifiable() const while (atom) { if (atom->type() == Atom::AutoLink || atom->type() == Atom::String) { justMetColon = atom->string().endsWith(QLatin1Char(':')); - } - else if ((atom->type() == Atom::ListLeft) && - (atom->string() == ATOM_LIST_VALUE)) { + } else if ((atom->type() == Atom::ListLeft) && (atom->string() == ATOM_LIST_VALUE)) { if (justMetColon || numValueTables > 0) return false; ++numValueTables; @@ -421,9 +410,7 @@ class DocParser Q_DECLARE_TR_FUNCTIONS(QDoc::DocParser) public: - void parse(const QString &source, - DocPrivate *docPrivate, - const QSet &metaCommandSet, + void parse(const QString &source, DocPrivate *docPrivate, const QSet &metaCommandSet, const QSet &possibleTopics); static int endCmdFor(int cmd); @@ -443,8 +430,7 @@ public: private: Location &location(); - QString detailsUnknownCommand(const QSet &metaCommandSet, - const QString &str); + QString detailsUnknownCommand(const QSet &metaCommandSet, const QString &str); void insertTarget(const QString &target, bool keyword); void include(const QString &fileName, const QString &identifier); void startFormat(const QString &format, int cmd); @@ -463,8 +449,7 @@ private: void appendToCode(const QString &code, Atom::AtomType defaultType); void startNewPara(); void enterPara(Atom::AtomType leftType = Atom::ParaLeft, - Atom::AtomType rightType = Atom::ParaRight, - const QString &string = QString()); + Atom::AtomType rightType = Atom::ParaRight, const QString &string = QString()); void leavePara(); void leaveValue(); void leaveValueList(); @@ -472,7 +457,8 @@ private: CodeMarker *quoteFromFile(); bool expandMacro(); void expandMacro(const QString &name, const QString &def, int numParams); - QString expandMacroToString(const QString &name, const QString &def, int numParams, const QString &matchExpr); + QString expandMacroToString(const QString &name, const QString &def, int numParams, + const QString &matchExpr); Doc::Sections getSectioningUnit(); QString getArgument(bool verbatim = false); QString getBracedArgument(bool verbatim); @@ -504,12 +490,8 @@ private: Location cachedLoc; int cachedPos; - DocPrivate* priv; - enum ParagraphState { - OutsideParagraph, - InSingleLineParagraph, - InMultiLineParagraph - }; + DocPrivate *priv; + enum ParagraphState { OutsideParagraph, InSingleLineParagraph, InMultiLineParagraph }; ParagraphState paraState; bool inTableHeader; bool inTableRow; @@ -546,10 +528,8 @@ bool DocParser::quoting = false; found in \a source. These metacommands are not markup text commands. They are topic commands and related metacommands. */ -void DocParser::parse(const QString &source, - DocPrivate *docPrivate, - const QSet &metaCommandSet, - const QSet &possibleTopics) +void DocParser::parse(const QString &source, DocPrivate *docPrivate, + const QSet &metaCommandSet, const QSet &possibleTopics) { input_ = source; pos = 0; @@ -592,8 +572,7 @@ void DocParser::parse(const QString &source, if (ch.isLetterOrNumber()) { cmdStr += ch; ++pos; - } - else { + } else { break; } } @@ -604,31 +583,30 @@ void DocParser::parse(const QString &source, if (input_.at(pos).isSpace()) { skipAllSpaces(); appendChar(QLatin1Char(' ')); - } - else { + } else { appendChar(input_.at(pos++)); } } - } - else { + } else { // Ignore quoting atoms to make appendToCode() // append to the correct atom. if (!quoting || !isQuote(priv->text.lastAtom())) lastAtom = priv->text.lastAtom(); - int cmd = cmdHash()->value(cmdStr,NOT_A_CMD); + int cmd = cmdHash()->value(cmdStr, NOT_A_CMD); switch (cmd) { case CMD_A: enterPara(); p1 = getArgument(); - append(Atom::FormattingLeft,ATOM_FORMATTING_PARAMETER); + append(Atom::FormattingLeft, ATOM_FORMATTING_PARAMETER); append(Atom::String, p1); - append(Atom::FormattingRight,ATOM_FORMATTING_PARAMETER); + append(Atom::FormattingRight, ATOM_FORMATTING_PARAMETER); priv->params.insert(p1); break; case CMD_BADCODE: leavePara(); - append(Atom::CodeBad, getCode(CMD_BADCODE, marker, getMetaCommandArgument(cmdStr))); + append(Atom::CodeBad, + getCode(CMD_BADCODE, marker, getMetaCommandArgument(cmdStr))); break; case CMD_BR: enterPara(); @@ -660,18 +638,19 @@ void DocParser::parse(const QString &source, break; case CMD_QML: leavePara(); - append(Atom::Qml, getCode(CMD_QML, - CodeMarker::markerForLanguage(QLatin1String("QML")), - getMetaCommandArgument(cmdStr))); + append(Atom::Qml, + getCode(CMD_QML, CodeMarker::markerForLanguage(QLatin1String("QML")), + getMetaCommandArgument(cmdStr))); break; case CMD_QMLTEXT: append(Atom::QmlText); break; case CMD_JS: leavePara(); - append(Atom::JavaScript, getCode(CMD_JS, - CodeMarker::markerForLanguage(QLatin1String("JavaScript")), - getMetaCommandArgument(cmdStr))); + append(Atom::JavaScript, + getCode(CMD_JS, + CodeMarker::markerForLanguage(QLatin1String("JavaScript")), + getMetaCommandArgument(cmdStr))); break; case CMD_DIV: leavePara(); @@ -764,7 +743,7 @@ void DocParser::parse(const QString &source, case CMD_ENDLINK: if (closeCommand(cmd)) { if (priv->text.lastAtom()->type() == Atom::String - && priv->text.lastAtom()->string().endsWith(QLatin1Char(' '))) + && priv->text.lastAtom()->string().endsWith(QLatin1Char(' '))) priv->text.lastAtom()->chopString(); append(Atom::FormattingRight, ATOM_FORMATTING_LINK); } @@ -773,10 +752,8 @@ void DocParser::parse(const QString &source, if (closeCommand(cmd)) { leavePara(); if (openedLists.top().isStarted()) { - append(Atom::ListItemRight, - openedLists.top().styleString()); - append(Atom::ListRight, - openedLists.top().styleString()); + append(Atom::ListItemRight, openedLists.top().styleString()); + append(Atom::ListRight, openedLists.top().styleString()); } openedLists.pop(); } @@ -836,13 +813,12 @@ void DocParser::parse(const QString &source, append(Atom::SinceList, getRestOfLine().simplified()); break; case CMD_GENERATELIST: { - QString arg1 = getArgument(); - QString arg2 = getOptionalArgument(); - if (!arg2.isEmpty()) - arg1 += " " + arg2; - append(Atom::GeneratedList, arg1); - } - break; + QString arg1 = getArgument(); + QString arg2 = getOptionalArgument(); + if (!arg2.isEmpty()) + arg1 += " " + arg2; + append(Atom::GeneratedList, arg1); + } break; case CMD_GRANULARITY: priv->constructExtra(); priv->extra->granularity_ = getSectioningUnit(); @@ -855,16 +831,17 @@ void DocParser::parse(const QString &source, } else { if (openedCommands.contains(CMD_TABLE)) location().warning(tr("Cannot use '\\%1' within '\\%2'") - .arg(cmdName(CMD_HEADER)) - .arg(cmdName(openedCommands.top()))); + .arg(cmdName(CMD_HEADER)) + .arg(cmdName(openedCommands.top()))); else location().warning(tr("Cannot use '\\%1' outside of '\\%2'") - .arg(cmdName(CMD_HEADER)) - .arg(cmdName(CMD_TABLE))); + .arg(cmdName(CMD_HEADER)) + .arg(cmdName(CMD_TABLE))); } break; case CMD_I: - location().warning(tr("'\\i' is deprecated. Use '\\e' for italic or '\\li' for list item")); + location().warning(tr( + "'\\i' is deprecated. Use '\\e' for italic or '\\li' for list item")); Q_FALLTHROUGH(); case CMD_E: startFormat(ATOM_FORMATTING_ITALIC, cmd); @@ -908,15 +885,15 @@ void DocParser::parse(const QString &source, indexStartedPara = true; } else { const Atom *last = priv->text.lastAtom(); - if (indexStartedPara && - (last->type() != Atom::FormattingRight || - last->string() != ATOM_FORMATTING_INDEX)) + if (indexStartedPara + && (last->type() != Atom::FormattingRight + || last->string() != ATOM_FORMATTING_INDEX)) indexStartedPara = false; } startFormat(ATOM_FORMATTING_INDEX, cmd); break; case CMD_KEYWORD: - insertTarget(getRestOfLine(),true); + insertTarget(getRestOfLine(), true); break; case CMD_L: enterPara(); @@ -926,14 +903,14 @@ void DocParser::parse(const QString &source, p1 = getArgument(); append(p1, p2); if (!p2.isEmpty() && !(priv->text.lastAtom()->error().isEmpty())) - location().warning(tr("Check parameter in '[ ]' of '\\l' command: '%1', " - "possible misspelling, or unrecognized module name") - .arg(priv->text.lastAtom()->error())); + location().warning( + tr("Check parameter in '[ ]' of '\\l' command: '%1', " + "possible misspelling, or unrecognized module name") + .arg(priv->text.lastAtom()->error())); if (isLeftBraceAhead()) { currentLinkAtom = priv->text.lastAtom(); startFormat(ATOM_FORMATTING_LINK, cmd); - } - else { + } else { append(Atom::FormattingLeft, ATOM_FORMATTING_LINK); append(Atom::String, cleanLink(p1)); append(Atom::FormattingRight, ATOM_FORMATTING_LINK); @@ -942,9 +919,10 @@ void DocParser::parse(const QString &source, p1 = getArgument(); append(p1, p2); if (!p2.isEmpty() && !(priv->text.lastAtom()->error().isEmpty())) - location().warning(tr("Check parameter in '[ ]' of '\\l' command: '%1', " - "possible misspelling, or unrecognized module name") - .arg(priv->text.lastAtom()->error())); + location().warning( + tr("Check parameter in '[ ]' of '\\l' command: '%1', " + "possible misspelling, or unrecognized module name") + .arg(priv->text.lastAtom()->error())); append(Atom::FormattingLeft, ATOM_FORMATTING_LINK); append(Atom::String, cleanLink(p1)); append(Atom::FormattingRight, ATOM_FORMATTING_LINK); @@ -969,8 +947,7 @@ void DocParser::parse(const QString &source, case CMD_LIST: if (openCommand(cmd)) { leavePara(); - openedLists.push(OpenedList(location(), - getOptionalArgument())); + openedLists.push(OpenedList(location(), getOptionalArgument())); } break; case CMD_TOPICREF: @@ -1030,9 +1007,9 @@ void DocParser::parse(const QString &source, if (!inTableHeader && !inTableRow) { location().warning(tr("Missing '\\%1' or '\\%2' before '\\%3'") - .arg(cmdName(CMD_HEADER)) - .arg(cmdName(CMD_ROW)) - .arg(cmdName(CMD_LI))); + .arg(cmdName(CMD_HEADER)) + .arg(cmdName(CMD_ROW)) + .arg(cmdName(CMD_LI))); append(Atom::TableRowLeft); inTableRow = true; } else if (inTableItem) { @@ -1044,9 +1021,9 @@ void DocParser::parse(const QString &source, inTableItem = true; } else location().warning(tr("Command '\\%1' outside of '\\%2' and '\\%3'") - .arg(cmdName(cmd)) - .arg(cmdName(CMD_LIST)) - .arg(cmdName(CMD_TABLE))); + .arg(cmdName(cmd)) + .arg(cmdName(CMD_LIST)) + .arg(cmdName(CMD_TABLE))); break; case CMD_OLDCODE: leavePara(); @@ -1130,7 +1107,9 @@ void DocParser::parse(const QString &source, append(Atom::CodeQuoteArgument, slashed(marker->functionEndRegExp(p1))); } quoter.quoteTo(location(), cmdStr, slashed(marker->functionBeginRegExp(p1))); - append(Atom::Code, quoter.quoteUntil(location(), cmdStr, slashed(marker->functionEndRegExp(p1)))); + append(Atom::Code, + quoter.quoteUntil(location(), cmdStr, + slashed(marker->functionEndRegExp(p1)))); quoter.reset(); break; } @@ -1138,8 +1117,8 @@ void DocParser::parse(const QString &source, leavePara(); p1 = getRestOfLine(); if (p1.isEmpty()) - location().warning(tr("Missing format name after '\\%1'") - .arg(cmdName(CMD_RAW))); + location().warning( + tr("Missing format name after '\\%1'").arg(cmdName(CMD_RAW))); append(Atom::FormatIf, p1); append(Atom::RawString, untabifyEtc(getUntilEnd(cmd))); append(Atom::FormatElse); @@ -1151,17 +1130,17 @@ void DocParser::parse(const QString &source, if (isLeftBraceAhead()) p1 = getArgument(true); leaveTableRow(); - append(Atom::TableRowLeft,p1); + append(Atom::TableRowLeft, p1); inTableRow = true; } else { if (openedCommands.contains(CMD_TABLE)) location().warning(tr("Cannot use '\\%1' within '\\%2'") - .arg(cmdName(CMD_ROW)) - .arg(cmdName(openedCommands.top()))); + .arg(cmdName(CMD_ROW)) + .arg(cmdName(openedCommands.top()))); else location().warning(tr("Cannot use '\\%1' outside of '\\%2'") - .arg(cmdName(CMD_ROW)) - .arg(cmdName(CMD_TABLE))); + .arg(cmdName(CMD_ROW)) + .arg(cmdName(CMD_TABLE))); } break; case CMD_SA: @@ -1258,7 +1237,7 @@ void DocParser::parse(const QString &source, append(Atom::TableOfContents, p1); break; case CMD_TARGET: - insertTarget(getRestOfLine(),false); + insertTarget(getRestOfLine(), false); break; case CMD_TT: startFormat(ATOM_FORMATTING_TELETYPE, cmd); @@ -1276,7 +1255,7 @@ void DocParser::parse(const QString &source, uint unicodeChar = p1.toUInt(&ok, 0); if (!ok || (unicodeChar == 0x0000) || (unicodeChar > 0xFFFE)) location().warning(tr("Invalid Unicode character '%1' specified with '%2'") - .arg(p1, cmdName(CMD_UNICODE))); + .arg(p1, cmdName(CMD_UNICODE))); else append(Atom::String, QChar(unicodeChar)); break; @@ -1286,7 +1265,8 @@ void DocParser::parse(const QString &source, if (openedLists.top().style() == OpenedList::Value) { QString p2; p1 = getArgument(); - if (p1.startsWith(QLatin1String("[since ")) && p1.endsWith(QLatin1String("]"))) { + if (p1.startsWith(QLatin1String("[since ")) + && p1.endsWith(QLatin1String("]"))) { p2 = p1.mid(7, p1.length() - 8); p1 = getArgument(); } @@ -1327,32 +1307,33 @@ void DocParser::parse(const QString &source, if (!p1.isEmpty()) { append(Atom::ParaLeft); append(Atom::String, "This function overloads "); - append(Atom::AutoLink,p1); + append(Atom::AutoLink, p1); append(Atom::String, "."); append(Atom::ParaRight); } else { append(Atom::ParaLeft); - append(Atom::String,"This is an overloaded function."); + append(Atom::String, "This is an overloaded function."); append(Atom::ParaRight); p1 = getMetaCommandArgument(cmdStr); } - priv->metaCommandMap[cmdStr].append(ArgLocPair(p1,location())); + priv->metaCommandMap[cmdStr].append(ArgLocPair(p1, location())); break; case NOT_A_CMD: if (metaCommandSet.contains(cmdStr)) { priv->metacommandsUsed.insert(cmdStr); QString arg = getMetaCommandArgument(cmdStr); - priv->metaCommandMap[cmdStr].append(ArgLocPair(arg,location())); + priv->metaCommandMap[cmdStr].append(ArgLocPair(arg, location())); if (possibleTopics.contains(cmdStr)) { if (!cmdStr.endsWith(QLatin1String("propertygroup"))) - priv->topics_.append(Topic(cmdStr,arg)); + priv->topics_.append(Topic(cmdStr, arg)); } } else if (macroHash()->contains(cmdStr)) { const Macro ¯o = macroHash()->value(cmdStr); int numPendingFi = 0; int numFormatDefs = 0; QString matchExpr; - for (auto it = macro.otherDefs.constBegin(); it != macro.otherDefs.constEnd(); ++it) { + for (auto it = macro.otherDefs.constBegin(); + it != macro.otherDefs.constEnd(); ++it) { if (it.key() == "match") { matchExpr = it.value(); } else { @@ -1372,15 +1353,12 @@ void DocParser::parse(const QString &source, if (!macro.defaultDef.isEmpty()) { if (numFormatDefs > 0) { - macro.defaultDefLocation.warning( - tr("Macro cannot have both " - "format-specific and qdoc-" - "syntax definitions")); + macro.defaultDefLocation.warning(tr("Macro cannot have both " + "format-specific and qdoc-" + "syntax definitions")); } else { - QString expanded = expandMacroToString(cmdStr, - macro.defaultDef, - macro.numParams, - matchExpr); + QString expanded = expandMacroToString(cmdStr, macro.defaultDef, + macro.numParams, matchExpr); input_.replace(backslashPos, endPos - backslashPos, expanded); len = input_.length(); pos = backslashPos; @@ -1408,15 +1386,14 @@ void DocParser::parse(const QString &source, } else if (latin1Ch == '_' || latin1Ch == '@') { ++numStrangeSymbols; ++curPos; - } else if ((latin1Ch == ':') && - (curPos < cmdStr.size() - 1) && - (cmdStr.at(curPos + 1) == QLatin1Char(':'))) { + } else if ((latin1Ch == ':') && (curPos < cmdStr.size() - 1) + && (cmdStr.at(curPos + 1) == QLatin1Char(':'))) { ++numStrangeSymbols; curPos += 2; } else if (latin1Ch == '(') { if (curPos > 0) { - if ((curPos < cmdStr.size() - 1) && - (cmdStr.at(curPos + 1) == QLatin1Char(')'))) { + if ((curPos < cmdStr.size() - 1) + && (cmdStr.at(curPos + 1) == QLatin1Char(')'))) { ++numStrangeSymbols; pos += 2; break; @@ -1439,7 +1416,7 @@ void DocParser::parse(const QString &source, // The QML and JS property group commands are no longer required // for grouping QML and JS properties. They are allowed but ignored. location().warning(tr("Unknown command '\\%1'").arg(cmdStr), - detailsUnknownCommand(metaCommandSet,cmdStr)); + detailsUnknownCommand(metaCommandSet, cmdStr)); } enterPara(); append(Atom::UnknownCommand, cmdStr); @@ -1471,10 +1448,9 @@ void DocParser::parse(const QString &source, } else if (*format == ATOM_FORMATTING_LINK) { // hack for C++ to support links like // \l{QString::}{count()} - if (currentLinkAtom && - currentLinkAtom->string().endsWith("::")) { - QString suffix = Text::subText(currentLinkAtom, - priv->text.lastAtom()).toString(); + if (currentLinkAtom && currentLinkAtom->string().endsWith("::")) { + QString suffix = + Text::subText(currentLinkAtom, priv->text.lastAtom()).toString(); currentLinkAtom->appendString(suffix); } currentLinkAtom = nullptr; @@ -1515,9 +1491,7 @@ void DocParser::parse(const QString &source, } else { if (ch.isSpace()) { ++pos; - if ((ch == '\n') && - (paraState == InSingleLineParagraph || - isBlankLine())) { + if ((ch == '\n') && (paraState == InSingleLineParagraph || isBlankLine())) { leavePara(); newWord = false; } else { @@ -1552,7 +1526,8 @@ void DocParser::parse(const QString &source, } else if (latin1Ch == '_' || latin1Ch == '@') { ++numStrangeSymbols; ++pos; - } else if (latin1Ch == ':' && pos < len - 1 && input_.at(pos + 1) == QLatin1Char(':')) { + } else if (latin1Ch == ':' && pos < len - 1 + && input_.at(pos + 1) == QLatin1Char(':')) { ++numStrangeSymbols; pos += 2; } else if (latin1Ch == '(') { @@ -1587,8 +1562,7 @@ void DocParser::parse(const QString &source, appendWord(word); else append(Atom::AutoLink, word); - } - else { + } else { appendWord(word); } } @@ -1606,8 +1580,7 @@ void DocParser::parse(const QString &source, if (openedCommands.top() != CMD_OMIT) { location().warning(tr("Missing '\\%1'").arg(endCmdName(openedCommands.top()))); - } - else if (preprocessorSkipping.count() > 0) { + } else if (preprocessorSkipping.count() > 0) { location().warning(tr("Missing '\\%1'").arg(cmdName(CMD_ENDIF))); } @@ -1635,8 +1608,7 @@ Location &DocParser::location() return cachedLoc; } -QString DocParser::detailsUnknownCommand(const QSet &metaCommandSet, - const QString &str) +QString DocParser::detailsUnknownCommand(const QSet &metaCommandSet, const QString &str) { QSet commandSet = metaCommandSet; int i = 0; @@ -1648,7 +1620,8 @@ QString DocParser::detailsUnknownCommand(const QSet &metaCommandSet, if (aliasMap()->contains(str)) return tr("The command '\\%1' was renamed '\\%2' by the configuration" " file. Use the new name.") - .arg(str).arg((*aliasMap())[str]); + .arg(str) + .arg((*aliasMap())[str]); QString best = nearestName(str, commandSet); if (best.isEmpty()) @@ -1661,15 +1634,13 @@ void DocParser::insertTarget(const QString &target, bool keyword) if (targetMap_.contains(target)) { location().warning(tr("Duplicate target name '%1'").arg(target)); targetMap_[target].warning(tr("(The previous occurrence is here)")); - } - else { + } else { targetMap_.insert(target, location()); priv->constructExtra(); if (keyword) { append(Atom::Keyword, target); priv->extra->keywords_.append(priv->text.lastAtom()); - } - else { + } else { append(Atom::Target, target); priv->extra->targets_.append(priv->text.lastAtom()); } @@ -1685,14 +1656,11 @@ void DocParser::include(const QString &fileName, const QString &identifier) QString filePath = Doc::config()->getIncludeFilePath(fileName); if (filePath.isEmpty()) { location().warning(tr("Cannot find qdoc include file '%1'").arg(fileName)); - } - else { + } else { QFile inFile(filePath); if (!inFile.open(QFile::ReadOnly)) { - location().warning(tr("Cannot open qdoc include file '%1'") - .arg(userFriendlyFilePath)); - } - else { + location().warning(tr("Cannot open qdoc include file '%1'").arg(userFriendlyFilePath)); + } else { location().push(userFriendlyFilePath); QTextStream inStream(&inFile); @@ -1703,15 +1671,14 @@ void DocParser::include(const QString &fileName, const QString &identifier) input_.insert(pos, includedStuff); len = input_.length(); openedInputs.push(pos + includedStuff.length()); - } - else { + } else { QStringList lineBuffer = includedStuff.split(QLatin1Char('\n')); int i = 0; int startLine = -1; while (i < lineBuffer.size()) { if (lineBuffer[i].startsWith("//!")) { if (lineBuffer[i].contains(identifier)) { - startLine = i+1; + startLine = i + 1; break; } } @@ -1719,31 +1686,28 @@ void DocParser::include(const QString &fileName, const QString &identifier) } if (startLine < 0) { location().warning(tr("Cannot find '%1' in '%2'") - .arg(identifier) - .arg(userFriendlyFilePath)); + .arg(identifier) + .arg(userFriendlyFilePath)); return; - } QString result; i = startLine; do { if (lineBuffer[i].startsWith("//!")) { - if (i 1) { openedCommands.pop(); return true; - } - else { + } else { bool contains = false; QStack opened2 = openedCommands; while (opened2.size() > 1) { @@ -1843,12 +1794,11 @@ bool DocParser::closeCommand(int endCmd) if (contains) { while (endCmdFor(openedCommands.top()) != endCmd && openedCommands.size() > 1) { location().warning(tr("Missing '\\%1' before '\\%2'") - .arg(endCmdName(openedCommands.top())) - .arg(cmdName(endCmd))); + .arg(endCmdName(openedCommands.top())) + .arg(cmdName(endCmd))); openedCommands.pop(); } - } - else { + } else { location().warning(tr("Unexpected '\\%1'").arg(cmdName(endCmd))); } return false; @@ -1860,25 +1810,21 @@ void DocParser::startSection(Doc::Sections unit, int cmd) leaveValueList(); if (currentSection == Doc::NoSection) { - currentSection = (Doc::Sections) (unit); + currentSection = (Doc::Sections)(unit); priv->constructExtra(); priv->extra->section_ = currentSection; - } - else - endSection(unit,cmd); + } else + endSection(unit, cmd); append(Atom::SectionLeft, QString::number(unit)); priv->constructExtra(); priv->extra->tableOfContents_.append(priv->text.lastAtom()); priv->extra->tableOfContentsLevels_.append(unit); - enterPara(Atom::SectionHeadingLeft, - Atom::SectionHeadingRight, - QString::number(unit)); + enterPara(Atom::SectionHeadingLeft, Atom::SectionHeadingRight, QString::number(unit)); currentSection = unit; - } -void DocParser::endSection(int , int) // (int unit, int endCmd) +void DocParser::endSection(int, int) // (int unit, int endCmd) { leavePara(); append(Atom::SectionRight, QString::number(currentSection)); @@ -1903,12 +1849,10 @@ void DocParser::parseAlso() // hack for C++ to support links like \l{QString::}{count()} if (target.endsWith("::")) target += str; - } - else { + } else { str = target; } - } - else { + } else { target = getArgument(); str = cleanLink(target); if (target == QLatin1String("and") || target == QLatin1String(".")) @@ -1917,10 +1861,8 @@ void DocParser::parseAlso() if (!skipMe) { Text also; - also << Atom(Atom::Link, target) - << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK) - << str - << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK); + also << Atom(Atom::Link, target) << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK) + << str << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK); priv->addAlso(also); } @@ -1928,8 +1870,7 @@ void DocParser::parseAlso() if (pos < len && input_[pos] == ',') { pos++; skipSpacesOrOneEndl(); - } - else if (input_[pos] != '\n') { + } else if (input_[pos] != '\n') { location().warning(tr("Missing comma in '\\%1'").arg(cmdName(CMD_SA))); } } @@ -1978,8 +1919,7 @@ void DocParser::appendChar(QChar ch) if (ch == QLatin1Char(' ')) { if (!atom->string().endsWith(QLatin1Char(' '))) atom->appendChar(QLatin1Char(' ')); - } - else + } else atom->appendChar(ch); } @@ -1987,8 +1927,7 @@ void DocParser::appendWord(const QString &word) { if (priv->text.lastAtom()->type() != Atom::String) { append(Atom::String, word); - } - else + } else priv->text.lastAtom()->appendString(word); } @@ -2017,14 +1956,12 @@ void DocParser::startNewPara() enterPara(); } -void DocParser::enterPara(Atom::AtomType leftType, - Atom::AtomType rightType, - const QString &string) +void DocParser::enterPara(Atom::AtomType leftType, Atom::AtomType rightType, const QString &string) { if (paraState == OutsideParagraph) { - if ((priv->text.lastAtom()->type() != Atom::ListItemLeft) && - (priv->text.lastAtom()->type() != Atom::DivLeft)) { + if ((priv->text.lastAtom()->type() != Atom::ListItemLeft) + && (priv->text.lastAtom()->type() != Atom::DivLeft)) { leaveValueList(); } @@ -2035,8 +1972,7 @@ void DocParser::enterPara(Atom::AtomType leftType, pendingParaString = string; if (leftType == Atom::SectionHeadingLeft) { paraState = InSingleLineParagraph; - } - else { + } else { paraState = InMultiLineParagraph; } skipSpacesOrOneEndl(); @@ -2053,10 +1989,9 @@ void DocParser::leavePara() if (priv->text.lastAtom()->type() == pendingParaLeftType) { priv->text.stripLastAtom(); - } - else { - if (priv->text.lastAtom()->type() == Atom::String && - priv->text.lastAtom()->string().endsWith(QLatin1Char(' '))) { + } else { + if (priv->text.lastAtom()->type() == Atom::String + && priv->text.lastAtom()->string().endsWith(QLatin1Char(' '))) { priv->text.lastAtom()->chopString(); } append(pendingParaRightType, pendingParaString); @@ -2074,8 +2009,7 @@ void DocParser::leaveValue() if (openedLists.isEmpty()) { openedLists.push(OpenedList(OpenedList::Value)); append(Atom::ListLeft, ATOM_LIST_VALUE); - } - else { + } else { if (priv->text.lastAtom()->type() == Atom::Nop) priv->text.stripLastAtom(); append(Atom::ListItemRight, ATOM_LIST_VALUE); @@ -2085,8 +2019,7 @@ void DocParser::leaveValue() void DocParser::leaveValueList() { leavePara(); - if (!openedLists.isEmpty() && - (openedLists.top().style() == OpenedList::Value)) { + if (!openedLists.isEmpty() && (openedLists.top().style() == OpenedList::Value)) { if (priv->text.lastAtom()->type() == Atom::Nop) priv->text.stripLastAtom(); append(Atom::ListItemRight, ATOM_LIST_VALUE); @@ -2143,9 +2076,7 @@ bool DocParser::expandMacro() if (macroHash()->contains(cmdStr)) { const Macro ¯o = macroHash()->value(cmdStr); if (!macro.defaultDef.isEmpty()) { - QString expanded = expandMacroToString(cmdStr, - macro.defaultDef, - macro.numParams, + QString expanded = expandMacroToString(cmdStr, macro.defaultDef, macro.numParams, macro.otherDefs.value("match")); input_.replace(backslashPos, pos - backslashPos, expanded); len = input_.length(); @@ -2168,25 +2099,23 @@ bool DocParser::expandMacro() return false; } -void DocParser::expandMacro(const QString &name, - const QString &def, - int numParams) +void DocParser::expandMacro(const QString &name, const QString &def, int numParams) { if (numParams == 0) { append(Atom::RawString, def); - } - else { + } else { QStringList args; QString rawString; for (int i = 0; i < numParams; ++i) { if (numParams == 1 || isLeftBraceAhead()) { args << getArgument(true); - } - else { + } else { location().warning(tr("Macro '\\%1' invoked with too few" " arguments (expected %2, got %3)") - .arg(name).arg(numParams).arg(i)); + .arg(name) + .arg(numParams) + .arg(i)); numParams = i; break; } @@ -2195,16 +2124,14 @@ void DocParser::expandMacro(const QString &name, int j = 0; while (j < def.size()) { int paramNo; - if (((paramNo = def[j].unicode()) >= 1) && - (paramNo <= numParams)) { + if (((paramNo = def[j].unicode()) >= 1) && (paramNo <= numParams)) { if (!rawString.isEmpty()) { append(Atom::RawString, rawString); rawString.clear(); } append(Atom::String, args[paramNo - 1]); j += 1; - } - else { + } else { rawString += def[j++]; } } @@ -2213,7 +2140,8 @@ void DocParser::expandMacro(const QString &name, } } -QString DocParser::expandMacroToString(const QString &name, const QString &def, int numParams, const QString &matchExpr) +QString DocParser::expandMacroToString(const QString &name, const QString &def, int numParams, + const QString &matchExpr) { QString rawString; @@ -2224,11 +2152,12 @@ QString DocParser::expandMacroToString(const QString &name, const QString &def, for (int i = 0; i < numParams; ++i) { if (numParams == 1 || isLeftBraceAhead()) { args << getArgument(true); - } - else { + } else { location().warning(tr("Macro '\\%1' invoked with too few" " arguments (expected %2, got %3)") - .arg(name).arg(numParams).arg(i)); + .arg(name) + .arg(numParams) + .arg(i)); numParams = i; break; } @@ -2237,12 +2166,10 @@ QString DocParser::expandMacroToString(const QString &name, const QString &def, int j = 0; while (j < def.size()) { int paramNo; - if (((paramNo = def[j].unicode()) >= 1) && - (paramNo <= numParams)) { + if (((paramNo = def[j].unicode()) >= 1) && (paramNo <= numParams)) { rawString += args[paramNo - 1]; j += 1; - } - else { + } else { rawString += def[j++]; } } @@ -2269,20 +2196,15 @@ Doc::Sections DocParser::getSectioningUnit() if (name == "section1") { return Doc::Section1; - } - else if (name == "section2") { + } else if (name == "section2") { return Doc::Section2; - } - else if (name == "section3") { + } else if (name == "section3") { return Doc::Section3; - } - else if (name == "section4") { + } else if (name == "section4") { return Doc::Section4; - } - else if (name.isEmpty()) { + } else if (name.isEmpty()) { return Doc::NoSection; - } - else { + } else { location().warning(tr("Invalid section '%1'").arg(name)); return Doc::NoSection; } @@ -2356,8 +2278,8 @@ QString DocParser::getArgument(bool verbatim) int startPos = pos; QString arg = getBracedArgument(verbatim); if (arg.isEmpty()) { - while ((pos < input_.length()) && - ((delimDepth > 0) || ((delimDepth == 0) && !input_[pos].isSpace()))) { + while ((pos < input_.length()) + && ((delimDepth > 0) || ((delimDepth == 0) && !input_[pos].isSpace()))) { switch (input_[pos].unicode()) { case '(': case '[': @@ -2385,9 +2307,8 @@ QString DocParser::getArgument(bool verbatim) } } endPos = pos; - if ((arg.length() > 1) && - (QString(".,:;!?").indexOf(input_[pos - 1]) != -1) && - !arg.endsWith("...")) { + if ((arg.length() > 1) && (QString(".,:;!?").indexOf(input_[pos - 1]) != -1) + && !arg.endsWith("...")) { arg.truncate(arg.length() - 1); --pos; } @@ -2443,11 +2364,9 @@ QString DocParser::getBracketedArgument() QString DocParser::getOptionalArgument() { skipSpacesOrOneEndl(); - if (pos + 1 < input_.length() && input_[pos] == '\\' && - input_[pos + 1].isLetterOrNumber()) { + if (pos + 1 < input_.length() && input_[pos] == '\\' && input_[pos + 1].isLetterOrNumber()) { return QString(); - } - else { + } else { return getArgument(); } } @@ -2467,12 +2386,9 @@ QString DocParser::getRestOfLine() if (input_[pos] == '\\' && !trailingSlash) { trailingSlash = true; ++pos; - while ((pos < input_.size()) && - input_[pos].isSpace() && - (input_[pos] != '\n')) + while ((pos < input_.size()) && input_[pos].isSpace() && (input_[pos] != '\n')) ++pos; - } - else { + } else { trailingSlash = false; ++pos; } @@ -2534,8 +2450,7 @@ QString DocParser::getUntilEnd(int cmd) if (end == -1) { location().warning(tr("Missing '\\%1'").arg(cmdName(endCmd))); pos = input_.length(); - } - else { + } else { t = input_.mid(pos, end - pos); pos = end + rx.matchedLength(); } @@ -2550,10 +2465,8 @@ QString DocParser::getCode(int cmd, CodeMarker *marker, const QString &argStr) QStringList args = argStr.split(" ", QString::SkipEmptyParts); int paramNo, j = 0; while (j < code.size()) { - if (code[j] == '\\' - && j < code.size() - 1 - && (paramNo = code[j + 1].digitValue()) >= 1 - && paramNo <= args.size()) { + if (code[j] == '\\' && j < code.size() - 1 && (paramNo = code[j + 1].digitValue()) >= 1 + && paramNo <= args.size()) { QString p = args[paramNo - 1]; code.replace(j, 2, p); j += qMin(1, p.size()); @@ -2624,9 +2537,7 @@ bool DocParser::isLeftBracketAhead() */ void DocParser::skipSpacesOnLine() { - while ((pos < input_.length()) && - input_[pos].isSpace() && - (input_[pos].unicode() != '\n')) + while ((pos < input_.length()) && input_[pos].isSpace() && (input_[pos].unicode() != '\n')) ++pos; } @@ -2641,8 +2552,7 @@ void DocParser::skipSpacesOrOneEndl() if (ch == '\n') { if (firstEndl == -1) { firstEndl = pos; - } - else { + } else { pos = firstEndl; break; } @@ -2659,9 +2569,8 @@ void DocParser::skipAllSpaces() void DocParser::skipToNextPreprocessorCommand() { - QRegExp rx("\\\\(?:" + cmdName(CMD_IF) + QLatin1Char('|') + - cmdName(CMD_ELSE) + QLatin1Char('|') + - cmdName(CMD_ENDIF) + ")\\b"); + QRegExp rx("\\\\(?:" + cmdName(CMD_IF) + QLatin1Char('|') + cmdName(CMD_ELSE) + QLatin1Char('|') + + cmdName(CMD_ENDIF) + ")\\b"); int end = rx.indexIn(input_, pos + 1); // ### + 1 necessary? if (end == -1) @@ -2776,8 +2685,7 @@ int DocParser::indentLevel(const QString &str) for (int i = 0; i < str.length(); ++i) { if (str[i] == '\n') { column = 0; - } - else { + } else { if (str[i] != ' ' && column < minIndent) minIndent = column; ++column; @@ -2798,8 +2706,7 @@ QString DocParser::unindent(int level, const QString &str) if (str[i] == QLatin1Char('\n')) { t += '\n'; column = 0; - } - else { + } else { if (column >= level) t += str[i]; ++column; @@ -2821,9 +2728,7 @@ QString DocParser::slashed(const QString &str) bool DocParser::isCode(const Atom *atom) { Atom::AtomType type = atom->type(); - return (type == Atom::Code - || type == Atom::Qml - || type == Atom::JavaScript); + return (type == Atom::Code || type == Atom::Qml || type == Atom::JavaScript); } /*! @@ -2832,10 +2737,8 @@ bool DocParser::isCode(const Atom *atom) bool DocParser::isQuote(const Atom *atom) { Atom::AtomType type = atom->type(); - return (type == Atom::CodeQuoteArgument - || type == Atom::CodeQuoteCommand - || type == Atom::SnippetCommand - || type == Atom::SnippetIdentifier + return (type == Atom::CodeQuoteArgument || type == Atom::CodeQuoteCommand + || type == Atom::SnippetCommand || type == Atom::SnippetIdentifier || type == Atom::SnippetLocation); } @@ -2847,19 +2750,15 @@ bool DocParser::isQuote(const Atom *atom) QML documentation, there is the case where the qdoc \e{qmlproperty} command can appear multiple times in a qdoc comment. */ -Doc::Doc(const Location &start_loc, - const Location &end_loc, - const QString &source, - const QSet &metaCommandSet, - const QSet &topics) +Doc::Doc(const Location &start_loc, const Location &end_loc, const QString &source, + const QSet &metaCommandSet, const QSet &topics) { priv = new DocPrivate(start_loc, end_loc, source); DocParser parser; parser.parse(source, priv, metaCommandSet, topics); } -Doc::Doc(const Doc &doc) - : priv(nullptr) +Doc::Doc(const Doc &doc) : priv(nullptr) { operator=(doc); } @@ -2890,15 +2789,14 @@ void Doc::simplifyEnumDoc() Atom *atom = priv->text.firstAtom(); while (atom) { - if ((atom->type() == Atom::ListLeft) && - (atom->string() == ATOM_LIST_VALUE)) { - while (atom && ((atom->type() != Atom::ListRight) || - (atom->string() != ATOM_LIST_VALUE))) + if ((atom->type() == Atom::ListLeft) && (atom->string() == ATOM_LIST_VALUE)) { + while (atom + && ((atom->type() != Atom::ListRight) + || (atom->string() != ATOM_LIST_VALUE))) atom = atom->next(); if (atom) atom = atom->next(); - } - else { + } else { newText << *atom; atom = atom->next(); } @@ -2979,8 +2877,7 @@ Text Doc::trimmedBriefText(const QString &className) const should be rethought. */ while (atom) { - if (atom->type() == Atom::AutoLink - || atom->type() == Atom::String) { + if (atom->type() == Atom::AutoLink || atom->type() == Atom::String) { briefStr += atom->string(); } else if (atom->type() == Atom::C) { briefStr += Generator::plainCode(atom->string()); @@ -2990,20 +2887,17 @@ Text Doc::trimmedBriefText(const QString &className) const QStringList w = briefStr.split(QLatin1Char(' ')); if (!w.isEmpty() && w.first() == "Returns") { - } - else { + } else { if (!w.isEmpty() && w.first() == "The") w.removeFirst(); if (!w.isEmpty() && (w.first() == className || w.first() == classNameOnly)) w.removeFirst(); - if (!w.isEmpty() && ((w.first() == "class") || - (w.first() == "function") || - (w.first() == "macro") || - (w.first() == "widget") || - (w.first() == "namespace") || - (w.first() == "header"))) + if (!w.isEmpty() + && ((w.first() == "class") || (w.first() == "function") || (w.first() == "macro") + || (w.first() == "widget") || (w.first() == "namespace") + || (w.first() == "header"))) w.removeFirst(); if (!w.isEmpty() && (w.first() == "is" || w.first() == "provides")) @@ -3039,8 +2933,7 @@ Doc::Sections Doc::granularity() const { if (priv == nullptr || priv->extra == nullptr) { return DocPrivateExtra().granularity_; - } - else { + } else { return priv->extra->granularity_; } } @@ -3166,9 +3059,9 @@ void Doc::initialize(const Config &config) if (reverseAliasMap.contains(alias)) { config.lastLocation().warning(tr("Command name '\\%1' cannot stand" " for both '\\%2' and '\\%3'") - .arg(alias) - .arg(reverseAliasMap[alias]) - .arg(a)); + .arg(alias) + .arg(reverseAliasMap[alias]) + .arg(a)); } else { reverseAliasMap.insert(alias, a); } @@ -3212,11 +3105,11 @@ void Doc::initialize(const Config &config) " inconsistent number" " of arguments (%2" " %3, %4 %5)") - .arg(macroName) - .arg(f) - .arg(m) - .arg(other) - .arg(macro.numParams)); + .arg(macroName) + .arg(f) + .arg(m) + .arg(other) + .arg(macro.numParams)); silent = true; } if (macro.numParams < m) @@ -3230,9 +3123,8 @@ void Doc::initialize(const Config &config) // If any of the formats define quotinginformation, activate quoting DocParser::quoting = config.getBool(CONFIG_QUOTINGINFORMATION); for (const auto &format : config.getOutputFormats()) - DocParser::quoting = DocParser::quoting || config.getBool(format - + Config::dot - + CONFIG_QUOTINGINFORMATION); + DocParser::quoting = DocParser::quoting + || config.getBool(format + Config::dot + CONFIG_QUOTINGINFORMATION); } /*! @@ -3279,8 +3171,7 @@ void Doc::trimCStyleComment(Location &location, QString &str) break; cleaned += ' '; metAsterColumn = true; - } - else { + } else { if (str[i] == '\n') { if (!metAsterColumn) break; @@ -3298,24 +3189,18 @@ void Doc::trimCStyleComment(Location &location, QString &str) str = str.mid(3, str.length() - 5); } -QString Doc::resolveFile(const Location &location, - const QString &fileName, +QString Doc::resolveFile(const Location &location, const QString &fileName, QString *userFriendlyFilePath) { - const QString result = Config::findFile(location, - DocParser::exampleFiles, - DocParser::exampleDirs, - fileName, userFriendlyFilePath); - qCDebug(lcQdoc).noquote().nospace() << __FUNCTION__ << "(location=" - << location.fileName() << ':' << location.lineNo() - << ", fileName=\"" << fileName << "\"), resolved to \"" - << result; + const QString result = Config::findFile(location, DocParser::exampleFiles, + DocParser::exampleDirs, fileName, userFriendlyFilePath); + qCDebug(lcQdoc).noquote().nospace() + << __FUNCTION__ << "(location=" << location.fileName() << ':' << location.lineNo() + << ", fileName=\"" << fileName << "\"), resolved to \"" << result; return result; } -CodeMarker *Doc::quoteFromFile(const Location &location, - Quoter "er, - const QString &fileName) +CodeMarker *Doc::quoteFromFile(const Location &location, Quoter "er, const QString &fileName) { quoter.reset(); @@ -3324,17 +3209,17 @@ CodeMarker *Doc::quoteFromFile(const Location &location, QString userFriendlyFilePath; const QString filePath = resolveFile(location, fileName, &userFriendlyFilePath); if (filePath.isEmpty()) { - QString details = QLatin1String("Example directories: ") + DocParser::exampleDirs.join(QLatin1Char(' ')); + QString details = QLatin1String("Example directories: ") + + DocParser::exampleDirs.join(QLatin1Char(' ')); if (!DocParser::exampleFiles.isEmpty()) - details += QLatin1String(", example files: ") + DocParser::exampleFiles.join(QLatin1Char(' ')); + details += QLatin1String(", example files: ") + + DocParser::exampleFiles.join(QLatin1Char(' ')); location.warning(tr("Cannot find file to quote from: '%1'").arg(fileName), details); - } - else { + } else { QFile inFile(filePath); if (!inFile.open(QFile::ReadOnly)) { location.warning(tr("Cannot open file to quote from: '%1'").arg(userFriendlyFilePath)); - } - else { + } else { QTextStream inStream(&inFile); code = DocParser::untabifyEtc(inStream.readAll()); } @@ -3373,8 +3258,7 @@ QString Doc::canonicalTitle(const QString &title) begun = true; dashAppended = false; lastAlnum = result.size(); - } - else if (!dashAppended) { + } else if (!dashAppended) { if (begun) result += QLatin1Char('-'); dashAppended = true; @@ -3415,6 +3299,9 @@ TopicRef::~TopicRef() Returns a reference to the structure that will be used for generating a DITA mao. */ -const DitaRefList& Doc::ditamap() const { return priv->ditamap_; } +const DitaRefList &Doc::ditamap() const +{ + return priv->ditamap_; +} QT_END_NAMESPACE diff --git a/src/qdoc/doc.h b/src/qdoc/doc.h index 38c469ee3..758901f1d 100644 --- a/src/qdoc/doc.h +++ b/src/qdoc/doc.h @@ -58,10 +58,14 @@ struct Topic { QString topic; QString args; - Topic() { } - Topic(QString &t, const QString &a) : topic(t), args(a) { } + Topic() {} + Topic(QString &t, const QString &a) : topic(t), args(a) {} bool isEmpty() const { return topic.isEmpty(); } - void clear() { topic.clear(); args.clear(); } + void clear() + { + topic.clear(); + args.clear(); + } }; typedef QVector TopicList; @@ -70,8 +74,8 @@ typedef QVector DitaRefList; class DitaRef { public: - DitaRef() { } - virtual ~DitaRef() { } + DitaRef() {} + virtual ~DitaRef() {} const QString &navtitle() const { return navtitle_; } const QString &href() const { return href_; } @@ -79,7 +83,7 @@ public: void setHref(const QString &t) { href_ = t; } virtual bool isMapRef() const = 0; virtual const DitaRefList *subrefs() const { return nullptr; } - virtual void appendSubref(DitaRef *) { } + virtual void appendSubref(DitaRef *) {} private: QString navtitle_; @@ -89,7 +93,7 @@ private: class TopicRef : public DitaRef { public: - TopicRef() { } + TopicRef() {} ~TopicRef() override; bool isMapRef() const override { return false; } @@ -103,7 +107,7 @@ private: class MapRef : public DitaRef { public: - MapRef() { } + MapRef() {} bool isMapRef() const override { return true; } }; @@ -125,18 +129,15 @@ public: }; Doc() : priv(nullptr) {} - Doc(const Location &start_loc, - const Location &end_loc, - const QString &source, - const QSet &metaCommandSet, - const QSet &topics); + 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 DitaRefList &ditamap() const; const Location &location() const; const Location &startLocation() const; @@ -172,8 +173,7 @@ public: 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, + static CodeMarker *quoteFromFile(const Location &location, Quoter "er, const QString &fileName); static QString canonicalTitle(const QString &title); static const Config *config() { return config_; } diff --git a/src/qdoc/editdistance.cpp b/src/qdoc/editdistance.cpp index ff4630e15..841f5f48d 100644 --- a/src/qdoc/editdistance.cpp +++ b/src/qdoc/editdistance.cpp @@ -36,7 +36,7 @@ QT_BEGIN_NAMESPACE int editDistance(const QString &s, const QString &t) { -#define D( i, j ) d[(i) * n + (j)] +#define D(i, j) d[(i)*n + (j)] int i; int j; int m = s.length() + 1; @@ -45,22 +45,22 @@ int editDistance(const QString &s, const QString &t) int result; for (i = 0; i < m; ++i) - D( i, 0 ) = i; + D(i, 0) = i; for (j = 0; j < n; ++j) - D( 0, j ) = j; + D(0, j) = j; for (i = 1; i < m; ++i) { for (j = 1; j < n; ++j) { - if ( s[i - 1] == t[j - 1] ) { - D( i, j ) = D( i - 1, j - 1 ); + if (s[i - 1] == t[j - 1]) { + D(i, j) = D(i - 1, j - 1); } else { - int x = D( i - 1, j ); - int y = D( i - 1, j - 1 ); - int z = D( i, j - 1 ); - D( i, j ) = 1 + qMin( qMin(x, y), z ); + int x = D(i - 1, j); + int y = D(i - 1, j - 1); + int z = D(i, j - 1); + D(i, j) = 1 + qMin(qMin(x, y), z); } } } - result = D( m - 1, n - 1 ); + result = D(m - 1, n - 1); delete[] d; return result; #undef D diff --git a/src/qdoc/generator.cpp b/src/qdoc/generator.cpp index a65b47333..846db961a 100644 --- a/src/qdoc/generator.cpp +++ b/src/qdoc/generator.cpp @@ -47,7 +47,7 @@ #include #ifndef QT_BOOTSTRAPPED -# include "QtCore/qurl.h" +# include "QtCore/qurl.h" #endif QT_BEGIN_NAMESPACE @@ -55,8 +55,8 @@ QT_BEGIN_NAMESPACE Generator *Generator::currentGenerator_; QStringList Generator::exampleDirs; QStringList Generator::exampleImgExts; -QMap > Generator::fmtLeftMaps; -QMap > Generator::fmtRightMaps; +QMap> Generator::fmtLeftMaps; +QMap> Generator::fmtRightMaps; QVector Generator::generators; QStringList Generator::imageDirs; QStringList Generator::imageFiles; @@ -117,9 +117,7 @@ Generator::~Generator() generators.removeAll(this); } -void Generator::appendFullName(Text &text, - const Node *apparentNode, - const Node *relative, +void Generator::appendFullName(Text &text, const Node *apparentNode, const Node *relative, const Node *actualNode) { if (actualNode == nullptr) @@ -130,16 +128,13 @@ void Generator::appendFullName(Text &text, << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK); } -void Generator::appendFullName(Text &text, - const Node *apparentNode, - const QString &fullName, +void Generator::appendFullName(Text &text, const Node *apparentNode, const QString &fullName, const Node *actualNode) { if (actualNode == nullptr) actualNode = apparentNode; text << Atom(Atom::LinkNode, CodeMarker::stringForNode(actualNode)) - << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK) - << Atom(Atom::String, fullName) + << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK) << Atom(Atom::String, fullName) << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK); } @@ -148,7 +143,7 @@ void Generator::appendFullNames(Text &text, const NodeList &nodes, const Node *r int index = 0; for (const auto &node : nodes) { appendFullName(text, node, relative); - text << comma(index++,nodes.count()); + text << comma(index++, nodes.count()); } } @@ -175,7 +170,7 @@ void Generator::signatureList(const NodeList &nodes, const Node *relative, CodeM Text text; int count = 0; text << Atom(Atom::ListLeft, QString("bullet")); - for (const auto &node: nodes) { + for (const auto &node : nodes) { text << Atom(Atom::ListItemNumber, QString::number(++count)); text << Atom(Atom::ListItemLeft, QString("bullet")); appendSignature(text, node); @@ -187,7 +182,7 @@ void Generator::signatureList(const NodeList &nodes, const Node *relative, CodeM int Generator::appendSortedNames(Text &text, const ClassNode *cn, const QVector &rc) { - QMap classMap; + QMap classMap; for (const auto &relatedClass : rc) { ClassNode *rcn = relatedClass.node_; if (rcn && rcn->isInAPI()) { @@ -208,12 +203,12 @@ int Generator::appendSortedNames(Text &text, const ClassNode *cn, const QVector< int Generator::appendSortedQmlNames(Text &text, const Node *base, const NodeList &subs) { - QMap classMap; + QMap classMap; for (const auto sub : subs) { Text text; - if (!base->isQtQuickNode() || !sub->isQtQuickNode() || - (base->logicalModuleName() == sub->logicalModuleName())) { + if (!base->isQtQuickNode() || !sub->isQtQuickNode() + || (base->logicalModuleName() == sub->logicalModuleName())) { appendFullName(text, sub, base); classMap[text.toString().toLower()] = text; } @@ -254,8 +249,8 @@ void Generator::writeOutFileNames() QFile *Generator::openSubPageFile(const Node *node, const QString &fileName) { QString path = outputDir() + QLatin1Char('/'); - if (Generator::useOutputSubdirs() && !node->outputSubdirectory().isEmpty() && - !outputDir().endsWith(node->outputSubdirectory())) { + if (Generator::useOutputSubdirs() && !node->outputSubdirectory().isEmpty() + && !outputDir().endsWith(node->outputSubdirectory())) { path += node->outputSubdirectory() + QLatin1Char('/'); } path += fileName; @@ -264,11 +259,10 @@ QFile *Generator::openSubPageFile(const Node *node, const QString &fileName) auto outFile = new QFile(outPath); if (!redirectDocumentationToDevNull_ && outFile->exists()) { node->location().error( - tr("Output file already exists; overwriting %1").arg(outFile->fileName())); + tr("Output file already exists; overwriting %1").arg(outFile->fileName())); } if (!outFile->open(QFile::WriteOnly)) { - node->location().fatal( - tr("Cannot open output file '%1'").arg(outFile->fileName())); + node->location().fatal(tr("Cannot open output file '%1'").arg(outFile->fileName())); } qCDebug(lcQdoc, "Writing: %s", qPrintable(path)); outFileNames_ << fileName; @@ -286,7 +280,7 @@ QFile *Generator::openSubPageFile(const Node *node, const QString &fileName) void Generator::beginFilePage(const Node *node, const QString &fileName) { QFile *outFile = openSubPageFile(node, fileName); - QTextStream* out = new QTextStream(outFile); + QTextStream *out = new QTextStream(outFile); #ifndef QT_NO_TEXTCODEC if (outputCodec) out->setCodec(outputCodec); @@ -294,17 +288,17 @@ void Generator::beginFilePage(const Node *node, const QString &fileName) outStreamStack.push(out); } - /*! - Creates the file named \a fileName in the output directory. - Attaches a QTextStream to the created file, which is written - to all over the place using out(). This function calls another - function, \c beginFilePage(), which is really just most of what - this function used to contain. We needed a different version - that doesn't store the \a fileName in the \a node as the output - file name. - - \sa beginFilePage() - */ +/*! + Creates the file named \a fileName in the output directory. + Attaches a QTextStream to the created file, which is written + to all over the place using out(). This function calls another + function, \c beginFilePage(), which is really just most of what + this function used to contain. We needed a different version + that doesn't store the \a fileName in the \a node as the output + file name. + + \sa beginFilePage() +*/ void Generator::beginSubPage(const Node *node, const QString &fileName) { beginFilePage(node, fileName); @@ -342,11 +336,10 @@ static void transmogrify(QString &input, QString &output) uint u = c.unicode(); if (u >= 'A' && u <= 'Z') u += 'a' - 'A'; - if ((u >= 'a' && u <= 'z') || (u >= '0' && u <= '9')) { + if ((u >= 'a' && u <= 'z') || (u >= '0' && u <= '9')) { output += QLatin1Char(u); begun = true; - } - else if (begun) { + } else if (begun) { output += QLatin1Char('-'); begun = false; } @@ -391,8 +384,8 @@ QString Generator::fileBase(const Node *node) const if (node->isExample()) { base.append(QLatin1String("-example")); } - } else if (node->isQmlType() || node->isQmlBasicType() || - node->isJsType() || node->isJsBasicType()) { + } else if (node->isQmlType() || node->isQmlBasicType() || node->isJsType() + || node->isJsBasicType()) { base = node->name(); /* To avoid file name conflicts in the html directory, @@ -401,9 +394,7 @@ QString Generator::fileBase(const Node *node) const module name. */ if (!node->logicalModuleName().isEmpty()) { - base.prepend(node->logicalModuleName() - + outputSuffix(node) - + QLatin1Char('-')); + base.prepend(node->logicalModuleName() + outputSuffix(node) + QLatin1Char('-')); } base.prepend(outputPrefix(node)); } else if (node->isProxyNode()) { @@ -441,8 +432,7 @@ QString Generator::fileBase(const Node *node) const empty (default value), retrieve the file extension from the generator. */ -QString Generator::linkForExampleFile(const QString &path, - const Node *parent, +QString Generator::linkForExampleFile(const QString &path, const Node *parent, const QString &fileExt) { QString link = path; @@ -464,8 +454,7 @@ QString Generator::linkForExampleFile(const QString &path, Helper function to construct a title for a file or image page included in an example. */ -QString Generator::exampleFileTitle(const ExampleNode *relative, - const QString &fileName) +QString Generator::exampleFileTitle(const ExampleNode *relative, const QString &fileName) { QString suffix; if (relative->files().contains(fileName)) @@ -504,9 +493,7 @@ QString Generator::cleanRef(const QString &ref) const QChar c = ref[0]; const uint u = c.unicode(); - if ((u >= 'a' && u <= 'z') || - (u >= 'A' && u <= 'Z') || - (u >= '0' && u <= '9')) { + if ((u >= 'a' && u <= 'z') || (u >= 'A' && u <= 'Z') || (u >= '0' && u <= '9')) { clean += c; } else if (u == '~') { clean += "dtor."; @@ -519,10 +506,8 @@ QString Generator::cleanRef(const QString &ref) for (int i = 1; i < ref.length(); i++) { const QChar c = ref[i]; const uint u = c.unicode(); - if ((u >= 'a' && u <= 'z') || - (u >= 'A' && u <= 'Z') || - (u >= '0' && u <= '9') || u == '-' || - u == '_' || u == ':' || u == '.') { + if ((u >= 'a' && u <= 'z') || (u >= 'A' && u <= 'Z') || (u >= '0' && u <= '9') || u == '-' + || u == '_' || u == ':' || u == '.') { clean += c; } else if (c.isSpace()) { clean += QLatin1Char('-'); @@ -589,26 +574,23 @@ QString Generator::fullDocumentLocation(const Node *node, bool useSubdir) parentName = fileBase(node) + QLatin1Char('.') + currentGenerator()->fileExtension(); else return QString(); - } - else if (node->isQmlType() || node->isQmlBasicType() || - node->isJsType() || node->isJsBasicType()) { + } else if (node->isQmlType() || node->isQmlBasicType() || node->isJsType() + || node->isJsBasicType()) { QString fb = fileBase(node); if (fb.startsWith(outputPrefix(node))) return fb + QLatin1Char('.') + currentGenerator()->fileExtension(); else { QString mq; if (!node->logicalModuleName().isEmpty()) { - mq = node->logicalModuleName().replace(QChar('.'),QChar('-')); + mq = node->logicalModuleName().replace(QChar('.'), QChar('-')); mq = mq.toLower() + QLatin1Char('-'); } - return fdl + outputPrefix(node) + mq + fileBase(node) + - QLatin1Char('.') + currentGenerator()->fileExtension(); + return fdl + outputPrefix(node) + mq + fileBase(node) + QLatin1Char('.') + + currentGenerator()->fileExtension(); } - } - else if (node->isTextPageNode() || node->isCollectionNode()) { + } else if (node->isTextPageNode() || node->isCollectionNode()) { parentName = fileBase(node) + QLatin1Char('.') + currentGenerator()->fileExtension(); - } - else if (fileBase(node).isEmpty()) + } else if (fileBase(node).isEmpty()) return QString(); Node *parentNode = nullptr; @@ -627,8 +609,7 @@ QString Generator::fullDocumentLocation(const Node *node, bool useSubdir) case Node::Proxy: parentName = fileBase(node) + QLatin1Char('.') + currentGenerator()->fileExtension(); break; - case Node::Function: - { + case Node::Function: { const FunctionNode *fn = static_cast(node); switch (fn->metaness()) { case FunctionNode::JsSignal: @@ -649,8 +630,8 @@ QString Generator::fullDocumentLocation(const Node *node, bool useSubdir) else if (fn->hasOneAssociatedProperty() && fn->doc().isEmpty()) return fullDocumentLocation(fn->firstAssociatedProperty()); else if (fn->overloadNumber() > 0) - anchorRef = QLatin1Char('#') + cleanRef(fn->name()) - + QLatin1Char('-') + QString::number(fn->overloadNumber()); + anchorRef = QLatin1Char('#') + cleanRef(fn->name()) + QLatin1Char('-') + + QString::number(fn->overloadNumber()); else anchorRef = QLatin1Char('#') + cleanRef(fn->name()); break; @@ -665,8 +646,7 @@ QString Generator::fullDocumentLocation(const Node *node, bool useSubdir) case Node::Enum: anchorRef = QLatin1Char('#') + node->name() + "-enum"; break; - case Node::Typedef: - { + case Node::Typedef: { const TypedefNode *tdef = static_cast(node); if (tdef->associatedEnum()) { return fullDocumentLocation(tdef->associatedEnum()); @@ -694,13 +674,12 @@ QString Generator::fullDocumentLocation(const Node *node, bool useSubdir) case Node::HeaderFile: case Node::Module: case Node::JsModule: - case Node::QmlModule: - { + case Node::QmlModule: { parentName = fileBase(node); - parentName.replace(QLatin1Char('/'), QLatin1Char('-')).replace(QLatin1Char('.'), QLatin1Char('-')); + parentName.replace(QLatin1Char('/'), QLatin1Char('-')) + .replace(QLatin1Char('.'), QLatin1Char('-')); parentName += QLatin1Char('.') + currentGenerator()->fileExtension(); - } - break; + } break; default: break; } @@ -721,10 +700,8 @@ void Generator::generateAlsoList(const Node *node, CodeMarker *marker) if (!alsoList.isEmpty()) { Text text; - text << Atom::ParaLeft - << Atom(Atom::FormattingLeft,ATOM_FORMATTING_BOLD) - << "See also " - << Atom(Atom::FormattingRight,ATOM_FORMATTING_BOLD); + text << Atom::ParaLeft << Atom(Atom::FormattingLeft, ATOM_FORMATTING_BOLD) << "See also " + << Atom(Atom::FormattingRight, ATOM_FORMATTING_BOLD); for (int i = 0; i < alsoList.size(); ++i) text << alsoList.at(i) << separator(i, alsoList.size()); @@ -734,30 +711,21 @@ void Generator::generateAlsoList(const Node *node, CodeMarker *marker) } } -const Atom *Generator::generateAtomList(const Atom *atom, - const Node *relative, - CodeMarker *marker, - bool generate, - int &numAtoms) +const Atom *Generator::generateAtomList(const Atom *atom, const Node *relative, CodeMarker *marker, + bool generate, int &numAtoms) { while (atom != nullptr) { if (atom->type() == Atom::FormatIf) { int numAtoms0 = numAtoms; bool rightFormat = canHandleFormat(atom->string()); - atom = generateAtomList(atom->next(), - relative, - marker, - generate && rightFormat, + atom = generateAtomList(atom->next(), relative, marker, generate && rightFormat, numAtoms); if (atom == nullptr) return nullptr; if (atom->type() == Atom::FormatElse) { ++numAtoms; - atom = generateAtomList(atom->next(), - relative, - marker, - generate && !rightFormat, + atom = generateAtomList(atom->next(), relative, marker, generate && !rightFormat, numAtoms); if (atom == nullptr) return nullptr; @@ -765,23 +733,16 @@ const Atom *Generator::generateAtomList(const Atom *atom, if (atom->type() == Atom::FormatEndif) { if (generate && numAtoms0 == numAtoms) { - relative->location().warning(tr("Output format %1 not handled %2") - .arg(format()).arg(outFileName())); + relative->location().warning( + tr("Output format %1 not handled %2").arg(format()).arg(outFileName())); Atom unhandledFormatAtom(Atom::UnhandledFormat, format()); - generateAtomList(&unhandledFormatAtom, - relative, - marker, - generate, - numAtoms); + generateAtomList(&unhandledFormatAtom, relative, marker, generate, numAtoms); } atom = atom->next(); } - } - else if (atom->type() == Atom::FormatElse || - atom->type() == Atom::FormatEndif) { + } else if (atom->type() == Atom::FormatElse || atom->type() == Atom::FormatEndif) { return atom; - } - else { + } else { int n = 1; if (generate) { n += generateAtom(atom, relative, marker); @@ -816,54 +777,49 @@ void Generator::generateBody(const Node *node, CodeMarker *marker) out() << "

"; generateText(text, node, marker); out() << "

"; - } - else if (func->isCtor()) { + } else if (func->isCtor()) { Text text; text << "Default constructs an instance of "; text << func->parent()->name() << "."; out() << "

"; generateText(text, node, marker); out() << "

"; - } - else if (func->isCCtor()) { + } else if (func->isCCtor()) { Text text; text << "Copy constructor."; out() << "

"; generateText(text, node, marker); out() << "

"; - } - else if (func->isMCtor()) { + } else if (func->isMCtor()) { Text text; text << "Move-copy constructor."; out() << "

"; generateText(text, node, marker); out() << "

"; - } - else if (func->isCAssign()) { + } else if (func->isCAssign()) { Text text; text << "Copy-assignment operator."; out() << "

"; generateText(text, node, marker); out() << "

"; - } - else if (func->isMAssign()) { + } else if (func->isMAssign()) { Text text; text << "Move-assignment operator."; out() << "

"; generateText(text, node, marker); out() << "

"; - } - else if (!node->isWrapper() && !node->isMarkedReimp()) { + } else if (!node->isWrapper() && !node->isMarkedReimp()) { if (!func->isIgnored()) // undocumented functions added by Q_OBJECT - node->location().warning(tr("No documentation for '%1'").arg(node->plainSignature())); + node->location().warning( + tr("No documentation for '%1'").arg(node->plainSignature())); } } else if (!node->isWrapper() && !node->isMarkedReimp()) { // Don't require documentation of things defined in Q_GADGET if (node->name() != QLatin1String("QtGadgetHelper")) - node->location().warning(tr("No documentation for '%1'").arg(node->plainSignature())); + node->location().warning( + tr("No documentation for '%1'").arg(node->plainSignature())); } - } - else if (!node->isSharingComment()) { + } else if (!node->isSharingComment()) { if (node->isFunction()) { const FunctionNode *fn = static_cast(node); if (!fn->overridesThis().isEmpty()) @@ -886,8 +842,8 @@ void Generator::generateBody(const Node *node, CodeMarker *marker) const auto &documentedItemList = enume->doc().enumItemNames(); QSet documentedItems(documentedItemList.cbegin(), documentedItemList.cend()); const QSet allItems = definedItems + documentedItems; - if (allItems.count() > definedItems.count() || - allItems.count() > documentedItems.count()) { + if (allItems.count() > definedItems.count() + || allItems.count() > documentedItems.count()) { for (const auto &it : allItems) { if (!definedItems.contains(it)) { QString details; @@ -896,10 +852,13 @@ void Generator::generateBody(const Node *node, CodeMarker *marker) details = tr("Maybe you meant '%1'?").arg(best); node->doc().location().warning(tr("No such enum item '%1' in %2") - .arg(it).arg(node->plainFullName()), details); + .arg(it) + .arg(node->plainFullName()), + details); } else if (!documentedItems.contains(it)) { node->doc().location().warning(tr("Undocumented enum item '%1' in %2") - .arg(it).arg(node->plainFullName())); + .arg(it) + .arg(node->plainFullName())); } } } @@ -912,9 +871,9 @@ void Generator::generateBody(const Node *node, CodeMarker *marker) if (!documentedNames.contains(name)) { if (fn->isActive() || fn->isPreliminary()) { if (!fn->isMarkedReimp() && !fn->isOverload()) { - fn->doc().location().warning( - tr("Undocumented parameter '%1' in %2") - .arg(name).arg(node->plainFullName())); + fn->doc().location().warning(tr("Undocumented parameter '%1' in %2") + .arg(name) + .arg(node->plainFullName())); } } } @@ -926,7 +885,8 @@ void Generator::generateBody(const Node *node, CodeMarker *marker) if (!best.isEmpty()) details = tr("Maybe you meant '%1'?").arg(best); fn->doc().location().warning(tr("No such parameter '%1' in %2") - .arg(name).arg(fn->plainFullName()), + .arg(name) + .arg(fn->plainFullName()), details); } } @@ -936,11 +896,12 @@ void Generator::generateBody(const Node *node, CodeMarker *marker) for all functions with a return type. mws 13/12/2018 */ - if (!fn->isObsolete() && fn->returnsBool() && - !fn->isMarkedReimp() && !fn->isOverload()) { + if (!fn->isObsolete() && fn->returnsBool() && !fn->isMarkedReimp() + && !fn->isOverload()) { if (!fn->doc().body().contains("return")) - node->doc().location().warning(tr("Undocumented return value " - "(hint: use 'return' or 'returns' in the text")); + node->doc().location().warning( + tr("Undocumented return value " + "(hint: use 'return' or 'returns' in the text")); } } } @@ -964,7 +925,7 @@ void Generator::generateRequiredLinks(const Node *node, CodeMarker *marker) if (exampleUrl.isEmpty()) { if (!en->noAutoList()) { generateFileList(en, marker, false); // files - generateFileList(en, marker, true); // images + generateFileList(en, marker, true); // images } } else { generateLinkToExample(en, marker, exampleUrl); @@ -978,8 +939,7 @@ void Generator::generateRequiredLinks(const Node *node, CodeMarker *marker) the path is appended to \a baseUrl, after a '/' character if \a baseUrl did not already end in one. */ -void Generator::generateLinkToExample(const ExampleNode *en, - CodeMarker *marker, +void Generator::generateLinkToExample(const ExampleNode *en, CodeMarker *marker, const QString &baseUrl) { QString exampleUrl(baseUrl); @@ -1001,17 +961,14 @@ void Generator::generateLinkToExample(const ExampleNode *en, // Construct a path to the example; / QStringList path = QStringList() - << config()->getString(CONFIG_EXAMPLESINSTALLPATH) - << en->name(); + << config()->getString(CONFIG_EXAMPLESINSTALLPATH) << en->name(); path.removeAll({}); Text text; text << Atom::ParaLeft << Atom(Atom::Link, exampleUrl.replace(placeholder, path.join(separator))) - << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK) - << Atom(Atom::String, link) - << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK) - << Atom::ParaRight; + << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK) << Atom(Atom::String, link) + << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK) << Atom::ParaRight; generateText(text, nullptr, marker); } @@ -1021,12 +978,8 @@ void Generator::addImageToCopy(const ExampleNode *en, const QString &file) QDir dirInfo; QString userFriendlyFilePath; const QString prefix("/images/used-in-examples/"); - QString srcPath = Config::findFile(en->location(), - QStringList(), - exampleDirs, - file, - exampleImgExts, - &userFriendlyFilePath); + QString srcPath = Config::findFile(en->location(), QStringList(), exampleDirs, file, + exampleImgExts, &userFriendlyFilePath); outFileNames_ << prefix.mid(1) + userFriendlyFilePath; userFriendlyFilePath.truncate(userFriendlyFilePath.lastIndexOf('/')); QString imgOutDir = outDir_ + prefix + userFriendlyFilePath; @@ -1054,7 +1007,7 @@ void Generator::generateFileList(const ExampleNode *en, CodeMarker *marker, bool paths = en->images(); tag = "Images:"; atomType = Atom::ExampleImageLink; - } else { //files + } else { // files paths = en->files(); tag = "Files:"; } @@ -1074,13 +1027,9 @@ void Generator::generateFileList(const ExampleNode *en, CodeMarker *marker, bool openedList.next(); text << Atom(Atom::ListItemNumber, openedList.numberString()) - << Atom(Atom::ListItemLeft, openedList.styleString()) - << Atom::ParaLeft - << Atom(atomType, file) - << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK) - << file - << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK) - << Atom::ParaRight + << Atom(Atom::ListItemLeft, openedList.styleString()) << Atom::ParaLeft + << Atom(atomType, file) << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK) << file + << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK) << Atom::ParaRight << Atom(Atom::ListItemRight, openedList.styleString()); path = file; } @@ -1093,10 +1042,8 @@ void Generator::generateInheritedBy(const ClassNode *classe, CodeMarker *marker) { if (!classe->derivedClasses().isEmpty()) { Text text; - text << Atom::ParaLeft - << Atom(Atom::FormattingLeft,ATOM_FORMATTING_BOLD) - << "Inherited by: " - << Atom(Atom::FormattingRight,ATOM_FORMATTING_BOLD); + text << Atom::ParaLeft << Atom(Atom::FormattingLeft, ATOM_FORMATTING_BOLD) + << "Inherited by: " << Atom(Atom::FormattingRight, ATOM_FORMATTING_BOLD); appendSortedNames(text, classe, classe->derivedClasses()); text << Atom::ParaRight; @@ -1108,10 +1055,8 @@ void Generator::generateInherits(const ClassNode *classe, CodeMarker *marker) { if (!classe->baseClasses().isEmpty()) { Text text; - text << Atom::ParaLeft - << Atom(Atom::FormattingLeft,ATOM_FORMATTING_BOLD) - << "Inherits: " - << Atom(Atom::FormattingRight,ATOM_FORMATTING_BOLD); + text << Atom::ParaLeft << Atom(Atom::FormattingLeft, ATOM_FORMATTING_BOLD) + << "Inherits: " << Atom(Atom::FormattingRight, ATOM_FORMATTING_BOLD); int index = 0; const QVector &baseClasses = classe->baseClasses(); @@ -1121,8 +1066,7 @@ void Generator::generateInherits(const ClassNode *classe, CodeMarker *marker) if (cls.access_ == Node::Protected) { text << " (protected)"; - } - else if (cls.access_ == Node::Private) { + } else if (cls.access_ == Node::Private) { text << " (private)"; } text << separator(index++, classe->baseClasses().count()); @@ -1188,7 +1132,8 @@ void Generator::generateDocumentation(Node *node) // other use cases pop up. QString name = cn->name().toLower(); name.replace(QChar(' '), QString("-")); - QString filename = cn->tree()->physicalModuleName() + "-" + name + "." + fileExtension(); + QString filename = + cn->tree()->physicalModuleName() + "-" + name + "." + fileExtension(); beginSubPage(node, filename); generateGenericCollectionPage(cn, marker); endSubPage(); @@ -1198,8 +1143,8 @@ void Generator::generateDocumentation(Node *node) generatePageNode(static_cast(node), marker); endSubPage(); } else if (node->isAggregate()) { - if ((node->isClassNode() || node->isHeader() || node->isNamespace()) && - node->docMustBeGenerated()) { + if ((node->isClassNode() || node->isHeader() || node->isNamespace()) + && node->docMustBeGenerated()) { beginSubPage(node, fileName(node)); generateCppReferencePage(static_cast(node), marker); endSubPage(); @@ -1240,10 +1185,8 @@ void Generator::generateMaintainerList(const Aggregate *node, CodeMarker *marker if (!sl.isEmpty()) { Text text; - text << Atom::ParaLeft - << Atom(Atom::FormattingLeft, ATOM_FORMATTING_BOLD) - << "Maintained by: " - << Atom(Atom::FormattingRight, ATOM_FORMATTING_BOLD); + text << Atom::ParaLeft << Atom(Atom::FormattingLeft, ATOM_FORMATTING_BOLD) + << "Maintained by: " << Atom(Atom::FormattingRight, ATOM_FORMATTING_BOLD); for (int i = 0; i < sl.size(); ++i) text << sl.at(i) << separator(i, sl.size()); @@ -1257,8 +1200,7 @@ void Generator::generateMaintainerList(const Aggregate *node, CodeMarker *marker Output the "Inherit by" list for the QML element, if it is inherited by any other elements. */ -void Generator::generateQmlInheritedBy(const QmlTypeNode *qcn, - CodeMarker *marker) +void Generator::generateQmlInheritedBy(const QmlTypeNode *qcn, CodeMarker *marker) { if (qcn) { NodeList subs; @@ -1277,10 +1219,8 @@ void Generator::generateQmlInheritedBy(const QmlTypeNode *qcn, Extract sections of markup text surrounded by \e qmltext and \e endqmltext and output them. */ -bool Generator::generateQmlText(const Text &text, - const Node *relative, - CodeMarker *marker, - const QString &/* qmlName */ ) +bool Generator::generateQmlText(const Text &text, const Node *relative, CodeMarker *marker, + const QString & /* qmlName */) { const Atom *atom = text.firstAtom(); bool result = false; @@ -1314,7 +1254,8 @@ void Generator::generateReimplementsClause(const FunctionNode *fn, CodeMarker *m if (overrides->hasDoc()) { Text text; text << Atom::ParaLeft << "Reimplements: "; - QString fullName = overrides->parent()->name() + "::" + overrides->signature(false, true); + QString fullName = + overrides->parent()->name() + "::" + overrides->signature(false, true); appendFullName(text, overrides->parent(), fullName, overrides); text << "." << Atom::ParaRight; generateText(text, fn, marker); @@ -1325,13 +1266,14 @@ void Generator::generateReimplementsClause(const FunctionNode *fn, CodeMarker *m if (sameName && sameName->hasDoc()) { Text text; text << Atom::ParaLeft << "Reimplements an access function for property: "; - QString fullName = sameName->parent()->name() + "::" + sameName->name(); + QString fullName = sameName->parent()->name() + "::" + sameName->name(); appendFullName(text, sameName->parent(), fullName, sameName); text << "." << Atom::ParaRight; generateText(text, fn, marker); } else { - fn->doc().location().warning(tr("Illegal \\reimp; no documented virtual function for %1") - .arg(fn->plainSignature())); + fn->doc().location().warning( + tr("Illegal \\reimp; no documented virtual function for %1") + .arg(fn->plainSignature())); } } } @@ -1353,16 +1295,10 @@ void Generator::generateSince(const Node *node, CodeMarker *marker) { if (!node->since().isEmpty()) { Text text; - text << Atom::ParaLeft - << "This " - << typeString(node) - << " was introduced "; + text << Atom::ParaLeft << "This " << typeString(node) << " was introduced "; if (node->isEnumType()) text << "or modified "; - text << "in " - << formatSince(node) - << "." - << Atom::ParaRight; + text << "in " << formatSince(node) << "." << Atom::ParaRight; generateText(text, node, marker); } } @@ -1376,13 +1312,9 @@ void Generator::generateStatus(const Node *node, CodeMarker *marker) // Do nothing. break; case Node::Preliminary: - text << Atom::ParaLeft - << Atom(Atom::FormattingLeft, ATOM_FORMATTING_BOLD) - << "This " - << typeString(node) - << " is under development and is subject to change." - << Atom(Atom::FormattingRight, ATOM_FORMATTING_BOLD) - << Atom::ParaRight; + text << Atom::ParaLeft << Atom(Atom::FormattingLeft, ATOM_FORMATTING_BOLD) << "This " + << typeString(node) << " is under development and is subject to change." + << Atom(Atom::FormattingRight, ATOM_FORMATTING_BOLD) << Atom::ParaRight; break; case Node::Deprecated: text << Atom::ParaLeft; @@ -1418,11 +1350,10 @@ void Generator::generateStatus(const Node *node, CodeMarker *marker) void Generator::generatePrivateSignalNote(const Node *node, CodeMarker *marker) { Text text; - text << Atom::ParaLeft - << Atom(Atom::FormattingLeft, ATOM_FORMATTING_BOLD) - << "Note: " - << Atom(Atom::FormattingRight, ATOM_FORMATTING_BOLD) - << "This is a private signal. It can be used in signal connections but cannot be emitted by the user." + text << Atom::ParaLeft << Atom(Atom::FormattingLeft, ATOM_FORMATTING_BOLD) + << "Note: " << Atom(Atom::FormattingRight, ATOM_FORMATTING_BOLD) + << "This is a private signal. It can be used in signal connections but cannot be emitted " + "by the user." << Atom::ParaRight; generateText(text, node, marker); } @@ -1434,16 +1365,11 @@ void Generator::generatePrivateSignalNote(const Node *node, CodeMarker *marker) void Generator::generateInvokableNote(const Node *node, CodeMarker *marker) { Text text; - text << Atom::ParaLeft - << Atom(Atom::FormattingLeft, ATOM_FORMATTING_BOLD) - << "Note: " - << Atom(Atom::FormattingRight, ATOM_FORMATTING_BOLD) + text << Atom::ParaLeft << Atom(Atom::FormattingLeft, ATOM_FORMATTING_BOLD) + << "Note: " << Atom(Atom::FormattingRight, ATOM_FORMATTING_BOLD) << "This function can be invoked via the meta-object system and from QML. See " - << Atom(Atom::Link,"Q_INVOKABLE") - << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK) - << "Q_INVOKABLE" - << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK) - << "." + << Atom(Atom::Link, "Q_INVOKABLE") << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK) + << "Q_INVOKABLE" << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK) << "." << Atom::ParaRight; generateText(text, node, marker); } @@ -1453,19 +1379,13 @@ void Generator::generateInvokableNote(const Node *node, CodeMarker *marker) is the node that represents the entity where a qdoc comment was found, and \a text represents the qdoc comment. */ -bool Generator::generateText(const Text &text, - const Node *relative, - CodeMarker *marker) +bool Generator::generateText(const Text &text, const Node *relative, CodeMarker *marker) { bool result = false; if (text.firstAtom() != nullptr) { int numAtoms = 0; initializeTextOutput(); - generateAtomList(text.firstAtom(), - relative, - marker, - true, - numAtoms); + generateAtomList(text.firstAtom(), relative, marker, true, numAtoms); result = true; } return result; @@ -1480,16 +1400,14 @@ bool Generator::generateText(const Text &text, nonreentrant, and true is returned. If there are no exceptions, the three node lists remain empty and false is returned. */ -bool Generator::hasExceptions(const Node *node, - NodeList &reentrant, - NodeList &threadsafe, +bool Generator::hasExceptions(const Node *node, NodeList &reentrant, NodeList &threadsafe, NodeList &nonreentrant) { bool result = false; Node::ThreadSafeness ts = node->threadSafeness(); const NodeList &children = static_cast(node)->childNodes(); for (auto child : children) { - if (!child->isObsolete()){ + if (!child->isObsolete()) { switch (child->threadSafeness()) { case Node::Reentrant: reentrant.append(child); @@ -1515,11 +1433,8 @@ bool Generator::hasExceptions(const Node *node, static void startNote(Text &text) { - text << Atom::ParaLeft - << Atom(Atom::FormattingLeft, ATOM_FORMATTING_BOLD) - << "Note:" - << Atom(Atom::FormattingRight, ATOM_FORMATTING_BOLD) - << " "; + text << Atom::ParaLeft << Atom(Atom::FormattingLeft, ATOM_FORMATTING_BOLD) + << "Note:" << Atom(Atom::FormattingRight, ATOM_FORMATTING_BOLD) << " "; } /*! @@ -1535,30 +1450,19 @@ void Generator::generateThreadSafeness(const Node *node, CodeMarker *marker) Node::ThreadSafeness ts = node->threadSafeness(); bool exceptions = false; - rlink << Atom(Atom::Link,"reentrant") - << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK) - << "reentrant" - << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK); + rlink << Atom(Atom::Link, "reentrant") << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK) + << "reentrant" << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK); - tlink << Atom(Atom::Link,"thread-safe") - << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK) - << "thread-safe" - << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK); + tlink << Atom(Atom::Link, "thread-safe") << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK) + << "thread-safe" << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK); switch (ts) { case Node::UnspecifiedSafeness: break; case Node::NonReentrant: - text << Atom::ParaLeft - << Atom(Atom::FormattingLeft,ATOM_FORMATTING_BOLD) - << "Warning:" - << Atom(Atom::FormattingRight,ATOM_FORMATTING_BOLD) - << " This " - << typeString(node) - << " is not " - << rlink - << "." - << Atom::ParaRight; + text << Atom::ParaLeft << Atom(Atom::FormattingLeft, ATOM_FORMATTING_BOLD) + << "Warning:" << Atom(Atom::FormattingRight, ATOM_FORMATTING_BOLD) << " This " + << typeString(node) << " is not " << rlink << "." << Atom::ParaRight; break; case Node::Reentrant: case Node::ThreadSafe: @@ -1575,8 +1479,7 @@ void Generator::generateThreadSafeness(const Node *node, CodeMarker *marker) text << "."; else text << " with the following exceptions:"; - } - else { + } else { text << "This " << typeString(node) << " is "; if (ts == Node::ThreadSafe) text << tlink; @@ -1589,46 +1492,33 @@ void Generator::generateThreadSafeness(const Node *node, CodeMarker *marker) default: break; } - generateText(text,node,marker); + generateText(text, node, marker); if (exceptions) { text.clear(); if (ts == Node::Reentrant) { if (!nonreentrant.isEmpty()) { startNote(text); - text << "These functions are not " - << rlink - << ":" - << Atom::ParaRight; + text << "These functions are not " << rlink << ":" << Atom::ParaRight; signatureList(nonreentrant, node, marker); } if (!threadsafe.isEmpty()) { text.clear(); startNote(text); - text << "These functions are also " - << tlink - << ":" - << Atom::ParaRight; + text << "These functions are also " << tlink << ":" << Atom::ParaRight; generateText(text, node, marker); signatureList(threadsafe, node, marker); } - } - else { // thread-safe + } else { // thread-safe if (!reentrant.isEmpty()) { startNote(text); - text << "These functions are only " - << rlink - << ":" - << Atom::ParaRight; + text << "These functions are only " << rlink << ":" << Atom::ParaRight; signatureList(reentrant, node, marker); } if (!nonreentrant.isEmpty()) { text.clear(); startNote(text); - text << "These functions are not " - << rlink - << ":" - << Atom::ParaRight; + text << "These functions are not " << rlink << ":" << Atom::ParaRight; signatureList(nonreentrant, node, marker); } } @@ -1683,19 +1573,15 @@ void Generator::generateOverloadedSignal(const Node *node, CodeMarker *marker) return; Text text; - text << Atom::ParaLeft - << Atom(Atom::FormattingLeft, ATOM_FORMATTING_BOLD) - << "Note:" - << Atom(Atom::FormattingRight, ATOM_FORMATTING_BOLD) - << " Signal " - << Atom(Atom::FormattingLeft, ATOM_FORMATTING_ITALIC) - << node->name() + text << Atom::ParaLeft << Atom(Atom::FormattingLeft, ATOM_FORMATTING_BOLD) + << "Note:" << Atom(Atom::FormattingRight, ATOM_FORMATTING_BOLD) << " Signal " + << Atom(Atom::FormattingLeft, ATOM_FORMATTING_ITALIC) << node->name() << Atom(Atom::FormattingRight, ATOM_FORMATTING_ITALIC) << " is overloaded in this class. " "To connect to this signal by using the function pointer syntax, Qt " "provides a convenient helper for obtaining the function pointer as " "shown in this example:" - << Atom(Atom::Code, marker->markedUpCode(code, node, node->location())); + << Atom(Atom::Code, marker->markedUpCode(code, node, node->location())); generateText(text, node, marker); } @@ -1750,7 +1636,7 @@ QString Generator::getMetadataElement(const Aggregate *inner, const QString &tag QStringList Generator::getMetadataElements(const Aggregate *inner, const QString &t) { QStringList s; - QStringMultiMap& metaTagMap = const_cast(inner->doc().metaTagMap()); + QStringMultiMap &metaTagMap = const_cast(inner->doc().metaTagMap()); s = metaTagMap.values(t); if (!s.isEmpty()) metaTagMap.remove(t); @@ -1763,19 +1649,13 @@ QStringList Generator::getMetadataElements(const Aggregate *inner, const QString QString Generator::imageFileName(const Node *relative, const QString &fileBase) { QString userFriendlyFilePath; - QString filePath = Config::findFile(relative->doc().location(), - imageFiles, - imageDirs, - fileBase, - imgFileExts[format()], - &userFriendlyFilePath); + QString filePath = Config::findFile(relative->doc().location(), imageFiles, imageDirs, fileBase, + imgFileExts[format()], &userFriendlyFilePath); if (filePath.isEmpty()) return QString(); - QString path = Config::copyFile(relative->doc().location(), - filePath, - userFriendlyFilePath, + QString path = Config::copyFile(relative->doc().location(), filePath, userFriendlyFilePath, outputDir() + QLatin1String("/images")); int images_slash = path.lastIndexOf("images/"); QString relImagePath; @@ -1796,8 +1676,7 @@ QString Generator::indent(int level, const QString &markedCode) while (i < markedCode.length()) { if (markedCode.at(i) == QLatin1Char('\n')) { column = 0; - } - else { + } else { if (column == 0) { for (int j = 0; j < level; j++) t += QLatin1Char(' '); @@ -1809,8 +1688,6 @@ QString Generator::indent(int level, const QString &markedCode) return t; } - - void Generator::initialize(const Config &config) { outputFormats = config.getOutputFormats(); @@ -1847,13 +1724,15 @@ void Generator::initialize(const Config &config) config.lastLocation().warning(tr("Formatting '%1' must " "have exactly one " "parameter (found %2)") - .arg(n).arg(numParams)); + .arg(n) + .arg(numParams)); } else if (numOccs > 1) { config.lastLocation().fatal(tr("Formatting '%1' must " "contain exactly one " "occurrence of '\\1' " "(found %2)") - .arg(n).arg(numOccs)); + .arg(n) + .arg(numOccs)); } else { int paramPos = def.indexOf("\1"); fmtLeftMaps[f].insert(n, def.left(paramPos)); @@ -1889,15 +1768,16 @@ void Generator::initialize(const Config &config) Creates template-specific subdirs (e.g. /styles and /scripts for HTML) and copies the files to them. */ -void Generator::copyTemplateFiles(const Config &config, const QString &configVar, const QString &subDir) +void Generator::copyTemplateFiles(const Config &config, const QString &configVar, + const QString &subDir) { QStringList files = config.getCanonicalPathList(configVar, true); if (!files.isEmpty()) { QDir dirInfo; QString templateDir = outDir_ + QLatin1Char('/') + subDir; if (!dirInfo.exists(templateDir) && !dirInfo.mkdir(templateDir)) { - config.lastLocation().fatal(tr("Cannot create %1 directory '%2'") - .arg(subDir, templateDir)); + config.lastLocation().fatal( + tr("Cannot create %1 directory '%2'").arg(subDir, templateDir)); } else { for (const auto &file : files) { if (!file.isEmpty()) @@ -1945,7 +1825,8 @@ void Generator::initializeFormat(const Config &config) return; if (!dirInfo.exists(outDir_ + "/images") && !dirInfo.mkdir(outDir_ + "/images")) - config.lastLocation().fatal(tr("Cannot create images directory '%1'").arg(outDir_ + "/images")); + config.lastLocation().fatal( + tr("Cannot create images directory '%1'").arg(outDir_ + "/images")); copyTemplateFiles(config, format() + Config::dot + CONFIG_STYLESHEETS, "style"); copyTemplateFiles(config, format() + Config::dot + CONFIG_SCRIPTS, "scripts"); @@ -2021,42 +1902,36 @@ QString Generator::outputSuffix(const Node *node) return QString(); } -bool Generator::parseArg(const QString &src, - const QString &tag, - int *pos, - int n, - QStringRef *contents, - QStringRef *par1, - bool debug) -{ -#define SKIP_CHAR(c) \ - if (debug) \ - qDebug() << "looking for " << c << " at " << QString(src.data() + i, n - i); \ - if (i >= n || src[i] != c) { \ - if (debug) \ - qDebug() << " char '" << c << "' not found"; \ - return false; \ -} \ +bool Generator::parseArg(const QString &src, const QString &tag, int *pos, int n, + QStringRef *contents, QStringRef *par1, bool debug) +{ +#define SKIP_CHAR(c) \ + if (debug) \ + qDebug() << "looking for " << c << " at " << QString(src.data() + i, n - i); \ + if (i >= n || src[i] != c) { \ + if (debug) \ + qDebug() << " char '" << c << "' not found"; \ + return false; \ + } \ ++i; - -#define SKIP_SPACE \ - while (i < n && src[i] == ' ') \ - ++i; +#define SKIP_SPACE \ + while (i < n && src[i] == ' ') \ + ++i; int i = *pos; int j = i; // assume "<@" has been parsed outside - //SKIP_CHAR('<'); - //SKIP_CHAR('@'); + // SKIP_CHAR('<'); + // SKIP_CHAR('@'); if (tag != QStringRef(&src, i, tag.length())) { return false; } if (debug) - qDebug() << "haystack:" << src << "needle:" << tag << "i:" < &alsoList) alternateFunc = fn->parent()->findFunctionChild(alternateName, QString()); } } - } - else if (!fn->name().isEmpty()) { + } else if (!fn->name().isEmpty()) { alternateName = "set"; alternateName += fn->name()[0].toUpper(); alternateName += fn->name().mid(1); @@ -2208,8 +2082,7 @@ void Generator::supplementAlsoList(const Node *node, QVector &alsoList) Text also; also << Atom(Atom::Link, alternateName) - << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK) - << alternateName + << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK) << alternateName << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK); alsoList.prepend(also); } @@ -2221,8 +2094,8 @@ void Generator::supplementAlsoList(const Node *node, QVector &alsoList) void Generator::terminate() { for (const auto &generator : qAsConst(generators)) { - if (outputFormats.contains(generator->format())) - generator->terminateGenerator(); + if (outputFormats.contains(generator->format())) + generator->terminateGenerator(); } fmtLeftMaps.clear(); @@ -2233,15 +2106,14 @@ void Generator::terminate() outDir_.clear(); } -void Generator::terminateGenerator() -{ -} +void Generator::terminateGenerator() {} /*! Trims trailing whitespace off the \a string and returns the trimmed string. */ -QString Generator::trimmedTrailing(const QString &string, const QString &prefix, const QString &suffix) +QString Generator::trimmedTrailing(const QString &string, const QString &prefix, + const QString &suffix) { QString trimmed = string; while (trimmed.length() > 0 && trimmed[trimmed.length() - 1].isSpace()) @@ -2304,8 +2176,8 @@ QString Generator::typeString(const Node *node) void Generator::unknownAtom(const Atom *atom) { - Location::internalError(tr("unknown atom type '%1' in %2 generator") - .arg(atom->typeString()).arg(format())); + Location::internalError( + tr("unknown atom type '%1' in %2 generator").arg(atom->typeString()).arg(format())); } QT_END_NAMESPACE diff --git a/src/qdoc/generator.h b/src/qdoc/generator.h index 10fd5131a..6723884f1 100644 --- a/src/qdoc/generator.h +++ b/src/qdoc/generator.h @@ -68,11 +68,9 @@ public: QString fullDocumentLocation(const Node *node, bool useSubdir = false); const Config *config() { return config_; } - QString linkForExampleFile(const QString &path, - const Node *parent, + QString linkForExampleFile(const QString &path, const Node *parent, const QString &fileExt = QString()); - static QString exampleFileTitle(const ExampleNode *relative, - const QString &fileName); + static QString exampleFileTitle(const ExampleNode *relative, const QString &fileName); static Generator *currentGenerator() { return currentGenerator_; } static Generator *generatorForFormat(const QString &format); static void initialize(const Config &config); @@ -110,7 +108,7 @@ protected: void endSubPage(); virtual QString fileBase(const Node *node) const; virtual QString fileExtension() const = 0; - virtual void generateQAPage() { } + virtual void generateQAPage() {} virtual void generateExampleFilePage(const Node *, const QString &, CodeMarker *) {} virtual void generateAlsoList(const Node *node, CodeMarker *marker); virtual int generateAtom(const Atom *, const Node *, CodeMarker *) { return 0; } @@ -128,9 +126,7 @@ protected: virtual void generateMaintainerList(const Aggregate *node, CodeMarker *marker); virtual void generateQmlInheritedBy(const QmlTypeNode *qcn, CodeMarker *marker); virtual void generateQmlInherits(QmlTypeNode *, CodeMarker *) {} - virtual bool generateQmlText(const Text &text, - const Node *relative, - CodeMarker *marker, + virtual bool generateQmlText(const Text &text, const Node *relative, CodeMarker *marker, const QString &qmlName); virtual bool generateText(const Text &text, const Node *relative, CodeMarker *marker); virtual QString imageFileName(const Node *relative, const QString &fileBase); @@ -142,20 +138,17 @@ protected: static QString outputSuffix(const Node *node); static void singularPlural(Text &text, const NodeList &nodes); static void supplementAlsoList(const Node *node, QVector &alsoList); - static QString trimmedTrailing(const QString &string, - const QString &prefix, + static QString trimmedTrailing(const QString &string, const QString &prefix, const QString &suffix); void initializeTextOutput(); QString fileName(const Node *node, const QString &extension = QString()) const; QMap &formattingLeftMap(); QMap &formattingRightMap(); - const Atom *generateAtomList(const Atom *atom, - const Node *relative, - CodeMarker *marker, - bool generate, - int &numGeneratedAtoms); + const Atom *generateAtomList(const Atom *atom, const Node *relative, CodeMarker *marker, + bool generate, int &numGeneratedAtoms); void generateRequiredLinks(const Node *node, CodeMarker *marker); - void generateLinkToExample(const ExampleNode *en, CodeMarker *marker, const QString &exampleUrl); + void generateLinkToExample(const ExampleNode *en, CodeMarker *marker, + const QString &exampleUrl); virtual void generateFileList(const ExampleNode *en, CodeMarker *marker, bool images); static QString formatSince(const Node *node); void generateSince(const Node *node, CodeMarker *marker); @@ -168,41 +161,30 @@ protected: void generateOverloadedSignal(const Node *node, CodeMarker *marker); static QString getOverloadedSignalCode(const Node *node); QString indent(int level, const QString &markedCode); - QTextStream& out(); + QTextStream &out(); QString outFileName(); - bool parseArg(const QString &src, - const QString &tag, - int *pos, - int n, - QStringRef *contents, - QStringRef *par1 = nullptr, - bool debug = false); + bool parseArg(const QString &src, const QString &tag, int *pos, int n, QStringRef *contents, + QStringRef *par1 = nullptr, bool debug = false); void setImageFileExtensions(const QStringList &extensions); void unknownAtom(const Atom *atom); int appendSortedQmlNames(Text &text, const Node *base, const NodeList &subs); - static bool hasExceptions(const Node *node, - NodeList &reentrant, - NodeList &threadsafe, + static bool hasExceptions(const Node *node, NodeList &reentrant, NodeList &threadsafe, NodeList &nonreentrant); QMap editionGroupMap; QMap editionModuleMap; QString naturalLanguage; #ifndef QT_NO_TEXTCODEC - QTextCodec* outputCodec; + QTextCodec *outputCodec; QString outputEncoding; #endif QString tagFile_; QStack outStreamStack; - void appendFullName(Text &text, - const Node *apparentNode, - const Node *relative, + void appendFullName(Text &text, const Node *apparentNode, const Node *relative, const Node *actualNode = nullptr); - void appendFullName(Text &text, - const Node *apparentNode, - const QString &fullName, + void appendFullName(Text &text, const Node *apparentNode, const QString &fullName, const Node *actualNode); void appendFullNames(Text &text, const NodeList &nodes, const Node *relative); int appendSortedNames(Text &text, const ClassNode *classe, @@ -216,8 +198,8 @@ private: static Generator *currentGenerator_; static QStringList exampleDirs; static QStringList exampleImgExts; - static QMap > fmtLeftMaps; - static QMap > fmtRightMaps; + static QMap> fmtLeftMaps; + static QMap> fmtRightMaps; static QVector generators; static QStringList imageDirs; static QStringList imageFiles; @@ -246,8 +228,7 @@ private: void generateReimplementsClause(const FunctionNode *fn, CodeMarker *marker); static bool compareNodes(Node *a, Node *b) { return (a->name() < b->name()); } static bool comparePaths(QString a, QString b) { return (a < b); } - static void copyTemplateFiles(const Config &config, - const QString &configVar, + static void copyTemplateFiles(const Config &config, const QString &configVar, const QString &subDir); protected: diff --git a/src/qdoc/helpprojectwriter.cpp b/src/qdoc/helpprojectwriter.cpp index 4ef77f06a..6f231f232 100644 --- a/src/qdoc/helpprojectwriter.cpp +++ b/src/qdoc/helpprojectwriter.cpp @@ -41,16 +41,13 @@ QT_BEGIN_NAMESPACE -HelpProjectWriter::HelpProjectWriter(const Config &config, - const QString &defaultFileName, +HelpProjectWriter::HelpProjectWriter(const Config &config, const QString &defaultFileName, Generator *g) { reset(config, defaultFileName, g); } -void HelpProjectWriter::reset(const Config &config, - const QString &defaultFileName, - Generator *g) +void HelpProjectWriter::reset(const Config &config, const QString &defaultFileName, Generator *g) { projects.clear(); gen_ = g; @@ -83,15 +80,19 @@ void HelpProjectWriter::reset(const Config &config, project.indexTitle = config.getString(prefix + "indexTitle"); project.indexRoot = config.getString(prefix + "indexRoot"); const auto &filterAttributes = config.getStringList(prefix + "filterAttributes"); - project.filterAttributes = QSet(filterAttributes.cbegin(), filterAttributes.cend()); + project.filterAttributes = + QSet(filterAttributes.cbegin(), filterAttributes.cend()); project.includeIndexNodes = config.getBool(prefix + "includeIndexNodes"); const QSet customFilterNames = config.subVars(prefix + "customFilters"); for (const auto &filterName : customFilterNames) { - QString name = config.getString(prefix + "customFilters" + Config::dot + filterName + Config::dot + "name"); - const auto &filters = config.getStringList(prefix + "customFilters" + Config::dot + filterName + Config::dot + "filterAttributes"); + QString name = config.getString(prefix + "customFilters" + Config::dot + filterName + + Config::dot + "name"); + const auto &filters = + config.getStringList(prefix + "customFilters" + Config::dot + filterName + + Config::dot + "filterAttributes"); project.customFilters[name] = QSet(filters.cbegin(), filters.cend()); } - //customFilters = config.defs. + // customFilters = config.defs. const auto excludedPrefixes = config.getStringSet(prefix + "excluded"); for (auto name : excludedPrefixes) @@ -128,7 +129,7 @@ void HelpProjectWriter::readSelectors(SubProject &subproject, const QStringList typeHash["union"] = Node::Union; typeHash["header"] = Node::HeaderFile; typeHash["headerfile"] = Node::HeaderFile; - typeHash["doc"] = Node::Page; // to be removed from qdocconf files + typeHash["doc"] = Node::Page; // to be removed from qdocconf files typeHash["fake"] = Node::Page; // to be removed from qdocconf files typeHash["page"] = Node::Page; typeHash["enum"] = Node::Enum; @@ -155,7 +156,6 @@ void HelpProjectWriter::readSelectors(SubProject &subproject, const QStringList pageTypeHash["page"] = Node::Page; pageTypeHash["externalpage"] = Node::ExternalPage; - NodeTypeSet fullSubset; for (auto it = pageTypeHash.constBegin(); it != pageTypeHash.constEnd(); ++it) fullSubset.insert(it.value()); @@ -215,29 +215,25 @@ QStringList HelpProjectWriter::keywordDetails(const Node *node) const if (node->parent() && !node->parent()->name().isEmpty()) { // "name" if (node->isEnumType() || node->isTypedef()) - details << node->parent()->name()+"::"+node->name(); + details << node->parent()->name() + "::" + node->name(); else details << node->name(); // "id" if (!node->isRelatedNonmember()) - details << node->parent()->name()+"::"+node->name(); + details << node->parent()->name() + "::" + node->name(); else details << node->name(); - } - else if (node->isQmlType() || node->isQmlBasicType()) { + } else if (node->isQmlType() || node->isQmlBasicType()) { details << node->name(); details << "QML." + node->name(); - } - else if (node->isJsType() || node->isJsBasicType()) { + } else if (node->isJsType() || node->isJsBasicType()) { details << node->name(); details << "JS." + node->name(); - } - else if (node->isTextPageNode()) { + } else if (node->isTextPageNode()) { const PageNode *fake = static_cast(node); details << fake->fullTitle(); details << fake->fullTitle(); - } - else { + } else { details << node->name(); details << node->name(); } @@ -245,8 +241,7 @@ QStringList HelpProjectWriter::keywordDetails(const Node *node) const return details; } -bool HelpProjectWriter::generateSection(HelpProject &project, - QXmlStreamWriter & /* writer */, +bool HelpProjectWriter::generateSection(HelpProject &project, QXmlStreamWriter & /* writer */, const Node *node) { if (!node->url().isEmpty() && !(project.includeIndexNodes && !node->url().startsWith("http"))) @@ -271,16 +266,15 @@ bool HelpProjectWriter::generateSection(HelpProject &project, // No selectors: accept all nodes. if (subproject.selectors.isEmpty()) { project.subprojects[i].nodes[objName] = node; - } - else if (subproject.selectors.contains(node->nodeType())) { + } else if (subproject.selectors.contains(node->nodeType())) { // Add all group members for '[group|module|qmlmodule]:name' selector if (node->isGroup() || node->isModule() || node->isQmlModule()) { if (project.subprojects[i].groups.contains(node->name().toLower())) { const CollectionNode *cn = static_cast(node); const auto members = cn->members(); for (const Node *m : members) { - QString memberName = m->isTextPageNode() - ? m->fullTitle() : m->fullDocumentName(); + QString memberName = + m->isTextPageNode() ? m->fullTitle() : m->fullDocumentName(); project.subprojects[i].nodes[memberName] = m; } } @@ -291,8 +285,8 @@ bool HelpProjectWriter::generateSection(HelpProject &project, else { // Accept only doc nodes with subtypes contained in the selector's // mask. - if (subproject.selectors[node->nodeType()].contains(node->nodeType()) && - !node->isExternalPage() && !node->fullTitle().isEmpty()) { + if (subproject.selectors[node->nodeType()].contains(node->nodeType()) + && !node->isExternalPage() && !node->fullTitle().isEmpty()) { project.subprojects[i].nodes[objName] = node; } @@ -316,13 +310,12 @@ bool HelpProjectWriter::generateSection(HelpProject &project, for (const Atom *keyword : keywords) { if (!keyword->string().isEmpty()) { QStringList details; - details << keyword->string() - << keyword->string() + details << keyword->string() << keyword->string() << gen_->fullDocumentLocation(node, false); project.keywords.append(details); - } - else - node->doc().location().warning(tr("Bad keyword in %1").arg(gen_->fullDocumentLocation(node, false))); + } else + node->doc().location().warning( + tr("Bad keyword in %1").arg(gen_->fullDocumentLocation(node, false))); } } project.keywords.append(keywordDetails(node)); @@ -334,55 +327,51 @@ bool HelpProjectWriter::generateSection(HelpProject &project, case Node::Enum: project.keywords.append(keywordDetails(node)); - { - const EnumNode *enumNode = static_cast(node); - const auto items = enumNode->items(); - for (const auto &item : items) { - QStringList details; + { + const EnumNode *enumNode = static_cast(node); + const auto items = enumNode->items(); + for (const auto &item : items) { + QStringList details; - if (enumNode->itemAccess(item.name()) == Node::Private) - continue; + if (enumNode->itemAccess(item.name()) == Node::Private) + continue; - if (!node->parent()->name().isEmpty()) { - details << node->parent()->name()+"::"+item.name(); // "name" - details << node->parent()->name()+"::"+item.name(); // "id" - } else { - details << item.name(); // "name" - details << item.name(); // "id" + if (!node->parent()->name().isEmpty()) { + details << node->parent()->name() + "::" + item.name(); // "name" + details << node->parent()->name() + "::" + item.name(); // "id" + } else { + details << item.name(); // "name" + details << item.name(); // "id" + } + details << gen_->fullDocumentLocation(node, false); + project.keywords.append(details); } - details << gen_->fullDocumentLocation(node, false); - project.keywords.append(details); } - } break; case Node::Group: case Node::Module: case Node::QmlModule: - case Node::JsModule: - { - const CollectionNode *cn = static_cast(node); - if (!cn->fullTitle().isEmpty()) { - if (cn->doc().hasKeywords()) { - const auto keywords = cn->doc().keywords(); - for (const Atom *keyword : keywords) { - if (!keyword->string().isEmpty()) { - QStringList details; - details << keyword->string() - << keyword->string() - << gen_->fullDocumentLocation(node, false); - project.keywords.append(details); - } - else - cn->doc().location().warning( - tr("Bad keyword in %1").arg(gen_->fullDocumentLocation(node, false)) - ); - } + case Node::JsModule: { + const CollectionNode *cn = static_cast(node); + if (!cn->fullTitle().isEmpty()) { + if (cn->doc().hasKeywords()) { + const auto keywords = cn->doc().keywords(); + for (const Atom *keyword : keywords) { + if (!keyword->string().isEmpty()) { + QStringList details; + details << keyword->string() << keyword->string() + << gen_->fullDocumentLocation(node, false); + project.keywords.append(details); + } else + cn->doc().location().warning( + tr("Bad keyword in %1") + .arg(gen_->fullDocumentLocation(node, false))); } - project.keywords.append(keywordDetails(node)); } + project.keywords.append(keywordDetails(node)); } - break; + } break; case Node::Property: case Node::QmlProperty: @@ -390,8 +379,7 @@ bool HelpProjectWriter::generateSection(HelpProject &project, project.keywords.append(keywordDetails(node)); break; - case Node::Function: - { + case Node::Function: { const FunctionNode *funcNode = static_cast(node); /* @@ -419,11 +407,9 @@ bool HelpProjectWriter::generateSection(HelpProject &project, if (node->parent()) project.memberStatus[node->parent()].insert(node->status()); - } - break; + } break; - case Node::Typedef: - { + case Node::Typedef: { const TypedefNode *typedefNode = static_cast(node); QStringList typedefDetails = keywordDetails(node); const EnumNode *enumNode = typedefNode->associatedEnum(); @@ -433,14 +419,11 @@ bool HelpProjectWriter::generateSection(HelpProject &project, typedefDetails[2] = gen_->fullDocumentLocation(enumNode, false); project.keywords.append(typedefDetails); - } - break; + } break; - case Node::Variable: - { + case Node::Variable: { project.keywords.append(keywordDetails(node)); - } - break; + } break; // Page nodes (such as manual pages) contain subtypes, titles and other // attributes. @@ -452,8 +435,7 @@ bool HelpProjectWriter::generateSection(HelpProject &project, for (const Atom *keyword : keywords) { if (!keyword->string().isEmpty()) { QStringList details; - details << keyword->string() - << keyword->string() + details << keyword->string() << keyword->string() << gen_->fullDocumentLocation(node, false); project.keywords.append(details); } else { @@ -466,8 +448,7 @@ bool HelpProjectWriter::generateSection(HelpProject &project, } break; } - default: - ; + default:; } // Add all images referenced in the page to the set of files to include. @@ -485,7 +466,8 @@ bool HelpProjectWriter::generateSection(HelpProject &project, return true; } -void HelpProjectWriter::generateSections(HelpProject &project, QXmlStreamWriter &writer, const Node *node) +void HelpProjectWriter::generateSections(HelpProject &project, QXmlStreamWriter &writer, + const Node *node) { /* Don't include index nodes in the help file. @@ -542,7 +524,7 @@ void HelpProjectWriter::writeHashFile(QFile &file) } void HelpProjectWriter::writeSection(QXmlStreamWriter &writer, const QString &path, - const QString &value) + const QString &value) { writer.writeStartElement(QStringLiteral("section")); writer.writeAttribute(QStringLiteral("ref"), path); @@ -553,11 +535,10 @@ void HelpProjectWriter::writeSection(QXmlStreamWriter &writer, const QString &pa /*! Write subsections for all members, compatibility members and obsolete members. */ -void HelpProjectWriter::addMembers(HelpProject &project, QXmlStreamWriter &writer, - const Node *node) +void HelpProjectWriter::addMembers(HelpProject &project, QXmlStreamWriter &writer, const Node *node) { QString href = gen_->fullDocumentLocation(node, false); - href = href.left(href.size()-5); + href = href.left(href.size() - 5); if (href.isEmpty()) return; @@ -567,9 +548,9 @@ void HelpProjectWriter::addMembers(HelpProject &project, QXmlStreamWriter &write // Do not generate a 'List of all members' for namespaces or header files, // but always generate it for derived classes and QML classes - if (!node->isNamespace() && !node->isHeader() && - (derivedClass || node->isQmlType() || node->isJsType() || - !project.memberStatus[node].isEmpty())) { + if (!node->isNamespace() && !node->isHeader() + && (derivedClass || node->isQmlType() || node->isJsType() + || !project.memberStatus[node].isEmpty())) { QString membersPath = href + QStringLiteral("-members.html"); writeSection(writer, membersPath, tr("List of all members")); } @@ -579,8 +560,7 @@ void HelpProjectWriter::addMembers(HelpProject &project, QXmlStreamWriter &write } } -void HelpProjectWriter::writeNode(HelpProject &project, QXmlStreamWriter &writer, - const Node *node) +void HelpProjectWriter::writeNode(HelpProject &project, QXmlStreamWriter &writer, const Node *node) { QString href = gen_->fullDocumentLocation(node, false); QString objName = node->name(); @@ -593,7 +573,8 @@ void HelpProjectWriter::writeNode(HelpProject &project, QXmlStreamWriter &writer writer.writeStartElement("section"); writer.writeAttribute("ref", href); if (node->parent() && !node->parent()->name().isEmpty()) - writer.writeAttribute("title", tr("%1::%2 Class Reference").arg(node->parent()->name()).arg(objName)); + writer.writeAttribute( + "title", tr("%1::%2 Class Reference").arg(node->parent()->name()).arg(objName)); else writer.writeAttribute("title", tr("%1 Class Reference").arg(objName)); @@ -632,22 +613,18 @@ void HelpProjectWriter::writeNode(HelpProject &project, QXmlStreamWriter &writer writer.writeAttribute("title", pn->fullTitle()); writer.writeEndElement(); // section - } - break; + } break; case Node::Group: case Node::Module: case Node::JsModule: - case Node::QmlModule: - { - const CollectionNode *cn = static_cast(node); - writer.writeStartElement("section"); - writer.writeAttribute("ref", href); - writer.writeAttribute("title", cn->fullTitle()); - writer.writeEndElement(); // section - } - break; - default: - ; + case Node::QmlModule: { + const CollectionNode *cn = static_cast(node); + writer.writeStartElement("section"); + writer.writeAttribute("ref", href); + writer.writeAttribute("title", cn->fullTitle()); + writer.writeEndElement(); // section + } break; + default:; } } @@ -689,7 +666,8 @@ void HelpProjectWriter::generateProject(HelpProject &project) writer.writeEndElement(); // Write customFilter elements. - for (auto it = project.customFilters.constBegin(); it != project.customFilters.constEnd(); ++it) { + for (auto it = project.customFilters.constBegin(); it != project.customFilters.constEnd(); + ++it) { writer.writeStartElement("customFilter"); writer.writeAttribute("name", it.key()); QStringList sortedAttributes = it.value().values(); @@ -768,8 +746,7 @@ void HelpProjectWriter::generateProject(HelpProject &project) sectionStack.top() += 1; } break; - default: - ; + default:; } if (atom == indexBody.lastAtom()) @@ -778,14 +755,13 @@ void HelpProjectWriter::generateProject(HelpProject &project) } } else rootNode->doc().location().warning( - tr("Failed to find index: %1").arg(subproject.indexTitle) - ); + tr("Failed to find index: %1").arg(subproject.indexTitle)); } else { writer.writeStartElement("section"); - QString indexPath = gen_->fullDocumentLocation(qdb_->findNodeForTarget(subproject.indexTitle, nullptr), - false); + QString indexPath = gen_->fullDocumentLocation( + qdb_->findNodeForTarget(subproject.indexTitle, nullptr), false); writer.writeAttribute("ref", indexPath); writer.writeAttribute("title", subproject.title); @@ -801,8 +777,8 @@ void HelpProjectWriter::generateProject(HelpProject &project) bool contentsFound = false; for (const auto *node : qAsConst(subproject.nodes)) { QString nextTitle = node->links().value(Node::NextLink).first; - if (!nextTitle.isEmpty() && - node->links().value(Node::ContentsLink).first.isEmpty()) { + if (!nextTitle.isEmpty() + && node->links().value(Node::ContentsLink).first.isEmpty()) { const Node *nextPage = qdb_->findNodeForTarget(nextTitle, nullptr); @@ -849,7 +825,7 @@ void HelpProjectWriter::generateProject(HelpProject &project) writer.writeAttribute("name", details[0]); writer.writeAttribute("id", details[1]); writer.writeAttribute("ref", details[2]); - writer.writeEndElement(); //keyword + writer.writeEndElement(); // keyword } writer.writeEndElement(); // keywords @@ -857,7 +833,8 @@ void HelpProjectWriter::generateProject(HelpProject &project) // The list of files to write is the union of generated files and // other files (images and extras) included in the project - QSet files = QSet(gen_->outputFileNames().cbegin(), gen_->outputFileNames().cend()); + QSet files = + QSet(gen_->outputFileNames().cbegin(), gen_->outputFileNames().cend()); files.unite(project.files); files.unite(project.extraFiles); QStringList sortedFiles = files.values(); diff --git a/src/qdoc/helpprojectwriter.h b/src/qdoc/helpprojectwriter.h index 222a5f097..be5439dfb 100644 --- a/src/qdoc/helpprojectwriter.h +++ b/src/qdoc/helpprojectwriter.h @@ -83,30 +83,22 @@ class HelpProjectWriter Q_DECLARE_TR_FUNCTIONS(QDoc::HelpProjectWriter) public: - HelpProjectWriter(const Config &config, - const QString &defaultFileName, - Generator *g); - void reset(const Config &config, - const QString &defaultFileName, - Generator *g); + HelpProjectWriter(const Config &config, const QString &defaultFileName, Generator *g); + void reset(const Config &config, const QString &defaultFileName, Generator *g); void addExtraFile(const QString &file); void addExtraFiles(const QSet &files); 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); + void generateSections(HelpProject &project, QXmlStreamWriter &writer, const Node *node); + bool generateSection(HelpProject &project, QXmlStreamWriter &writer, const Node *node); QStringList keywordDetails(const Node *node) const; void writeHashFile(QFile &file); 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); + void addMembers(HelpProject &project, QXmlStreamWriter &writer, const Node *node); + void writeSection(QXmlStreamWriter &writer, const QString &path, const QString &value); QDocDatabase *qdb_; Generator *gen_; diff --git a/src/qdoc/htmlgenerator.cpp b/src/qdoc/htmlgenerator.cpp index 05241753d..23183614b 100644 --- a/src/qdoc/htmlgenerator.cpp +++ b/src/qdoc/htmlgenerator.cpp @@ -66,9 +66,7 @@ static QRegExp typeTag("(<@(type|headerfile|func)(?: +[^>]*)?>)(.*)()"); static QRegExp spanTag(""); static QRegExp unknownTag("]*>"); -static void addLink(const QString &linkTarget, - const QStringRef &nestedStuff, - QString *res) +static void addLink(const QString &linkTarget, const QStringRef &nestedStuff, QString *res) { if (!linkTarget.isEmpty()) { *res += QLatin1String(""); *res += nestedStuff; *res += QLatin1String(""); - } - else { + } else { *res += nestedStuff; } } @@ -112,26 +109,29 @@ HtmlGenerator::~HtmlGenerator() */ void HtmlGenerator::initializeGenerator(const Config &config) { - static const struct { + static const struct + { const char *key; const char *left; const char *right; - } defaults[] = { - { ATOM_FORMATTING_BOLD, "", "" }, - { ATOM_FORMATTING_INDEX, "" }, - { ATOM_FORMATTING_ITALIC, "", "" }, - { ATOM_FORMATTING_PARAMETER, "", "" }, - { ATOM_FORMATTING_SUBSCRIPT, "", "" }, - { ATOM_FORMATTING_SUPERSCRIPT, "", "" }, - { ATOM_FORMATTING_TELETYPE, "", "" }, // tag is not supported in HTML5 - { ATOM_FORMATTING_UICONTROL, "", "" }, - { ATOM_FORMATTING_UNDERLINE, "", "" }, - { nullptr, nullptr, nullptr } - }; + } defaults[] = { { ATOM_FORMATTING_BOLD, "", "" }, + { ATOM_FORMATTING_INDEX, "" }, + { ATOM_FORMATTING_ITALIC, "", "" }, + { ATOM_FORMATTING_PARAMETER, "", "" }, + { ATOM_FORMATTING_SUBSCRIPT, "", "" }, + { ATOM_FORMATTING_SUPERSCRIPT, "", "" }, + { ATOM_FORMATTING_TELETYPE, "", + "" }, // tag is not supported in HTML5 + { ATOM_FORMATTING_UICONTROL, "", "" }, + { ATOM_FORMATTING_UNDERLINE, "", "" }, + { nullptr, nullptr, nullptr } }; Generator::initializeGenerator(config); obsoleteLinks = config.getBool(CONFIG_OBSOLETELINKS); - setImageFileExtensions(QStringList() << "png" << "jpg" << "jpeg" << "gif"); + setImageFileExtensions(QStringList() << "png" + << "jpg" + << "jpeg" + << "gif"); /* The formatting maps are owned by Generator. They are cleared in @@ -140,44 +140,27 @@ void HtmlGenerator::initializeGenerator(const Config &config) int i = 0; while (defaults[i].key) { formattingLeftMap().insert(QLatin1String(defaults[i].key), QLatin1String(defaults[i].left)); - formattingRightMap().insert(QLatin1String(defaults[i].key), QLatin1String(defaults[i].right)); + formattingRightMap().insert(QLatin1String(defaults[i].key), + QLatin1String(defaults[i].right)); i++; } - style = config.getString(HtmlGenerator::format() + - Config::dot + - CONFIG_STYLE); - endHeader = config.getString(HtmlGenerator::format() + - Config::dot + - CONFIG_ENDHEADER); - postHeader = config.getString(HtmlGenerator::format() + - Config::dot + - HTMLGENERATOR_POSTHEADER); - postPostHeader = config.getString(HtmlGenerator::format() + - Config::dot + - HTMLGENERATOR_POSTPOSTHEADER); - prologue = config.getString(HtmlGenerator::format() + - Config::dot + - HTMLGENERATOR_PROLOGUE); - - footer = config.getString(HtmlGenerator::format() + - Config::dot + - HTMLGENERATOR_FOOTER); - address = config.getString(HtmlGenerator::format() + - Config::dot + - HTMLGENERATOR_ADDRESS); - pleaseGenerateMacRef = config.getBool(HtmlGenerator::format() + - Config::dot + - HTMLGENERATOR_GENERATEMACREFS); - noNavigationBar = config.getBool(HtmlGenerator::format() + - Config::dot + - HTMLGENERATOR_NONAVIGATIONBAR); - navigationSeparator = config.getString(HtmlGenerator::format() + - Config::dot + - HTMLGENERATOR_NAVIGATIONSEPARATOR); - tocDepth = config.getInt(HtmlGenerator::format() + - Config::dot + - HTMLGENERATOR_TOCDEPTH); + style = config.getString(HtmlGenerator::format() + Config::dot + CONFIG_STYLE); + endHeader = config.getString(HtmlGenerator::format() + Config::dot + CONFIG_ENDHEADER); + postHeader = config.getString(HtmlGenerator::format() + Config::dot + HTMLGENERATOR_POSTHEADER); + postPostHeader = + config.getString(HtmlGenerator::format() + Config::dot + HTMLGENERATOR_POSTPOSTHEADER); + prologue = config.getString(HtmlGenerator::format() + Config::dot + HTMLGENERATOR_PROLOGUE); + + footer = config.getString(HtmlGenerator::format() + Config::dot + HTMLGENERATOR_FOOTER); + address = config.getString(HtmlGenerator::format() + Config::dot + HTMLGENERATOR_ADDRESS); + pleaseGenerateMacRef = + config.getBool(HtmlGenerator::format() + Config::dot + HTMLGENERATOR_GENERATEMACREFS); + noNavigationBar = + config.getBool(HtmlGenerator::format() + Config::dot + HTMLGENERATOR_NONAVIGATIONBAR); + navigationSeparator = config.getString(HtmlGenerator::format() + Config::dot + + HTMLGENERATOR_NAVIGATIONSEPARATOR); + tocDepth = config.getInt(HtmlGenerator::format() + Config::dot + HTMLGENERATOR_TOCDEPTH); project = config.getString(CONFIG_PROJECT); @@ -201,16 +184,10 @@ void HtmlGenerator::initializeGenerator(const Config &config) const QSet editionNames = config.subVars(CONFIG_EDITION); for (const auto &editionName : editionNames) { - QStringList editionModules = config.getStringList(CONFIG_EDITION + - Config::dot + - editionName + - Config::dot + - "modules"); - QStringList editionGroups = config.getStringList(CONFIG_EDITION + - Config::dot + - editionName + - Config::dot + - "groups"); + QStringList editionModules = config.getStringList(CONFIG_EDITION + Config::dot + editionName + + Config::dot + "modules"); + QStringList editionGroups = config.getStringList(CONFIG_EDITION + Config::dot + editionName + + Config::dot + "groups"); if (!editionModules.isEmpty()) editionModuleMap[editionName] = editionModules; @@ -236,46 +213,33 @@ void HtmlGenerator::initializeGenerator(const Config &config) headerStyles = config.getString(HtmlGenerator::format() + Config::dot + CONFIG_HEADERSTYLES); QString prefix = CONFIG_QHP + Config::dot + project + Config::dot; - manifestDir = QLatin1String("qthelp://") + config.getString(prefix + QLatin1String("namespace")); - manifestDir += QLatin1Char('/') + config.getString(prefix + QLatin1String("virtualFolder")) + QLatin1Char('/'); + manifestDir = + QLatin1String("qthelp://") + config.getString(prefix + QLatin1String("namespace")); + manifestDir += QLatin1Char('/') + config.getString(prefix + QLatin1String("virtualFolder")) + + QLatin1Char('/'); readManifestMetaContent(config); examplesPath = config.getString(CONFIG_EXAMPLESINSTALLPATH); if (!examplesPath.isEmpty()) examplesPath += QLatin1Char('/'); // Retrieve the config for the navigation bar - homepage = config.getString(CONFIG_NAVIGATION - + Config::dot - + CONFIG_HOMEPAGE); + homepage = config.getString(CONFIG_NAVIGATION + Config::dot + CONFIG_HOMEPAGE); - hometitle = config.getString(CONFIG_NAVIGATION - + Config::dot - + CONFIG_HOMETITLE, homepage); + hometitle = config.getString(CONFIG_NAVIGATION + Config::dot + CONFIG_HOMETITLE, homepage); - landingpage = config.getString(CONFIG_NAVIGATION - + Config::dot - + CONFIG_LANDINGPAGE); + landingpage = config.getString(CONFIG_NAVIGATION + Config::dot + CONFIG_LANDINGPAGE); - landingtitle = config.getString(CONFIG_NAVIGATION - + Config::dot - + CONFIG_LANDINGTITLE, landingpage); + landingtitle = + config.getString(CONFIG_NAVIGATION + Config::dot + CONFIG_LANDINGTITLE, landingpage); - cppclassespage = config.getString(CONFIG_NAVIGATION - + Config::dot - + CONFIG_CPPCLASSESPAGE); + cppclassespage = config.getString(CONFIG_NAVIGATION + Config::dot + CONFIG_CPPCLASSESPAGE); - cppclassestitle = config.getString(CONFIG_NAVIGATION - + Config::dot - + CONFIG_CPPCLASSESTITLE, + cppclassestitle = config.getString(CONFIG_NAVIGATION + Config::dot + CONFIG_CPPCLASSESTITLE, QLatin1String("C++ Classes")); - qmltypespage = config.getString(CONFIG_NAVIGATION - + Config::dot - + CONFIG_QMLTYPESPAGE); + qmltypespage = config.getString(CONFIG_NAVIGATION + Config::dot + CONFIG_QMLTYPESPAGE); - qmltypestitle = config.getString(CONFIG_NAVIGATION - + Config::dot - + CONFIG_QMLTYPESTITLE, + qmltypestitle = config.getString(CONFIG_NAVIGATION + Config::dot + CONFIG_QMLTYPESTITLE, QLatin1String("QML Types")); buildversion = config.getString(CONFIG_BUILDVERSION); @@ -324,11 +288,10 @@ void HtmlGenerator::generateDocs() generateQAPage(); if (!generating()) { - QString fileBase = project.toLower().simplified().replace(QLatin1Char(' '), QLatin1Char('-')); - qdb_->generateIndex(outputDir() + QLatin1Char('/') + fileBase + ".index", - projectUrl, - projectDescription, - this); + QString fileBase = + project.toLower().simplified().replace(QLatin1Char(' '), QLatin1Char('-')); + qdb_->generateIndex(outputDir() + QLatin1Char('/') + fileBase + ".index", projectUrl, + projectDescription, this); } if (!preparing()) { @@ -350,7 +313,8 @@ void HtmlGenerator::generateQAPage() beginSubPage(node, "aaa-" + defaultModuleName().toLower() + "-qa-page.html"); CodeMarker *marker = CodeMarker::markerForFileName(node->location().filePath()); QString title = "Quality Assurance Page for " + defaultModuleName(); - QString t = "Quality assurance information for checking the " + defaultModuleName() + " documentation."; + QString t = "Quality assurance information for checking the " + defaultModuleName() + + " documentation."; generateHeader(title, node, marker); generateTitle(title, Text() << t, LargeSubTitle, node, marker); @@ -366,30 +330,27 @@ void HtmlGenerator::generateQAPage() << "class=\"even\">Destination Module" << "Link Count\n"; QString fileName; - for (int i = 0; i< strings.size(); ++i) { + for (int i = 0; i < strings.size(); ++i) { fileName = generateLinksToLinksPage(strings.at(i), marker); out() << "" - << "" - << strings.at(i) << "" - << "" << counts.at(i) - << "\n"; + << "" << strings.at(i) << "" + << "" << counts.at(i) << "\n"; } int count = 0; fileName = generateLinksToBrokenLinksPage(marker, count); if (count != 0) { out() << "" << "" - << "Broken Links" << "" - << "" << count - << "\n"; - + << "Broken Links" + << "" + << "" << count << "\n"; } out() << "\n"; t = "The Optimal \"depends\" Variable"; out() << "

" << protectEnc(t) << "

\n"; - t = "Consider replacing the depends variable in " + defaultModuleName().toLower() + - ".qdocconf with this one, if the two are not identical:"; + t = "Consider replacing the depends variable in " + defaultModuleName().toLower() + + ".qdocconf with this one, if the two are not identical:"; out() << "

" << protectEnc(t) << "

\n"; out() << "

" << protectEnc(depends) << "

\n"; } @@ -400,20 +361,14 @@ void HtmlGenerator::generateQAPage() /*! Generate an html file with the contents of a C++ or QML source file. */ -void HtmlGenerator::generateExampleFilePage(const Node *en, - const QString &file, - CodeMarker *marker) +void HtmlGenerator::generateExampleFilePage(const Node *en, const QString &file, CodeMarker *marker) { SubTitleSize subTitleSize = LargeSubTitle; QString fullTitle = en->fullTitle(); beginFilePage(en, linkForExampleFile(file, en)); generateHeader(fullTitle, en, marker); - generateTitle(fullTitle, - Text() << en->subtitle(), - subTitleSize, - en, - marker); + generateTitle(fullTitle, Text() << en->subtitle(), subTitleSize, en, marker); Text text; Quoter quoter; @@ -441,14 +396,15 @@ QString HtmlGenerator::generateLinksToLinksPage(const QString &module, CodeMarke QString title = "Links from " + defaultModuleName() + " to " + module; generateHeader(title, node, marker); generateTitle(title, Text(), SmallSubTitle, node, marker); - out() << "

This is a list of links from " << defaultModuleName() - << " to " << module << ". "; + out() << "

This is a list of links from " << defaultModuleName() << " to " << module << ". "; out() << "Click on a link to go to the location of the link. The link is marked "; out() << "with red asterisks. "; out() << "Click on the marked link to see if it goes to the right place.

\n"; const TargetList *tlist = qdb_->getTargetList(module); if (tlist) { - out() << "\n"; + out() << "
Link to link...In file...Somewhere after line number...
\n"; for (const TargetLoc *t : *tlist) { // e.g.: Layout Management out() << ""; - } - else { + } else { out() << "\n"; inTableHeader_ = false; } @@ -1184,21 +1088,19 @@ int HtmlGenerator::generateAtom(const Atom *atom, const Node *relative, CodeMark case Atom::TableRowRight: out() << "\n"; break; - case Atom::TableItemLeft: - { + case Atom::TableItemLeft: { if (inTableHeader_) out() << ""; @@ -1237,8 +1138,7 @@ int HtmlGenerator::generateAtom(const Atom *atom, const Node *relative, CodeMark out() << "<Missing HTML>"; break; case Atom::UnknownCommand: - out() << "\\" << protectEnc(atom->string()) - << ""; + out() << "\\" << protectEnc(atom->string()) << ""; break; case Atom::QmlText: case Atom::EndQmlText: @@ -1280,8 +1180,7 @@ void HtmlGenerator::generateCppReferencePage(Aggregate *aggregate, CodeMarker *m ns = static_cast(aggregate); summarySections = §ions.stdSummarySections(); detailsSections = §ions.stdDetailsSections(); - } - else if (aggregate->isClassNode()) { + } else if (aggregate->isClassNode()) { rawTitle = aggregate->plainName(); fullTitle = aggregate->plainFullName(); if (aggregate->isStruct()) @@ -1291,8 +1190,7 @@ void HtmlGenerator::generateCppReferencePage(Aggregate *aggregate, CodeMarker *m title = rawTitle + " " + word; summarySections = §ions.stdCppClassSummarySections(); detailsSections = §ions.stdCppClassDetailsSections(); - } - else if (aggregate->isHeader()) { + } else if (aggregate->isHeader()) { title = fullTitle = rawTitle = aggregate->fullTitle(); summarySections = §ions.stdSummarySections(); detailsSections = §ions.stdDetailsSections(); @@ -1302,9 +1200,9 @@ void HtmlGenerator::generateCppReferencePage(Aggregate *aggregate, CodeMarker *m if (rawTitle != fullTitle) { if (aggregate->parent()->isClassNode()) { QString word2 = aggregate->parent()->typeWord(false); - subtitleText << word << " " << rawTitle << " is declared in " << word2 - << " " << Atom(Atom::AutoLink, aggregate->parent()->plainName()) - << "." << Atom(Atom::LineBreak); + subtitleText << word << " " << rawTitle << " is declared in " << word2 << " " + << Atom(Atom::AutoLink, aggregate->parent()->plainName()) << "." + << Atom(Atom::LineBreak); } else { subtitleText << "(" << Atom(Atom::AutoLink, fullTitle) << ")" << Atom(Atom::LineBreak); } @@ -1321,14 +1219,12 @@ void HtmlGenerator::generateCppReferencePage(Aggregate *aggregate, CodeMarker *m << ns->tree()->camelCaseModuleName() << ". The full namespace is " << "documented in module " << NS->tree()->camelCaseModuleName() << Atom(Atom::LinkNode, CodeMarker::stringForNode(NS)) - << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK) - << Atom(Atom::String, " here.") + << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK) << Atom(Atom::String, " here.") << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK); out() << "

"; generateText(brief, ns, marker); out() << "

\n"; - } - else + } else generateBrief(aggregate, marker); if (!aggregate->parent()->isClassNode()) generateRequisites(aggregate, marker); @@ -1398,11 +1294,14 @@ void HtmlGenerator::generateCppReferencePage(Aggregate *aggregate, CodeMarker *m QString command = "documentation"; if (aggregate->isClassNode()) command = "\'\\class\' comment"; - aggregate->location().warning(tr("No %1 for '%2'").arg(command).arg(aggregate->plainSignature())); + aggregate->location().warning( + tr("No %1 for '%2'").arg(command).arg(aggregate->plainSignature())); } else { generateExtractionMark(aggregate, DetailedDescriptionMark); out() << "
\n" // QTBUG-9504 - << "

" << "Detailed Description" << "

\n"; + << "

" + << "Detailed Description" + << "

\n"; generateBody(aggregate, marker); out() << "
\n"; // QTBUG-9504 generateAlsoList(aggregate, marker); @@ -1410,7 +1309,7 @@ void HtmlGenerator::generateCppReferencePage(Aggregate *aggregate, CodeMarker *m generateExtractionMark(aggregate, EndMark); } - for (const auto §ion :qAsConst(*detailsSections)) { + for (const auto §ion : qAsConst(*detailsSections)) { bool headerGenerated = false; if (section.isEmpty()) continue; @@ -1442,8 +1341,7 @@ void HtmlGenerator::generateCppReferencePage(Aggregate *aggregate, CodeMarker *m names.clear(); } else if (member->isProperty()) { const PropertyNode *prop = reinterpret_cast(member); - if (!prop->getters().isEmpty() && - !names.contains(prop->getters().first()->name())) + if (!prop->getters().isEmpty() && !names.contains(prop->getters().first()->name())) names << prop->getters().first()->name(); if (!prop->setters().isEmpty()) names << prop->setters().first()->name(); @@ -1458,10 +1356,9 @@ void HtmlGenerator::generateCppReferencePage(Aggregate *aggregate, CodeMarker *m const auto &enumItemNameList = enume->doc().enumItemNames(); const auto &omitEnumItemNameList = enume->doc().omitEnumItemNames(); const auto items = QSet(enumItemNameList.cbegin(), enumItemNameList.cend()) - - QSet(omitEnumItemNameList.cbegin(), omitEnumItemNameList.cend()); + - QSet(omitEnumItemNameList.cbegin(), omitEnumItemNameList.cend()); for (const QString &enumName : items) { - names << plainCode(marker->markedUpEnumValue(enumName, - enume)); + names << plainCode(marker->markedUpEnumValue(enumName, enume)); } } } @@ -1506,7 +1403,9 @@ void HtmlGenerator::generateProxyPage(Aggregate *aggregate, CodeMarker *marker) if (!aggregate->doc().isEmpty()) { generateExtractionMark(aggregate, DetailedDescriptionMark); out() << "
\n" // QTBUG-9504 - << "

" << "Detailed Description" << "

\n"; + << "

" + << "Detailed Description" + << "

\n"; generateBody(aggregate, marker); out() << "
\n"; // QTBUG-9504 generateAlsoList(aggregate, marker); @@ -1546,8 +1445,10 @@ void HtmlGenerator::generateProxyPage(Aggregate *aggregate, CodeMarker *marker) names << enume->flagsType()->name(); const auto &enumItemNameList = enume->doc().enumItemNames(); const auto &omitEnumItemNameList = enume->doc().omitEnumItemNames(); - const auto items = QSet(enumItemNameList.cbegin(), enumItemNameList.cend()) - - QSet(omitEnumItemNameList.cbegin(), omitEnumItemNameList.cend()); + const auto items = + QSet(enumItemNameList.cbegin(), enumItemNameList.cend()) + - QSet(omitEnumItemNameList.cbegin(), + omitEnumItemNameList.cend()); for (const QString &enumName : items) names << plainCode(marker->markedUpEnumValue(enumName, enume)); } @@ -1601,8 +1502,7 @@ void HtmlGenerator::generateQmlTypePage(QmlTypeNode *qcn, CodeMarker *marker) for (const auto §ion : stdQmlTypeSummarySections) { if (!section.isEmpty()) { QString ref = registerRef(section.title().toLower()); - out() << "" << divNavTop << '\n'; + out() << "" << divNavTop << '\n'; out() << "

" << protectEnc(section.title()) << "

\n"; generateQmlSummary(section.members(), qcn, marker); } @@ -1611,7 +1511,9 @@ void HtmlGenerator::generateQmlTypePage(QmlTypeNode *qcn, CodeMarker *marker) generateExtractionMark(qcn, DetailedDescriptionMark); QString detailsRef = registerRef("details"); out() << "" << divNavTop << '\n'; - out() << "

" << "Detailed Description" << "

\n"; + out() << "

" + << "Detailed Description" + << "

\n"; generateBody(qcn, marker); ClassNode *cn = qcn->classNode(); if (cn) @@ -1651,27 +1553,23 @@ void HtmlGenerator::generateQmlBasicTypePage(QmlBasicTypeNode *qbtn, CodeMarker generateHeader(htmlTitle, qbtn, marker); Sections sections(qbtn); - generateTableOfContents(qbtn,marker,§ions.stdQmlTypeSummarySections()); + generateTableOfContents(qbtn, marker, §ions.stdQmlTypeSummarySections()); generateKeywordAnchors(qbtn); - generateTitle(htmlTitle, - Text() << qbtn->subtitle(), - subTitleSize, - qbtn, - marker); + generateTitle(htmlTitle, Text() << qbtn->subtitle(), subTitleSize, qbtn, marker); const QVector
&stdQmlTypeSummarySections = sections.stdQmlTypeSummarySections(); for (const auto §ion : stdQmlTypeSummarySections) { if (!section.isEmpty()) { QString ref = registerRef(section.title().toLower()); - out() << "" << divNavTop << '\n'; + out() << "" << divNavTop << '\n'; out() << "

" << protectEnc(section.title()) << "

\n"; generateQmlSummary(section.members(), qbtn, marker); } } generateExtractionMark(qbtn, DetailedDescriptionMark); - out() << "
\n"; // QTBUG-9504 + out() << "
\n"; // QTBUG-9504 generateBody(qbtn, marker); out() << "
\n"; // QTBUG-9504 @@ -1707,20 +1605,17 @@ void HtmlGenerator::generatePageNode(PageNode *pn, CodeMarker *marker) Don't generate a TOC for the home page. */ if ((pn->name() != QLatin1String("index.html"))) - generateTableOfContents(pn,marker,nullptr); + generateTableOfContents(pn, marker, nullptr); generateKeywordAnchors(pn); - generateTitle(fullTitle, - Text() << pn->subtitle(), - subTitleSize, - pn, - marker); + generateTitle(fullTitle, Text() << pn->subtitle(), subTitleSize, pn, marker); if (pn->isExample()) { generateBrief(pn, marker, nullptr, false); } generateExtractionMark(pn, DetailedDescriptionMark); - out() << "
\n"; // QTBUG-9504 + out() << "
\n"; // QTBUG-9504 generateBody(pn, marker); out() << "
\n"; // QTBUG-9504 @@ -1740,7 +1635,7 @@ void HtmlGenerator::generateCollectionNode(CollectionNode *cn, CodeMarker *marke QString ref; generateHeader(fullTitle, cn, marker); - generateTableOfContents(cn,marker, nullptr); + generateTableOfContents(cn, marker, nullptr); generateKeywordAnchors(cn); generateTitle(fullTitle, Text() << cn->subtitle(), subTitleSize, cn, marker); @@ -1775,11 +1670,13 @@ void HtmlGenerator::generateCollectionNode(CollectionNode *cn, CodeMarker *marke ref = registerRef("details"); out() << "" << divNavTop << '\n'; out() << "
\n"; // QTBUG-9504 - out() << "

" << "Detailed Description" << "

\n"; - } - else { + out() << "

" + << "Detailed Description" + << "

\n"; + } else { generateExtractionMark(cn, DetailedDescriptionMark); - out() << "
\n"; // QTBUG-9504 + out() << "
\n"; // QTBUG-9504 } generateBody(cn, marker); @@ -1838,10 +1735,8 @@ QString HtmlGenerator::fileExtension() const /*! Output navigation list in the html file. */ -void HtmlGenerator::generateNavigationBar(const QString &title, - const Node *node, - CodeMarker *marker, - const QString &buildversion, +void HtmlGenerator::generateNavigationBar(const QString &title, const Node *node, + CodeMarker *marker, const QString &buildversion, bool tableItems) { if (noNavigationBar || node == nullptr) @@ -1850,63 +1745,47 @@ void HtmlGenerator::generateNavigationBar(const QString &title, Text navigationbar; // Set list item types based on the navigation bar type - Atom::AtomType itemLeft = tableItems ? - Atom::TableItemLeft : Atom::ListItemLeft; - Atom::AtomType itemRight = tableItems ? - Atom::TableItemRight : Atom::ListItemRight; + Atom::AtomType itemLeft = tableItems ? Atom::TableItemLeft : Atom::ListItemLeft; + Atom::AtomType itemRight = tableItems ? Atom::TableItemRight : Atom::ListItemRight; if (hometitle == title) return; if (!homepage.isEmpty()) - navigationbar << Atom(itemLeft) - << Atom(Atom::NavLink, homepage) + navigationbar << Atom(itemLeft) << Atom(Atom::NavLink, homepage) << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK) << Atom(Atom::String, hometitle) - << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK) - << Atom(itemRight); + << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK) << Atom(itemRight); if (!landingpage.isEmpty() && landingtitle != title) - navigationbar << Atom(itemLeft) - << Atom(Atom::NavLink, landingpage) - << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK) - << Atom(Atom::String, landingtitle) - << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK) - << Atom(itemRight); + navigationbar << Atom(itemLeft) << Atom(Atom::NavLink, landingpage) + << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK) + << Atom(Atom::String, landingtitle) + << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK) << Atom(itemRight); if (node->isClassNode()) { if (!cppclassespage.isEmpty() && !cppclassestitle.isEmpty()) - navigationbar << Atom(itemLeft) - << Atom(Atom::NavLink, cppclassespage) - << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK) - << Atom(Atom::String, cppclassestitle) - << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK) - << Atom(itemRight); + navigationbar << Atom(itemLeft) << Atom(Atom::NavLink, cppclassespage) + << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK) + << Atom(Atom::String, cppclassestitle) + << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK) << Atom(itemRight); if (!node->name().isEmpty()) - navigationbar << Atom(itemLeft) - << Atom(Atom::String, node->name()) - << Atom(itemRight); - } - else if (node->isQmlType() || node->isQmlBasicType() || - node->isJsType() || node->isJsBasicType()) { + navigationbar << Atom(itemLeft) << Atom(Atom::String, node->name()) << Atom(itemRight); + } else if (node->isQmlType() || node->isQmlBasicType() || node->isJsType() + || node->isJsBasicType()) { if (!qmltypespage.isEmpty() && !qmltypestitle.isEmpty()) - navigationbar << Atom(itemLeft) - << Atom(Atom::NavLink, qmltypespage) + navigationbar << Atom(itemLeft) << Atom(Atom::NavLink, qmltypespage) << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK) << Atom(Atom::String, qmltypestitle) - << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK) - << Atom(itemRight) - << Atom(itemLeft) - << Atom(Atom::String, title) - << Atom(itemRight); - } - else { + << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK) << Atom(itemRight) + << Atom(itemLeft) << Atom(Atom::String, title) << Atom(itemRight); + } else { if (node->isAggregate()) { QStringList groups = static_cast(node)->groupNames(); if (groups.length() == 1) { - const Node *groupNode = qdb_->findNodeByNameAndType(QStringList(groups[0]), &Node::isGroup); + const Node *groupNode = + qdb_->findNodeByNameAndType(QStringList(groups[0]), &Node::isGroup); if (groupNode && !groupNode->title().isEmpty()) { - navigationbar << Atom(itemLeft) - << Atom(Atom::NavLink, groupNode->name()) + navigationbar << Atom(itemLeft) << Atom(Atom::NavLink, groupNode->name()) << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK) << Atom(Atom::String, groupNode->title()) << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK) @@ -1915,9 +1794,7 @@ void HtmlGenerator::generateNavigationBar(const QString &title, } } if (!navigationbar.isEmpty()) { - navigationbar << Atom(itemLeft) - << Atom(Atom::String, title) - << Atom(itemRight); + navigationbar << Atom(itemLeft) << Atom(Atom::String, title) << Atom(itemRight); } } @@ -1928,7 +1805,7 @@ void HtmlGenerator::generateNavigationBar(const QString &title, navigationbar.clear(); - if (tableItems) { + if (tableItems) { out() << "
Link to link...In file...Somewhere after line number...
"; @@ -490,7 +446,9 @@ QString HtmlGenerator::generateLinksToBrokenLinksPage(CodeMarker *marker, int &c out() << "

This is a list of broken links in " << defaultModuleName() << ". "; out() << "Click on a link to go to the broken link. "; out() << "The link's target could not be found.

\n"; - out() << "\n"; + out() << "
Link to broken link...In file...Somewhere after line number...
\n"; for (const TargetLoc *t : *tlist) { // e.g.: Layout Management out() << "
Link to broken link...In " + "file...Somewhere after line number...
"; @@ -518,42 +476,40 @@ int HtmlGenerator::generateAtom(const Atom *atom, const Node *relative, CodeMark static bool in_para = false; switch (atom->type()) { - case Atom::AutoLink: - { + case Atom::AutoLink: { QString name = atom->string(); if (relative && relative->name() == name.replace(QLatin1String("()"), QLatin1String())) { out() << protectEnc(atom->string()); break; } } - Q_FALLTHROUGH(); + Q_FALLTHROUGH(); case Atom::NavAutoLink: if (!inLink_ && !inContents_ && !inSectionHeading_) { const Node *node = nullptr; QString link = getAutoLink(atom, relative, &node); if (link.isEmpty()) { if (autolinkErrors()) - relative->doc().location().warning(tr("Can't autolink to '%1'").arg(atom->string())); - } - else if (node && node->isObsolete()) { + relative->doc().location().warning( + tr("Can't autolink to '%1'").arg(atom->string())); + } else if (node && node->isObsolete()) { if ((relative->parent() != node) && !relative->isObsolete()) link.clear(); } if (link.isEmpty()) { out() << protectEnc(atom->string()); - } - else { + } else { if (Generator::writeQaPages() && node && (atom->type() != Atom::NavAutoLink)) { QString text = atom->string(); QString target = qdb_->getNewLinkTarget(relative, node, outFileName(), text); - out() << ""; + out() << ""; } beginLink(link, node, relative); generateLink(atom, marker); endLink(); } - } - else { + } else { out() << protectEnc(atom->string()); } break; @@ -592,12 +548,16 @@ int HtmlGenerator::generateAtom(const Atom *atom, const Node *relative, CodeMark break; case Atom::Qml: out() << "
"
-              << trimmedTrailing(highlightedCode(indent(codeIndent,atom->string()),relative, false, Node::QML), codePrefix, codeSuffix)
+              << trimmedTrailing(highlightedCode(indent(codeIndent, atom->string()), relative,
+                                                 false, Node::QML),
+                                 codePrefix, codeSuffix)
               << "
\n"; break; case Atom::JavaScript: out() << "
"
-              << trimmedTrailing(highlightedCode(indent(codeIndent,atom->string()),relative, false, Node::JS), codePrefix, codeSuffix)
+              << trimmedTrailing(highlightedCode(indent(codeIndent, atom->string()), relative,
+                                                 false, Node::JS),
+                                 codePrefix, codeSuffix)
               << "
\n"; break; case Atom::CodeNew: @@ -605,7 +565,8 @@ int HtmlGenerator::generateAtom(const Atom *atom, const Node *relative, CodeMark Q_FALLTHROUGH(); case Atom::Code: out() << "
"
-              << trimmedTrailing(highlightedCode(indent(codeIndent,atom->string()),relative), codePrefix, codeSuffix)
+              << trimmedTrailing(highlightedCode(indent(codeIndent, atom->string()), relative),
+                                 codePrefix, codeSuffix)
               << "
\n"; break; case Atom::CodeOld: @@ -613,7 +574,8 @@ int HtmlGenerator::generateAtom(const Atom *atom, const Node *relative, CodeMark Q_FALLTHROUGH(); case Atom::CodeBad: out() << "
"
-              << trimmedTrailing(protectEnc(plainCode(indent(codeIndent,atom->string()))), codePrefix, codeSuffix)
+              << trimmedTrailing(protectEnc(plainCode(indent(codeIndent, atom->string()))),
+                                 codePrefix, codeSuffix)
               << "
\n"; break; case Atom::DivLeft: @@ -644,15 +606,14 @@ int HtmlGenerator::generateAtom(const Atom *atom, const Node *relative, CodeMark case Atom::FormattingLeft: if (atom->string().startsWith("span ")) { out() << '<' + atom->string() << '>'; - } - else + } else out() << formattingLeftMap()[atom->string()]; if (atom->string() == ATOM_FORMATTING_PARAMETER) { if (atom->next() != nullptr && atom->next()->type() == Atom::String) { QRegExp subscriptRegExp("([a-z]+)_([0-9n])"); if (subscriptRegExp.exactMatch(atom->next()->string())) { - out() << subscriptRegExp.cap(1) << "" - << subscriptRegExp.cap(2) << ""; + out() << subscriptRegExp.cap(1) << "" << subscriptRegExp.cap(2) + << ""; skipAhead = 1; } } @@ -661,45 +622,35 @@ int HtmlGenerator::generateAtom(const Atom *atom, const Node *relative, CodeMark case Atom::FormattingRight: if (atom->string() == ATOM_FORMATTING_LINK) { endLink(); - } - else if (atom->string().startsWith("span ")) { + } else if (atom->string().startsWith("span ")) { out() << ""; - } - else { + } else { out() << formattingRightMap()[atom->string()]; } break; - case Atom::AnnotatedList: - { - const CollectionNode *cn = qdb_->getCollectionNode(atom->string(), Node::Group); - if (cn) - generateList(cn, marker, atom->string()); - } - break; + case Atom::AnnotatedList: { + const CollectionNode *cn = qdb_->getCollectionNode(atom->string(), Node::Group); + if (cn) + generateList(cn, marker, atom->string()); + } break; case Atom::GeneratedList: if (atom->string() == QLatin1String("annotatedclasses")) { generateAnnotatedList(relative, marker, qdb_->getCppClasses()); - } - else if (atom->string() == QLatin1String("annotatedexamples")) { + } else if (atom->string() == QLatin1String("annotatedexamples")) { generateAnnotatedLists(relative, marker, qdb_->getExamples()); - } - else if (atom->string() == QLatin1String("annotatedattributions")) { + } else if (atom->string() == QLatin1String("annotatedattributions")) { generateAnnotatedLists(relative, marker, qdb_->getAttributions()); - } - else if (atom->string() == QLatin1String("classes")) { + } else if (atom->string() == QLatin1String("classes")) { generateCompactList(Generic, relative, qdb_->getCppClasses(), true, QStringLiteral("")); - } - else if (atom->string().contains("classes ")) { + } else if (atom->string().contains("classes ")) { QString rootName = atom->string().mid(atom->string().indexOf("classes") + 7).trimmed(); generateCompactList(Generic, relative, qdb_->getCppClasses(), true, rootName); - } - else if (atom->string() == QLatin1String("qmlbasictypes")) { - generateCompactList(Generic, relative, qdb_->getQmlBasicTypes(), true, QStringLiteral("")); - } - else if (atom->string() == QLatin1String("qmltypes")) { + } else if (atom->string() == QLatin1String("qmlbasictypes")) { + generateCompactList(Generic, relative, qdb_->getQmlBasicTypes(), true, + QStringLiteral("")); + } else if (atom->string() == QLatin1String("qmltypes")) { generateCompactList(Generic, relative, qdb_->getQmlTypes(), true, QStringLiteral("")); - } - else if ((idx = atom->string().indexOf(QStringLiteral("bymodule"))) != -1) { + } else if ((idx = atom->string().indexOf(QStringLiteral("bymodule"))) != -1) { QString moduleName = atom->string().mid(idx + 8).trimmed(); Node::NodeType type = typeFromString(atom); QDocDatabase *qdb = QDocDatabase::qdocDB(); @@ -711,135 +662,119 @@ int HtmlGenerator::generateAtom(const Atom *atom, const Node *relative, CodeMark if (!m.isEmpty()) { generateAnnotatedList(relative, marker, m); } - } - else + } else generateAnnotatedList(relative, marker, cn->members()); } - } - else if (atom->string().startsWith("examplefiles") || - atom->string().startsWith("exampleimages")) { + } else if (atom->string().startsWith("examplefiles") + || atom->string().startsWith("exampleimages")) { if (relative->isExample()) { qDebug() << "GENERATE FILE LIST CALLED" << relative->name() << atom->string(); - } - else - relative->location().warning(QString("'\\generatelist \1' can only be used with '\\example' topic command").arg(atom->string())); - } - else if (atom->string() == QLatin1String("classhierarchy")) { + } else + relative->location().warning(QString("'\\generatelist \1' can only be used with " + "'\\example' topic command") + .arg(atom->string())); + } else if (atom->string() == QLatin1String("classhierarchy")) { generateClassHierarchy(relative, qdb_->getCppClasses()); - } - else if (atom->string() == QLatin1String("obsoleteclasses")) { - generateCompactList(Generic, relative, qdb_->getObsoleteClasses(), false, QStringLiteral("Q")); - } - else if (atom->string() == QLatin1String("obsoleteqmltypes")) { - generateCompactList(Generic, relative, qdb_->getObsoleteQmlTypes(), false, QStringLiteral("")); - } - else if (atom->string() == QLatin1String("obsoletecppmembers")) { - generateCompactList(Obsolete, relative, qdb_->getClassesWithObsoleteMembers(), false, QStringLiteral("Q")); - } - else if (atom->string() == QLatin1String("obsoleteqmlmembers")) { - generateCompactList(Obsolete, relative, qdb_->getQmlTypesWithObsoleteMembers(), false, QStringLiteral("")); - } - else if (atom->string() == QLatin1String("functionindex")) { + } else if (atom->string() == QLatin1String("obsoleteclasses")) { + generateCompactList(Generic, relative, qdb_->getObsoleteClasses(), false, + QStringLiteral("Q")); + } else if (atom->string() == QLatin1String("obsoleteqmltypes")) { + generateCompactList(Generic, relative, qdb_->getObsoleteQmlTypes(), false, + QStringLiteral("")); + } else if (atom->string() == QLatin1String("obsoletecppmembers")) { + generateCompactList(Obsolete, relative, qdb_->getClassesWithObsoleteMembers(), false, + QStringLiteral("Q")); + } else if (atom->string() == QLatin1String("obsoleteqmlmembers")) { + generateCompactList(Obsolete, relative, qdb_->getQmlTypesWithObsoleteMembers(), false, + QStringLiteral("")); + } else if (atom->string() == QLatin1String("functionindex")) { generateFunctionIndex(relative); - } - else if (atom->string() == QLatin1String("attributions")) { + } else if (atom->string() == QLatin1String("attributions")) { generateAnnotatedList(relative, marker, qdb_->getAttributions()); - } - else if (atom->string() == QLatin1String("legalese")) { + } else if (atom->string() == QLatin1String("legalese")) { generateLegaleseList(relative, marker); - } - else if (atom->string() == QLatin1String("overviews")) { + } else if (atom->string() == QLatin1String("overviews")) { generateList(relative, marker, "overviews"); - } - else if (atom->string() == QLatin1String("cpp-modules")) { + } else if (atom->string() == QLatin1String("cpp-modules")) { generateList(relative, marker, "cpp-modules"); - } - else if (atom->string() == QLatin1String("qml-modules")) { + } else if (atom->string() == QLatin1String("qml-modules")) { generateList(relative, marker, "qml-modules"); - } - else if (atom->string() == QLatin1String("namespaces")) { + } else if (atom->string() == QLatin1String("namespaces")) { generateAnnotatedList(relative, marker, qdb_->getNamespaces()); - } - else if (atom->string() == QLatin1String("related")) { + } else if (atom->string() == QLatin1String("related")) { generateList(relative, marker, "related"); } else { const CollectionNode *cn = qdb_->getCollectionNode(atom->string(), Node::Group); if (cn) { if (!generateGroupList(const_cast(cn))) - relative->location().warning(QString("'\\generatelist \1' group is empty").arg(atom->string())); + relative->location().warning( + QString("'\\generatelist \1' group is empty").arg(atom->string())); } else { - relative->location().warning(QString("'\\generatelist \1' no such group").arg(atom->string())); + relative->location().warning( + QString("'\\generatelist \1' no such group").arg(atom->string())); } } break; - case Atom::SinceList: - { - const NodeMultiMap &nsmap = qdb_->getSinceMap(atom->string()); - if (nsmap.isEmpty()) - break; + case Atom::SinceList: { + const NodeMultiMap &nsmap = qdb_->getSinceMap(atom->string()); + if (nsmap.isEmpty()) + break; - const NodeMap &ncmap = qdb_->getClassMap(atom->string()); - const NodeMap &nqcmap = qdb_->getQmlTypeMap(atom->string()); + const NodeMap &ncmap = qdb_->getClassMap(atom->string()); + const NodeMap &nqcmap = qdb_->getQmlTypeMap(atom->string()); - Sections sections(nsmap); - out() << "
    \n"; - const QVector
    sinceSections = sections.sinceSections(); - for (const auto §ion : sinceSections) { - if (!section.members().isEmpty()) { - out() << "
  • " - << "" - << section.title() - << "
  • \n"; - } + Sections sections(nsmap); + out() << "
      \n"; + const QVector
      sinceSections = sections.sinceSections(); + for (const auto §ion : sinceSections) { + if (!section.members().isEmpty()) { + out() << "
    • " + << "" + << section.title() << "
    • \n"; } - out() << "
    \n"; + } + out() << "
\n"; - int idx = 0; - for (const auto §ion : sinceSections) { - if (!section.members().isEmpty()) { - out() << "\n"; - out() << "

" << protectEnc(section.title()) << "

\n"; - if (idx == Sections::SinceClasses) - generateCompactList(Generic, nullptr, ncmap, false, QStringLiteral("Q")); - else if (idx == Sections::SinceQmlTypes) - generateCompactList(Generic, nullptr, nqcmap, false, QStringLiteral("")); - else if (idx == Sections::SinceMemberFunctions) { - ParentMaps parentmaps; - ParentMaps::iterator pmap; - const QVector members = section.members(); - for (const auto &member : members) { - Node *parent = (*member).parent(); - pmap = parentmaps.find(parent); - if (pmap == parentmaps.end()) - pmap = parentmaps.insert(parent, NodeMultiMap()); - pmap->insert(member->name(), member); - } - for (auto map = parentmaps.begin(); map != parentmaps.end(); ++map) { - NodeVector nv = map->values().toVector(); - out() << "

Class "; - - out() << ""; - QStringList pieces = map.key()->fullName().split("::"); - out() << protectEnc(pieces.last()); - out() << "" << ":

\n"; - - generateSection(nv, nullptr, marker); - out() << "
"; - } - } else { - generateSection(section.members(), nullptr, marker); + int idx = 0; + for (const auto §ion : sinceSections) { + if (!section.members().isEmpty()) { + out() << "\n"; + out() << "

" << protectEnc(section.title()) << "

\n"; + if (idx == Sections::SinceClasses) + generateCompactList(Generic, nullptr, ncmap, false, QStringLiteral("Q")); + else if (idx == Sections::SinceQmlTypes) + generateCompactList(Generic, nullptr, nqcmap, false, QStringLiteral("")); + else if (idx == Sections::SinceMemberFunctions) { + ParentMaps parentmaps; + ParentMaps::iterator pmap; + const QVector members = section.members(); + for (const auto &member : members) { + Node *parent = (*member).parent(); + pmap = parentmaps.find(parent); + if (pmap == parentmaps.end()) + pmap = parentmaps.insert(parent, NodeMultiMap()); + pmap->insert(member->name(), member); } + for (auto map = parentmaps.begin(); map != parentmaps.end(); ++map) { + NodeVector nv = map->values().toVector(); + out() << "

Class "; + + out() << ""; + QStringList pieces = map.key()->fullName().split("::"); + out() << protectEnc(pieces.last()); + out() << "" + << ":

\n"; + + generateSection(nv, nullptr, marker); + out() << "
"; + } + } else { + generateSection(section.members(), nullptr, marker); } - ++idx; } + ++idx; } - break; + } break; case Atom::BR: out() << "
\n"; break; @@ -847,8 +782,7 @@ int HtmlGenerator::generateAtom(const Atom *atom, const Node *relative, CodeMark out() << "
\n"; break; case Atom::Image: - case Atom::InlineImage: - { + case Atom::InlineImage: { QString fileName = imageFileName(relative, atom->string()); QString text; if (atom->next() != nullptr) @@ -857,10 +791,9 @@ int HtmlGenerator::generateAtom(const Atom *atom, const Node *relative, CodeMark out() << "

"; if (fileName.isEmpty()) { relative->location().warning(tr("Missing image: %1").arg(protectEnc(atom->string()))); - out() << "[Missing image " - << protectEnc(atom->string()) << "]"; - } - else { + out() << "[Missing image " << protectEnc(atom->string()) + << "]"; + } else { QString prefix; out() << "type() == Atom::Image) out() << "

"; - } - break; + } break; case Atom::ImageText: break; case Atom::ImportantLeft: @@ -905,8 +837,7 @@ int HtmlGenerator::generateAtom(const Atom *atom, const Node *relative, CodeMark out() << "
"; break; case Atom::Link: - case Atom::NavLink: - { + case Atom::NavLink: { inObsoleteLink = false; const Node *node = nullptr; QString link = getLink(atom, relative, &node); @@ -917,8 +848,7 @@ int HtmlGenerator::generateAtom(const Atom *atom, const Node *relative, CodeMark QString target = qdb_->getNewLinkTarget(relative, node, outFileName(), text, true); out() << ""; } - } - else { + } else { if (Generator::writeQaPages() && node && (atom->type() != Atom::NavLink)) { QString text = atom->next()->next()->string(); QString target = qdb_->getNewLinkTarget(relative, node, outFileName(), text); @@ -928,34 +858,27 @@ int HtmlGenerator::generateAtom(const Atom *atom, const Node *relative, CodeMark } beginLink(link, node, relative); skipAhead = 1; - } - break; - case Atom::ExampleFileLink: - { + } break; + case Atom::ExampleFileLink: { QString link = linkForExampleFile(atom->string(), relative); if (link.isEmpty() && !noLinkErrors()) relative->doc().location().warning(tr("Can't link to '%1'").arg(atom->string())); beginLink(link); skipAhead = 1; - } - break; - case Atom::ExampleImageLink: - { + } break; + case Atom::ExampleImageLink: { QString link = atom->string(); if (link.isEmpty() && !noLinkErrors()) relative->doc().location().warning(tr("Can't link to '%1'").arg(atom->string())); link = "images/used-in-examples/" + link; beginLink(link); skipAhead = 1; - } - break; - case Atom::LinkNode: - { + } break; + case Atom::LinkNode: { const Node *node = CodeMarker::nodeForString(atom->string()); beginLink(linkForNode(node, relative), node, relative); skipAhead = 1; - } - break; + } break; case Atom::ListLeft: if (in_para) { out() << "

\n"; @@ -963,11 +886,9 @@ int HtmlGenerator::generateAtom(const Atom *atom, const Node *relative, CodeMark } if (atom->string() == ATOM_LIST_BULLET) { out() << "
    \n"; - } - else if (atom->string() == ATOM_LIST_TAG) { + } else if (atom->string() == ATOM_LIST_TAG) { out() << "
    \n"; - } - else if (atom->string() == ATOM_LIST_VALUE) { + } else if (atom->string() == ATOM_LIST_VALUE) { out() << "
    "; threeColumnEnumValueTable_ = isThreeColumnEnumValueTable(atom); if (threeColumnEnumValueTable_) { @@ -983,34 +904,29 @@ int HtmlGenerator::generateAtom(const Atom *atom, const Node *relative, CodeMark out() << ""; out() << "\n"; + } else { + out() << "\n"; } - else { - out() << "\n"; - } - } - else { + } else { QString olType; if (atom->string() == ATOM_LIST_UPPERALPHA) { olType = "A"; - } - else if (atom->string() == ATOM_LIST_LOWERALPHA) { + } else if (atom->string() == ATOM_LIST_LOWERALPHA) { olType = "a"; - } - else if (atom->string() == ATOM_LIST_UPPERROMAN) { + } else if (atom->string() == ATOM_LIST_UPPERROMAN) { olType = "I"; - } - else if (atom->string() == ATOM_LIST_LOWERROMAN) { + } else if (atom->string() == ATOM_LIST_LOWERROMAN) { olType = "i"; - } - else { // (atom->string() == ATOM_LIST_NUMERIC) + } else { // (atom->string() == ATOM_LIST_NUMERIC) olType = "1"; } if (atom->next() != nullptr && atom->next()->string().toInt() > 1) { - out() << QString("
      ").arg(olType) - .arg(atom->next()->string()); - } - else + out() << QString("
        ") + .arg(olType) + .arg(atom->next()->string()); + } else out() << QString("
          ").arg(olType); } break; @@ -1019,8 +935,7 @@ int HtmlGenerator::generateAtom(const Atom *atom, const Node *relative, CodeMark case Atom::ListTagLeft: if (atom->string() == ATOM_LIST_TAG) { out() << "
          "; - } - else { // (atom->string() == ATOM_LIST_VALUE) + } else { // (atom->string() == ATOM_LIST_VALUE) QPair pair = getAtomListValue(atom); skipAhead = pair.second; QString t = protectEnc(plainCode(marker->markedUpEnumValue(pair.first, relative))); @@ -1045,15 +960,13 @@ int HtmlGenerator::generateAtom(const Atom *atom, const Node *relative, CodeMark case Atom::ListItemLeft: if (atom->string() == ATOM_LIST_TAG) { out() << "
          "; - } - else if (atom->string() == ATOM_LIST_VALUE) { + } else if (atom->string() == ATOM_LIST_VALUE) { if (threeColumnEnumValueTable_) { out() << "
    \n"; - } - else { + } else { out() << "\n"; } break; case Atom::ListRight: if (atom->string() == ATOM_LIST_BULLET) { out() << "\n"; - } - else if (atom->string() == ATOM_LIST_TAG) { + } else if (atom->string() == ATOM_LIST_TAG) { out() << "\n"; - } - else if (atom->string() == ATOM_LIST_VALUE) { + } else if (atom->string() == ATOM_LIST_VALUE) { out() << "
    ValueDescription
    ConstantValue
    ConstantValue
    "; if (matchAhead(atom, Atom::ListItemRight)) out() << " "; } - } - else { + } else { out() << "
  • "; } if (matchAhead(atom, Atom::ParaLeft)) @@ -1062,25 +975,20 @@ int HtmlGenerator::generateAtom(const Atom *atom, const Node *relative, CodeMark case Atom::ListItemRight: if (atom->string() == ATOM_LIST_TAG) { out() << "\n"; - } - else if (atom->string() == ATOM_LIST_VALUE) { + } else if (atom->string() == ATOM_LIST_VALUE) { out() << "
  • \n"; - } - else { + } else { out() << "\n"; } break; @@ -1096,7 +1004,7 @@ int HtmlGenerator::generateAtom(const Atom *atom, const Node *relative, CodeMark out() << "

    \n"; in_para = false; } - //if (!matchAhead(atom, Atom::ListItemRight) && !matchAhead(atom, Atom::TableItemRight)) + // if (!matchAhead(atom, Atom::ListItemRight) && !matchAhead(atom, Atom::TableItemRight)) // out() << "

    \n"; break; case Atom::QuotationLeft: @@ -1116,8 +1024,8 @@ int HtmlGenerator::generateAtom(const Atom *atom, const Node *relative, CodeMark break; case Atom::SectionHeadingLeft: { int unit = atom->string().toInt() + hOffset(relative); - out() << ""; + out() << ""; inSectionHeading_ = true; break; } @@ -1132,13 +1040,11 @@ int HtmlGenerator::generateAtom(const Atom *atom, const Node *relative, CodeMark case Atom::String: if (inLink_ && !inContents_ && !inSectionHeading_) { generateLink(atom, marker); - } - else { + } else { out() << protectEnc(atom->string()); } break; - case Atom::TableLeft: - { + case Atom::TableLeft: { QPair pair = getTableWidthAttr(atom); QString attr = pair.second; QString width = pair.first; @@ -1153,8 +1059,7 @@ int HtmlGenerator::generateAtom(const Atom *atom, const Node *relative, CodeMark out() << " width=\"" << width << '"'; out() << ">\n "; numTableRows_ = 0; - } - break; + } break; case Atom::TableRight: out() << "
\n"; break; @@ -1167,8 +1072,7 @@ int HtmlGenerator::generateAtom(const Atom *atom, const Node *relative, CodeMark if (matchAhead(atom, Atom::TableHeaderLeft)) { skipAhead = 1; out() << "\n
count(); ++i) { + for (int i = 0; i < atom->count(); ++i) { if (i > 0) out() << ' '; QString p = atom->string(i); if (p.contains('=')) { out() << p; - } - else { + } else { QStringList spans = p.split(QLatin1Char(',')); if (spans.size() == 2) { if (spans.at(0) != "1") @@ -1215,8 +1117,7 @@ int HtmlGenerator::generateAtom(const Atom *atom, const Node *relative, CodeMark } if (matchAhead(atom, Atom::ParaLeft)) skipAhead = 1; - } - break; + } break; case Atom::TableItemRight: if (inTableHeader_) out() << "
\n" << "
"; } else { @@ -1951,9 +1828,7 @@ void HtmlGenerator::generateNavigationBar(const QString &title, out() << "\n"; } -void HtmlGenerator::generateHeader(const QString &title, - const Node *node, - CodeMarker *marker) +void HtmlGenerator::generateHeader(const QString &title, const Node *node, CodeMarker *marker) { #ifndef QT_NO_TEXTCODEC out() << QString("\n").arg(outputEncoding); @@ -1967,25 +1842,22 @@ void HtmlGenerator::generateHeader(const QString &title, if (node && !node->doc().location().isEmpty()) out() << "\n"; - //determine the rest of the element content: "title | titleSuffix version" + // determine the rest of the <title> element content: "title | titleSuffix version" QString titleSuffix; if (!landingtitle.isEmpty()) { - //for normal pages: "title | landingtitle version" + // for normal pages: "title | landingtitle version" titleSuffix = landingtitle; - } - else if (!hometitle.isEmpty()) { + } else if (!hometitle.isEmpty()) { // for pages that set the homepage title but not landing page title: // "title | hometitle version" if (title != hometitle) titleSuffix = hometitle; - } - else if (!project.isEmpty()) { - //for projects outside of Qt or Qt 5: "title | project version" + } else if (!project.isEmpty()) { + // for projects outside of Qt or Qt 5: "title | project version" if (title != project) titleSuffix = project; - } - else - //default: "title | Qt version" + } else + // default: "title | Qt version" titleSuffix = QLatin1String("Qt "); if (title == titleSuffix) @@ -1996,10 +1868,7 @@ void HtmlGenerator::generateHeader(const QString &title, divider = QLatin1String(" | "); // Generating page title - out() << " <title>" - << protectEnc(title) - << divider - << titleSuffix; + out() << " <title>" << protectEnc(title) << divider << titleSuffix; // append a full version to the suffix if neither suffix nor title // include (a prefix of) version information @@ -2037,8 +1906,8 @@ void HtmlGenerator::generateHeader(const QString &title, refMap.clear(); if (node && !node->links().empty()) { - QPair<QString,QString> linkPair; - QPair<QString,QString> anchorPair; + QPair<QString, QString> linkPair; + QPair<QString, QString> anchorPair; const Node *linkNode; bool useSeparator = false; @@ -2052,8 +1921,7 @@ void HtmlGenerator::generateHeader(const QString &title, else anchorPair = anchorForNode(linkNode); - out() << " <link rel=\"prev\" href=\"" - << anchorPair.first << "\" />\n"; + out() << " <link rel=\"prev\" href=\"" << anchorPair.first << "\" />\n"; navigationLinks += "<a class=\"prevPage\" href=\"" + anchorPair.first + "\">"; if (linkPair.first == linkPair.second && !anchorPair.second.isEmpty()) @@ -2073,8 +1941,7 @@ void HtmlGenerator::generateHeader(const QString &title, else anchorPair = anchorForNode(linkNode); - out() << " <link rel=\"next\" href=\"" - << anchorPair.first << "\" />\n"; + out() << " <link rel=\"next\" href=\"" << anchorPair.first << "\" />\n"; if (useSeparator) navigationLinks += navigationSeparator; @@ -2095,8 +1962,7 @@ void HtmlGenerator::generateHeader(const QString &title, anchorPair = linkPair; else anchorPair = anchorForNode(linkNode); - out() << " <link rel=\"start\" href=\"" - << anchorPair.first << "\" />\n"; + out() << " <link rel=\"start\" href=\"" << anchorPair.first << "\" />\n"; } } @@ -2104,10 +1970,8 @@ void HtmlGenerator::generateHeader(const QString &title, out() << "<p class=\"naviNextPrevious headerNavi\">\n" << navigationLinks << "</p><p/>\n"; } -void HtmlGenerator::generateTitle(const QString &title, - const Text &subtitle, - SubTitleSize subTitleSize, - const Node *relative, +void HtmlGenerator::generateTitle(const QString &title, const Text &subtitle, + SubTitleSize subTitleSize, const Node *relative, CodeMarker *marker) { out() << QString(prologue).replace("\\" + COMMAND_VERSION, qdb_->version()); @@ -2152,35 +2016,31 @@ void HtmlGenerator::generateRequisites(Aggregate *aggregate, CodeMarker *marker) const QString instantiatedByText = "Instantiated By"; const QString qtVariableText = "qmake"; - //add the include files to the map + // add the include files to the map if (!aggregate->includeFiles().isEmpty()) { text.clear(); - text << highlightedCode(indent(codeIndent, marker->markedUpIncludes(aggregate->includeFiles())), - aggregate); + text << highlightedCode( + indent(codeIndent, marker->markedUpIncludes(aggregate->includeFiles())), aggregate); requisites.insert(headerText, text); } - //The order of the requisites matter + // The order of the requisites matter QStringList requisiteorder; - requisiteorder << headerText - << qtVariableText - << sinceText - << instantiatedByText - << inheritsText - << inheritedBytext; - - //add the since and project into the map + requisiteorder << headerText << qtVariableText << sinceText << instantiatedByText + << inheritsText << inheritedBytext; + + // add the since and project into the map if (!aggregate->since().isEmpty()) { text.clear(); - text << formatSince(aggregate) - << Atom::ParaRight; + text << formatSince(aggregate) << Atom::ParaRight; requisites.insert(sinceText, text); } if (aggregate->isClassNode() || aggregate->isNamespace()) { - //add the QT variable to the map + // add the QT variable to the map if (!aggregate->physicalModuleName().isEmpty()) { - const CollectionNode *cn = qdb_->getCollectionNode(aggregate->physicalModuleName(), Node::Module); + const CollectionNode *cn = + qdb_->getCollectionNode(aggregate->physicalModuleName(), Node::Module); if (cn && !cn->qtVariable().isEmpty()) { text.clear(); text << "QT += " + cn->qtVariable(); @@ -2198,10 +2058,9 @@ void HtmlGenerator::generateRequisites(Aggregate *aggregate, CodeMarker *marker) << Atom(Atom::String, classe->qmlElement()->name()) << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK); requisites.insert(instantiatedByText, text); - } - //add the inherits to the map + // add the inherits to the map if (!classe->baseClasses().isEmpty()) { int index = 0; text.clear(); @@ -2212,8 +2071,7 @@ void HtmlGenerator::generateRequisites(Aggregate *aggregate, CodeMarker *marker) if (cls.access_ == Node::Protected) { text << " (protected)"; - } - else if (cls.access_ == Node::Private) { + } else if (cls.access_ == Node::Private) { text << " (private)"; } text << comma(index++, classe->baseClasses().count()); @@ -2224,7 +2082,7 @@ void HtmlGenerator::generateRequisites(Aggregate *aggregate, CodeMarker *marker) requisites.insert(inheritsText, text); } - //add the inherited-by to the map + // add the inherited-by to the map if (!classe->derivedClasses().isEmpty()) { text.clear(); text << Atom::ParaLeft; @@ -2236,16 +2094,16 @@ void HtmlGenerator::generateRequisites(Aggregate *aggregate, CodeMarker *marker) } if (!requisites.isEmpty()) { - //generate the table + // generate the table out() << "<div class=\"table\"><table class=\"alignedsummary\">\n"; for (auto it = requisiteorder.constBegin(); it != requisiteorder.constEnd(); ++it) { if (requisites.contains(*it)) { out() << "<tr>" - << "<td class=\"memItemLeft rightAlign topAlign\"> " - << *it << ":" - "</td><td class=\"memItemRight bottomAlign\"> "; + << "<td class=\"memItemLeft rightAlign topAlign\"> " << *it + << ":" + "</td><td class=\"memItemRight bottomAlign\"> "; if (*it == headerText) out() << requisites.value(*it).toString(); @@ -2275,9 +2133,10 @@ void HtmlGenerator::generateQmlRequisites(QmlTypeNode *qcn, CodeMarker *marker) const QString inheritsText = "Inherits:"; const QString instantiatesText = "Instantiates:"; - //add the module name and version to the map + // add the module name and version to the map QString logicalModuleVersion; - const CollectionNode *collection = qdb_->getCollectionNode(qcn->logicalModuleName(), qcn->nodeType()); + const CollectionNode *collection = + qdb_->getCollectionNode(qcn->logicalModuleName(), qcn->nodeType()); if (collection != nullptr) logicalModuleVersion = collection->logicalModuleVersion(); else @@ -2285,52 +2144,50 @@ void HtmlGenerator::generateQmlRequisites(QmlTypeNode *qcn, CodeMarker *marker) if (logicalModuleVersion.isEmpty() || qcn->logicalModuleName().isEmpty()) qcn->doc().location().warning(tr("Could not resolve QML import " - "statement for type '%1'").arg(qcn->name()), + "statement for type '%1'") + .arg(qcn->name()), tr("Maybe you forgot to use the " - "'\\%1' command?").arg(COMMAND_INQMLMODULE)); + "'\\%1' command?") + .arg(COMMAND_INQMLMODULE)); text.clear(); text << "import " + qcn->logicalModuleName() + QLatin1Char(' ') + logicalModuleVersion; requisites.insert(importText, text); - //add the since and project into the map + // add the since and project into the map if (!qcn->since().isEmpty()) { text.clear(); - text << formatSince(qcn) - << Atom::ParaRight; + text << formatSince(qcn) << Atom::ParaRight; requisites.insert(sinceText, text); } - //add the instantiates to the map + // add the instantiates to the map ClassNode *cn = qcn->classNode(); if (cn && !cn->isInternal()) { text.clear(); - text << Atom(Atom::LinkNode,CodeMarker::stringForNode(qcn)); + text << Atom(Atom::LinkNode, CodeMarker::stringForNode(qcn)); text << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK); - text << Atom(Atom::LinkNode,CodeMarker::stringForNode(cn)); + text << Atom(Atom::LinkNode, CodeMarker::stringForNode(cn)); text << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK); text << Atom(Atom::String, cn->name()); text << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK); requisites.insert(instantiatesText, text); } - //add the inherits to the map + // add the inherits to the map QmlTypeNode *base = qcn->qmlBaseNode(); while (base && base->isInternal()) { base = base->qmlBaseNode(); } if (base) { text.clear(); - text << Atom::ParaLeft - << Atom(Atom::LinkNode,CodeMarker::stringForNode(base)) - << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK) - << Atom(Atom::String, base->name()) - << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK) - << Atom::ParaRight; + text << Atom::ParaLeft << Atom(Atom::LinkNode, CodeMarker::stringForNode(base)) + << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK) << Atom(Atom::String, base->name()) + << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK) << Atom::ParaRight; requisites.insert(inheritsText, text); } - //add the inherited-by to the map + // add the inherited-by to the map NodeList subs; QmlTypeNode::subclasses(qcn, subs); if (!subs.isEmpty()) { @@ -2342,27 +2199,22 @@ void HtmlGenerator::generateQmlRequisites(QmlTypeNode *qcn, CodeMarker *marker) requisites.insert(inheritedBytext, text); } - //The order of the requisites matter - const QStringList requisiteorder { - importText, - sinceText, - instantiatesText, - inheritsText, - inheritedBytext }; + // The order of the requisites matter + const QStringList requisiteorder { importText, sinceText, instantiatesText, inheritsText, + inheritedBytext }; if (!requisites.isEmpty()) { - //generate the table + // generate the table out() << "<div class=\"table\"><table class=\"alignedsummary\">\n"; for (const auto &requisite : requisiteorder) { if (requisites.contains(requisite)) { out() << "<tr>" - << "<td class=\"memItemLeft rightAlign topAlign\"> " - << requisite - << "</td><td class=\"memItemRight bottomAlign\"> "; + << "<td class=\"memItemLeft rightAlign topAlign\"> " << requisite + << "</td><td class=\"memItemRight bottomAlign\"> "; if (requisite == importText) - out()<<requisites.value(requisite).toString(); + out() << requisites.value(requisite).toString(); else generateText(requisites.value(requisite), qcn, marker); out() << "</td></tr>"; @@ -2372,15 +2224,16 @@ void HtmlGenerator::generateQmlRequisites(QmlTypeNode *qcn, CodeMarker *marker) } } -void HtmlGenerator::generateBrief(const Node *node, CodeMarker *marker, - const Node *relative, bool addLink) +void HtmlGenerator::generateBrief(const Node *node, CodeMarker *marker, const Node *relative, + bool addLink) { Text brief = node->doc().briefText(); if (!brief.isEmpty()) { if (!brief.lastAtom()->string().endsWith('.')) { brief << Atom(Atom::String, "."); - node->doc().location().warning(tr("'\\brief' statement does not end with a full stop.")); + node->doc().location().warning( + tr("'\\brief' statement does not end with a full stop.")); } generateExtractionMark(node, BriefMark); out() << "<p>"; @@ -2403,8 +2256,7 @@ void HtmlGenerator::generateBrief(const Node *node, CodeMarker *marker, Revised for the new doc format. Generates a table of contents beginning at \a node. */ -void HtmlGenerator::generateTableOfContents(const Node *node, - CodeMarker *marker, +void HtmlGenerator::generateTableOfContents(const Node *node, CodeMarker *marker, QVector<Section> *sections) { QVector<Atom *> toc; @@ -2429,23 +2281,14 @@ void HtmlGenerator::generateTableOfContents(const Node *node, if (node->isModule()) { if (node->hasNamespaces()) { - out() << "<li class=\"level" - << sectionNumber - << "\"><a href=\"#" - << registerRef("namespaces") - << "\">Namespaces</a></li>\n"; + out() << "<li class=\"level" << sectionNumber << "\"><a href=\"#" + << registerRef("namespaces") << "\">Namespaces</a></li>\n"; } if (node->hasClasses()) { - out() << "<li class=\"level" - << sectionNumber - << "\"><a href=\"#" - << registerRef("classes") - << "\">Classes</a></li>\n"; + out() << "<li class=\"level" << sectionNumber << "\"><a href=\"#" + << registerRef("classes") << "\">Classes</a></li>\n"; } - out() << "<li class=\"level" - << sectionNumber - << "\"><a href=\"#" - << registerRef("details") + out() << "<li class=\"level" << sectionNumber << "\"><a href=\"#" << registerRef("details") << "\">Detailed Description</a></li>\n"; for (int i = 0; i < toc.size(); ++i) { if (toc.at(i)->string().toInt() == 1) { @@ -2453,36 +2296,24 @@ void HtmlGenerator::generateTableOfContents(const Node *node, break; } } - } - else if (sections && (node->isClassNode() || - node->isNamespace() || - node->isQmlType() || - node->isJsType())) { + } else if (sections + && (node->isClassNode() || node->isNamespace() || node->isQmlType() + || node->isJsType())) { for (const auto §ion : qAsConst(*sections)) { if (!section.members().isEmpty()) { - out() << "<li class=\"level" - << sectionNumber - << "\"><a href=\"#" - << registerRef(section.plural()) - << "\">" << section.title() - << "</a></li>\n"; + out() << "<li class=\"level" << sectionNumber << "\"><a href=\"#" + << registerRef(section.plural()) << "\">" << section.title() << "</a></li>\n"; } if (!section.reimplementedMembers().isEmpty()) { QString ref = QString("Reimplemented ") + section.plural(); - out() << "<li class=\"level" - << sectionNumber - << "\"><a href=\"#" - << registerRef(ref.toLower()) - << "\">" << QString("Reimplemented ") + section.title() - << "</a></li>\n"; + out() << "<li class=\"level" << sectionNumber << "\"><a href=\"#" + << registerRef(ref.toLower()) << "\">" + << QString("Reimplemented ") + section.title() << "</a></li>\n"; } } if (!node->isNamespace() || node->hasDoc()) { - out() << "<li class=\"level" - << sectionNumber - << "\"><a href=\"#" - << registerRef("details") - << "\">Detailed Description</a></li>\n"; + out() << "<li class=\"level" << sectionNumber << "\"><a href=\"#" + << registerRef("details") << "\">Detailed Description</a></li>\n"; } for (int i = 0; i < toc.size(); ++i) { if (toc.at(i)->string().toInt() == 1) { @@ -2494,19 +2325,14 @@ void HtmlGenerator::generateTableOfContents(const Node *node, for (const auto &atom : toc) { sectionNumber = atom->string().toInt() + detailsBase; - //restrict the ToC depth to the one set by the HTML.tocdepth variable or - //print all levels if tocDepth is not set. + // restrict the ToC depth to the one set by the HTML.tocdepth variable or + // print all levels if tocDepth is not set. if (sectionNumber <= tocDepth || tocDepth < 0) { int numAtoms; Text headingText = Text::sectionHeading(atom); QString s = headingText.toString(); - out() << "<li class=\"level" - << sectionNumber - << "\">"; - out() << "<a href=\"" - << '#' - << Doc::canonicalTitle(s) - << "\">"; + out() << "<li class=\"level" << sectionNumber << "\">"; + out() << "<a href=\"" << '#' << Doc::canonicalTitle(s) << "\">"; generateAtomList(headingText.firstAtom(), node, marker, true, numAtoms); out() << "</a></li>\n"; } @@ -2522,7 +2348,8 @@ void HtmlGenerator::generateTableOfContents(const Node *node, /*! Outputs a placeholder div where the style can add customized sidebar content. */ -void HtmlGenerator::generateSidebar() { +void HtmlGenerator::generateSidebar() +{ out() << "<div class=\"sidebar\">"; out() << "<div class=\"sidebar-content\" id=\"sidebar-content\"></div>"; out() << "</div>\n"; @@ -2574,12 +2401,12 @@ QString HtmlGenerator::generateAllQmlMembersFile(const Sections §ions, CodeM generateFullName(aggregate, nullptr); out() << ", including inherited members.</p>\n"; - ClassKeysNodesList& cknl = sections.allMembersSection().classKeysNodesList(); + ClassKeysNodesList &cknl = sections.allMembersSection().classKeysNodesList(); if (!cknl.isEmpty()) { - for (int i=0; i<cknl.size(); i++) { - ClassKeysNodes* ckn = cknl[i]; + for (int i = 0; i < cknl.size(); i++) { + ClassKeysNodes *ckn = cknl[i]; const QmlTypeNode *qcn = ckn->first; - KeysAndNodes& kn = ckn->second; + KeysAndNodes &kn = ckn->second; QStringList &keys = kn.first; NodeVector &nodes = kn.second; if (nodes.isEmpty()) @@ -2590,12 +2417,11 @@ QString HtmlGenerator::generateAllQmlMembersFile(const Sections §ions, CodeM out() << ".</p>\n"; } out() << "<ul>\n"; - for (int j=0; j<keys.size(); j++) { + for (int j = 0; j < keys.size(); j++) { Node *node = nodes[j]; if (node->access() == Node::Private || node->isInternal()) continue; - if (node->isSharingComment() && - node->sharedCommentNode()->isPropertyGroup()) + if (node->isSharingComment() && node->sharedCommentNode()->isPropertyGroup()) continue; std::function<void(Node *)> generate = [&](Node *n) { @@ -2608,7 +2434,8 @@ QString HtmlGenerator::generateAllQmlMembersFile(const Sections §ions, CodeM // Indent property group members if (n->isPropertyGroup()) { out() << "<ul>\n"; - const QVector<Node *> &collective = static_cast<SharedCommentNode *>(n)->collective(); + const QVector<Node *> &collective = + static_cast<SharedCommentNode *>(n)->collective(); std::for_each(collective.begin(), collective.end(), generate); out() << "</ul>\n"; } @@ -2711,8 +2538,7 @@ QString HtmlGenerator::generateObsoleteQmlMembersFile(const Sections §ions, for (const auto §ion : summary_spv) { QString ref = registerRef(section->title().toLower()); - out() << "<a name=\"" << ref - << "\"></a>" << divNavTop << '\n'; + out() << "<a name=\"" << ref << "\"></a>" << divNavTop << '\n'; out() << "<h2 id=\"" << ref << "\">" << protectEnc(section->title()) << "</h2>\n"; generateQmlSummary(section->obsoleteMembers(), aggregate, marker); } @@ -2743,7 +2569,7 @@ void HtmlGenerator::generateClassHierarchy(const Node *relative, NodeMap &classM topLevel.insert(classe->name(), classe); } - QStack<NodeMap > stack; + QStack<NodeMap> stack; stack.push(topLevel); out() << "<ul>\n"; @@ -2751,8 +2577,7 @@ void HtmlGenerator::generateClassHierarchy(const Node *relative, NodeMap &classM if (stack.top().isEmpty()) { stack.pop(); out() << "</ul>\n"; - } - else { + } else { ClassNode *child = static_cast<ClassNode *>(*stack.top().begin()); out() << "<li>"; generateFullName(child, relative); @@ -2777,8 +2602,7 @@ void HtmlGenerator::generateClassHierarchy(const Node *relative, NodeMap &classM Output an annotated list of the nodes in \a nodeMap. A two-column table is output. */ -void HtmlGenerator::generateAnnotatedList(const Node *relative, - CodeMarker *marker, +void HtmlGenerator::generateAnnotatedList(const Node *relative, CodeMarker *marker, const NodeMultiMap &nmm) { if (nmm.isEmpty() || relative == nullptr) @@ -2788,8 +2612,7 @@ void HtmlGenerator::generateAnnotatedList(const Node *relative, /*! */ -void HtmlGenerator::generateAnnotatedList(const Node *relative, - CodeMarker *marker, +void HtmlGenerator::generateAnnotatedList(const Node *relative, CodeMarker *marker, const NodeList &unsortedNodes) { NodeMultiMap nmm; @@ -2822,19 +2645,16 @@ void HtmlGenerator::generateAnnotatedList(const Node *relative, out() << "<td class=\"tblDescr\"><p>"; generateText(brief, node, marker); out() << "</p></td>"; - } - else if (!node->reconstitutedBrief().isEmpty()) { + } else if (!node->reconstitutedBrief().isEmpty()) { out() << "<td class=\"tblDescr\"><p>"; out() << node->reconstitutedBrief(); out() << "</p></td>"; } - } - else { + } else { out() << "<td class=\"tblDescr\"><p>"; if (!node->reconstitutedBrief().isEmpty()) { out() << node->reconstitutedBrief(); - } - else + } else out() << protectEnc(node->doc().briefText().toString()); out() << "</p></td>"; } @@ -2847,15 +2667,14 @@ void HtmlGenerator::generateAnnotatedList(const Node *relative, Outputs a series of annotated lists from the nodes in \a nmm, divided into sections based by the key names in the multimap. */ -void HtmlGenerator::generateAnnotatedLists(const Node *relative, - CodeMarker *marker, - const NodeMultiMap &nmm) +void HtmlGenerator::generateAnnotatedLists(const Node *relative, CodeMarker *marker, + const NodeMultiMap &nmm) { const auto &uniqueKeys = nmm.uniqueKeys(); for (const QString &name : uniqueKeys) { if (!name.isEmpty()) { - out() << "<h2 id=\"" << registerRef(name.toLower()) - << "\">" << protectEnc(name) << "</h2>\n"; + out() << "<h2 id=\"" << registerRef(name.toLower()) << "\">" << protectEnc(name) + << "</h2>\n"; } generateAnnotatedList(relative, marker, nmm.values(name)); } @@ -2871,10 +2690,8 @@ void HtmlGenerator::generateAnnotatedLists(const Node *relative, the name of the first and last classes in the class map \a nmm. */ -void HtmlGenerator::generateCompactList(ListType listType, - const Node *relative, - const NodeMultiMap &nmm, - bool includeAlphabet, +void HtmlGenerator::generateCompactList(ListType listType, const Node *relative, + const NodeMultiMap &nmm, bool includeAlphabet, QString commonPrefix) { if (nmm.isEmpty()) @@ -2889,8 +2706,8 @@ void HtmlGenerator::generateCompactList(ListType listType, QXtWidget in paragraph 33 (X). This is the only place where we assume that NumParagraphs is 37. Each paragraph is a NodeMultiMap. */ - NodeMultiMap paragraph[NumParagraphs+1]; - QString paragraphName[NumParagraphs+1]; + NodeMultiMap paragraph[NumParagraphs + 1]; + QString paragraphName[NumParagraphs + 1]; QSet<char> usedParagraphNames; for (auto c = nmm.constBegin(); c != nmm.constEnd(); ++c) { @@ -2905,8 +2722,7 @@ void HtmlGenerator::generateCompactList(ListType listType, if (key[0].digitValue() != -1) { paragraphNr = key[0].digitValue(); - } - else if (key[0] >= QLatin1Char('a') && key[0] <= QLatin1Char('z')) { + } else if (key[0] >= QLatin1Char('a') && key[0] <= QLatin1Char('z')) { paragraphNr = 10 + key[0].unicode() - 'a'; } @@ -2923,10 +2739,10 @@ void HtmlGenerator::generateCompactList(ListType listType, We now want to compute the paragraph offset. Paragraphs 0 to 6 start at offsets 0, 3, 4, 8, 9, 14, 23. */ - int paragraphOffset[NumParagraphs + 1]; // 37 + 1 + int paragraphOffset[NumParagraphs + 1]; // 37 + 1 paragraphOffset[0] = 0; - for (int i=0; i<NumParagraphs; i++) // i = 0..36 - paragraphOffset[i+1] = paragraphOffset[i] + paragraph[i].count(); + for (int i = 0; i < NumParagraphs; i++) // i = 0..36 + paragraphOffset[i + 1] = paragraphOffset[i] + paragraph[i].count(); /* Output the alphabet as a row of links. @@ -2952,9 +2768,8 @@ void HtmlGenerator::generateCompactList(ListType listType, QString previousName; bool multipleOccurrences = false; - for (int i=0; i<nmm.count(); i++) { - while ((curParNr < NumParagraphs) && - (curParOffset == paragraph[curParNr].count())) { + for (int i = 0; i < nmm.count(); i++) { + while ((curParNr < NumParagraphs) && (curParOffset == paragraph[curParNr].count())) { ++curParNr; curParOffset = 0; } @@ -2974,9 +2789,7 @@ void HtmlGenerator::generateCompactList(ListType listType, QChar c = paragraphName[curParNr][0].toLower(); out() << QString("<a name=\"%1\"></a>").arg(c); } - out() << "<b>" - << paragraphName[curParNr] - << "</b>"; + out() << "<b>" << paragraphName[curParNr] << "</b>"; out() << "</dt>\n"; } @@ -2984,12 +2797,11 @@ void HtmlGenerator::generateCompactList(ListType listType, Output a <dd> for the current offset in the current paragraph. */ out() << "<dd>"; - if ((curParNr < NumParagraphs) && - !paragraphName[curParNr].isEmpty()) { + if ((curParNr < NumParagraphs) && !paragraphName[curParNr].isEmpty()) { NodeMultiMap::Iterator it; NodeMultiMap::Iterator next; it = paragraph[curParNr].begin(); - for (int i=0; i<curParOffset; i++) + for (int i = 0; i < curParOffset; i++) ++it; if (listType == Generic) { @@ -2998,8 +2810,7 @@ void HtmlGenerator::generateCompactList(ListType listType, require some special formatting. */ out() << "<a href=\"" << linkForNode(it.value(), relative) << "\">"; - } - else if (listType == Obsolete) { + } else if (listType == Obsolete) { QString fileName = fileBase(it.value()) + "-obsolete." + fileExtension(); QString link; if (useOutputSubdirs()) { @@ -3023,8 +2834,7 @@ void HtmlGenerator::generateCompactList(ListType listType, if (multipleOccurrences) name += ": " + it.value()->tree()->camelCaseModuleName(); pieces << name; - } - else + } else pieces = it.value()->fullName(relative).split("::"); out() << protectEnc(pieces.last()); out() << "</a>"; @@ -3095,21 +2905,16 @@ void HtmlGenerator::generateLegaleseList(const Node *relative, CodeMarker *marke } } -void HtmlGenerator::generateQmlItem(const Node *node, - const Node *relative, - CodeMarker *marker, +void HtmlGenerator::generateQmlItem(const Node *node, const Node *relative, CodeMarker *marker, bool summary) { - QString marked = marker->markedUpQmlItem(node,summary); + QString marked = marker->markedUpQmlItem(node, summary); QRegExp templateTag("(<[^@>]*>)"); if (marked.indexOf(templateTag) != -1) { - QString contents = protectEnc(marked.mid(templateTag.pos(1), - templateTag.cap(1).length())); - marked.replace(templateTag.pos(1), templateTag.cap(1).length(), - contents); + QString contents = protectEnc(marked.mid(templateTag.pos(1), templateTag.cap(1).length())); + marked.replace(templateTag.pos(1), templateTag.cap(1).length(), contents); } - marked.replace(QRegExp("<@param>([a-z]+)_([1-9n])</@param>"), - "<i>\\1<sub>\\2</sub></i>"); + marked.replace(QRegExp("<@param>([a-z]+)_([1-9n])</@param>"), "<i>\\1<sub>\\2</sub></i>"); marked.replace("<@param>", "<i>"); marked.replace("</@param>", "</i>"); @@ -3141,10 +2946,7 @@ bool HtmlGenerator::generateGroupList(CollectionNode *cn) const auto members = cn->members(); for (const auto *node : members) { out() << "<li>" - << "<a href=\"#" - << Doc::canonicalTitle(node->title()) - << "\">" - << node->title() + << "<a href=\"#" << Doc::canonicalTitle(node->title()) << "\">" << node->title() << "</a></li>\n"; } out() << "</ul>\n"; @@ -3171,8 +2973,7 @@ void HtmlGenerator::generateList(const Node *relative, CodeMarker *marker, const for (auto *collectionNode : collectionList) nodeList.append(collectionNode); generateAnnotatedList(relative, marker, nodeList); - } - else { + } else { /* \generatelist {selector} is only allowed in a comment where the topic is \group, \module, @@ -3180,7 +2981,8 @@ void HtmlGenerator::generateList(const Node *relative, CodeMarker *marker, const */ if (relative && !relative->isCollectionNode()) { relative->doc().location().warning(tr("\\generatelist {%1} is only allowed in \\group, " - "\\module, \\qmlmodule, and \\jsmodule comments.").arg(selector)); + "\\module, \\qmlmodule, and \\jsmodule comments.") + .arg(selector)); return; } Node *n = const_cast<Node *>(relative); @@ -3201,8 +3003,7 @@ void HtmlGenerator::generateSection(const NodeVector &nv, const Node *relative, } if (alignNames) { out() << "<div class=\"table\"><table class=\"alignedsummary\">\n"; - } - else { + } else { if (twoColumn) out() << "<div class=\"table\"><table class=\"propsummary\">\n" << "<tr><td class=\"topAlign\">"; @@ -3216,8 +3017,7 @@ void HtmlGenerator::generateSection(const NodeVector &nv, const Node *relative, if (alignNames) { out() << "<tr><td class=\"memItemLeft rightAlign topAlign\"> "; - } - else { + } else { if (twoColumn && i == (nv.count() + 1) / 2) out() << "</ul></td><td class=\"topAlign\"><ul>\n"; out() << "<li class=\"fn\">"; @@ -3240,13 +3040,12 @@ void HtmlGenerator::generateSection(const NodeVector &nv, const Node *relative, } } -void HtmlGenerator::generateSectionList(const Section& section, - const Node *relative, - CodeMarker *marker, - Section::Status status) +void HtmlGenerator::generateSectionList(const Section §ion, const Node *relative, + CodeMarker *marker, Section::Status status) { bool alignNames = true; - const NodeVector &members = (status == Section::Obsolete ? section.obsoleteMembers() : section.members()); + const NodeVector &members = + (status == Section::Obsolete ? section.obsoleteMembers() : section.members()); if (!members.isEmpty()) { bool hasPrivateSignals = false; bool isInvokable = false; @@ -3260,8 +3059,7 @@ void HtmlGenerator::generateSectionList(const Section& section, } if (alignNames) { out() << "<div class=\"table\"><table class=\"alignedsummary\">\n"; - } - else { + } else { if (twoColumn) out() << "<div class=\"table\"><table class=\"propsummary\">\n" << "<tr><td class=\"topAlign\">"; @@ -3275,8 +3073,7 @@ void HtmlGenerator::generateSectionList(const Section& section, if (alignNames) { out() << "<tr><td class=\"memItemLeft topAlign rightAlign\"> "; - } - else { + } else { if (twoColumn && i == (members.count() + 1) / 2) out() << "</ul></td><td class=\"topAlign\"><ul>\n"; out() << "<li class=\"fn\">"; @@ -3295,8 +3092,7 @@ void HtmlGenerator::generateSectionList(const Section& section, hasPrivateSignals = true; if (alignNames) out() << "</td><td class=\"memItemRight bottomAlign\">[see note below]"; - } - else if (fn->isInvokable()) { + } else if (fn->isInvokable()) { isInvokable = true; if (alignNames) out() << "</td><td class=\"memItemRight bottomAlign\">[see note below]"; @@ -3321,14 +3117,15 @@ void HtmlGenerator::generateSectionList(const Section& section, generateInvokableNote(relative, marker); } - if (status != Section::Obsolete && section.style() == Section::Summary && !section.inheritedMembers().isEmpty()) { + if (status != Section::Obsolete && section.style() == Section::Summary + && !section.inheritedMembers().isEmpty()) { out() << "<ul>\n"; generateSectionInheritedList(section, relative); out() << "</ul>\n"; } } -void HtmlGenerator::generateSectionInheritedList(const Section& section, const Node *relative) +void HtmlGenerator::generateSectionInheritedList(const Section §ion, const Node *relative) { const QVector<QPair<Aggregate *, int>> &inheritedMembers = section.inheritedMembers(); for (const auto &member : inheritedMembers) { @@ -3336,23 +3133,17 @@ void HtmlGenerator::generateSectionInheritedList(const Section& section, const N out() << member.second << ' '; if (member.second == 1) { out() << section.singular(); - } - else { + } else { out() << section.plural(); } - out() << " inherited from <a href=\"" << fileName(member.first) - << '#' << Generator::cleanRef(section.title().toLower()) << "\">" - << protectEnc(member.first->plainFullName(relative)) - << "</a></li>\n"; + out() << " inherited from <a href=\"" << fileName(member.first) << '#' + << Generator::cleanRef(section.title().toLower()) << "\">" + << protectEnc(member.first->plainFullName(relative)) << "</a></li>\n"; } } -void HtmlGenerator::generateSynopsis(const Node *node, - const Node *relative, - CodeMarker *marker, - Section::Style style, - bool alignNames, - const QString *prefix) +void HtmlGenerator::generateSynopsis(const Node *node, const Node *relative, CodeMarker *marker, + Section::Style style, bool alignNames, const QString *prefix) { QString marked = marker->markedUpSynopsis(node, relative, style); @@ -3360,19 +3151,16 @@ void HtmlGenerator::generateSynopsis(const Node *node, marked.prepend(*prefix); QRegExp templateTag("(<[^@>]*>)"); if (marked.indexOf(templateTag) != -1) { - QString contents = protectEnc(marked.mid(templateTag.pos(1), - templateTag.cap(1).length())); - marked.replace(templateTag.pos(1), templateTag.cap(1).length(), - contents); + QString contents = protectEnc(marked.mid(templateTag.pos(1), templateTag.cap(1).length())); + marked.replace(templateTag.pos(1), templateTag.cap(1).length(), contents); } - marked.replace(QRegExp("<@param>([a-z]+)_([1-9n])</@param>"), - "<i>\\1<sub>\\2</sub></i>"); + marked.replace(QRegExp("<@param>([a-z]+)_([1-9n])</@param>"), "<i>\\1<sub>\\2</sub></i>"); marked.replace("<@param>", "<i>"); marked.replace("</@param>", "</i>"); if (style == Section::Summary) { - marked.remove("<@name>"); // was "<b>" - marked.remove("</@name>"); // was "</b>" + marked.remove("<@name>"); // was "<b>" + marked.remove("</@name>"); // was "</b>" } if (style == Section::AllMembers) { @@ -3392,8 +3180,7 @@ void HtmlGenerator::generateSynopsis(const Node *node, out() << highlightedCode(marked, relative, alignNames); } -QString HtmlGenerator::highlightedCode(const QString &markedCode, - const Node *relative, +QString HtmlGenerator::highlightedCode(const QString &markedCode, const Node *relative, bool alignNames, Node::Genus genus) { QString src = markedCode; @@ -3427,45 +3214,39 @@ QString HtmlGenerator::highlightedCode(const QString &markedCode, QString link = linkForNode(n, relative); addLink(link, arg, &html); html += QLatin1String("</b>"); - } - else if (parseArg(src, funcTag, &i, srcSize, &arg, &par1)) { + } else if (parseArg(src, funcTag, &i, srcSize, &arg, &par1)) { const FunctionNode *fn = qdb_->findFunctionNode(par1.toString(), relative, genus); QString link = linkForNode(fn, relative); addLink(link, arg, &html); par1 = QStringRef(); - } - else if (parseArg(src, typeTag, &i, srcSize, &arg, &par1)) { + } else if (parseArg(src, typeTag, &i, srcSize, &arg, &par1)) { par1 = QStringRef(); const Node *n = qdb_->findTypeNode(arg.toString(), relative, genus); html += QLatin1String("<span class=\"type\">"); if (n && (n->isQmlBasicType() || n->isJsBasicType())) { if (relative && (relative->genus() == n->genus() || genus == n->genus())) - addLink(linkForNode(n,relative), arg, &html); + addLink(linkForNode(n, relative), arg, &html); else html += arg; - } - else - addLink(linkForNode(n,relative), arg, &html); + } else + addLink(linkForNode(n, relative), arg, &html); html += QLatin1String("</span>"); - } - else if (parseArg(src, headerTag, &i, srcSize, &arg, &par1)) { + } else if (parseArg(src, headerTag, &i, srcSize, &arg, &par1)) { par1 = QStringRef(); if (arg.startsWith(QLatin1Char('&'))) html += arg; else { const Node *n = qdb_->findNodeForInclude(QStringList(arg.toString())); if (n && n != relative) - addLink(linkForNode(n,relative), arg, &html); + addLink(linkForNode(n, relative), arg, &html); else html += arg; } - } - else { + } else { html += charLangle; html += charAt; } - } - else { + } else { html += src.at(i++); } } @@ -3485,15 +3266,15 @@ QString HtmlGenerator::highlightedCode(const QString &markedCode, html = QString(); html.reserve(src.size()); static const QLatin1String spanTags[] = { - QLatin1String("comment>"), QLatin1String("<span class=\"comment\">"), - QLatin1String("preprocessor>"), QLatin1String("<span class=\"preprocessor\">"), - QLatin1String("string>"), QLatin1String("<span class=\"string\">"), - QLatin1String("char>"), QLatin1String("<span class=\"char\">"), - QLatin1String("number>"), QLatin1String("<span class=\"number\">"), - QLatin1String("op>"), QLatin1String("<span class=\"operator\">"), - QLatin1String("type>"), QLatin1String("<span class=\"type\">"), - QLatin1String("name>"), QLatin1String("<span class=\"name\">"), - QLatin1String("keyword>"), QLatin1String("<span class=\"keyword\">") + QLatin1String("comment>"), QLatin1String("<span class=\"comment\">"), + QLatin1String("preprocessor>"), QLatin1String("<span class=\"preprocessor\">"), + QLatin1String("string>"), QLatin1String("<span class=\"string\">"), + QLatin1String("char>"), QLatin1String("<span class=\"char\">"), + QLatin1String("number>"), QLatin1String("<span class=\"number\">"), + QLatin1String("op>"), QLatin1String("<span class=\"operator\">"), + QLatin1String("type>"), QLatin1String("<span class=\"type\">"), + QLatin1String("name>"), QLatin1String("<span class=\"name\">"), + QLatin1String("keyword>"), QLatin1String("<span class=\"keyword\">") }; int nTags = 9; // Update the upper bound of k in the following code to match the length @@ -3504,9 +3285,8 @@ QString HtmlGenerator::highlightedCode(const QString &markedCode, i += 2; bool handled = false; for (int k = 0; k != nTags; ++k) { - const QLatin1String& tag = spanTags[2 * k]; - if (i + tag.size() <= src.length() && - tag == QStringRef(&src, i, tag.size())) { + const QLatin1String &tag = spanTags[2 * k]; + if (i + tag.size() <= src.length() && tag == QStringRef(&src, i, tag.size())) { html += spanTags[2 * k + 1]; i += tag.size(); handled = true; @@ -3520,14 +3300,12 @@ QString HtmlGenerator::highlightedCode(const QString &markedCode, ++i; } continue; - } - else if (src.at(i + 1) == QLatin1Char('/') && src.at(i + 2) == QLatin1Char('@')) { + } else if (src.at(i + 1) == QLatin1Char('/') && src.at(i + 2) == QLatin1Char('@')) { i += 3; bool handled = false; for (int k = 0; k != nTags; ++k) { - const QLatin1String& tag = spanTags[2 * k]; - if (i + tag.size() <= src.length() && - tag == QStringRef(&src, i, tag.size())) { + const QLatin1String &tag = spanTags[2 * k]; + if (i + tag.size() <= src.length() && tag == QStringRef(&src, i, tag.size())) { html += QLatin1String("</span>"); i += tag.size(); handled = true; @@ -3581,11 +3359,11 @@ QString HtmlGenerator::protectEnc(const QString &string) QString HtmlGenerator::protect(const QString &string, const QString &outputEncoding) { -#define APPEND(x) \ - if (html.isEmpty()) { \ - html = string; \ - html.truncate(i); \ -} \ +#define APPEND(x) \ + if (html.isEmpty()) { \ + html = string; \ + html.truncate(i); \ + } \ html += (x); QString html; @@ -3637,7 +3415,8 @@ QString HtmlGenerator::fileName(const Node *node) return Generator::fileName(node); } -void HtmlGenerator::generateFullName(const Node *apparentNode, const Node *relative, const Node *actualNode) +void HtmlGenerator::generateFullName(const Node *apparentNode, const Node *relative, + const Node *actualNode) { if (actualNode == nullptr) actualNode = apparentNode; @@ -3649,8 +3428,7 @@ void HtmlGenerator::generateFullName(const Node *apparentNode, const Node *relat out() << "</a>"; } -void HtmlGenerator::generateDetailedMember(const Node *node, - const PageNode *relative, +void HtmlGenerator::generateDetailedMember(const Node *node, const PageNode *relative, CodeMarker *marker) { const EnumNode *etn; @@ -3675,8 +3453,7 @@ void HtmlGenerator::generateDetailedMember(const Node *node, if (collective.size() > 1) out() << "</div>"; out() << divNavTop << '\n'; - } - else { + } else { nodeRef = refForNode(node); if (node->isEnumType() && (etn = static_cast<const EnumNode *>(node))->flagsType()) { #ifdef GENERATE_MAC_REFS @@ -3688,8 +3465,7 @@ void HtmlGenerator::generateDetailedMember(const Node *node, out() << "<br/>"; generateSynopsis(etn->flagsType(), relative, marker, Section::Details); out() << "</h3>\n"; - } - else { + } else { out() << "<h3 class=\"fn\" id=\"" << nodeRef << "\">"; out() << "<a name=\"" + nodeRef + "\"></a>"; generateSynopsis(node, relative, marker, Section::Details); @@ -3723,24 +3499,19 @@ void HtmlGenerator::generateDetailedMember(const Node *node, out() << "<p><b>Notifier signal:</b></p>\n"; generateSectionList(notifiers, node, marker); } - } - else if (node->isFunction()) { + } else if (node->isFunction()) { const FunctionNode *fn = static_cast<const FunctionNode *>(node); if (fn->isPrivateSignal()) generatePrivateSignalNote(node, marker); if (fn->isInvokable()) generateInvokableNote(node, marker); generateAssociatedPropertyNotes(const_cast<FunctionNode *>(fn)); - } - else if (node->isEnumType()) { + } else if (node->isEnumType()) { const EnumNode *etn = static_cast<const EnumNode *>(node); if (etn->flagsType()) { - out() << "<p>The " << protectEnc(etn->flagsType()->name()) - << " type is a typedef for " - << "<a href=\"" << qflagsHref_ << "\">QFlags</a><" - << protectEnc(etn->name()) - << ">. It stores an OR combination of " - << protectEnc(etn->name()) + out() << "<p>The " << protectEnc(etn->flagsType()->name()) << " type is a typedef for " + << "<a href=\"" << qflagsHref_ << "\">QFlags</a><" << protectEnc(etn->name()) + << ">. It stores an OR combination of " << protectEnc(etn->name()) << " values.</p>\n"; } } @@ -3759,7 +3530,8 @@ void HtmlGenerator::generateMacRef(const Node *node, CodeMarker *marker) const QStringList macRefs = marker->macRefsForNode(node); for (const auto &macRef : macRefs) - out() << "<a name=\"" << "//apple_ref/" << macRef << "\"></a>\n"; + out() << "<a name=\"" + << "//apple_ref/" << macRef << "\"></a>\n"; } #endif @@ -3785,8 +3557,7 @@ void HtmlGenerator::beginLink(const QString &link, const Node *node, const Node if (link_.isEmpty()) { if (showBrokenLinks) out() << "<i>"; - } - else if (node == nullptr || (relative != nullptr && node->status() == relative->status())) + } else if (node == nullptr || (relative != nullptr && node->status() == relative->status())) out() << "<a href=\"" << link_ << "\">"; else if (node->isObsolete()) out() << "<a href=\"" << link_ << "\" class=\"obsolete\">"; @@ -3801,8 +3572,7 @@ void HtmlGenerator::endLink() if (link_.isEmpty()) { if (showBrokenLinks) out() << "</i>"; - } - else { + } else { if (inObsoleteLink) { out() << "<sup>(obsolete)</sup>"; } @@ -3817,8 +3587,7 @@ void HtmlGenerator::endLink() Generates the summary list for the \a members. Only used for sections of QML element documentation. */ -void HtmlGenerator::generateQmlSummary(const NodeVector &members, - const Node *relative, +void HtmlGenerator::generateQmlSummary(const NodeVector &members, const Node *relative, CodeMarker *marker) { if (!members.isEmpty()) { @@ -3851,8 +3620,7 @@ void HtmlGenerator::generateQmlSummary(const NodeVector &members, Outputs the html detailed documentation for a section on a QML element reference page. */ -void HtmlGenerator::generateDetailedQmlMember(Node *node, - const Aggregate *relative, +void HtmlGenerator::generateDetailedQmlMember(Node *node, const Aggregate *relative, CodeMarker *marker) { #ifdef GENERATE_MAC_REFS @@ -3865,13 +3633,12 @@ void HtmlGenerator::generateDetailedQmlMember(Node *node, "<div class=\"table\"><table class=\"qmlname\">\n"); QString qmlItemStart("<tr valign=\"top\" class=\"odd\" id=\"%1\">\n" - "<td class=\"%2\"><p>\n"); + "<td class=\"%2\"><p>\n"); QString qmlItemEnd("</p></td></tr>\n"); QString qmlItemFooter("</table></div></div>\n"); - - std::function<void (QmlPropertyNode *)> generateQmlProperty = [&](QmlPropertyNode *n) { + std::function<void(QmlPropertyNode *)> generateQmlProperty = [&](QmlPropertyNode *n) { out() << qmlItemStart.arg(refForNode(n), "tblQmlPropNode"); if (!n->isReadOnlySet() && n->declarativeCppNode()) @@ -3886,7 +3653,7 @@ void HtmlGenerator::generateDetailedQmlMember(Node *node, out() << qmlItemEnd; }; - std::function<void (Node *)> generateQmlMethod = [&](Node *n) { + std::function<void(Node *)> generateQmlMethod = [&](Node *n) { out() << qmlItemStart.arg(refForNode(n), "tblQmlFuncNode"); generateSynopsis(n, relative, marker, Section::Details, false); out() << qmlItemEnd; @@ -3894,7 +3661,7 @@ void HtmlGenerator::generateDetailedQmlMember(Node *node, out() << "<div class=\"qmlitem\">"; if (node->isPropertyGroup()) { - const SharedCommentNode *scn = static_cast<const SharedCommentNode*>(node); + const SharedCommentNode *scn = static_cast<const SharedCommentNode *>(node); out() << qmlItemHeader; if (!scn->name().isEmpty()) { out() << "<tr valign=\"top\" class=\"even\" id=\"" << refForNode(scn) << "\">"; @@ -3958,7 +3725,7 @@ void HtmlGenerator::generateQmlInherits(QmlTypeNode *qcn, CodeMarker *marker) if (base) { Text text; text << Atom::ParaLeft << "Inherits "; - text << Atom(Atom::LinkNode,CodeMarker::stringForNode(base)); + text << Atom(Atom::LinkNode, CodeMarker::stringForNode(base)); text << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK); text << Atom(Atom::String, base->name()); text << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK); @@ -3980,7 +3747,7 @@ void HtmlGenerator::generateQmlInstantiates(QmlTypeNode *qcn, CodeMarker *marker if (cn && !cn->isInternal()) { Text text; text << Atom::ParaLeft; - text << Atom(Atom::LinkNode,CodeMarker::stringForNode(qcn)); + text << Atom(Atom::LinkNode, CodeMarker::stringForNode(qcn)); text << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK); QString name = qcn->name(); /* @@ -3992,7 +3759,7 @@ void HtmlGenerator::generateQmlInstantiates(QmlTypeNode *qcn, CodeMarker *marker text << Atom(Atom::String, name); text << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK); text << " instantiates the C++ class "; - text << Atom(Atom::LinkNode,CodeMarker::stringForNode(cn)); + text << Atom(Atom::LinkNode, CodeMarker::stringForNode(cn)); text << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK); text << Atom(Atom::String, cn->name()); text << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK); @@ -4010,11 +3777,11 @@ void HtmlGenerator::generateQmlInstantiates(QmlTypeNode *qcn, CodeMarker *marker */ void HtmlGenerator::generateInstantiatedBy(ClassNode *cn, CodeMarker *marker) { - if (cn && !cn->isInternal() && cn->qmlElement() != nullptr) { + if (cn && !cn->isInternal() && cn->qmlElement() != nullptr) { const QmlTypeNode *qcn = cn->qmlElement(); Text text; text << Atom::ParaLeft; - text << Atom(Atom::LinkNode,CodeMarker::stringForNode(cn)); + text << Atom(Atom::LinkNode, CodeMarker::stringForNode(cn)); text << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK); text << Atom(Atom::String, cn->name()); text << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK); @@ -4022,7 +3789,7 @@ void HtmlGenerator::generateInstantiatedBy(ClassNode *cn, CodeMarker *marker) text << " is instantiated by QML Type "; else text << " is instantiated by Javascript Type "; - text << Atom(Atom::LinkNode,CodeMarker::stringForNode(qcn)); + text << Atom(Atom::LinkNode, CodeMarker::stringForNode(qcn)); text << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK); text << Atom(Atom::String, qcn->name()); text << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK); @@ -4050,7 +3817,8 @@ void HtmlGenerator::generateExtractionMark(const Node *node, ExtractionMarkType for (const auto *propFuncNode : list) { if (propFuncNode->isFunction()) { const FunctionNode *func = static_cast<const FunctionNode *>(propFuncNode); - out() << "$$$" + func->name() + func->parameters().rawSignature().remove(' '); + out() << "$$$" + func->name() + + func->parameters().rawSignature().remove(' '); } } } else if (node->isEnumType()) { @@ -4070,7 +3838,6 @@ void HtmlGenerator::generateExtractionMark(const Node *node, ExtractionMarkType } } - /*! This function outputs one or more manifest files in XML. They are used by Creator. @@ -4093,7 +3860,7 @@ void HtmlGenerator::generateManifestFile(const QString &manifest, const QString ExampleNodeMap &exampleNodeMap = qdb_->exampleNodeMap(); if (exampleNodeMap.isEmpty()) return; - QString fileName = manifest +"-manifest.xml"; + QString fileName = manifest + "-manifest.xml"; QFile file(outputDir() + QLatin1Char('/') + fileName); bool demos = false; if (manifest == QLatin1String("demos")) @@ -4107,8 +3874,7 @@ void HtmlGenerator::generateManifestFile(const QString &manifest, const QString proceed = true; break; } - } - else if (!en->name().startsWith("demos")) { + } else if (!en->name().startsWith("demos")) { proceed = true; break; } @@ -4134,7 +3900,9 @@ void HtmlGenerator::generateManifestFile(const QString &manifest, const QString } // attributes that are always written for the element usedAttributes.clear(); - usedAttributes << "name" << "docUrl" << "projectPath"; + usedAttributes << "name" + << "docUrl" + << "projectPath"; writer.writeStartElement(element); writer.writeAttribute("name", en->title()); @@ -4143,21 +3911,21 @@ void HtmlGenerator::generateManifestFile(const QString &manifest, const QString QStringList proFiles; const auto exampleFiles = en->files(); for (const QString &file : exampleFiles) { - if (file.endsWith(".pro") || file.endsWith(".qmlproject") || file.endsWith(".pyproject")) + if (file.endsWith(".pro") || file.endsWith(".qmlproject") + || file.endsWith(".pyproject")) proFiles << file; } if (!proFiles.isEmpty()) { if (proFiles.size() == 1) { writer.writeAttribute("projectPath", examplesPath + proFiles[0]); - } - else { + } else { QString exampleName = en->name().split('/').last(); bool proWithExampleNameFound = false; - for (int j = 0; j < proFiles.size(); j++) - { + for (int j = 0; j < proFiles.size(); j++) { if (proFiles[j].endsWith(QStringLiteral("%1/%1.pro").arg(exampleName)) - || proFiles[j].endsWith(QStringLiteral("%1/%1.qmlproject").arg(exampleName)) - || proFiles[j].endsWith(QStringLiteral("%1/%1.pyproject").arg(exampleName))) { + || proFiles[j].endsWith(QStringLiteral("%1/%1.qmlproject").arg(exampleName)) + || proFiles[j].endsWith( + QStringLiteral("%1/%1.pyproject").arg(exampleName))) { writer.writeAttribute("projectPath", examplesPath + proFiles[j]); proWithExampleNameFound = true; break; @@ -4174,7 +3942,7 @@ void HtmlGenerator::generateManifestFile(const QString &manifest, const QString QString fullName = project + QLatin1Char('/') + en->title(); QSet<QString> tags; - for (int idx=0; idx < manifestMetaContent.size(); ++idx) { + for (int idx = 0; idx < manifestMetaContent.size(); ++idx) { const auto names = manifestMetaContent[idx].names; for (const QString &name : names) { bool match = false; @@ -4245,20 +4013,14 @@ void HtmlGenerator::generateManifestFile(const QString &manifest, const QString if (s.endsWith(QLatin1Char(':'))) s.chop(1); - if (s.length() < 2 - || s.at(0).isDigit() - || s.at(0) == '-' - || s == QLatin1String("qt") - || s == QLatin1String("the") - || s == QLatin1String("and") - || s.startsWith(QLatin1String("example")) - || s.startsWith(QLatin1String("chapter"))) + if (s.length() < 2 || s.at(0).isDigit() || s.at(0) == '-' || s == QLatin1String("qt") + || s == QLatin1String("the") || s == QLatin1String("and") + || s.startsWith(QLatin1String("example")) || s.startsWith(QLatin1String("chapter"))) tag_it = tags.erase(tag_it); else if (s != *tag_it) { modified << s; tag_it = tags.erase(tag_it); - } - else + } else ++tag_it; } tags += modified; @@ -4277,7 +4039,7 @@ void HtmlGenerator::generateManifestFile(const QString &manifest, const QString writer.writeEndElement(); // tags } - QString ename = en->name().mid(en->name().lastIndexOf('/')+1); + QString ename = en->name().mid(en->name().lastIndexOf('/') + 1); QMap<int, QString> filesToOpen; const auto files = en->files(); for (const QString &file : files) { @@ -4298,13 +4060,12 @@ void HtmlGenerator::generateManifestFile(const QString &manifest, const QString // main.qml takes precedence over main.cpp else if (fileName.endsWith("main.qml")) { filesToOpen.insert(3, file); - } - else if (fileName.endsWith("main.cpp")) { + } else if (fileName.endsWith("main.cpp")) { filesToOpen.insert(4, file); } } - for (auto it = filesToOpen.constEnd(); it != filesToOpen.constBegin(); ) { + for (auto it = filesToOpen.constEnd(); it != filesToOpen.constBegin();) { writer.writeStartElement("fileToOpen"); if (--it == filesToOpen.constBegin()) { writer.writeAttribute(QStringLiteral("mainFile"), QStringLiteral("true")); @@ -4367,45 +4128,55 @@ void HtmlGenerator::reportOrphans(const Aggregate *parent) case Node::Typedef: child->location().warning(tr("Global typedef, %1, %2").arg(child->name()).arg(message)); break; - case Node::Function: - { - const FunctionNode *fn = static_cast<const FunctionNode *>(child); - switch (fn->metaness()) { - case FunctionNode::QmlSignal: - child->location().warning(tr("Global QML, signal, %1 %2").arg(child->name()).arg(message)); - break; - case FunctionNode::QmlSignalHandler: - child->location().warning(tr("Global QML signal handler, %1, %2").arg(child->name()).arg(message)); - break; - case FunctionNode::QmlMethod: - child->location().warning(tr("Global QML method, %1, %2").arg(child->name()).arg(message)); - break; - case FunctionNode::JsSignal: - child->location().warning(tr("Global JS, signal, %1 %2").arg(child->name()).arg(message)); - break; - case FunctionNode::JsSignalHandler: - child->location().warning(tr("Global JS signal handler, %1, %2").arg(child->name()).arg(message)); - break; - case FunctionNode::JsMethod: - child->location().warning(tr("Global JS method, %1, %2").arg(child->name()).arg(message)); - break; - default: - if (fn->isMacro()) - child->location().warning(tr("Global macro, %1, %2").arg(child->name()).arg(message)); - else - child->location().warning(tr("Global function, %1(), %2").arg(child->name()).arg(message)); - break; - } + case Node::Function: { + const FunctionNode *fn = static_cast<const FunctionNode *>(child); + switch (fn->metaness()) { + case FunctionNode::QmlSignal: + child->location().warning( + tr("Global QML, signal, %1 %2").arg(child->name()).arg(message)); + break; + case FunctionNode::QmlSignalHandler: + child->location().warning( + tr("Global QML signal handler, %1, %2").arg(child->name()).arg(message)); + break; + case FunctionNode::QmlMethod: + child->location().warning( + tr("Global QML method, %1, %2").arg(child->name()).arg(message)); + break; + case FunctionNode::JsSignal: + child->location().warning( + tr("Global JS, signal, %1 %2").arg(child->name()).arg(message)); + break; + case FunctionNode::JsSignalHandler: + child->location().warning( + tr("Global JS signal handler, %1, %2").arg(child->name()).arg(message)); + break; + case FunctionNode::JsMethod: + child->location().warning( + tr("Global JS method, %1, %2").arg(child->name()).arg(message)); + break; + default: + if (fn->isMacro()) + child->location().warning( + tr("Global macro, %1, %2").arg(child->name()).arg(message)); + else + child->location().warning( + tr("Global function, %1(), %2").arg(child->name()).arg(message)); break; } + break; + } case Node::Variable: - child->location().warning(tr("Global variable, %1, %2").arg(child->name()).arg(message)); + child->location().warning( + tr("Global variable, %1, %2").arg(child->name()).arg(message)); break; case Node::JsProperty: - child->location().warning(tr("Global JS property, %1, %2").arg(child->name()).arg(message)); + child->location().warning( + tr("Global JS property, %1, %2").arg(child->name()).arg(message)); break; case Node::QmlProperty: - child->location().warning(tr("Global QML property, %1, %2").arg(child->name()).arg(message)); + child->location().warning( + tr("Global QML property, %1, %2").arg(child->name()).arg(message)); break; default: break; diff --git a/src/qdoc/htmlgenerator.h b/src/qdoc/htmlgenerator.h index 86801e0af..1e3c46ef3 100644 --- a/src/qdoc/htmlgenerator.h +++ b/src/qdoc/htmlgenerator.h @@ -50,7 +50,6 @@ class HtmlGenerator : public XmlGenerator Q_DECLARE_TR_FUNCTIONS(QDoc::HtmlGenerator) public: - public: HtmlGenerator(); ~HtmlGenerator() override; @@ -69,9 +68,7 @@ protected: void generateExampleFilePage(const Node *en, const QString &file, CodeMarker *marker) override; QString generateLinksToLinksPage(const QString &module, CodeMarker *marker); QString generateLinksToBrokenLinksPage(CodeMarker *marker, int &count); - virtual int generateAtom(const Atom *atom, - const Node *relative, - CodeMarker *marker) override; + virtual int generateAtom(const Atom *atom, const Node *relative, CodeMarker *marker) override; void generateCppReferencePage(Aggregate *aggregate, CodeMarker *marker) override; void generateProxyPage(Aggregate *aggregate, CodeMarker *marker) override; void generateQmlTypePage(QmlTypeNode *qcn, CodeMarker *marker) override; @@ -88,12 +85,7 @@ protected: private: enum SubTitleSize { SmallSubTitle, LargeSubTitle }; - enum ExtractionMarkType { - BriefMark, - DetailedDescriptionMark, - MemberMark, - EndMark - }; + enum ExtractionMarkType { BriefMark, DetailedDescriptionMark, MemberMark, EndMark }; struct ManifestMetaFilter { @@ -102,29 +94,18 @@ private: QSet<QString> tags; }; - void generateNavigationBar(const QString &title, - const Node *node, - CodeMarker *marker, - const QString &buildversion, - bool tableItems = false); - void generateHeader(const QString &title, - const Node *node = nullptr, + void generateNavigationBar(const QString &title, const Node *node, CodeMarker *marker, + const QString &buildversion, bool tableItems = false); + void generateHeader(const QString &title, const Node *node = nullptr, CodeMarker *marker = nullptr); - void generateTitle(const QString &title, - const Text &subTitle, - SubTitleSize subTitleSize, - const Node *relative, - CodeMarker *marker); + void generateTitle(const QString &title, const Text &subTitle, SubTitleSize subTitleSize, + const Node *relative, CodeMarker *marker); void generateFooter(const Node *node = nullptr); - void generateRequisites(Aggregate *inner, - CodeMarker *marker); - void generateQmlRequisites(QmlTypeNode *qcn, - CodeMarker *marker); - void generateBrief(const Node *node, - CodeMarker *marker, - const Node *relative = nullptr, bool addLink=true); - void generateTableOfContents(const Node *node, - CodeMarker *marker, + void generateRequisites(Aggregate *inner, CodeMarker *marker); + void generateQmlRequisites(QmlTypeNode *qcn, CodeMarker *marker); + void generateBrief(const Node *node, CodeMarker *marker, const Node *relative = nullptr, + bool addLink = true); + void generateTableOfContents(const Node *node, CodeMarker *marker, QVector<Section> *sections = nullptr); void generateSidebar(); QString generateAllMembersFile(const Section §ion, CodeMarker *marker); @@ -132,50 +113,36 @@ private: QString generateObsoleteMembersFile(const Sections §ions, CodeMarker *marker); QString generateObsoleteQmlMembersFile(const Sections §ions, CodeMarker *marker); void generateClassHierarchy(const Node *relative, NodeMap &classMap); - void generateAnnotatedList(const Node *relative, CodeMarker *marker, const NodeMultiMap &nodeMap); - void generateAnnotatedLists(const Node *relative, CodeMarker *marker, const NodeMultiMap &nodeMap); + void generateAnnotatedList(const Node *relative, CodeMarker *marker, + const NodeMultiMap &nodeMap); + void generateAnnotatedLists(const Node *relative, CodeMarker *marker, + const NodeMultiMap &nodeMap); void generateAnnotatedList(const Node *relative, CodeMarker *marker, const NodeList &nodes); - void generateCompactList(ListType listType, - const Node *relative, - const NodeMultiMap &classMap, - bool includeAlphabet, - QString commonPrefix); + void generateCompactList(ListType listType, const Node *relative, const NodeMultiMap &classMap, + bool includeAlphabet, QString commonPrefix); void generateFunctionIndex(const Node *relative); void generateLegaleseList(const Node *relative, CodeMarker *marker); bool generateGroupList(CollectionNode *cn); void generateList(const Node *relative, CodeMarker *marker, const QString &selector); - void generateSectionList(const Section& section, - const Node *relative, - CodeMarker *marker, + void generateSectionList(const Section §ion, const Node *relative, CodeMarker *marker, Section::Status = Section::Active); - void generateQmlSummary(const NodeVector &members, - const Node *relative, - CodeMarker *marker); - void generateQmlItem(const Node *node, - const Node *relative, - CodeMarker *marker, - bool summary); - void generateDetailedQmlMember(Node *node, - const Aggregate *relative, - CodeMarker *marker); + void generateQmlSummary(const NodeVector &members, const Node *relative, CodeMarker *marker); + void generateQmlItem(const Node *node, const Node *relative, CodeMarker *marker, bool summary); + void generateDetailedQmlMember(Node *node, const Aggregate *relative, CodeMarker *marker); void generateQmlInherits(QmlTypeNode *qcn, CodeMarker *marker) override; void generateQmlInstantiates(QmlTypeNode *qcn, CodeMarker *marker); void generateInstantiatedBy(ClassNode *cn, CodeMarker *marker); void generateSection(const NodeVector &nv, const Node *relative, CodeMarker *marker); - void generateSynopsis(const Node *node, - const Node *relative, - CodeMarker *marker, - Section::Style style, - bool alignNames = false, + void generateSynopsis(const Node *node, const Node *relative, CodeMarker *marker, + Section::Style style, bool alignNames = false, const QString *prefix = nullptr); - void generateSectionInheritedList(const Section& section, const Node *relative); - QString highlightedCode(const QString &markedCode, - const Node *relative, - bool alignNames = false, - Node::Genus genus = Node::DontCare); + void generateSectionInheritedList(const Section §ion, const Node *relative); + QString highlightedCode(const QString &markedCode, const Node *relative, + bool alignNames = false, Node::Genus genus = Node::DontCare); - void generateFullName(const Node *apparentNode, const Node *relative, const Node *actualNode = nullptr); + void generateFullName(const Node *apparentNode, const Node *relative, + const Node *actualNode = nullptr); void generateDetailedMember(const Node *node, const PageNode *relative, CodeMarker *marker); void generateLink(const Atom *atom, CodeMarker *marker); @@ -239,17 +206,16 @@ public: static QString divNavTop; }; -#define HTMLGENERATOR_ADDRESS "address" -#define HTMLGENERATOR_FOOTER "footer" -#define HTMLGENERATOR_GENERATEMACREFS "generatemacrefs" // ### document me -#define HTMLGENERATOR_POSTHEADER "postheader" -#define HTMLGENERATOR_POSTPOSTHEADER "postpostheader" -#define HTMLGENERATOR_PROLOGUE "prologue" -#define HTMLGENERATOR_NONAVIGATIONBAR "nonavigationbar" +#define HTMLGENERATOR_ADDRESS "address" +#define HTMLGENERATOR_FOOTER "footer" +#define HTMLGENERATOR_GENERATEMACREFS "generatemacrefs" // ### document me +#define HTMLGENERATOR_POSTHEADER "postheader" +#define HTMLGENERATOR_POSTPOSTHEADER "postpostheader" +#define HTMLGENERATOR_PROLOGUE "prologue" +#define HTMLGENERATOR_NONAVIGATIONBAR "nonavigationbar" #define HTMLGENERATOR_NAVIGATIONSEPARATOR "navigationseparator" -#define HTMLGENERATOR_NOSUBDIRS "nosubdirs" -#define HTMLGENERATOR_TOCDEPTH "tocdepth" - +#define HTMLGENERATOR_NOSUBDIRS "nosubdirs" +#define HTMLGENERATOR_TOCDEPTH "tocdepth" QT_END_NAMESPACE diff --git a/src/qdoc/jscodemarker.cpp b/src/qdoc/jscodemarker.cpp index cc1a234fb..d9ac99d6d 100644 --- a/src/qdoc/jscodemarker.cpp +++ b/src/qdoc/jscodemarker.cpp @@ -40,21 +40,17 @@ #include "tree.h" #ifndef QT_NO_DECLARATIVE -#include <private/qqmljsast_p.h> -#include <private/qqmljsengine_p.h> -#include <private/qqmljslexer_p.h> -#include <private/qqmljsparser_p.h> +# include <private/qqmljsast_p.h> +# include <private/qqmljsengine_p.h> +# include <private/qqmljslexer_p.h> +# include <private/qqmljsparser_p.h> #endif QT_BEGIN_NAMESPACE -JsCodeMarker::JsCodeMarker() -{ -} +JsCodeMarker::JsCodeMarker() {} -JsCodeMarker::~JsCodeMarker() -{ -} +JsCodeMarker::~JsCodeMarker() {} /*! Returns \c true if the \a code is recognized by the parser. @@ -102,15 +98,13 @@ Atom::AtomType JsCodeMarker::atomType() const return Atom::JavaScript; } -QString JsCodeMarker::markedUpCode(const QString &code, - const Node *relative, +QString JsCodeMarker::markedUpCode(const QString &code, const Node *relative, const Location &location) { return addMarkUp(code, relative, location); } -QString JsCodeMarker::addMarkUp(const QString &code, - const Node * /* relative */, +QString JsCodeMarker::addMarkUp(const QString &code, const Node * /* relative */, const Location &location) { #ifndef QT_NO_DECLARATIVE @@ -131,15 +125,16 @@ QString JsCodeMarker::addMarkUp(const QString &code, QmlMarkupVisitor visitor(code, pragmas, &engine); QQmlJS::AST::Node::accept(ast, &visitor); if (visitor.hasError()) { - location.warning(location.fileName() + - tr("Unable to analyze JavaScript. The output is incomplete.")); + location.warning(location.fileName() + + tr("Unable to analyze JavaScript. The output is incomplete.")); } output = visitor.markedUpCode(); } else { - location.warning(location.fileName() + - tr("Unable to parse JavaScript: \"%1\" at line %2, column %3").arg( - parser.errorMessage()).arg(parser.errorLineNumber()).arg( - parser.errorColumnNumber())); + location.warning(location.fileName() + + tr("Unable to parse JavaScript: \"%1\" at line %2, column %3") + .arg(parser.errorMessage()) + .arg(parser.errorLineNumber()) + .arg(parser.errorColumnNumber())); output = protect(code); } return output; diff --git a/src/qdoc/jscodemarker.h b/src/qdoc/jscodemarker.h index 3d2ffa1ef..3473cd09b 100644 --- a/src/qdoc/jscodemarker.h +++ b/src/qdoc/jscodemarker.h @@ -50,13 +50,11 @@ public: bool recognizeLanguage(const QString &language) override; Atom::AtomType atomType() const override; - virtual QString markedUpCode(const QString &code, - const Node *relative, + virtual QString markedUpCode(const QString &code, const Node *relative, const Location &location) override; private: - QString addMarkUp(const QString &code, const Node *relative, - const Location &location); + QString addMarkUp(const QString &code, const Node *relative, const Location &location); }; QT_END_NAMESPACE diff --git a/src/qdoc/location.cpp b/src/qdoc/location.cpp index 2c088a5b5..aab8ede19 100644 --- a/src/qdoc/location.cpp +++ b/src/qdoc/location.cpp @@ -66,8 +66,7 @@ bool Location::logProgress_ = false; /*! Constructs an empty location. */ -Location::Location() - : stk(nullptr), stkTop(&stkBottom), stkDepth(0), etcetera(false) +Location::Location() : stk(nullptr), stkTop(&stkBottom), stkDepth(0), etcetera(false) { // nothing. } @@ -104,8 +103,7 @@ Location &Location::operator=(const Location &other) if (other.stk == nullptr) { stk = nullptr; stkTop = &stkBottom; - } - else { + } else { stk = new QStack<StackEntry>(*other.stk); stkTop = &stk->top(); } @@ -141,12 +139,9 @@ void Location::advance(QChar ch) if (ch == QLatin1Char('\n')) { stkTop->lineNo++; stkTop->columnNo = 1; - } - else if (ch == QLatin1Char('\t')) { - stkTop->columnNo = - 1 + tabSize * (stkTop->columnNo + tabSize-1) / tabSize; - } - else { + } else if (ch == QLatin1Char('\t')) { + stkTop->columnNo = 1 + tabSize * (stkTop->columnNo + tabSize - 1) / tabSize; + } else { stkTop->columnNo++; } } @@ -181,15 +176,13 @@ void Location::pop() { if (--stkDepth == 0) { stkBottom = StackEntry(); - } - else { + } else { stk->pop(); if (stk->isEmpty()) { delete stk; stk = nullptr; stkTop = &stkBottom; - } - else { + } else { stkTop = &stk->top(); } } @@ -219,7 +212,6 @@ QString Location::fileName() const return fi.fileName(); } - /*! Returns the suffix of the file name. Returns an empty string if the file path is empty. @@ -291,11 +283,11 @@ int Location::exitCode() if (warningLimit < 0 || warningCount <= warningLimit) return EXIT_SUCCESS; - Location::null.emitMessage(Error, - tr("Documentation warnings (%1) exceeded the limit (%2) for '%3'.") - .arg(QString::number(warningCount), - QString::number(warningLimit), - project), QString()); + Location::null.emitMessage( + Error, + tr("Documentation warnings (%1) exceeded the limit (%2) for '%3'.") + .arg(QString::number(warningCount), QString::number(warningLimit), project), + QString()); return warningCount; } @@ -341,10 +333,8 @@ void Location::initialize(const Config &config) QRegExp regExp = config.getRegExp(CONFIG_SPURIOUS); if (regExp.isValid()) { spuriousRegExp = new QRegExp(regExp); - } - else { - config.lastLocation().warning(tr("Invalid regular expression '%1'") - .arg(regExp.pattern())); + } else { + config.lastLocation().warning(tr("Invalid regular expression '%1'").arg(regExp.pattern())); } } @@ -388,7 +378,8 @@ void Location::logToStdErrAlways(const QString &message) { if (Generator::useTimestamps()) { QTime t = QTime::currentTime(); - fprintf(stderr, "%s LOG: %s\n", t.toString().toLatin1().constData(), message.toLatin1().data()); + fprintf(stderr, "%s LOG: %s\n", t.toString().toLatin1().constData(), + message.toLatin1().data()); } else { fprintf(stderr, "LOG: %s\n", message.toLatin1().constData()); } @@ -403,7 +394,8 @@ void Location::internalError(const QString &hint) Location::null.fatal(tr("Internal error (%1)").arg(hint), tr("There is a bug in %1. Seek advice from your local" " %2 guru.") - .arg(programName).arg(programName)); + .arg(programName) + .arg(programName)); } /*! @@ -411,13 +403,9 @@ void Location::internalError(const QString &hint) and outputs that string to \c stderr. \a type specifies whether the \a message is an error or a warning. */ -void Location::emitMessage(MessageType type, - const QString &message, - const QString &details) const +void Location::emitMessage(MessageType type, const QString &message, const QString &details) const { - if (type == Warning && - spuriousRegExp != nullptr && - spuriousRegExp->exactMatch(message)) + if (type == Warning && spuriousRegExp != nullptr && spuriousRegExp->exactMatch(message)) return; QString result = message; diff --git a/src/qdoc/location.h b/src/qdoc/location.h index 7a472ab5a..9ad601e1b 100644 --- a/src/qdoc/location.h +++ b/src/qdoc/location.h @@ -55,7 +55,11 @@ public: void start(); void advance(QChar ch); - void advanceLines(int n) { stkTop->lineNo += n; stkTop->columnNo = 1; } + void advanceLines(int n) + { + stkTop->lineNo += n; + stkTop->columnNo = 1; + } void push(const QString &filePath); void pop(); @@ -71,14 +75,10 @@ public: int lineNo() const { return stkTop->lineNo; } int columnNo() const { return stkTop->columnNo; } bool etc() const { return etcetera; } - void warning(const QString &message, - const QString &details = QString()) const; - void error(const QString &message, - const QString &details = QString()) const; - void fatal(const QString &message, - const QString &details = QString()) const; - void report(const QString &message, - const QString &details = QString()) const; + void warning(const QString &message, const QString &details = QString()) const; + void error(const QString &message, const QString &details = QString()) const; + void fatal(const QString &message, const QString &details = QString()) const; + void report(const QString &message, const QString &details = QString()) const; static const Location null; @@ -104,9 +104,7 @@ private: }; friend class QTypeInfo<StackEntry>; - void emitMessage(MessageType type, - const QString &message, - const QString &details) const; + void emitMessage(MessageType type, const QString &message, const QString &details) const; QString toString() const; QString top() const; diff --git a/src/qdoc/main.cpp b/src/qdoc/main.cpp index 1accb6449..2b2b7a6f8 100644 --- a/src/qdoc/main.cpp +++ b/src/qdoc/main.cpp @@ -56,7 +56,7 @@ #include <QtCore/qhashfunctions.h> #ifndef QT_BOOTSTRAPPED -# include <QtCore/qcoreapplication.h> +# include <QtCore/qcoreapplication.h> #endif #include <algorithm> @@ -76,7 +76,7 @@ typedef QPair<QString, QTranslator *> Translator; static QVector<Translator> translators; #endif -static ClangCodeParser* clangParser_ = nullptr; +static ClangCodeParser *clangParser_ = nullptr; /*! Read some XML indexes containing definitions from other @@ -108,8 +108,7 @@ static void loadIndexFiles(Config &config, const QSet<QString> &formats) for (const auto &format : formats) { if (config.getBool(format + Config::dot + "nosubdirs")) { useNoSubDirs = true; - QString singleOutputSubdir = - config.getString(format + Config::dot + "outputsubdir"); + QString singleOutputSubdir = config.getString(format + Config::dot + "outputsubdir"); if (singleOutputSubdir.isEmpty()) singleOutputSubdir = "html"; subDirs << singleOutputSubdir; @@ -118,9 +117,10 @@ static void loadIndexFiles(Config &config, const QSet<QString> &formats) if (config.dependModules().size() > 0) { if (config.indexDirs().size() > 0) { - for (auto &dir : config.indexDirs()){ + for (auto &dir : config.indexDirs()) { if (dir.startsWith("..")) { - const QString prefix(QDir(config.currentDir()).relativeFilePath(config.previousCurrentDir())); + const QString prefix(QDir(config.currentDir()) + .relativeFilePath(config.previousCurrentDir())); if (!prefix.isEmpty()) dir.prepend(prefix + QLatin1Char('/')); } @@ -137,16 +137,15 @@ static void loadIndexFiles(Config &config, const QSet<QString> &formats) config.dependModules().removeOne("*"); asteriskUsed = true; if (useNoSubDirs) { - std::for_each(formats.begin(), formats.end(), - [&](const QString &format) { - QDir scanDir(config.getOutputDir(format)); - QStringList foundModules = scanDir.entryList(QStringList("*.index"), QDir::Files); - std::transform(foundModules.begin(), foundModules.end(), foundModules.begin(), - [](const QString &index) { - return QFileInfo(index).baseName(); - }); - config.dependModules() << foundModules; - }); + std::for_each(formats.begin(), formats.end(), [&](const QString &format) { + QDir scanDir(config.getOutputDir(format)); + QStringList foundModules = + scanDir.entryList(QStringList("*.index"), QDir::Files); + std::transform( + foundModules.begin(), foundModules.end(), foundModules.begin(), + [](const QString &index) { return QFileInfo(index).baseName(); }); + config.dependModules() << foundModules; + }); } else { for (const auto &indexDir : config.indexDirs()) { QDir scanDir = QDir(indexDir); @@ -160,7 +159,8 @@ static void loadIndexFiles(Config &config, const QSet<QString> &formats) config.dependModules().removeAll(config.getString(CONFIG_PROJECT).toLower()); config.dependModules().removeDuplicates(); Location::logToStdErrAlways(QString("qdocconf file has depends = *;" - " loading all %1 index files found").arg(config.dependModules().count())); + " loading all %1 index files found") + .arg(config.dependModules().count())); } for (const auto &module : config.dependModules()) { QVector<QFileInfo> foundIndices; @@ -170,8 +170,8 @@ static void loadIndexFiles(Config &config, const QSet<QString> &formats) for (const auto &dir : config.indexDirs()) { for (const auto &subDir : subDirs) { - QString fileToLookFor = dir + QLatin1Char('/') + subDir - + QLatin1Char('/') + module + ".index"; + QString fileToLookFor = dir + QLatin1Char('/') + subDir + QLatin1Char('/') + + module + ".index"; if (QFile::exists(fileToLookFor)) { QFileInfo tempFileInfo(fileToLookFor); if (!foundIndices.contains(tempFileInfo)) @@ -194,28 +194,30 @@ static void loadIndexFiles(Config &config, const QSet<QString> &formats) indexPaths.reserve(foundIndices.size()); for (const auto &found : qAsConst(foundIndices)) indexPaths << found.absoluteFilePath(); - Location::null.warning(QString("Multiple index files found for dependency \"%1\":\n%2").arg( - module, indexPaths.join('\n'))); - Location::null.warning(QString("Using %1 as index file for dependency \"%2\"").arg( - foundIndices[foundIndices.size() - 1].absoluteFilePath(), - module)); + Location::null.warning( + QString("Multiple index files found for dependency \"%1\":\n%2") + .arg(module, indexPaths.join('\n'))); + Location::null.warning( + QString("Using %1 as index file for dependency \"%2\"") + .arg(foundIndices[foundIndices.size() - 1].absoluteFilePath(), + module)); indexToAdd = foundIndices[foundIndices.size() - 1].absoluteFilePath(); - } - else if (foundIndices.size() == 1) { + } else if (foundIndices.size() == 1) { indexToAdd = foundIndices[0].absoluteFilePath(); } if (!indexToAdd.isEmpty()) { if (!indexFiles.contains(indexToAdd)) indexFiles << indexToAdd; - } - else if (!asteriskUsed) { - Location::null.warning(QString("\"%1\" Cannot locate index file for dependency \"%2\"").arg( - config.getString(CONFIG_PROJECT), module)); + } else if (!asteriskUsed) { + Location::null.warning( + QString("\"%1\" Cannot locate index file for dependency \"%2\"") + .arg(config.getString(CONFIG_PROJECT), module)); } } - } - else { - Location::null.warning(QLatin1String("Dependent modules specified, but no index directories were set. There will probably be errors for missing links.")); + } else { + Location::null.warning( + QLatin1String("Dependent modules specified, but no index directories were set. " + "There will probably be errors for missing links.")); } } qdb->readIndexes(indexFiles); @@ -243,7 +245,8 @@ static void processQdocconfFile(const QString &fileName, Config &config) config.load(fileName); QString project = config.getString(CONFIG_PROJECT); if (project.isEmpty()) { - Location::logToStdErrAlways(QLatin1String("qdoc can't run; no project set in qdocconf file")); + Location::logToStdErrAlways( + QLatin1String("qdoc can't run; no project set in qdocconf file")); exit(1); } Location::terminate(); @@ -302,9 +305,10 @@ static void processQdocconfFile(const QString &fileName, Config &config) if (!found) { QTranslator *translator = new QTranslator(nullptr); if (!translator->load(fileName)) { - config.lastLocation().error(QCoreApplication::translate("QDoc", "Cannot load translator '%1'").arg(fileName)); - } - else { + config.lastLocation().error( + QCoreApplication::translate("QDoc", "Cannot load translator '%1'") + .arg(fileName)); + } else { QCoreApplication::instance()->installTranslator(translator); translators.append(Translator(fileName, translator)); } @@ -347,8 +351,7 @@ static void processQdocconfFile(const QString &fileName, Config &config) qCDebug(lcQdoc, " done loading index files"); } qdb->newPrimaryTree(project); - } - else if (Generator::preparing()) + } else if (Generator::preparing()) qdb->newPrimaryTree(project); else qdb->setPrimaryTree(project); @@ -369,18 +372,16 @@ static void processQdocconfFile(const QString &fileName, Config &config) // Store the title of the index (landing) page NamespaceNode *root = qdb->primaryTreeRoot(); if (root) { - QString title = config.getString(CONFIG_NAVIGATION - + Config::dot - + CONFIG_LANDINGPAGE); - root->tree()->setIndexTitle(config.getString(CONFIG_NAVIGATION - + Config::dot - + CONFIG_LANDINGTITLE, title)); + QString title = config.getString(CONFIG_NAVIGATION + Config::dot + CONFIG_LANDINGPAGE); + root->tree()->setIndexTitle( + config.getString(CONFIG_NAVIGATION + Config::dot + CONFIG_LANDINGTITLE, title)); } const auto &excludedDirList = config.getCanonicalPathList(CONFIG_EXCLUDEDIRS); QSet<QString> excludedDirs = QSet<QString>(excludedDirList.cbegin(), excludedDirList.cend()); const auto &excludedFilesList = config.getCanonicalPathList(CONFIG_EXCLUDEFILES); - QSet<QString> excludedFiles = QSet<QString>(excludedFilesList.cbegin(), excludedFilesList.cend()); + QSet<QString> excludedFiles = + QSet<QString>(excludedFilesList.cbegin(), excludedFilesList.cend()); qCDebug(lcQdoc, "Adding doc/image dirs found in exampledirs to imagedirs"); QSet<QString> exampleImageDirs; @@ -399,7 +400,8 @@ static void processQdocconfFile(const QString &fileName, Config &config) QStringList sourceList; qCDebug(lcQdoc, "Reading headerdirs"); - headerList = config.getAllFiles(CONFIG_HEADERS,CONFIG_HEADERDIRS, excludedDirs, excludedFiles); + headerList = + config.getAllFiles(CONFIG_HEADERS, CONFIG_HEADERDIRS, excludedDirs, excludedFiles); QMap<QString, QString> headers; QMultiMap<QString, QString> headerFileNames; for (const auto &header : headerList) { @@ -413,7 +415,8 @@ static void processQdocconfFile(const QString &fileName, Config &config) } qCDebug(lcQdoc, "Reading sourcedirs"); - sourceList = config.getAllFiles(CONFIG_SOURCES,CONFIG_SOURCEDIRS, excludedDirs, excludedFiles); + sourceList = + config.getAllFiles(CONFIG_SOURCES, CONFIG_SOURCEDIRS, excludedDirs, excludedFiles); QMap<QString, QString> sources; QMultiMap<QString, QString> sourceFileNames; for (const auto &source : sourceList) { @@ -491,8 +494,8 @@ static void processQdocconfFile(const QString &fileName, Config &config) for (const auto &format : outputFormats) { auto *generator = Generator::generatorForFormat(format); if (generator == nullptr) - outputFormatsLocation.fatal(QCoreApplication::translate("QDoc", - "Unknown output format '%1'").arg(format)); + outputFormatsLocation.fatal( + QCoreApplication::translate("QDoc", "Unknown output format '%1'").arg(format)); generator->initializeFormat(config); generator->generateDocs(); } diff --git a/src/qdoc/node.cpp b/src/qdoc/node.cpp index a1df93cb8..65c75e743 100644 --- a/src/qdoc/node.cpp +++ b/src/qdoc/node.cpp @@ -130,21 +130,21 @@ bool Node::changeType(NodeType from, NodeType to) if (nodeType_ == from) { nodeType_ = to; switch (to) { - case QmlType: - case QmlModule: - case QmlProperty: - case QmlBasicType: - setGenus(Node::QML); - break; - case JsType: - case JsModule: - case JsProperty: - case JsBasicType: - setGenus(Node::JS); - break; - default: - setGenus(Node::CPP); - break; + case QmlType: + case QmlModule: + case QmlProperty: + case QmlBasicType: + setGenus(Node::QML); + break; + case JsType: + case JsModule: + case JsProperty: + case JsBasicType: + setGenus(Node::JS); + break; + default: + setGenus(Node::CPP); + break; } return true; } @@ -158,8 +158,8 @@ bool Node::changeType(NodeType from, NodeType to) */ bool Node::nodeNameLessThan(const Node *n1, const Node *n2) { -#define LT_RETURN_IF_NOT_EQUAL(a, b) \ - if ((a) != (b)) \ +#define LT_RETURN_IF_NOT_EQUAL(a, b) \ + if ((a) != (b)) \ return (a) < (b); if (n1->isPageNode() && n2->isPageNode()) { @@ -661,7 +661,7 @@ QString Node::fullName(const Node *relative) const */ bool Node::match(const QVector<int> &types) const { - for (int i=0; i<types.size(); ++i) { + for (int i = 0; i < types.size(); ++i) { if (nodeType() == types.at(i)) return true; } @@ -721,8 +721,8 @@ Node::Node(NodeType type, Aggregate *parent, const QString &name) operators_.insert("&=", "bitwise-and-assign"); operators_.insert("|=", "bitwise-or-assign"); operators_.insert("^=", "bitwise-xor-assign"); - operators_.insert("<<=" ,"bitwise-left-shift-assign"); - operators_.insert(">>=" ,"bitwise-right-shift-assign"); + operators_.insert("<<=", "bitwise-left-shift-assign"); + operators_.insert(">>=", "bitwise-right-shift-assign"); operators_.insert("||", "logical-or"); operators_.insert("&&", "logical-and"); operators_.insert("()", "call"); @@ -761,38 +761,38 @@ Node::Node(NodeType type, Aggregate *parent, const QString &name) Node::PageType Node::getPageType(Node::NodeType t) { switch (t) { - case Node::Namespace: - case Node::Class: - case Node::Struct: - case Node::Union: - case Node::HeaderFile: - case Node::Enum: - case Node::Function: - case Node::Typedef: - case Node::Property: - case Node::Variable: - case Node::QmlType: - case Node::QmlProperty: - case Node::QmlBasicType: - case Node::JsType: - case Node::JsProperty: - case Node::JsBasicType: - case Node::SharedComment: - return Node::ApiPage; - case Node::Example: - return Node::ExamplePage; - case Node::Page: - case Node::ExternalPage: - return Node::NoPageType; - case Node::Group: - case Node::Module: - case Node::QmlModule: - case Node::JsModule: - case Node::Collection: - return Node::OverviewPage; - case Node::Proxy: - default: - return Node::NoPageType; + case Node::Namespace: + case Node::Class: + case Node::Struct: + case Node::Union: + case Node::HeaderFile: + case Node::Enum: + case Node::Function: + case Node::Typedef: + case Node::Property: + case Node::Variable: + case Node::QmlType: + case Node::QmlProperty: + case Node::QmlBasicType: + case Node::JsType: + case Node::JsProperty: + case Node::JsBasicType: + case Node::SharedComment: + return Node::ApiPage; + case Node::Example: + return Node::ExamplePage; + case Node::Page: + case Node::ExternalPage: + return Node::NoPageType; + case Node::Group: + case Node::Module: + case Node::QmlModule: + case Node::JsModule: + case Node::Collection: + return Node::OverviewPage; + case Node::Proxy: + default: + return Node::NoPageType; } } @@ -808,38 +808,38 @@ Node::PageType Node::getPageType(Node::NodeType t) Node::Genus Node::getGenus(Node::NodeType t) { switch (t) { - case Node::Enum: - case Node::Class: - case Node::Struct: - case Node::Union: - case Node::Module: - case Node::Typedef: - case Node::Property: - case Node::Variable: - case Node::Function: - case Node::Namespace: - case Node::HeaderFile: - return Node::CPP; - case Node::QmlType: - case Node::QmlModule: - case Node::QmlProperty: - case Node::QmlBasicType: - return Node::QML; - case Node::JsType: - case Node::JsModule: - case Node::JsProperty: - case Node::JsBasicType: - return Node::JS; - case Node::Page: - case Node::Group: - case Node::Example: - case Node::ExternalPage: - return Node::DOC; - case Node::Collection: - case Node::SharedComment: - case Node::Proxy: - default: - return Node::DontCare; + case Node::Enum: + case Node::Class: + case Node::Struct: + case Node::Union: + case Node::Module: + case Node::Typedef: + case Node::Property: + case Node::Variable: + case Node::Function: + case Node::Namespace: + case Node::HeaderFile: + return Node::CPP; + case Node::QmlType: + case Node::QmlModule: + case Node::QmlProperty: + case Node::QmlBasicType: + return Node::QML; + case Node::JsType: + case Node::JsModule: + case Node::JsProperty: + case Node::JsBasicType: + return Node::JS; + case Node::Page: + case Node::Group: + case Node::Example: + case Node::ExternalPage: + return Node::DOC; + case Node::Collection: + case Node::SharedComment: + case Node::Proxy: + default: + return Node::DontCare; } } @@ -1079,19 +1079,16 @@ QString Node::accessString() const QString Node::extractClassName(const QString &string) const { QString result; - for (int i=0; i<=string.size(); ++i) { + for (int i = 0; i <= string.size(); ++i) { QChar ch; if (i != string.size()) ch = string.at(i); QChar lower = ch.toLower(); - if ((lower >= QLatin1Char('a') && lower <= QLatin1Char('z')) || - ch.digitValue() >= 0 || - ch == QLatin1Char('_') || - ch == QLatin1Char(':')) { + if ((lower >= QLatin1Char('a') && lower <= QLatin1Char('z')) || ch.digitValue() >= 0 + || ch == QLatin1Char('_') || ch == QLatin1Char(':')) { result += ch; - } - else if (!result.isEmpty()) { + } else if (!result.isEmpty()) { if (result != QLatin1String("const")) return result; result.clear(); @@ -1126,7 +1123,6 @@ Node::ThreadSafeness Node::inheritedThreadSafeness() const return safeness_; } - /*! If this node is a QML or JS type node, return a pointer to it. If it is a child of a QML or JS type node, return the @@ -1193,7 +1189,7 @@ Aggregate *Node::root() const /*! Returns a pointer to the Tree this node is in. */ -Tree* Node::tree() const +Tree *Node::tree() const { return root()->tree(); } @@ -1203,7 +1199,7 @@ Tree* Node::tree() const location, or both, depending on the suffix of the file name from the file path in location \a t. */ -void Node::setLocation(const Location& t) +void Node::setLocation(const Location &t) { QString suffix = t.fileSuffix(); if (suffix == "h") @@ -1247,7 +1243,6 @@ QString Node::qualifyWithParentName() return name_; } - /*! Returns the QML node's qualified name by stripping off the "QML:" if present and prepending the logical module name. @@ -1344,58 +1339,41 @@ QString Node::cleanId(const QString &str) const QChar c = name[0]; const uint u = c.unicode(); - if ((u >= 'a' && u <= 'z') || - (u >= 'A' && u <= 'Z') || - (u >= '0' && u <= '9')) { + if ((u >= 'a' && u <= 'z') || (u >= 'A' && u <= 'Z') || (u >= '0' && u <= '9')) { clean += c; - } - else if (u == '~') { + } else if (u == '~') { clean += "dtor."; - } - else if (u == '_') { + } else if (u == '_') { clean += "underscore."; - } - else { + } else { clean += QLatin1Char('a'); } for (int i = 1; i < name.length(); i++) { const QChar c = name[i]; const uint u = c.unicode(); - if ((u >= 'a' && u <= 'z') || - (u >= 'A' && u <= 'Z') || - (u >= '0' && u <= '9') || u == '-' || - u == '_' || u == '.') { + if ((u >= 'a' && u <= 'z') || (u >= 'A' && u <= 'Z') || (u >= '0' && u <= '9') || u == '-' + || u == '_' || u == '.') { clean += c; - } - else if (c.isSpace() || u == ':' ) { + } else if (c.isSpace() || u == ':') { clean += QLatin1Char('-'); - } - else if (u == '!') { + } else if (u == '!') { clean += "-not"; - } - else if (u == '&') { + } else if (u == '&') { clean += "-and"; - } - else if (u == '<') { + } else if (u == '<') { clean += "-lt"; - } - else if (u == '=') { + } else if (u == '=') { clean += "-eq"; - } - else if (u == '>') { + } else if (u == '>') { clean += "-gt"; - } - else if (u == '#') { + } else if (u == '#') { clean += "-hash"; - } - else if (u == '(') { + } else if (u == '(') { clean += QLatin1Char('-'); - } - else if (u == ')') { + } else if (u == ')') { clean += QLatin1Char('-'); - } - else { + } else { clean += QLatin1Char('-'); clean += QString::number((int)u, 16); } @@ -2007,13 +1985,9 @@ Node *Aggregate::findChildNode(const QString &name, Node::Genus genus, int findF Node *node = nodes.at(i); if (genus == node->genus()) { if (findFlags & TypesOnly) { - if (!node->isTypedef() - && !node->isClassNode() - && !node->isQmlType() - && !node->isQmlBasicType() - && !node->isJsType() - && !node->isJsBasicType() - && !node->isEnumType()) + if (!node->isTypedef() && !node->isClassNode() && !node->isQmlType() + && !node->isQmlBasicType() && !node->isJsType() + && !node->isJsBasicType() && !node->isEnumType()) continue; } else if (findFlags & IgnoreModules && node->isModule()) continue; @@ -2053,8 +2027,8 @@ void Aggregate::findChildren(const QString &name, NodeVector &nodes) const nodes.reserve(nonfunctionCount); } if (nonfunctionCount > 0) { - for (auto it = nonfunctionMap_.find(name); - it != nonfunctionMap_.end() && it.key() == name; ++it) { + for (auto it = nonfunctionMap_.find(name); it != nonfunctionMap_.end() && it.key() == name; + ++it) { nodes.append(it.value()); } } @@ -2067,10 +2041,10 @@ void Aggregate::findChildren(const QString &name, NodeVector &nodes) const passed must be one of the isXxx() functions in class Node that tests the node type. */ -Node *Aggregate::findNonfunctionChild(const QString &name, bool (Node::*isMatch) () const) +Node *Aggregate::findNonfunctionChild(const QString &name, bool (Node::*isMatch)() const) { NodeList nodes = nonfunctionMap_.values(name); - for (int i=0; i<nodes.size(); ++i) { + for (int i = 0; i < nodes.size(); ++i) { Node *node = nodes.at(i); if ((node->*(isMatch))()) return node; @@ -2540,7 +2514,7 @@ void Aggregate::printChildren(const QString &title) { qDebug() << title << name() << children_.size(); if (children_.size() > 0) { - for (int i=0; i<children_.size(); ++i) { + for (int i = 0; i < children_.size(); ++i) { Node *n = children_.at(i); qDebug() << " CHILD:" << n->name() << n->nodeTypeString(); } @@ -2570,8 +2544,7 @@ void Aggregate::removeFunctionNode(FunctionNode *fn) it.value() = fn->nextOverload(); fn->setNextOverload(nullptr); fn->setOverloadNumber(0); - } - else { + } else { functionMap_.erase(it); } } else { @@ -2599,11 +2572,7 @@ void Aggregate::removeFunctionNode(FunctionNode *fn) */ static bool keep(FunctionNode *fn) { - if (fn->isPrivate() || - fn->isObsolete() || - fn->isInternal() || - fn->isSomeCtor() || - fn->isDtor()) + if (fn->isPrivate() || fn->isObsolete() || fn->isInternal() || fn->isSomeCtor() || fn->isDtor()) return false; return true; } @@ -2668,9 +2637,9 @@ bool Aggregate::hasObsoleteMembers() const { for (const auto *node : children_) { if (!node->isPrivate() && node->isObsolete()) { - if (node->isFunction() || node->isProperty() || node->isEnumType() || - node->isTypedef() || node->isTypeAlias() || node->isVariable() || - node->isQmlProperty() || node->isJsProperty()) + if (node->isFunction() || node->isProperty() || node->isEnumType() || node->isTypedef() + || node->isTypeAlias() || node->isVariable() || node->isQmlProperty() + || node->isJsProperty()) return true; } } @@ -2700,7 +2669,8 @@ void Aggregate::findAllObsoleteThings() } else if (node->isQmlType() || node->isJsType()) { Aggregate *a = static_cast<Aggregate *>(node); if (a->hasObsoleteMembers()) - QDocDatabase::qmlTypesWithObsoleteMembers().insert(node->qualifyQmlName(), node); + QDocDatabase::qmlTypesWithObsoleteMembers().insert(node->qualifyQmlName(), + node); } else if (node->isAggregate()) { static_cast<Aggregate *>(node)->findAllObsoleteThings(); } @@ -2716,14 +2686,15 @@ void Aggregate::findAllObsoleteThings() void Aggregate::findAllClasses() { for (auto *node : qAsConst(children_)) { - if (!node->isPrivate() && !node->isInternal() && - node->tree()->camelCaseModuleName() != QString("QDoc")) { + if (!node->isPrivate() && !node->isInternal() + && node->tree()->camelCaseModuleName() != QString("QDoc")) { if (node->isClassNode()) { QDocDatabase::cppClasses().insert(node->qualifyCppName().toLower(), node); - } else if (node->isQmlType() || node->isQmlBasicType() || node->isJsType() || node->isJsBasicType()) { + } else if (node->isQmlType() || node->isQmlBasicType() || node->isJsType() + || node->isJsBasicType()) { QString name = node->unqualifyQmlName(); QDocDatabase::qmlTypes().insert(name, node); - //also add to the QML basic type map + // also add to the QML basic type map if (node->isQmlBasicType() || node->isJsBasicType()) QDocDatabase::qmlBasicTypes().insert(name, node); } else if (node->isExample()) { @@ -2785,8 +2756,7 @@ void Aggregate::findAllSince() FunctionNode *fn = static_cast<FunctionNode *>(node); if (!fn->isObsolete() && !fn->isSomeCtor() && !fn->isDtor()) nsmap.value().insert(fn->name(), fn); - } - else if (node->isClassNode()) { + } else if (node->isClassNode()) { // Insert classes into the since and class maps. QString name = node->qualifyWithParentName(); nsmap.value().insert(name, node); @@ -2837,7 +2807,7 @@ void Aggregate::resolveQmlInheritance() } else { if (!type->importList().isEmpty()) { const ImportList &imports = type->importList(); - for (int i=0; i<imports.size(); ++i) { + for (int i = 0; i < imports.size(); ++i) { base = QDocDatabase::qdocDB()->findQmlType(imports[i], type->qmlBaseName()); if (base && (base != type)) { if (base->logicalModuleVersion()[0] != imports[i].version_[0]) @@ -2966,8 +2936,7 @@ void ClassNode::removePrivateAndInternalBases() bases_.removeAt(i); ignoredBases_.append(rc); promotePublicBases(bc->baseClasses()); - } - else { + } else { ++i; } found.insert(bc); @@ -2981,8 +2950,7 @@ void ClassNode::removePrivateAndInternalBases() const QVector<RelatedClass> &dd = dc->derivedClasses(); for (int j = dd.size() - 1; j >= 0; --j) derived_.insert(i, dd.at(j)); - } - else { + } else { ++i; } } @@ -3000,8 +2968,7 @@ void ClassNode::resolvePropertyOverriddenFromPtrs(PropertyNode *pn) PropertyNode *baseProperty = static_cast<PropertyNode *>(n); cn->resolvePropertyOverriddenFromPtrs(baseProperty); pn->setOverriddenFrom(baseProperty); - } - else + } else cn->resolvePropertyOverriddenFromPtrs(pn); } } @@ -3099,8 +3066,12 @@ void NamespaceNode::reportDocumentedChildrenInUndocumentedNamespace() const QString msg1 = node->name(); if (node->isFunction()) msg1 += "()"; - msg1 += tr(" is documented, but namespace %1 is not documented in any module.").arg(name()); - QString msg2 = tr("Add /*! '\\%1 %2' ... */ or remove the qdoc comment marker (!) at that line number.").arg(COMMAND_NAMESPACE).arg(name()); + msg1 += tr(" is documented, but namespace %1 is not documented in any module.") + .arg(name()); + QString msg2 = tr("Add /*! '\\%1 %2' ... */ or remove the qdoc comment marker (!) at " + "that line number.") + .arg(COMMAND_NAMESPACE) + .arg(name()); node->doc().location().warning(msg1, msg2); } @@ -3346,8 +3317,7 @@ void ClassNode::addDerivedClass(Access access, ClassNode *node) before the generate phase of qdoc. In an unresolved base class, the pointer to the base class node is 0. */ -void ClassNode::addUnresolvedBaseClass(Access access, - const QStringList &path, +void ClassNode::addUnresolvedBaseClass(Access access, const QStringList &path, const QString &signature) { bases_.append(RelatedClass(access, path, signature)); @@ -3454,7 +3424,8 @@ FunctionNode *ClassNode::findOverriddenFunction(const FunctionNode *fn) } if (cn != nullptr) { FunctionNode *result = cn->findFunctionChild(fn); - if (result != nullptr && !result->isInternal() && !result->isNonvirtual() && result->hasDoc()) + if (result != nullptr && !result->isInternal() && !result->isNonvirtual() + && result->hasDoc()) return result; result = cn->findOverriddenFunction(fn); if (result != nullptr && !result->isNonvirtual()) @@ -3716,7 +3687,7 @@ bool PageNode::setTitle(const QString &title) /*! Add \a item to the enum type's item list. */ -void EnumNode::addItem(const EnumItem& item) +void EnumNode::addItem(const EnumItem &item) { items_.append(item); names_.insert(item.name()); @@ -3987,27 +3958,27 @@ static void buildTopicMetanessMap() Node::Genus FunctionNode::getGenus(FunctionNode::Metaness t) { switch (t) { - case FunctionNode::Plain: - case FunctionNode::Signal: - case FunctionNode::Slot: - case FunctionNode::Ctor: - case FunctionNode::Dtor: - case FunctionNode::CCtor: - case FunctionNode::MCtor: - case FunctionNode::MacroWithParams: - case FunctionNode::MacroWithoutParams: - case FunctionNode::Native: - case FunctionNode::CAssign: - case FunctionNode::MAssign: - return Node::CPP; - case FunctionNode::QmlSignal: - case FunctionNode::QmlSignalHandler: - case FunctionNode::QmlMethod: - return Node::QML; - case FunctionNode::JsSignal: - case FunctionNode::JsSignalHandler: - case FunctionNode::JsMethod: - return Node::JS; + case FunctionNode::Plain: + case FunctionNode::Signal: + case FunctionNode::Slot: + case FunctionNode::Ctor: + case FunctionNode::Dtor: + case FunctionNode::CCtor: + case FunctionNode::MCtor: + case FunctionNode::MacroWithParams: + case FunctionNode::MacroWithoutParams: + case FunctionNode::Native: + case FunctionNode::CAssign: + case FunctionNode::MAssign: + return Node::CPP; + case FunctionNode::QmlSignal: + case FunctionNode::QmlSignalHandler: + case FunctionNode::QmlMethod: + return Node::QML; + case FunctionNode::JsSignal: + case FunctionNode::JsSignalHandler: + case FunctionNode::JsMethod: + return Node::JS; } return Node::DontCare; } @@ -4066,19 +4037,19 @@ bool FunctionNode::changeMetaness(Metaness from, Metaness to) if (metaness_ == from) { metaness_ = to; switch (to) { - case QmlSignal: - case QmlSignalHandler: - case QmlMethod: - setGenus(Node::QML); - break; - case JsSignal: - case JsSignalHandler: - case JsMethod: - setGenus(Node::JS); - break; - default: - setGenus(Node::CPP); - break; + case QmlSignal: + case QmlSignalHandler: + case QmlMethod: + setGenus(Node::QML); + break; + case JsSignal: + case JsSignalHandler: + case JsMethod: + setGenus(Node::JS); + break; + default: + setGenus(Node::CPP); + break; } return true; } @@ -4157,20 +4128,20 @@ FunctionNode *FunctionNode::findPrimaryFunction() QString FunctionNode::kindString() const { switch (metaness_) { - case FunctionNode::QmlSignal: - return "QML signal"; - case FunctionNode::QmlSignalHandler: - return "QML signal handler"; - case FunctionNode::QmlMethod: - return "QML method"; - case FunctionNode::JsSignal: - return "JS signal"; - case FunctionNode::JsSignalHandler: - return "JS signal handler"; - case FunctionNode::JsMethod: - return "JS method"; - default: - return "function"; + case FunctionNode::QmlSignal: + return "QML signal"; + case FunctionNode::QmlSignalHandler: + return "QML signal handler"; + case FunctionNode::QmlMethod: + return "QML method"; + case FunctionNode::JsSignal: + return "JS signal"; + case FunctionNode::JsSignalHandler: + return "JS signal handler"; + case FunctionNode::JsMethod: + return "JS method"; + default: + return "function"; } } @@ -4283,9 +4254,9 @@ QString FunctionNode::signature(bool values, bool noReturnType) const */ PropertyNode::FunctionRole PropertyNode::role(const FunctionNode *fn) const { - for (int i=0; i<4; i++) { + for (int i = 0; i < 4; i++) { if (functions_[i].contains(const_cast<FunctionNode *>(fn))) - return (FunctionRole) i; + return (FunctionRole)i; } return Notifier; } @@ -4307,8 +4278,8 @@ Node *VariableNode::clone(Aggregate *parent) */ void FunctionNode::debug() const { - qDebug("QML METHOD %s returnType_ %s parentPath_ %s", - qPrintable(name()), qPrintable(returnType_), qPrintable(parentPath_.join(' '))); + qDebug("QML METHOD %s returnType_ %s parentPath_ %s", qPrintable(name()), + qPrintable(returnType_), qPrintable(parentPath_.join(' '))); } /*! @@ -4358,11 +4329,9 @@ bool FunctionNode::compare(const FunctionNode *fn) const bool FunctionNode::isIgnored() const { if (!hasDoc() && !hasSharedDoc()) { - if (name().startsWith(QLatin1String("qt_")) || - name() == QLatin1String("metaObject") || - name() == QLatin1String("tr") || - name() == QLatin1String("trUtf8") || - name() == QLatin1String("d_func")) { + if (name().startsWith(QLatin1String("qt_")) || name() == QLatin1String("metaObject") + || name() == QLatin1String("tr") || name() == QLatin1String("trUtf8") + || name() == QLatin1String("d_func")) { return true; } QString s = signature(false, false); @@ -4458,16 +4427,14 @@ QString PropertyNode::qualifiedDataType() const if (type_.contains(QLatin1Char('*')) || type_.contains(QLatin1Char('&'))) { // 'QWidget *' becomes 'QWidget *' const return type_ + " const"; - } - else { + } else { /* 'int' becomes 'const int' ('int const' is correct C++, but looks wrong) */ return "const " + type_; } - } - else { + } else { return type_; } } @@ -4554,7 +4521,6 @@ void QmlTypeNode::subclasses(const Node *base, NodeList &subs) } } - /*! If this QML type node has a base type node, return the fully qualified name of that QML @@ -4628,9 +4594,7 @@ QmlBasicTypeNode::QmlBasicTypeNode(Aggregate *parent, const QString &name, Node: /*! Constructor for the QML property node. */ -QmlPropertyNode::QmlPropertyNode(Aggregate *parent, - const QString &name, - const QString &type, +QmlPropertyNode::QmlPropertyNode(Aggregate *parent, const QString &name, const QString &type, bool attached) : Node(parent->isJsType() ? JsProperty : QmlProperty, parent, name), type_(type), @@ -4672,16 +4636,20 @@ bool QmlPropertyNode::isWritable() if (pn) return pn->isWritable(); else - defLocation().warning(tr("No Q_PROPERTY for QML property %1::%2::%3 " - "in C++ class documented as QML type: " - "(property not found in the C++ class or its base classes)") - .arg(logicalModuleName()).arg(qmlTypeName()).arg(name())); - } - else + defLocation().warning( + tr("No Q_PROPERTY for QML property %1::%2::%3 " + "in C++ class documented as QML type: " + "(property not found in the C++ class or its base classes)") + .arg(logicalModuleName()) + .arg(qmlTypeName()) + .arg(name())); + } else defLocation().warning(tr("No Q_PROPERTY for QML property %1::%2::%3 " "in C++ class documented as QML type: " "(C++ class not specified or not found).") - .arg(logicalModuleName()).arg(qmlTypeName()).arg(name())); + .arg(logicalModuleName()) + .arg(qmlTypeName()) + .arg(name())); } } return true; @@ -4729,8 +4697,7 @@ PropertyNode *QmlPropertyNode::findCorrespondingCppProperty() */ return (pn2 ? pn2 : pn); } - } - else + } else return pn; } } @@ -4767,8 +4734,7 @@ PropertyNode *QmlPropertyNode::findCorrespondingCppProperty() appends this node to that Tree's proxy list so it will be easy to find later. */ -ProxyNode::ProxyNode(Aggregate *parent, const QString &name) - : Aggregate(Node::Proxy, parent, name) +ProxyNode::ProxyNode(Aggregate *parent, const QString &name) : Aggregate(Node::Proxy, parent, name) { tree()->appendProxy(this); } @@ -4841,7 +4807,7 @@ bool CollectionNode::hasClasses() const Loads \a out with all this collection node's members that are namespace nodes. */ -void CollectionNode::getMemberNamespaces(NodeMap& out) +void CollectionNode::getMemberNamespaces(NodeMap &out) { out.clear(); for (const auto &member : qAsConst(members_)) { @@ -4854,7 +4820,7 @@ void CollectionNode::getMemberNamespaces(NodeMap& out) Loads \a out with all this collection node's members that are class nodes. */ -void CollectionNode::getMemberClasses(NodeMap& out) const +void CollectionNode::getMemberClasses(NodeMap &out) const { out.clear(); for (const auto &i : qAsConst(members_)) { @@ -4944,7 +4910,6 @@ Node *SharedCommentNode::clone(Aggregate *parent) return scn; } - /*! Sets the related nonmember flag in this node and in each node in the shared comment's collective. diff --git a/src/qdoc/node.h b/src/qdoc/node.h index 6594df921..5a97d194a 100644 --- a/src/qdoc/node.h +++ b/src/qdoc/node.h @@ -124,12 +124,7 @@ public: ThreadSafe }; - enum LinkType : unsigned char { - StartLink, - NextLink, - PreviousLink, - ContentsLink - }; + enum LinkType : unsigned char { StartLink, NextLink, PreviousLink, ContentsLink }; enum PageType : unsigned char { NoPageType, @@ -144,13 +139,9 @@ public: OnBeyondZebra }; - enum FlagValue { - FlagValueDefault = -1, - FlagValueFalse = 0, - FlagValueTrue = 1 - }; + enum FlagValue { FlagValueDefault = -1, FlagValueFalse = 0, FlagValueTrue = 1 }; - virtual ~Node() { } + virtual ~Node() {} virtual Node *clone(Aggregate *) { return nullptr; } // currently only FunctionNode virtual Tree *tree() const; Aggregate *root() const; @@ -178,7 +169,8 @@ public: bool isEnumType() const { return nodeType_ == Enum; } bool isExample() const { return nodeType_ == Example; } bool isExternalPage() const { return nodeType_ == ExternalPage; } - bool isFunction(Genus g = DontCare) const { + bool isFunction(Genus g = DontCare) const + { return (nodeType_ != Function ? false : (genus() == g ? true : g == DontCare)); } bool isGroup() const { return nodeType_ == Group; } @@ -215,7 +207,10 @@ public: virtual bool isAbstract() const { return false; } virtual bool isAggregate() const { return false; } // means "can have children" - virtual bool isFirstClassAggregate() const { return false; } // Aggregate but not proxy or prop group" + virtual bool isFirstClassAggregate() const + { + return false; + } // Aggregate but not proxy or prop group" virtual bool isAlias() const { return false; } virtual bool isAttached() const { return false; } virtual bool isClassNode() const { return false; } @@ -237,7 +232,7 @@ public: QString plainFullName(const Node *relative = nullptr) const; QString plainSignature() const; QString fullName(const Node *relative = nullptr) const; - virtual QString signature(bool , bool ) const { return plainName(); } + virtual QString signature(bool, bool) const { return plainName(); } const QString &fileNameBase() const { return fileNameBase_; } bool hasFileNameBase() const { return !fileNameBase_.isEmpty(); } @@ -246,7 +241,8 @@ public: void setAccess(Access t) { access_ = t; } void setLocation(const Location &t); void setDoc(const Doc &doc, bool replace = false); - void setStatus(Status t) { + void setStatus(Status t) + { if (status_ == Obsolete && t == Deprecated) return; status_ = t; @@ -261,20 +257,20 @@ public: void setIndexNodeFlag(bool isIndexNode = true) { indexNodeFlag_ = isIndexNode; } void setHadDoc() { hadDoc_ = true; } virtual void setRelatedNonmember(bool b) { relatedNonmember_ = b; } - virtual void setOutputFileName(const QString &) { } - virtual void addMember(Node *) { } + virtual void setOutputFileName(const QString &) {} + virtual void addMember(Node *) {} virtual bool hasMembers() const { return false; } virtual bool hasNamespaces() const { return false; } virtual bool hasClasses() const { return false; } - virtual void setAbstract(bool ) { } - virtual void setWrapper() { } - virtual void getMemberNamespaces(NodeMap &) { } - virtual void getMemberClasses(NodeMap &) const { } - virtual void setDataType(const QString &) { } + virtual void setAbstract(bool) {} + virtual void setWrapper() {} + virtual void getMemberNamespaces(NodeMap &) {} + virtual void getMemberClasses(NodeMap &) const {} + virtual void setDataType(const QString &) {} virtual bool wasSeen() const { return false; } - virtual void appendGroupName(const QString &) { } + virtual void appendGroupName(const QString &) {} virtual QString element() const { return QString(); } - virtual void setNoAutoList(bool ) { } + virtual void setNoAutoList(bool) {} virtual bool docMustBeGenerated() const { return false; } virtual QString title() const { return name(); } @@ -283,9 +279,13 @@ public: virtual bool setTitle(const QString &) { return false; } virtual bool setSubtitle(const QString &) { return false; } - void markInternal() { setAccess(Private); setStatus(Internal); } - virtual void markDefault() { } - virtual void markReadOnly(bool ) { } + void markInternal() + { + setAccess(Private); + setStatus(Internal); + } + virtual void markDefault() {} + virtual void markReadOnly(bool) {} bool match(const QVector<int> &types) const; Aggregate *parent() const { return parent_; } @@ -295,19 +295,22 @@ public: virtual QString nameForLists() const { return name_; } virtual QString outputFileName() const { return QString(); } virtual QString obsoleteLink() const { return QString(); } - virtual void setObsoleteLink(const QString &) { } - virtual void setQtVariable(const QString &) { } + virtual void setObsoleteLink(const QString &) {} + virtual void setQtVariable(const QString &) {} virtual QString qtVariable() const { return QString(); } virtual bool hasTag(const QString &) const { return false; } - const QMap<LinkType, QPair<QString,QString> > &links() const { return linkMap_; } + const QMap<LinkType, QPair<QString, QString>> &links() const { return linkMap_; } void setLink(LinkType linkType, const QString &link, const QString &desc); Access access() const { return access_; } QString accessString() const; const Location &declLocation() const { return declLocation_; } const Location &defLocation() const { return defLocation_; } - const Location &location() const { return (defLocation_.isEmpty() ? declLocation_ : defLocation_); } + const Location &location() const + { + return (defLocation_.isEmpty() ? declLocation_ : defLocation_); + } const Doc &doc() const { return doc_; } bool isInAPI() const { return !isPrivate() && !isInternal() && hasDoc(); } bool hasDoc() const { return (hadDoc_ || !doc_.isEmpty()); } @@ -319,26 +322,26 @@ public: QString templateStuff() const { return templateStuff_; } const QString &reconstitutedBrief() const { return reconstitutedBrief_; } QString nodeSubtypeString() const; - virtual void addPageKeywords(const QString &) { } + virtual void addPageKeywords(const QString &) {} bool isSharingComment() const { return (sharedCommentNode_ != nullptr); } bool hasSharedDoc() const; void setSharedCommentNode(SharedCommentNode *t) { sharedCommentNode_ = t; } SharedCommentNode *sharedCommentNode() { return sharedCommentNode_; } - //QString guid() const; + // QString guid() const; QString extractClassName(const QString &string) const; virtual QString qmlTypeName() const { return name_; } virtual QString qmlFullBaseName() const { return QString(); } virtual QString logicalModuleName() const { return QString(); } virtual QString logicalModuleVersion() const { return QString(); } virtual QString logicalModuleIdentifier() const { return QString(); } - virtual void setLogicalModuleInfo(const QString &) { } - virtual void setLogicalModuleInfo(const QStringList &) { } + virtual void setLogicalModuleInfo(const QString &) {} + virtual void setLogicalModuleInfo(const QStringList &) {} virtual CollectionNode *logicalModule() const { return nullptr; } - virtual void setQmlModule(CollectionNode *) { } + virtual void setQmlModule(CollectionNode *) {} virtual ClassNode *classNode() { return nullptr; } - virtual void setClassNode(ClassNode *) { } + virtual void setClassNode(ClassNode *) {} QmlTypeNode *qmlTypeNode(); ClassNode *declarativeCppNode(); const QString &outputSubdirectory() const { return outSubDir_; } @@ -379,29 +382,35 @@ private: Location declLocation_; Location defLocation_; Doc doc_; - QMap<LinkType, QPair<QString, QString> > linkMap_; + QMap<LinkType, QPair<QString, QString>> linkMap_; QString fileNameBase_; QString physicalModuleName_; QString url_; QString since_; QString templateStuff_; QString reconstitutedBrief_; - //mutable QString uuid_; + // mutable QString uuid_; QString outSubDir_; static QStringMap operators_; static int propertyGroupCount_; - static QMap<QString,Node::NodeType> goals_; + static QMap<QString, Node::NodeType> goals_; }; class PageNode : public Node { public: - PageNode(Aggregate *parent, const QString &name) : Node(Page, parent, name), - noAutoList_(false) { } - PageNode(NodeType type, Aggregate *parent, const QString &name) : Node(type, parent, name), - noAutoList_(false) { } - PageNode(Aggregate *parent, const QString &name, PageType ptype) : Node(Page, parent, name), - noAutoList_(false) { setPageType(ptype); } + PageNode(Aggregate *parent, const QString &name) : Node(Page, parent, name), noAutoList_(false) + { + } + PageNode(NodeType type, Aggregate *parent, const QString &name) + : Node(type, parent, name), noAutoList_(false) + { + } + PageNode(Aggregate *parent, const QString &name, PageType ptype) + : Node(Page, parent, name), noAutoList_(false) + { + setPageType(ptype); + } bool isPageNode() const override { return true; } bool isTextPageNode() const override { return !isAggregate(); } // PageNode but not Aggregate @@ -410,14 +419,18 @@ public: QString subtitle() const override { return subtitle_; } QString fullTitle() const override; bool setTitle(const QString &title) override; - bool setSubtitle(const QString &subtitle) override { subtitle_ = subtitle; return true; } + bool setSubtitle(const QString &subtitle) override + { + subtitle_ = subtitle; + return true; + } QString nameForLists() const override { return title(); } virtual QString imageFileName() const { return QString(); } - virtual void setImageFileName(const QString &) { } + virtual void setImageFileName(const QString &) {} bool noAutoList() const { return noAutoList_; } - void setNoAutoList(bool b) override { noAutoList_ = b; } + void setNoAutoList(bool b) override { noAutoList_ = b; } const QStringList &groupNames() const { return groupNames_; } void appendGroupName(const QString &t) override { groupNames_.append(t); } @@ -442,7 +455,8 @@ class ExternalPageNode : public PageNode { public: ExternalPageNode(Aggregate *parent, const QString &url) - : PageNode(Node::ExternalPage, parent, url) { + : PageNode(Node::ExternalPage, parent, url) + { setPageType(Node::ArticlePage); setUrl(url); } @@ -452,7 +466,7 @@ class Aggregate : public PageNode { public: Node *findChildNode(const QString &name, Node::Genus genus, int findFlags = 0) const; - Node *findNonfunctionChild(const QString &name, bool (Node:: *) () const); + Node *findNonfunctionChild(const QString &name, bool (Node::*)() const); void findChildren(const QString &name, NodeVector &nodes) const; FunctionNode *findFunctionChild(const QString &name, const Parameters ¶meters); FunctionNode *findFunctionChild(const FunctionNode *clone); @@ -499,7 +513,9 @@ public: protected: Aggregate(NodeType type, Aggregate *parent, const QString &name) - : PageNode(type, parent, name), functionCount_(0) { } + : PageNode(type, parent, name), functionCount_(0) + { + } ~Aggregate() override; void removeFunctionNode(FunctionNode *fn); @@ -535,8 +551,10 @@ public: class NamespaceNode : public Aggregate { public: - NamespaceNode(Aggregate *parent, const QString &name) : Aggregate(Namespace, parent, name), - seen_(false), tree_(nullptr), docNode_(nullptr) { } + NamespaceNode(Aggregate *parent, const QString &name) + : Aggregate(Namespace, parent, name), seen_(false), tree_(nullptr), docNode_(nullptr) + { + } ~NamespaceNode() override; Tree *tree() const override { return (parent() ? parent()->tree() : tree_); } @@ -567,13 +585,14 @@ private: struct RelatedClass { - RelatedClass() { } + RelatedClass() {} // constructor for resolved base class - RelatedClass(Node::Access access, ClassNode *node) - : access_(access), node_(node) { } + RelatedClass(Node::Access access, ClassNode *node) : access_(access), node_(node) {} // constructor for unresolved base class RelatedClass(Node::Access access, const QStringList &path, const QString &signature) - : access_(access), node_(nullptr), path_(path), signature_(signature) { } + : access_(access), node_(nullptr), path_(path), signature_(signature) + { + } QString accessString() const; bool isPrivate() const { return (access_ == Node::Private); } @@ -585,21 +604,23 @@ struct RelatedClass struct UsingClause { - UsingClause() { } - UsingClause(const QString &signature) : node_(nullptr), signature_(signature) { } + UsingClause() {} + UsingClause(const QString &signature) : node_(nullptr), signature_(signature) {} const QString &signature() const { return signature_; } const Node *node() { return node_; } void setNode(const Node *n) { node_ = n; } const Node *node_; - QString signature_; + QString signature_; }; class ClassNode : public Aggregate { public: - ClassNode(NodeType type, Aggregate *parent, const QString &name) : Aggregate(type, parent, name), - abstract_(false), wrapper_(false), qmlelement(nullptr) { } + ClassNode(NodeType type, Aggregate *parent, const QString &name) + : Aggregate(type, parent, name), abstract_(false), wrapper_(false), qmlelement(nullptr) + { + } bool isFirstClassAggregate() const override { return true; } bool isClassNode() const override { return true; } bool isRelatableType() const override { return true; } @@ -658,9 +679,20 @@ public: bool isRelatableType() const override { return true; } QString title() const override { return (title_.isEmpty() ? name() : title_); } QString subtitle() const override { return subtitle_; } - QString fullTitle() const override { return (title_.isEmpty() ? name() : name() + " - " + title_); } - bool setTitle(const QString &title) override { title_ = title; return true; } - bool setSubtitle(const QString &subtitle) override { subtitle_ = subtitle; return true; } + QString fullTitle() const override + { + return (title_.isEmpty() ? name() : name() + " - " + title_); + } + bool setTitle(const QString &title) override + { + title_ = title; + return true; + } + bool setSubtitle(const QString &subtitle) override + { + subtitle_ = subtitle; + return true; + } QString nameForLists() const override { return title(); } bool hasDocumentedChildren() const; @@ -672,8 +704,7 @@ private: class ExampleNode : public PageNode { public: - ExampleNode(Aggregate *parent, const QString &name) - : PageNode(Node::Example, parent, name) { } + ExampleNode(Aggregate *parent, const QString &name) : PageNode(Node::Example, parent, name) {} QString imageFileName() const override { return imageFileName_; } void setImageFileName(const QString &ifn) override { imageFileName_ = ifn; } const QStringList &files() const { return files_; } @@ -689,17 +720,18 @@ private: QStringList images_; }; -struct ImportRec { - QString name_; // module name - QString version_; // <major> . <minor> - QString importId_; // "as" name +struct ImportRec +{ + QString name_; // module name + QString version_; // <major> . <minor> + QString importId_; // "as" name QString importUri_; // subdirectory of module directory - ImportRec(const QString &name, - const QString &version, - const QString &importId, + ImportRec(const QString &name, const QString &version, const QString &importId, const QString &importUri) - : name_(name), version_(version), importId_(importId), importUri_(importUri) { } + : name_(name), version_(version), importId_(importId), importUri_(importUri) + { + } QString &name() { return name_; } QString &version() { return version_; } QString &importId() { return importId_; } @@ -714,7 +746,8 @@ class QmlTypeNode : public Aggregate public: QmlTypeNode(Aggregate *parent, const QString &name, NodeType type = QmlType); bool isFirstClassAggregate() const override { return true; } - bool isQtQuickNode() const override { + bool isQtQuickNode() const override + { return (logicalModuleName() == QLatin1String("QtQuick")); } ClassNode *classNode() override { return cnode_; } @@ -775,10 +808,7 @@ class QmlPropertyNode : public Node Q_DECLARE_TR_FUNCTIONS(QDoc::QmlPropertyNode) public: - QmlPropertyNode(Aggregate *parent, - const QString &name, - const QString &type, - bool attached); + QmlPropertyNode(Aggregate *parent, const QString &name, const QString &type, bool attached); void setDataType(const QString &dataType) override { type_ = dataType; } void setStored(bool stored) { stored_ = toFlagValue(stored); } @@ -787,24 +817,18 @@ public: const QString &dataType() const { return type_; } QString qualifiedDataType() const { return type_; } bool isReadOnlySet() const { return (readOnly_ != FlagValueDefault); } - bool isStored() const { return fromFlagValue(stored_,true); } - bool isDesignable() const { return fromFlagValue(designable_,false); } + bool isStored() const { return fromFlagValue(stored_, true); } + bool isDesignable() const { return fromFlagValue(designable_, false); } bool isWritable(); bool isDefault() const override { return isdefault_; } - bool isReadOnly() const override { return fromFlagValue(readOnly_,false); } + bool isReadOnly() const override { return fromFlagValue(readOnly_, false); } bool isAlias() const override { return isAlias_; } bool isAttached() const override { return attached_; } bool isQtQuickNode() const override { return parent()->isQtQuickNode(); } QString qmlTypeName() const override { return parent()->qmlTypeName(); } - QString logicalModuleName() const override { - return parent()->logicalModuleName(); - } - QString logicalModuleVersion() const override { - return parent()->logicalModuleVersion(); - } - QString logicalModuleIdentifier() const override { - return parent()->logicalModuleIdentifier(); - } + QString logicalModuleName() const override { return parent()->logicalModuleName(); } + QString logicalModuleVersion() const override { return parent()->logicalModuleVersion(); } + QString logicalModuleIdentifier() const override { return parent()->logicalModuleIdentifier(); } QString element() const override { return parent()->name(); } void markDefault() override { isdefault_ = true; } @@ -815,20 +839,19 @@ private: private: QString type_; - FlagValue stored_; - FlagValue designable_; - bool isAlias_; - bool isdefault_; - bool attached_; - FlagValue readOnly_; + FlagValue stored_; + FlagValue designable_; + bool isAlias_; + bool isdefault_; + bool attached_; + FlagValue readOnly_; }; class EnumItem { public: - EnumItem() { } - EnumItem(const QString &name, const QString &value) - : name_(name), value_(value) { } + EnumItem() {} + EnumItem(const QString &name, const QString &value) : name_(name), value_(value) {} const QString &name() const { return name_; } const QString &value() const { return value_; } @@ -841,7 +864,9 @@ private: class EnumNode : public Node { public: - EnumNode(Aggregate *parent, const QString &name) : Node(Enum, parent, name), flagsType_(nullptr) { } + EnumNode(Aggregate *parent, const QString &name) : Node(Enum, parent, name), flagsType_(nullptr) + { + } void addItem(const EnumItem &item); void setFlagsType(TypedefNode *typedeff); @@ -862,8 +887,10 @@ private: class TypedefNode : public Node { public: - TypedefNode(Aggregate *parent, const QString &name) : Node(Typedef, parent, name), - associatedEnum_(nullptr) { } + TypedefNode(Aggregate *parent, const QString &name) + : Node(Typedef, parent, name), associatedEnum_(nullptr) + { + } bool hasAssociatedEnum() const { return associatedEnum_ != nullptr; } const EnumNode *associatedEnum() const { return associatedEnum_; } @@ -881,7 +908,9 @@ class TypeAliasNode : public TypedefNode { public: TypeAliasNode(Aggregate *parent, const QString &name, const QString &aliasedType) - : TypedefNode(parent, name), aliasedType_(aliasedType) { } + : TypedefNode(parent, name), aliasedType_(aliasedType) + { + } QString aliasedType() { return aliasedType_; } Node *clone(Aggregate *parent) override; @@ -899,24 +928,30 @@ inline void EnumNode::setFlagsType(TypedefNode *t) class SharedCommentNode : public Node { public: - SharedCommentNode(Node *n) - : Node(Node::SharedComment, n->parent(), QString()) { + SharedCommentNode(Node *n) : Node(Node::SharedComment, n->parent(), QString()) + { collective_.reserve(1); append(n); } - SharedCommentNode(QmlTypeNode *parent, int count, QString &group) - : Node(Node::SharedComment, parent, group) { + SharedCommentNode(QmlTypeNode *parent, int count, QString &group) + : Node(Node::SharedComment, parent, group) + { collective_.reserve(count); } ~SharedCommentNode() override { collective_.clear(); } - bool isPropertyGroup() const override { - return !name().isEmpty() && - !collective_.isEmpty() && - (collective_.at(0)->isQmlProperty() || collective_.at(0)->isJsProperty()); + bool isPropertyGroup() const override + { + return !name().isEmpty() && !collective_.isEmpty() + && (collective_.at(0)->isQmlProperty() || collective_.at(0)->isJsProperty()); } int count() const { return collective_.size(); } - void append(Node *n) { collective_.append(n); n->setSharedCommentNode(this); setGenus(n->genus()); } + void append(Node *n) + { + collective_.append(n); + n->setSharedCommentNode(this); + setGenus(n->genus()); + } const QVector<Node *> &collective() const { return collective_; } void setOverloadFlags(); void setRelatedNonmember(bool b) override; @@ -937,13 +972,13 @@ public: Slot, Ctor, Dtor, - CCtor, // copy constructor - MCtor, // move-copy constructor + CCtor, // copy constructor + MCtor, // move-copy constructor MacroWithParams, MacroWithoutParams, Native, - CAssign, // copy-assignment operator - MAssign, // move-assignment operator + CAssign, // copy-assignment operator + MAssign, // move-assignment operator QmlSignal, QmlSignalHandler, QmlMethod, @@ -1005,7 +1040,8 @@ public: bool isQmlSignal() const { return (metaness_ == QmlSignal); } bool isQmlSignalHandler() const { return (metaness_ == QmlSignalHandler); } - bool isSpecialMemberFunction() const { + bool isSpecialMemberFunction() const + { return (isDtor() || isCCtor() || isMCtor() || isCAssign() || isMAssign()); } bool isNonvirtual() const { return (virtualness_ == NonVirtual); } @@ -1075,8 +1111,8 @@ private: bool const_ : 1; bool static_ : 1; - bool reimpFlag_: 1; - bool attached_: 1; + bool reimpFlag_ : 1; + bool attached_ : 1; bool overloadFlag_ : 1; bool isFinal_ : 1; bool isOverride_ : 1; @@ -1212,7 +1248,9 @@ class CollectionNode : public PageNode { public: CollectionNode(NodeType type, Aggregate *parent, const QString &name) - : PageNode(type, parent, name), seen_(false) { } + : PageNode(type, parent, name), seen_(false) + { + } bool isCollectionNode() const override { return true; } QString qtVariable() const override { return qtVariable_; } @@ -1227,10 +1265,12 @@ public: QString fullTitle() const override { return title(); } QString logicalModuleName() const override { return logicalModuleName_; } - QString logicalModuleVersion() const override { + QString logicalModuleVersion() const override + { return logicalModuleVersionMajor_ + QLatin1Char('.') + logicalModuleVersionMinor_; } - QString logicalModuleIdentifier() const override { + QString logicalModuleIdentifier() const override + { return logicalModuleName_ + logicalModuleVersionMajor_; } void setLogicalModuleInfo(const QString &arg) override; diff --git a/src/qdoc/openedlist.cpp b/src/qdoc/openedlist.cpp index a36e3b545..eed679e80 100644 --- a/src/qdoc/openedlist.cpp +++ b/src/qdoc/openedlist.cpp @@ -40,13 +40,9 @@ QT_BEGIN_NAMESPACE static const char roman[] = "m\2d\5c\2l\5x\2v\5i"; -OpenedList::OpenedList(ListStyle style) - : sty(style), ini(1), nex(0) -{ -} +OpenedList::OpenedList(ListStyle style) : sty(style), ini(1), nex(0) {} -OpenedList::OpenedList(const Location &location, const QString &hint) - : sty(Bullet), ini(1) +OpenedList::OpenedList(const Location &location, const QString &hint) : sty(Bullet), ini(1) { QRegExp hintSyntax("(\\W*)([0-9]+|[A-Z]+|[a-z]+)(\\W*)"); diff --git a/src/qdoc/openedlist.h b/src/qdoc/openedlist.h index 6c4cea6c0..604eabb6f 100644 --- a/src/qdoc/openedlist.h +++ b/src/qdoc/openedlist.h @@ -44,11 +44,9 @@ class OpenedList Q_DECLARE_TR_FUNCTIONS(QDoc::OpenedList) public: - enum ListStyle { Bullet, Tag, Value, Numeric, UpperAlpha, LowerAlpha, - UpperRoman, LowerRoman }; + enum ListStyle { Bullet, Tag, Value, Numeric, UpperAlpha, LowerAlpha, UpperRoman, LowerRoman }; - OpenedList() - : sty(Bullet), ini(1), nex(0) { } + OpenedList() : sty(Bullet), ini(1), nex(0) {} OpenedList(ListStyle style); OpenedList(const Location &location, const QString &hint); diff --git a/src/qdoc/parameters.cpp b/src/qdoc/parameters.cpp index 96a591a2a..7dfe018f6 100644 --- a/src/qdoc/parameters.cpp +++ b/src/qdoc/parameters.cpp @@ -83,8 +83,7 @@ QString Parameter::signature(bool includeValue) const of its parameters. */ -Parameters::Parameters() - : valid_(true), privateSignal_(false), tok_(0), tokenizer_(nullptr) +Parameters::Parameters() : valid_(true), privateSignal_(false), tok_(0), tokenizer_(nullptr) { // nothing. } @@ -152,14 +151,11 @@ void Parameters::matchTemplateAngles(CodeChunk &type) do { if (tok_ == Tok_LeftAngle) { leftAngleDepth++; - } - else if (tok_ == Tok_RightAngle) { + } else if (tok_ == Tok_RightAngle) { leftAngleDepth--; - } - else if (tok_ == Tok_LeftParen || tok_ == Tok_LeftBrace) { + } else if (tok_ == Tok_LeftParen || tok_ == Tok_LeftBrace) { ++parenAndBraceDepth; - } - else if (tok_ == Tok_RightParen || tok_ == Tok_RightBrace) { + } else if (tok_ == Tok_RightParen || tok_ == Tok_RightBrace) { if (--parenAndBraceDepth < 0) return; } @@ -198,8 +194,8 @@ bool Parameters::matchTypeAndName(CodeChunk &type, QString &name, bool qProp) while (match(Tok_const) || match(Tok_volatile)) type.append(previousLexeme()); QString pending; - while (tok_ == Tok_signed || tok_ == Tok_int || tok_ == Tok_unsigned || - tok_ == Tok_short || tok_ == Tok_long || tok_ == Tok_int64) { + while (tok_ == Tok_signed || tok_ == Tok_int || tok_ == Tok_unsigned + || tok_ == Tok_short || tok_ == Tok_long || tok_ == Tok_int64) { if (tok_ == Tok_signed) pending = lexeme(); else { @@ -229,25 +225,22 @@ bool Parameters::matchTypeAndName(CodeChunk &type, QString &name, bool qProp) with the real one used in Qt Creator. Is it still needed? mws 11/12/2018 */ - if (lexeme() == "(" && - ((previousLexeme() == "QT_PREPEND_NAMESPACE") || (previousLexeme() == "NS"))) { + if (lexeme() == "(" + && ((previousLexeme() == "QT_PREPEND_NAMESPACE") + || (previousLexeme() == "NS"))) { readToken(); readToken(); type.append(previousLexeme()); readToken(); - } - else + } else type.append(previousLexeme()); - } - else if (match(Tok_void) || match(Tok_int) || match(Tok_char) || - match(Tok_double) || match(Tok_Ellipsis)) { + } else if (match(Tok_void) || match(Tok_int) || match(Tok_char) || match(Tok_double) + || match(Tok_Ellipsis)) { type.append(previousLexeme()); - } - else { + } else { return false; } - } - else if (match(Tok_int) || match(Tok_char) || match(Tok_double)) { + } else if (match(Tok_int) || match(Tok_char) || match(Tok_double)) { type.append(previousLexeme()); } @@ -262,8 +255,8 @@ bool Parameters::matchTypeAndName(CodeChunk &type, QString &name, bool qProp) break; } - while (match(Tok_Ampersand) || match(Tok_Aster) || match(Tok_const) || - match(Tok_Caret) || match(Tok_Ellipsis)) + while (match(Tok_Ampersand) || match(Tok_Aster) || match(Tok_const) || match(Tok_Caret) + || match(Tok_Ellipsis)) type.append(previousLexeme()); if (match(Tok_LeftParenAster)) { @@ -296,8 +289,7 @@ bool Parameters::matchTypeAndName(CodeChunk &type, QString &name, bool qProp) if (!match(Tok_RightParen)) return false; type.append(previousLexeme()); - } - else { + } else { /* The common case: Look for an optional identifier, then for some array brackets. @@ -306,8 +298,7 @@ bool Parameters::matchTypeAndName(CodeChunk &type, QString &name, bool qProp) if (match(Tok_Ident)) { name = previousLexeme(); - } - else if (match(Tok_Comment)) { + } else if (match(Tok_Comment)) { /* A neat hack: Commented-out parameter names are recognized by qdoc. It's impossible to illustrate @@ -318,8 +309,7 @@ bool Parameters::matchTypeAndName(CodeChunk &type, QString &name, bool qProp) */ if (varComment_.exactMatch(previousLexeme())) name = varComment_.cap(1); - } - else if (match(Tok_LeftParen)) { + } else if (match(Tok_LeftParen)) { name = "("; while (tok_ != Tok_RightParen && tok_ != Tok_Eoi) { name.append(lexeme()); @@ -336,17 +326,15 @@ bool Parameters::matchTypeAndName(CodeChunk &type, QString &name, bool qProp) name.append("]"); readToken(); } - } - else if (qProp && (match(Tok_default) || match(Tok_final) || match(Tok_override))) { + } else if (qProp && (match(Tok_default) || match(Tok_final) || match(Tok_override))) { // Hack to make 'default', 'final' and 'override' work again in Q_PROPERTY name = previousLexeme(); } if (tok_ == Tok_LeftBracket) { int bracketDepth0 = tokenizer_->bracketDepth(); - while ((tokenizer_->bracketDepth() >= bracketDepth0 && - tok_ != Tok_Eoi) || - tok_ == Tok_RightBracket) { + while ((tokenizer_->bracketDepth() >= bracketDepth0 && tok_ != Tok_Eoi) + || tok_ == Tok_RightBracket) { type.append(lexeme()); readToken(); } @@ -377,9 +365,8 @@ bool Parameters::matchParameter() if (match(Tok_Equal)) { chunk.clear(); int pdepth = tokenizer_->parenDepth(); - while (tokenizer_->parenDepth() >= pdepth && - (tok_ != Tok_Comma || (tokenizer_->parenDepth() > pdepth)) && - tok_ != Tok_Eoi) { + while (tokenizer_->parenDepth() >= pdepth + && (tok_ != Tok_Comma || (tokenizer_->parenDepth() > pdepth)) && tok_ != Tok_Eoi) { chunk.append(lexeme()); readToken(); } diff --git a/src/qdoc/parameters.h b/src/qdoc/parameters.h index 7e72d1689..e049fed51 100644 --- a/src/qdoc/parameters.h +++ b/src/qdoc/parameters.h @@ -43,10 +43,11 @@ class Parameter { public: Parameter() {} - Parameter(const QString &type, - const QString &name = QString(), + Parameter(const QString &type, const QString &name = QString(), const QString &defaultValue = QString()) - : type_(type), name_(name), defaultValue_(defaultValue) { } + : type_(type), name_(name), defaultValue_(defaultValue) + { + } void setName(const QString &name) { name_ = name; } bool hasType() const { return !type_.isEmpty(); } @@ -55,12 +56,18 @@ public: const QString &defaultValue() const { return defaultValue_; } void setDefaultValue(const QString &t) { defaultValue_ = t; } - void set(const QString &type, const QString &name) { - type_ = type; name_ = name; defaultValue_.clear(); + void set(const QString &type, const QString &name) + { + type_ = type; + name_ = name; + defaultValue_.clear(); } - void set(const QString &type, const QString &name, const QString &defaultValue) { - type_ = type; name_ = name; defaultValue_ = defaultValue; + void set(const QString &type, const QString &name, const QString &defaultValue) + { + type_ = type; + name_ = name; + defaultValue_ = defaultValue; } QString signature(bool includeValue = false) const; @@ -79,7 +86,12 @@ public: Parameters(); Parameters(const QString &signature); - void clear() { parameters_.clear(); privateSignal_ = false; valid_ = true; } + void clear() + { + parameters_.clear(); + privateSignal_ = false; + valid_ = true; + } const ParameterVector ¶meters() const { return parameters_; } bool isPrivateSignal() const { return privateSignal_; } bool isEmpty() const { return parameters_.isEmpty(); } diff --git a/src/qdoc/puredocparser.cpp b/src/qdoc/puredocparser.cpp index 6ba46a20e..ea3757747 100644 --- a/src/qdoc/puredocparser.cpp +++ b/src/qdoc/puredocparser.cpp @@ -44,7 +44,10 @@ PureDocParser *PureDocParser::pureParser_ = nullptr; */ QStringList PureDocParser::sourceFileNameFilter() { - return QStringList() << "*.qdoc" << "*.qtx" << "*.qtt" << "*.js"; + return QStringList() << "*.qdoc" + << "*.qtx" + << "*.qtt" + << "*.js"; } /*! @@ -102,7 +105,8 @@ bool PureDocParser::processQdocComments() if (topics.isEmpty()) { doc.location().warning(tr("This qdoc comment contains no topic command " "(e.g., '\\%1', '\\%2').") - .arg(COMMAND_MODULE).arg(COMMAND_PAGE)); + .arg(COMMAND_MODULE) + .arg(COMMAND_PAGE)); continue; } if (hasTooManyTopics(doc)) @@ -114,8 +118,7 @@ bool PureDocParser::processQdocComments() processTopicArgs(doc, topic, nodes, docs); processMetaCommands(nodes, docs); - } - else { + } else { tok_ = tokenizer_->getToken(); } } diff --git a/src/qdoc/qdoccommandlineparser.cpp b/src/qdoc/qdoccommandlineparser.cpp index 33009c512..3bd01fae5 100644 --- a/src/qdoc/qdoccommandlineparser.cpp +++ b/src/qdoc/qdoccommandlineparser.cpp @@ -41,7 +41,8 @@ QDocCommandLineParser::QDocCommandLineParser() dependsOption(QStringList() << QStringLiteral("depends")), highlightingOption(QStringList() << QStringLiteral("highlighting")), showInternalOption(QStringList() << QStringLiteral("showinternal")), - redirectDocumentationToDevNullOption(QStringList() << QStringLiteral("redirect-documentation-to-dev-null")), + redirectDocumentationToDevNullOption(QStringList() + << QStringLiteral("redirect-documentation-to-dev-null")), noExamplesOption(QStringList() << QStringLiteral("no-examples")), indexDirOption(QStringList() << QStringLiteral("indexdir")), installDirOption(QStringList() << QStringLiteral("installdir")), @@ -57,8 +58,10 @@ QDocCommandLineParser::QDocCommandLineParser() singleExecOption(QStringList() << QStringLiteral("single-exec")), writeQaPagesOption(QStringList() << QStringLiteral("write-qa-pages")), includePathOption("I", "Add dir to the include path for header files.", "path"), - includePathSystemOption("isystem", "Add dir to the system include path for header files.", "path"), - frameworkOption("F", "Add macOS framework to the include path for header files.", "framework"), + includePathSystemOption("isystem", "Add dir to the system include path for header files.", + "path"), + frameworkOption("F", "Add macOS framework to the include path for header files.", + "framework"), timestampsOption(QStringList() << QStringLiteral("timestamps")) { setApplicationDescription(QCoreApplication::translate("qdoc", "Qt documentation generator")); @@ -69,7 +72,8 @@ QDocCommandLineParser::QDocCommandLineParser() addPositionalArgument("file1.qdocconf ...", QCoreApplication::translate("qdoc", "Input files")); - defineOption.setDescription(QCoreApplication::translate("qdoc", "Define the argument as a macro while parsing sources")); + defineOption.setDescription(QCoreApplication::translate( + "qdoc", "Define the argument as a macro while parsing sources")); defineOption.setValueName(QStringLiteral("macro[=def]")); addOption(defineOption); @@ -77,56 +81,74 @@ QDocCommandLineParser::QDocCommandLineParser() dependsOption.setValueName(QStringLiteral("module")); addOption(dependsOption); - highlightingOption.setDescription(QCoreApplication::translate("qdoc", "Turn on syntax highlighting (makes qdoc run slower)")); + highlightingOption.setDescription(QCoreApplication::translate( + "qdoc", "Turn on syntax highlighting (makes qdoc run slower)")); addOption(highlightingOption); - showInternalOption.setDescription(QCoreApplication::translate("qdoc", "Include content marked internal")); + showInternalOption.setDescription( + QCoreApplication::translate("qdoc", "Include content marked internal")); addOption(showInternalOption); - redirectDocumentationToDevNullOption.setDescription(QCoreApplication::translate("qdoc", "Save all documentation content to /dev/null. Useful if someone is interested in qdoc errors only.")); + redirectDocumentationToDevNullOption.setDescription( + QCoreApplication::translate("qdoc", + "Save all documentation content to /dev/null. Useful if " + "someone is interested in qdoc errors only.")); addOption(redirectDocumentationToDevNullOption); - noExamplesOption.setDescription(QCoreApplication::translate("qdoc", "Do not generate documentation for examples")); + noExamplesOption.setDescription( + QCoreApplication::translate("qdoc", "Do not generate documentation for examples")); addOption(noExamplesOption); - indexDirOption.setDescription(QCoreApplication::translate("qdoc", "Specify a directory where QDoc should search for index files to load")); + indexDirOption.setDescription(QCoreApplication::translate( + "qdoc", "Specify a directory where QDoc should search for index files to load")); indexDirOption.setValueName(QStringLiteral("dir")); addOption(indexDirOption); - installDirOption.setDescription(QCoreApplication::translate("qdoc", "Specify the directory where the output will be after running \"make install\"")); + installDirOption.setDescription(QCoreApplication::translate( + "qdoc", + "Specify the directory where the output will be after running \"make install\"")); installDirOption.setValueName(QStringLiteral("dir")); addOption(installDirOption); - obsoleteLinksOption.setDescription(QCoreApplication::translate("qdoc", "Report links from obsolete items to non-obsolete items")); + obsoleteLinksOption.setDescription(QCoreApplication::translate( + "qdoc", "Report links from obsolete items to non-obsolete items")); addOption(obsoleteLinksOption); - outputDirOption.setDescription(QCoreApplication::translate("qdoc", "Specify output directory, overrides setting in qdocconf file")); + outputDirOption.setDescription(QCoreApplication::translate( + "qdoc", "Specify output directory, overrides setting in qdocconf file")); outputDirOption.setValueName(QStringLiteral("dir")); addOption(outputDirOption); - outputFormatOption.setDescription(QCoreApplication::translate("qdoc", "Specify output format, overrides setting in qdocconf file")); + outputFormatOption.setDescription(QCoreApplication::translate( + "qdoc", "Specify output format, overrides setting in qdocconf file")); outputFormatOption.setValueName(QStringLiteral("format")); addOption(outputFormatOption); - noLinkErrorsOption.setDescription(QCoreApplication::translate("qdoc", "Do not print link errors (i.e. missing targets)")); + noLinkErrorsOption.setDescription( + QCoreApplication::translate("qdoc", "Do not print link errors (i.e. missing targets)")); addOption(noLinkErrorsOption); - autoLinkErrorsOption.setDescription(QCoreApplication::translate("qdoc", "Show errors when automatic linking fails")); + autoLinkErrorsOption.setDescription( + QCoreApplication::translate("qdoc", "Show errors when automatic linking fails")); addOption(autoLinkErrorsOption); debugOption.setDescription(QCoreApplication::translate("qdoc", "Enable debug output")); addOption(debugOption); - prepareOption.setDescription(QCoreApplication::translate("qdoc", "Run qdoc only to generate an index file, not the docs")); + prepareOption.setDescription(QCoreApplication::translate( + "qdoc", "Run qdoc only to generate an index file, not the docs")); addOption(prepareOption); - generateOption.setDescription(QCoreApplication::translate("qdoc", "Run qdoc to read the index files and generate the docs")); + generateOption.setDescription(QCoreApplication::translate( + "qdoc", "Run qdoc to read the index files and generate the docs")); addOption(generateOption); - logProgressOption.setDescription(QCoreApplication::translate("qdoc", "Log progress on stderr.")); + logProgressOption.setDescription( + QCoreApplication::translate("qdoc", "Log progress on stderr.")); addOption(logProgressOption); - singleExecOption.setDescription(QCoreApplication::translate("qdoc", "Run qdoc once over all the qdoc conf files.")); + singleExecOption.setDescription( + QCoreApplication::translate("qdoc", "Run qdoc once over all the qdoc conf files.")); addOption(singleExecOption); writeQaPagesOption.setDescription(QCoreApplication::translate("qdoc", "Write QA pages.")); @@ -140,7 +162,8 @@ QDocCommandLineParser::QDocCommandLineParser() frameworkOption.setFlags(QCommandLineOption::ShortOptionStyle); addOption(frameworkOption); - timestampsOption.setDescription(QCoreApplication::translate("qdoc", "Timestamp each qdoc log line.")); + timestampsOption.setDescription( + QCoreApplication::translate("qdoc", "Timestamp each qdoc log line.")); addOption(timestampsOption); } diff --git a/src/qdoc/qdocdatabase.cpp b/src/qdoc/qdocdatabase.cpp index 5c4acdbf1..be257b4b8 100644 --- a/src/qdoc/qdocdatabase.cpp +++ b/src/qdoc/qdocdatabase.cpp @@ -88,7 +88,7 @@ bool QDocDatabase::debug = false; */ QDocForest::~QDocForest() { - for (int i=0; i<searchOrder_.size(); ++i) + for (int i = 0; i < searchOrder_.size(); ++i) delete searchOrder_.at(i); forest_.clear(); searchOrder_.clear(); @@ -217,7 +217,7 @@ void QDocForest::setSearchOrder(const QStringList &t) Note that this loop also inserts the primary tree into the forrest. That is a requirement. */ - for (int i=0; i<searchOrder_.size(); ++i) { + for (int i = 0; i < searchOrder_.size(); ++i) { if (!forest_.contains(moduleNames_.at(i))) { forest_.insert(moduleNames_.at(i), searchOrder_.at(i)); } @@ -309,10 +309,8 @@ void QDocForest::newPrimaryTree(const QString &module) to 0, the starting point for each index tree is the root of the index tree. */ -const Node *QDocForest::findNodeForTarget(QStringList &targetPath, - const Node *relative, - Node::Genus genus, - QString &ref) +const Node *QDocForest::findNodeForTarget(QStringList &targetPath, const Node *relative, + Node::Genus genus, QString &ref) { int flags = SearchBaseClasses | SearchEnumValues; @@ -351,7 +349,7 @@ void QDocForest::printLinkCounts(const QString &project) if (it.value() != module) depends += QLatin1Char(' ') + it.value(); int pad = 30 - line.length(); - for (int k=0; k<pad; ++k) + for (int k = 0; k < pad; ++k) line += QLatin1Char(' '); line += "%1"; Location::null.report(line.arg(-(it.key()))); @@ -394,8 +392,7 @@ QString QDocForest::getLinkCounts(QStringList &strings, QVector<int> &counts) C++ function or a QML function. */ const FunctionNode *QDocForest::findFunctionNode(const QStringList &path, - const Parameters ¶meters, - const Node *relative, + const Parameters ¶meters, const Node *relative, Node::Genus genus) { for (const auto *tree : searchOrder()) { @@ -443,8 +440,7 @@ NodeMultiMapMap QDocDatabase::newSinceMaps_; modules sequentially in a loop. Each source file for each module is read exactly once. */ -QDocDatabase::QDocDatabase() - : showInternal_(false), singleExec_(false), forest_(this) +QDocDatabase::QDocDatabase() : showInternal_(false), singleExec_(false), forest_(this) { // nothing } @@ -466,10 +462,10 @@ QDocDatabase::~QDocDatabase() QDocDatabase *QDocDatabase::qdocDB() { if (qdocDB_ == nullptr) { - qdocDB_ = new QDocDatabase; - initializeDB(); + qdocDB_ = new QDocDatabase; + initializeDB(); } - return qdocDB_; + return qdocDB_; } /*! @@ -833,7 +829,7 @@ QmlTypeNode *QDocDatabase::findQmlType(const ImportRec &import, const QString &n qmName = import.name_; else qmName = import.importUri_; - for (int i=0; i<dotSplit.size(); ++i) { + for (int i = 0; i < dotSplit.size(); ++i) { QString qualifiedName = qmName + "::" + dotSplit[i]; QmlTypeNode *qcn = forest_.lookupQmlType(qualifiedName); if (qcn) @@ -873,7 +869,7 @@ void QDocDatabase::processForest() mode, each tree is analyzed in turn, and its classes and types are added to the appropriate node maps. */ -void QDocDatabase::processForest(void (QDocDatabase::*func) (Aggregate*)) +void QDocDatabase::processForest(void (QDocDatabase::*func)(Aggregate *)) { Tree *t = forest_.firstTree(); while (t) { @@ -1104,7 +1100,8 @@ const NodeMap &QDocDatabase::getSinceMap(const QString &key) documentation. These tasks create required data structures and resolve links. */ -void QDocDatabase::resolveStuff() { +void QDocDatabase::resolveStuff() +{ if (Generator::dualExec() || Generator::preparing()) { primaryTree()->resolveBaseClasses(primaryTreeRoot()); primaryTree()->resolvePropertyOverriddenFromPtrs(primaryTreeRoot()); @@ -1122,7 +1119,7 @@ void QDocDatabase::resolveStuff() { primaryTree()->resolveBaseClasses(primaryTreeRoot()); primaryTree()->resolvePropertyOverriddenFromPtrs(primaryTreeRoot()); primaryTreeRoot()->resolveQmlInheritance(); - //primaryTree()->resolveTargets(primaryTreeRoot()); + // primaryTree()->resolveTargets(primaryTreeRoot()); primaryTree()->resolveCppToQmlLinks(); primaryTree()->resolveUsingClauses(); } @@ -1191,8 +1188,8 @@ void QDocDatabase::resolveNamespaces() for (auto *node : namespaces) { NamespaceNode *NS = static_cast<NamespaceNode *>(node); if (NS->hadDoc() && NS != ns) { - ns->doc().location().warning(tr("Namespace %1 documented more than once") - .arg(NS->name())); + ns->doc().location().warning( + tr("Namespace %1 documented more than once").arg(NS->name())); NS->doc().location().warning(tr("...also seen here")); } } @@ -1223,8 +1220,8 @@ void QDocDatabase::resolveNamespaces() for (auto *node : namespaces) { auto *nameSpaceNode = static_cast<NamespaceNode *>(node); if (nameSpaceNode != ns) { - for (auto it = nameSpaceNode->constBegin(); - it != nameSpaceNode->constEnd(); ++it) { + for (auto it = nameSpaceNode->constBegin(); it != nameSpaceNode->constEnd(); + ++it) { Node *N = *it; if (N && N->isPublic() && !N->isInternal()) ns->includeChild(N); @@ -1270,7 +1267,6 @@ void QDocDatabase::resolveProxies() } } - /*! Finds the function node for the qualified function path in \a target and returns a pointer to it. The \a target is a @@ -1284,8 +1280,7 @@ void QDocDatabase::resolveProxies() The entire forest is searched, but the first match is accepted. */ -const FunctionNode *QDocDatabase::findFunctionNode(const QString &target, - const Node *relative, +const FunctionNode *QDocDatabase::findFunctionNode(const QString &target, const Node *relative, Node::Genus genus) { QString signature; @@ -1368,7 +1363,7 @@ void QDocDatabase::readIndexes(const QStringList &indexFiles) { QStringList filesToRead; for (const QString &file : indexFiles) { - QString fn = file.mid(file.lastIndexOf(QChar('/'))+1); + QString fn = file.mid(file.lastIndexOf(QChar('/')) + 1); if (!isLoaded(fn)) filesToRead << file; else @@ -1382,9 +1377,10 @@ void QDocDatabase::readIndexes(const QStringList &indexFiles) index file is generated with the parameters \a url and \a title, using the generator \a g. */ -void QDocDatabase::generateIndex(const QString &fileName, const QString &url, const QString &title, Generator *g) +void QDocDatabase::generateIndex(const QString &fileName, const QString &url, const QString &title, + Generator *g) { - QString t = fileName.mid(fileName.lastIndexOf(QChar('/'))+1); + QString t = fileName.mid(fileName.lastIndexOf(QChar('/')) + 1); primaryTree()->setIndexFileName(t); QDocIndexFiles::qdocIndexFiles()->generateIndex(fileName, url, title, g); QDocIndexFiles::destroyQDocIndexFiles(); @@ -1400,7 +1396,7 @@ void QDocDatabase::generateIndex(const QString &fileName, const QString &url, co This function only searches in the current primary tree. */ -Node *QDocDatabase::findNodeInOpenNamespace(QStringList &path, bool (Node::*isMatch) () const) +Node *QDocDatabase::findNodeInOpenNamespace(QStringList &path, bool (Node::*isMatch)() const) { if (path.isEmpty()) return nullptr; @@ -1459,9 +1455,10 @@ void QDocDatabase::mergeCollections(Node::NodeType type, CNMap &cnm, const Node for (CollectionNode *value : values) { if (value != n) { // Allow multiple (major) versions of QML/JS modules - if ((n->isQmlModule() || n->isJsModule()) && - n->logicalModuleIdentifier() != value->logicalModuleIdentifier()) { - if (value->wasSeen() && value != relative && !value->members().isEmpty()) + if ((n->isQmlModule() || n->isJsModule()) + && n->logicalModuleIdentifier() != value->logicalModuleIdentifier()) { + if (value->wasSeen() && value != relative + && !value->members().isEmpty()) cnm.insert(value->fullTitle().toLower(), value); continue; } @@ -1495,8 +1492,8 @@ void QDocDatabase::mergeCollections(CollectionNode *c) for (auto *tree : searchOrder()) { CollectionNode *cn = tree->getCollection(c->name(), c->nodeType()); if (cn && cn != c) { - if ((cn->isQmlModule() || cn->isJsModule()) && - cn->logicalModuleIdentifier() != c->logicalModuleIdentifier()) + if ((cn->isQmlModule() || cn->isJsModule()) + && cn->logicalModuleIdentifier() != c->logicalModuleIdentifier()) continue; for (auto *node : cn->members()) c->addMember(node); @@ -1524,13 +1521,13 @@ const Node *QDocDatabase::findNodeForAtom(const Atom *a, const Node *relative, Q Tree *domain = nullptr; Node::Genus genus = Node::DontCare; // Reserved for future use - //Node::NodeType goal = Node::NoType; + // Node::NodeType goal = Node::NoType; if (atom->isLinkAtom()) { domain = atom->domain(); genus = atom->genus(); // Reserved for future use - //goal = atom->goal(); + // goal = atom->goal(); } if (first.isEmpty()) @@ -1563,8 +1560,7 @@ const Node *QDocDatabase::findNodeForAtom(const Atom *a, const Node *relative, Q relative = nullptr; return domain->findNodeForTarget(nodePath, target, relative, flags, genus, ref); } - } - else { + } else { if (first.endsWith(".html")) node = findNodeByNameAndType(QStringList(first), &Node::isPageNode); else if (first.endsWith(QChar(')'))) diff --git a/src/qdoc/qdocdatabase.h b/src/qdoc/qdocdatabase.h index 1ff3aff15..dd5d886e6 100644 --- a/src/qdoc/qdocdatabase.h +++ b/src/qdoc/qdocdatabase.h @@ -56,8 +56,7 @@ class QDocForest { private: friend class QDocDatabase; - QDocForest(QDocDatabase *qdb) - : qdb_(qdb), primaryTree_(nullptr), currentIndex_(0) { } + QDocForest(QDocDatabase *qdb) : qdb_(qdb), primaryTree_(nullptr), currentIndex_(0) {} ~QDocForest(); NamespaceNode *firstRoot(); @@ -66,16 +65,15 @@ private: Tree *nextTree(); Tree *primaryTree() { return primaryTree_; } Tree *findTree(const QString &t) { return forest_.value(t); } - QStringList keys() { - return forest_.keys(); - } + QStringList keys() { return forest_.keys(); } NamespaceNode *primaryTreeRoot() { return (primaryTree_ ? primaryTree_->root() : nullptr); } bool isEmpty() { return searchOrder().isEmpty(); } bool done() { return (currentIndex_ >= searchOrder().size()); } const QVector<Tree *> &searchOrder(); const QVector<Tree *> &indexSearchOrder(); void setSearchOrder(const QStringList &t); - bool isLoaded(const QString &fn) { + bool isLoaded(const QString &fn) + { for (const auto *tree : searchOrder()) { if (fn == tree->indexFileName()) return true; @@ -83,10 +81,9 @@ private: return false; } - const Node *findNode(const QStringList &path, - const Node *relative, - int findFlags, - Node::Genus genus) { + const Node *findNode(const QStringList &path, const Node *relative, int findFlags, + Node::Genus genus) + { for (const auto *tree : searchOrder()) { const Node *n = tree->findNode(path, relative, findFlags, genus); if (n) @@ -96,7 +93,8 @@ private: return nullptr; } - Node *findNodeByNameAndType(const QStringList &path, bool (Node::*isMatch) () const) { + Node *findNodeByNameAndType(const QStringList &path, bool (Node::*isMatch)() const) + { for (const auto *tree : searchOrder()) { Node *n = tree->findNodeByNameAndType(path, isMatch); if (n) @@ -105,7 +103,8 @@ private: return nullptr; } - ClassNode *findClassNode(const QStringList &path) { + ClassNode *findClassNode(const QStringList &path) + { for (const auto *tree : searchOrder()) { ClassNode *n = tree->findClassNode(path); if (n) @@ -114,7 +113,8 @@ private: return nullptr; } - Node *findNodeForInclude(const QStringList &path) { + Node *findNodeForInclude(const QStringList &path) + { for (const auto *tree : searchOrder()) { Node *n = tree->findNodeForInclude(path); if (n) @@ -123,13 +123,9 @@ private: return nullptr; } - const FunctionNode *findFunctionNode(const QStringList &path, - const Parameters ¶meters, - const Node *relative, - Node::Genus genus); - const Node *findNodeForTarget(QStringList &targetPath, - const Node *relative, - Node::Genus genus, + const FunctionNode *findFunctionNode(const QStringList &path, const Parameters ¶meters, + const Node *relative, Node::Genus genus); + const Node *findNodeForTarget(QStringList &targetPath, const Node *relative, Node::Genus genus, QString &ref); const Node *findTypeNode(const QStringList &path, const Node *relative, Node::Genus genus) @@ -228,16 +224,20 @@ public: CollectionNode *addQmlModule(const QString &name) { return primaryTree()->addQmlModule(name); } CollectionNode *addJsModule(const QString &name) { return primaryTree()->addJsModule(name); } - CollectionNode *addToGroup(const QString &name, Node *node) { + CollectionNode *addToGroup(const QString &name, Node *node) + { return primaryTree()->addToGroup(name, node); } - CollectionNode *addToModule(const QString &name, Node *node) { + CollectionNode *addToModule(const QString &name, Node *node) + { return primaryTree()->addToModule(name, node); } - CollectionNode *addToQmlModule(const QString &name, Node *node) { + CollectionNode *addToQmlModule(const QString &name, Node *node) + { return primaryTree()->addToQmlModule(name, node); } - CollectionNode *addToJsModule(const QString &name, Node *node) { + CollectionNode *addToJsModule(const QString &name, Node *node) + { return primaryTree()->addToJsModule(name, node); } @@ -246,7 +246,7 @@ public: QmlTypeNode *findQmlType(const QString &name); QmlTypeNode *findQmlType(const QString &qmid, const QString &name); - QmlTypeNode *findQmlType(const ImportRec& import, const QString &name); + QmlTypeNode *findQmlType(const ImportRec &import, const QString &name); Aggregate *findQmlBasicType(const QString &qmid, const QString &name); static NodeMultiMap &obsoleteClasses() { return obsoleteClasses_; } @@ -293,19 +293,20 @@ public: Many of these will be either eliminated or replaced. ********************************************************************/ void resolveStuff(); - void insertTarget(const QString &name, - const QString &title, - TargetRec::TargetType type, - Node *node, - int priority) { + void insertTarget(const QString &name, const QString &title, TargetRec::TargetType type, + Node *node, int priority) + { primaryTree()->insertTarget(name, title, type, node, priority); } /******************************************************************* The functions declared below are called for the current tree only. ********************************************************************/ - Aggregate *findRelatesNode(const QStringList &path) { return primaryTree()->findRelatesNode(path); } - Node *findNodeInOpenNamespace(QStringList &path, bool (Node::*) () const); + Aggregate *findRelatesNode(const QStringList &path) + { + return primaryTree()->findRelatesNode(path); + } + Node *findNodeInOpenNamespace(QStringList &path, bool (Node::*)() const); /*******************************************************************/ /***************************************************************************** @@ -319,40 +320,45 @@ public: ********************************************************************/ ClassNode *findClassNode(const QStringList &path) { return forest_.findClassNode(path); } Node *findNodeForInclude(const QStringList &path) { return forest_.findNodeForInclude(path); } - const FunctionNode *findFunctionNode(const QString &target, const Node *relative, Node::Genus genus); + const FunctionNode *findFunctionNode(const QString &target, const Node *relative, + Node::Genus genus); const Node *findTypeNode(const QString &type, const Node *relative, Node::Genus genus); const Node *findNodeForTarget(const QString &target, const Node *relative); - const PageNode *findPageNodeByTitle(const QString &title) { + const PageNode *findPageNodeByTitle(const QString &title) + { return forest_.findPageNodeByTitle(title); } - Node *findNodeByNameAndType(const QStringList &path, bool (Node::*isMatch) () const) { + Node *findNodeByNameAndType(const QStringList &path, bool (Node::*isMatch)() const) + { return forest_.findNodeByNameAndType(path, isMatch); } - const CollectionNode *getCollectionNode(const QString &name, Node::NodeType type) { + const CollectionNode *getCollectionNode(const QString &name, Node::NodeType type) + { return forest_.getCollectionNode(name, type); } - FunctionNode *findFunctionNodeForTag(QString tag) { return primaryTree()->findFunctionNodeForTag(tag); } + FunctionNode *findFunctionNodeForTag(QString tag) + { + return primaryTree()->findFunctionNodeForTag(tag); + } FunctionNode *findMacroNode(const QString &t) { return primaryTree()->findMacroNode(t); } private: - const Node *findNodeForTarget(QStringList &targetPath, - const Node *relative, - Node::Genus genus, - QString &ref) { + const Node *findNodeForTarget(QStringList &targetPath, const Node *relative, Node::Genus genus, + QString &ref) + { return forest_.findNodeForTarget(targetPath, relative, genus, ref); } - const FunctionNode *findFunctionNode(const QStringList &path, - const Parameters ¶meters, - const Node *relative, - Node::Genus genus) { + const FunctionNode *findFunctionNode(const QStringList &path, const Parameters ¶meters, + const Node *relative, Node::Genus genus) + { return forest_.findFunctionNode(path, parameters, relative, genus); } /*******************************************************************/ public: - void addPropertyFunction(PropertyNode *property, - const QString &funcName, - PropertyNode::FunctionRole funcRole) { + void addPropertyFunction(PropertyNode *property, const QString &funcName, + PropertyNode::FunctionRole funcRole) + { primaryTree()->addPropertyFunction(property, funcName, funcRole); } @@ -361,7 +367,8 @@ public: void generateTagFile(const QString &name, Generator *g); void readIndexes(const QStringList &indexFiles); - void generateIndex(const QString &fileName, const QString &url, const QString &title, Generator *g); + void generateIndex(const QString &fileName, const QString &url, const QString &title, + Generator *g); void clearOpenNamespaces() { openNamespaces_.clear(); } void insertOpenNamespace(const QString &path) { openNamespaces_.insert(path); } @@ -370,7 +377,7 @@ public: void processForest(); // Try to make this function private. - QDocForest& forest() { return forest_; } + QDocForest &forest() { return forest_; } NamespaceNode *primaryTreeRoot() { return forest_.primaryTreeRoot(); } void newPrimaryTree(const QString &module) { forest_.newPrimaryTree(module); } void setPrimaryTree(const QString &t) { forest_.setPrimaryTree(t); } @@ -385,17 +392,16 @@ public: void incrementLinkCount(const Node *t) { t->tree()->incrementLinkCount(); } void clearLinkCounts() { forest_.clearLinkCounts(); } void printLinkCounts(const QString &t) { forest_.printLinkCounts(t); } - QString getLinkCounts(QStringList &strings, QVector<int> &counts) { + QString getLinkCounts(QStringList &strings, QVector<int> &counts) + { return forest_.getLinkCounts(strings, counts); } - QString getNewLinkTarget(const Node *locNode, - const Node *t, - const QString &fileName, - QString &text, - bool broken = false) { + QString getNewLinkTarget(const Node *locNode, const Node *t, const QString &fileName, + QString &text, bool broken = false) + { return primaryTree()->getNewLinkTarget(locNode, t, fileName, text, broken); } - TargetList* getTargetList(const QString &t) { return primaryTree()->getTargetList(t); } + TargetList *getTargetList(const QString &t) { return primaryTree()->getTargetList(t); } QStringList getTargetListKeys() { return primaryTree()->getTargetListKeys(); } QStringList keys() { return forest_.keys(); } void resolveNamespaces(); @@ -405,20 +411,19 @@ public: private: friend class Tree; - const Node *findNode(const QStringList &path, - const Node *relative, - int findFlags, - Node::Genus genus) { + const Node *findNode(const QStringList &path, const Node *relative, int findFlags, + Node::Genus genus) + { return forest_.findNode(path, relative, findFlags, genus); } - void processForest(void (QDocDatabase::*) (Aggregate*)); + void processForest(void (QDocDatabase::*)(Aggregate *)); bool isLoaded(const QString &t) { return forest_.isLoaded(t); } static void initializeDB(); private: QDocDatabase(); - QDocDatabase(QDocDatabase const &) : showInternal_(false), forest_(this) { } - QDocDatabase& operator=(QDocDatabase const &); + QDocDatabase(QDocDatabase const &) : showInternal_(false), forest_(this) {} + QDocDatabase &operator=(QDocDatabase const &); public: static bool debug; diff --git a/src/qdoc/qdocindexfiles.cpp b/src/qdoc/qdocindexfiles.cpp index 022d658b1..1b247fe24 100644 --- a/src/qdoc/qdocindexfiles.cpp +++ b/src/qdoc/qdocindexfiles.cpp @@ -61,13 +61,12 @@ static IndexSectionWriter *post_ = nullptr; This class handles qdoc index files. */ -QDocIndexFiles* QDocIndexFiles::qdocIndexFiles_ = nullptr; +QDocIndexFiles *QDocIndexFiles::qdocIndexFiles_ = nullptr; /*! Constructs the singleton QDocIndexFiles. */ -QDocIndexFiles::QDocIndexFiles() - : gen_(nullptr) +QDocIndexFiles::QDocIndexFiles() : gen_(nullptr) { qdb_ = QDocDatabase::qdocDB(); } @@ -85,11 +84,11 @@ QDocIndexFiles::~QDocIndexFiles() Creates the singleton. Allows only one instance of the class to be created. Returns a pointer to the singleton. */ -QDocIndexFiles* QDocIndexFiles::qdocIndexFiles() +QDocIndexFiles *QDocIndexFiles::qdocIndexFiles() { - if (qdocIndexFiles_ == nullptr) - qdocIndexFiles_ = new QDocIndexFiles; - return qdocIndexFiles_; + if (qdocIndexFiles_ == nullptr) + qdocIndexFiles_ = new QDocIndexFiles; + return qdocIndexFiles_; } /*! @@ -144,11 +143,10 @@ void QDocIndexFiles::readIndexFile(const QString &path) QString indexUrl; if (Config::installDir.isEmpty()) { indexUrl = attrs.value(QLatin1String("url")).toString(); - } - else { + } else { // Use a fake directory, since we will copy the output to a sub directory of // installDir when using "make install". This is just for a proper relative path. - //QDir installDir(path.section('/', 0, -3) + "/outputdir"); + // QDir installDir(path.section('/', 0, -3) + "/outputdir"); QDir installDir(path.section('/', 0, -3) + '/' + Generator::outputSubdir()); indexUrl = installDir.relativeFilePath(path).section('/', 0, -2); } @@ -180,8 +178,7 @@ void QDocIndexFiles::readIndexFile(const QString &path) Read a <section> element from the index file and create the appropriate node(s). */ -void QDocIndexFiles::readIndexSection(QXmlStreamReader& reader, - Node *current, +void QDocIndexFiles::readIndexSection(QXmlStreamReader &reader, Node *current, const QString &indexUrl) { QXmlStreamAttributes attributes = reader.attributes(); @@ -211,8 +208,8 @@ void QDocIndexFiles::readIndexSection(QXmlStreamReader& reader, location = Location(indexUrl + QLatin1Char('/') + name.toLower() + ".html"); else if (!indexUrl.isNull()) location = Location(name.toLower() + ".html"); - } else if (elementName == QLatin1String("class") || elementName == QLatin1String("struct") || - elementName == QLatin1String("union")) { + } else if (elementName == QLatin1String("class") || elementName == QLatin1String("struct") + || elementName == QLatin1String("union")) { Node::NodeType type = Node::Class; if (elementName == QLatin1String("class")) type = Node::Class; @@ -224,7 +221,8 @@ void QDocIndexFiles::readIndexSection(QXmlStreamReader& reader, if (attributes.hasAttribute(QLatin1String("bases"))) { QString bases = attributes.value(QLatin1String("bases")).toString(); if (!bases.isEmpty()) - basesList_.append(QPair<ClassNode *, QString>(static_cast<ClassNode *>(node), bases)); + basesList_.append( + QPair<ClassNode *, QString>(static_cast<ClassNode *>(node), bases)); } if (!indexUrl.isEmpty()) location = Location(indexUrl + QLatin1Char('/') + name.toLower() + ".html"); @@ -397,8 +395,7 @@ void QDocIndexFiles::readIndexSection(QXmlStreamReader& reader, if (subtype == QDocAttrFile) { en->appendFile(name); goto done; - } - else if (subtype == QDocAttrImage) { + } else if (subtype == QDocAttrImage) { en->appendImage(name); goto done; } @@ -434,7 +431,8 @@ void QDocIndexFiles::readIndexSection(QXmlStreamReader& reader, QXmlStreamAttributes childAttributes = reader.attributes(); if (reader.name() == QLatin1String("value")) { - EnumItem item(childAttributes.value(QLatin1String("name")).toString(), childAttributes.value(QLatin1String("value")).toString()); + EnumItem item(childAttributes.value(QLatin1String("name")).toString(), + childAttributes.value(QLatin1String("value")).toString()); enumNode->addItem(item); } else if (reader.name() == QLatin1String("keyword")) { insertTarget(TargetRec::Keyword, childAttributes, enumNode); @@ -520,7 +518,7 @@ void QDocIndexFiles::readIndexSection(QXmlStreamReader& reader, node = fn; if (!indexUrl.isEmpty()) - location = Location(indexUrl + QLatin1Char('/') + parent->name().toLower() + ".html"); + location = Location(indexUrl + QLatin1Char('/') + parent->name().toLower() + ".html"); else if (!indexUrl.isNull()) location = Location(parent->name().toLower() + ".html"); @@ -561,7 +559,8 @@ void QDocIndexFiles::readIndexSection(QXmlStreamReader& reader, else node->setAccess(Node::Public); if (attributes.hasAttribute(QLatin1String("related"))) - node->setRelatedNonmember(attributes.value(QLatin1String("related")) == QLatin1String("true")); + node->setRelatedNonmember(attributes.value(QLatin1String("related")) + == QLatin1String("true")); if (attributes.hasAttribute(QLatin1String("threadsafety"))) { QString threadSafety = attributes.value(QLatin1String("threadsafety")).toString(); @@ -573,8 +572,7 @@ void QDocIndexFiles::readIndexSection(QXmlStreamReader& reader, node->setThreadSafeness(Node::ThreadSafe); else node->setThreadSafeness(Node::UnspecifiedSafeness); - } - else + } else node->setThreadSafeness(Node::UnspecifiedSafeness); QString status = attributes.value(QLatin1String("status")).toString(); @@ -647,7 +645,7 @@ void QDocIndexFiles::readIndexSection(QXmlStreamReader& reader, } } - done: +done: while (!reader.isEndElement()) { if (reader.readNext() == QXmlStreamReader::Invalid) { break; @@ -656,8 +654,7 @@ void QDocIndexFiles::readIndexSection(QXmlStreamReader& reader, } void QDocIndexFiles::insertTarget(TargetRec::TargetType type, - const QXmlStreamAttributes &attributes, - Node *node) + const QXmlStreamAttributes &attributes, Node *node) { int priority; switch (type) { @@ -768,7 +765,8 @@ static const QString getThreadSafenessString(Node::ThreadSafeness t) \note Function nodes are processed in generateFunctionSection() */ -bool QDocIndexFiles::generateIndexSection(QXmlStreamWriter &writer, Node *node, IndexSectionWriter *post) +bool QDocIndexFiles::generateIndexSection(QXmlStreamWriter &writer, Node *node, + IndexSectionWriter *post) { if (gen_ == nullptr) gen_ = Generator::currentGenerator(); @@ -913,8 +911,7 @@ bool QDocIndexFiles::generateIndexSection(QXmlStreamWriter &writer, Node *node, if (fullName != objName) writer.writeAttribute("fullname", fullName); href = gen_->fullDocumentLocation(node); - } - else + } else href = node->name(); if (node->isQmlNode() || node->isJsNode()) { Aggregate *p = node->parent(); @@ -951,274 +948,247 @@ bool QDocIndexFiles::generateIndexSection(QXmlStreamWriter &writer, Node *node, switch (node->nodeType()) { case Node::Class: case Node::Struct: - case Node::Union: - { - // Classes contain information about their base classes. - const ClassNode *classNode = static_cast<const ClassNode *>(node); - const QVector<RelatedClass> bases = classNode->baseClasses(); - QSet<QString> baseStrings; - for (const auto &related : bases) { - ClassNode *n = related.node_; - if (n) - baseStrings.insert(n->fullName()); - else if (!related.path_.isEmpty()) - baseStrings.insert(related.path_.join(QLatin1String("::"))); - } - if (!baseStrings.isEmpty()) - { - QStringList baseStringsAsList = baseStrings.values(); - baseStringsAsList.sort(); - writer.writeAttribute("bases", baseStringsAsList.join(QLatin1Char(','))); - } - if (!node->physicalModuleName().isEmpty()) - writer.writeAttribute("module", node->physicalModuleName()); - if (!classNode->groupNames().isEmpty()) - writer.writeAttribute("groups", classNode->groupNames().join(QLatin1Char(','))); - if (!brief.isEmpty()) - writer.writeAttribute("brief", brief); - } - break; - case Node::HeaderFile: - { - const HeaderNode *hn = static_cast<const HeaderNode *>(node); - if (!hn->physicalModuleName().isEmpty()) - writer.writeAttribute("module", hn->physicalModuleName()); - if (!hn->groupNames().isEmpty()) - writer.writeAttribute("groups", hn->groupNames().join(QLatin1Char(','))); - if (!brief.isEmpty()) - writer.writeAttribute("brief", brief); - writer.writeAttribute("title", hn->title()); - writer.writeAttribute("fulltitle", hn->fullTitle()); - writer.writeAttribute("subtitle", hn->subtitle()); + case Node::Union: { + // Classes contain information about their base classes. + const ClassNode *classNode = static_cast<const ClassNode *>(node); + const QVector<RelatedClass> bases = classNode->baseClasses(); + QSet<QString> baseStrings; + for (const auto &related : bases) { + ClassNode *n = related.node_; + if (n) + baseStrings.insert(n->fullName()); + else if (!related.path_.isEmpty()) + baseStrings.insert(related.path_.join(QLatin1String("::"))); } - break; - case Node::Namespace: - { - const NamespaceNode *ns = static_cast<const NamespaceNode *>(node); - if (!ns->physicalModuleName().isEmpty()) - writer.writeAttribute("module", ns->physicalModuleName()); - if (!ns->groupNames().isEmpty()) - writer.writeAttribute("groups", ns->groupNames().join(QLatin1Char(','))); - if (!brief.isEmpty()) - writer.writeAttribute("brief", brief); + if (!baseStrings.isEmpty()) { + QStringList baseStringsAsList = baseStrings.values(); + baseStringsAsList.sort(); + writer.writeAttribute("bases", baseStringsAsList.join(QLatin1Char(','))); } - break; + if (!node->physicalModuleName().isEmpty()) + writer.writeAttribute("module", node->physicalModuleName()); + if (!classNode->groupNames().isEmpty()) + writer.writeAttribute("groups", classNode->groupNames().join(QLatin1Char(','))); + if (!brief.isEmpty()) + writer.writeAttribute("brief", brief); + } break; + case Node::HeaderFile: { + const HeaderNode *hn = static_cast<const HeaderNode *>(node); + if (!hn->physicalModuleName().isEmpty()) + writer.writeAttribute("module", hn->physicalModuleName()); + if (!hn->groupNames().isEmpty()) + writer.writeAttribute("groups", hn->groupNames().join(QLatin1Char(','))); + if (!brief.isEmpty()) + writer.writeAttribute("brief", brief); + writer.writeAttribute("title", hn->title()); + writer.writeAttribute("fulltitle", hn->fullTitle()); + writer.writeAttribute("subtitle", hn->subtitle()); + } break; + case Node::Namespace: { + const NamespaceNode *ns = static_cast<const NamespaceNode *>(node); + if (!ns->physicalModuleName().isEmpty()) + writer.writeAttribute("module", ns->physicalModuleName()); + if (!ns->groupNames().isEmpty()) + writer.writeAttribute("groups", ns->groupNames().join(QLatin1Char(','))); + if (!brief.isEmpty()) + writer.writeAttribute("brief", brief); + } break; case Node::JsType: - case Node::QmlType: - { - const QmlTypeNode *qcn = static_cast<const QmlTypeNode *>(node); - writer.writeAttribute("title", qcn->title()); - writer.writeAttribute("fulltitle", qcn->fullTitle()); - writer.writeAttribute("subtitle", qcn->subtitle()); - if (!qcn->groupNames().isEmpty()) - writer.writeAttribute("groups", qcn->groupNames().join(QLatin1Char(','))); - if (!brief.isEmpty()) - writer.writeAttribute("brief", brief); - } - break; + case Node::QmlType: { + const QmlTypeNode *qcn = static_cast<const QmlTypeNode *>(node); + writer.writeAttribute("title", qcn->title()); + writer.writeAttribute("fulltitle", qcn->fullTitle()); + writer.writeAttribute("subtitle", qcn->subtitle()); + if (!qcn->groupNames().isEmpty()) + writer.writeAttribute("groups", qcn->groupNames().join(QLatin1Char(','))); + if (!brief.isEmpty()) + writer.writeAttribute("brief", brief); + } break; case Node::Page: case Node::Example: - case Node::ExternalPage: - { - /* - Page nodes (anything that generates a doc page) - no longer have a subtype. Some of the subtypes - (Example, External, and Header) have been promoted - to be node types. They have become subclasses of - PageNode or, in the case of Header, a subclass of - Aggregate. The processing for other subtypes that - have not (yet) been promoted to be node types is - determined by the PageType enum. - */ - bool writeModuleName = false; - if (node->isExample()) { - writer.writeAttribute("subtype", "example"); - writeModuleName = true; - } else if (node->isExternalPage()) { - writer.writeAttribute("subtype", "externalpage"); - } else { - if (node->pageType() == Node::AttributionPage) - writer.writeAttribute("subtype", "attribution"); - else - writer.writeAttribute("subtype", "page"); - writeModuleName = true; - } - const PageNode *pn = static_cast<const PageNode *>(node); - writer.writeAttribute("title", pn->title()); - writer.writeAttribute("fulltitle", pn->fullTitle()); - writer.writeAttribute("subtitle", pn->subtitle()); - if (!node->physicalModuleName().isEmpty() && writeModuleName) - writer.writeAttribute("module", node->physicalModuleName()); - if (!pn->groupNames().isEmpty()) - writer.writeAttribute("groups", pn->groupNames().join(QLatin1Char(','))); - if (!brief.isEmpty()) - writer.writeAttribute("brief", brief); + case Node::ExternalPage: { + /* + Page nodes (anything that generates a doc page) + no longer have a subtype. Some of the subtypes + (Example, External, and Header) have been promoted + to be node types. They have become subclasses of + PageNode or, in the case of Header, a subclass of + Aggregate. The processing for other subtypes that + have not (yet) been promoted to be node types is + determined by the PageType enum. + */ + bool writeModuleName = false; + if (node->isExample()) { + writer.writeAttribute("subtype", "example"); + writeModuleName = true; + } else if (node->isExternalPage()) { + writer.writeAttribute("subtype", "externalpage"); + } else { + if (node->pageType() == Node::AttributionPage) + writer.writeAttribute("subtype", "attribution"); + else + writer.writeAttribute("subtype", "page"); + writeModuleName = true; } - break; - case Node::Group: - { - const CollectionNode *cn = static_cast<const CollectionNode *>(node); - writer.writeAttribute("seen", cn->wasSeen() ? "true" : "false"); - writer.writeAttribute("title", cn->title()); - if (!cn->subtitle().isEmpty()) - writer.writeAttribute("subtitle", cn->subtitle()); - if (!cn->physicalModuleName().isEmpty()) - writer.writeAttribute("module", cn->physicalModuleName()); - if (!cn->groupNames().isEmpty()) - writer.writeAttribute("groups", cn->groupNames().join(QLatin1Char(','))); - /* - This is not read back in, so it probably - shouldn't be written out in the first place. - */ - if (!cn->members().isEmpty()) { - QStringList names; - const auto &members = cn->members(); - for (const Node *member : members) - names.append(member->name()); - writer.writeAttribute("members", names.join(QLatin1Char(','))); - } - if (!brief.isEmpty()) - writer.writeAttribute("brief", brief); + const PageNode *pn = static_cast<const PageNode *>(node); + writer.writeAttribute("title", pn->title()); + writer.writeAttribute("fulltitle", pn->fullTitle()); + writer.writeAttribute("subtitle", pn->subtitle()); + if (!node->physicalModuleName().isEmpty() && writeModuleName) + writer.writeAttribute("module", node->physicalModuleName()); + if (!pn->groupNames().isEmpty()) + writer.writeAttribute("groups", pn->groupNames().join(QLatin1Char(','))); + if (!brief.isEmpty()) + writer.writeAttribute("brief", brief); + } break; + case Node::Group: { + const CollectionNode *cn = static_cast<const CollectionNode *>(node); + writer.writeAttribute("seen", cn->wasSeen() ? "true" : "false"); + writer.writeAttribute("title", cn->title()); + if (!cn->subtitle().isEmpty()) + writer.writeAttribute("subtitle", cn->subtitle()); + if (!cn->physicalModuleName().isEmpty()) + writer.writeAttribute("module", cn->physicalModuleName()); + if (!cn->groupNames().isEmpty()) + writer.writeAttribute("groups", cn->groupNames().join(QLatin1Char(','))); + /* + This is not read back in, so it probably + shouldn't be written out in the first place. + */ + if (!cn->members().isEmpty()) { + QStringList names; + const auto &members = cn->members(); + for (const Node *member : members) + names.append(member->name()); + writer.writeAttribute("members", names.join(QLatin1Char(','))); } - break; - case Node::Module: - { - const CollectionNode *cn = static_cast<const CollectionNode *>(node); - writer.writeAttribute("seen", cn->wasSeen() ? "true" : "false"); - writer.writeAttribute("title", cn->title()); - if (!cn->subtitle().isEmpty()) - writer.writeAttribute("subtitle", cn->subtitle()); - if (!cn->physicalModuleName().isEmpty()) - writer.writeAttribute("module", cn->physicalModuleName()); - if (!cn->groupNames().isEmpty()) - writer.writeAttribute("groups", cn->groupNames().join(QLatin1Char(','))); - /* - This is not read back in, so it probably - shouldn't be written out in the first place. - */ - if (!cn->members().isEmpty()) { - QStringList names; - const auto &members = cn->members(); - for (const Node *member : members) - names.append(member->name()); - writer.writeAttribute("members", names.join(QLatin1Char(','))); - } - if (!brief.isEmpty()) - writer.writeAttribute("brief", brief); + if (!brief.isEmpty()) + writer.writeAttribute("brief", brief); + } break; + case Node::Module: { + const CollectionNode *cn = static_cast<const CollectionNode *>(node); + writer.writeAttribute("seen", cn->wasSeen() ? "true" : "false"); + writer.writeAttribute("title", cn->title()); + if (!cn->subtitle().isEmpty()) + writer.writeAttribute("subtitle", cn->subtitle()); + if (!cn->physicalModuleName().isEmpty()) + writer.writeAttribute("module", cn->physicalModuleName()); + if (!cn->groupNames().isEmpty()) + writer.writeAttribute("groups", cn->groupNames().join(QLatin1Char(','))); + /* + This is not read back in, so it probably + shouldn't be written out in the first place. + */ + if (!cn->members().isEmpty()) { + QStringList names; + const auto &members = cn->members(); + for (const Node *member : members) + names.append(member->name()); + writer.writeAttribute("members", names.join(QLatin1Char(','))); } - break; + if (!brief.isEmpty()) + writer.writeAttribute("brief", brief); + } break; case Node::JsModule: - case Node::QmlModule: - { - const CollectionNode *cn = static_cast<const CollectionNode *>(node); - writer.writeAttribute("seen", cn->wasSeen() ? "true" : "false"); - writer.writeAttribute("title", cn->title()); - if (!cn->subtitle().isEmpty()) - writer.writeAttribute("subtitle", cn->subtitle()); - if (!cn->physicalModuleName().isEmpty()) - writer.writeAttribute("module", cn->physicalModuleName()); - if (!cn->groupNames().isEmpty()) - writer.writeAttribute("groups", cn->groupNames().join(QLatin1Char(','))); - /* - This is not read back in, so it probably - shouldn't be written out in the first place. - */ - if (!cn->members().isEmpty()) { - QStringList names; - const auto &members = cn->members(); - for (const Node *member : members) - names.append(member->name()); - writer.writeAttribute("members", names.join(QLatin1Char(','))); - } - if (!brief.isEmpty()) - writer.writeAttribute("brief", brief); + case Node::QmlModule: { + const CollectionNode *cn = static_cast<const CollectionNode *>(node); + writer.writeAttribute("seen", cn->wasSeen() ? "true" : "false"); + writer.writeAttribute("title", cn->title()); + if (!cn->subtitle().isEmpty()) + writer.writeAttribute("subtitle", cn->subtitle()); + if (!cn->physicalModuleName().isEmpty()) + writer.writeAttribute("module", cn->physicalModuleName()); + if (!cn->groupNames().isEmpty()) + writer.writeAttribute("groups", cn->groupNames().join(QLatin1Char(','))); + /* + This is not read back in, so it probably + shouldn't be written out in the first place. + */ + if (!cn->members().isEmpty()) { + QStringList names; + const auto &members = cn->members(); + for (const Node *member : members) + names.append(member->name()); + writer.writeAttribute("members", names.join(QLatin1Char(','))); } - break; + if (!brief.isEmpty()) + writer.writeAttribute("brief", brief); + } break; case Node::JsProperty: - case Node::QmlProperty: - { - QmlPropertyNode *qpn = static_cast<QmlPropertyNode *>(node); - writer.writeAttribute("type", qpn->dataType()); - writer.writeAttribute("attached", qpn->isAttached() ? "true" : "false"); - writer.writeAttribute("writable", qpn->isWritable() ? "true" : "false"); - if (!brief.isEmpty()) - writer.writeAttribute("brief", brief); - } - break; - case Node::Property: - { - const PropertyNode *propertyNode = static_cast<const PropertyNode *>(node); - writer.writeAttribute("type", propertyNode->dataType()); - if (!brief.isEmpty()) - writer.writeAttribute("brief", brief); - const auto &getters = propertyNode->getters(); - for (const auto *fnNode : getters) { - if (fnNode) { - const FunctionNode *functionNode = static_cast<const FunctionNode *>(fnNode); - writer.writeStartElement("getter"); - writer.writeAttribute("name", functionNode->name()); - writer.writeEndElement(); // getter - } - } - const auto &setters = propertyNode->setters(); - for (const auto *fnNode : setters) { - if (fnNode) { - const FunctionNode *functionNode = static_cast<const FunctionNode *>(fnNode); - writer.writeStartElement("setter"); - writer.writeAttribute("name", functionNode->name()); - writer.writeEndElement(); // setter - } - } - const auto &resetters = propertyNode->resetters(); - for (const auto *fnNode : resetters) { - if (fnNode) { - const FunctionNode *functionNode = static_cast<const FunctionNode *>(fnNode); - writer.writeStartElement("resetter"); - writer.writeAttribute("name", functionNode->name()); - writer.writeEndElement(); // resetter - } + case Node::QmlProperty: { + QmlPropertyNode *qpn = static_cast<QmlPropertyNode *>(node); + writer.writeAttribute("type", qpn->dataType()); + writer.writeAttribute("attached", qpn->isAttached() ? "true" : "false"); + writer.writeAttribute("writable", qpn->isWritable() ? "true" : "false"); + if (!brief.isEmpty()) + writer.writeAttribute("brief", brief); + } break; + case Node::Property: { + const PropertyNode *propertyNode = static_cast<const PropertyNode *>(node); + writer.writeAttribute("type", propertyNode->dataType()); + if (!brief.isEmpty()) + writer.writeAttribute("brief", brief); + const auto &getters = propertyNode->getters(); + for (const auto *fnNode : getters) { + if (fnNode) { + const FunctionNode *functionNode = static_cast<const FunctionNode *>(fnNode); + writer.writeStartElement("getter"); + writer.writeAttribute("name", functionNode->name()); + writer.writeEndElement(); // getter } - const auto ¬ifiers = propertyNode->notifiers(); - for (const auto *fnNode : notifiers) { - if (fnNode) { - const FunctionNode *functionNode = static_cast<const FunctionNode *>(fnNode); - writer.writeStartElement("notifier"); - writer.writeAttribute("name", functionNode->name()); - writer.writeEndElement(); // notifier - } + } + const auto &setters = propertyNode->setters(); + for (const auto *fnNode : setters) { + if (fnNode) { + const FunctionNode *functionNode = static_cast<const FunctionNode *>(fnNode); + writer.writeStartElement("setter"); + writer.writeAttribute("name", functionNode->name()); + writer.writeEndElement(); // setter } } - break; - case Node::Variable: - { - const VariableNode *variableNode = static_cast<const VariableNode *>(node); - writer.writeAttribute("type", variableNode->dataType()); - writer.writeAttribute("static", variableNode->isStatic() ? "true" : "false"); - if (!brief.isEmpty()) - writer.writeAttribute("brief", brief); + const auto &resetters = propertyNode->resetters(); + for (const auto *fnNode : resetters) { + if (fnNode) { + const FunctionNode *functionNode = static_cast<const FunctionNode *>(fnNode); + writer.writeStartElement("resetter"); + writer.writeAttribute("name", functionNode->name()); + writer.writeEndElement(); // resetter + } } - break; - case Node::Enum: - { - const EnumNode *enumNode = static_cast<const EnumNode *>(node); - if (enumNode->flagsType()) - writer.writeAttribute("typedef",enumNode->flagsType()->fullDocumentName()); - const auto &items = enumNode->items(); - for (const auto &item : items) { - writer.writeStartElement("value"); - writer.writeAttribute("name", item.name()); - writer.writeAttribute("value", item.value()); - writer.writeEndElement(); // value + const auto ¬ifiers = propertyNode->notifiers(); + for (const auto *fnNode : notifiers) { + if (fnNode) { + const FunctionNode *functionNode = static_cast<const FunctionNode *>(fnNode); + writer.writeStartElement("notifier"); + writer.writeAttribute("name", functionNode->name()); + writer.writeEndElement(); // notifier } } - break; - case Node::Typedef: - { - const TypedefNode *typedefNode = static_cast<const TypedefNode *>(node); - if (typedefNode->associatedEnum()) - writer.writeAttribute("enum",typedefNode->associatedEnum()->fullDocumentName()); + } break; + case Node::Variable: { + const VariableNode *variableNode = static_cast<const VariableNode *>(node); + writer.writeAttribute("type", variableNode->dataType()); + writer.writeAttribute("static", variableNode->isStatic() ? "true" : "false"); + if (!brief.isEmpty()) + writer.writeAttribute("brief", brief); + } break; + case Node::Enum: { + const EnumNode *enumNode = static_cast<const EnumNode *>(node); + if (enumNode->flagsType()) + writer.writeAttribute("typedef", enumNode->flagsType()->fullDocumentName()); + const auto &items = enumNode->items(); + for (const auto &item : items) { + writer.writeStartElement("value"); + writer.writeAttribute("name", item.name()); + writer.writeAttribute("value", item.value()); + writer.writeEndElement(); // value } - break; + } break; + case Node::Typedef: { + const TypedefNode *typedefNode = static_cast<const TypedefNode *>(node); + if (typedefNode->associatedEnum()) + writer.writeAttribute("enum", typedefNode->associatedEnum()->fullDocumentName()); + } break; case Node::Function: // Now processed in generateFunctionSection() default: break; @@ -1243,7 +1213,7 @@ bool QDocIndexFiles::generateIndexSection(QXmlStreamWriter &writer, Node *node, const auto &targets = node->doc().targets(); for (const Atom *target : targets) { QString title = target->string(); - QString name = Doc::canonicalTitle(title); + QString name = Doc::canonicalTitle(title); writer.writeStartElement("target"); if (!external) writer.writeAttribute("name", name); @@ -1258,7 +1228,7 @@ bool QDocIndexFiles::generateIndexSection(QXmlStreamWriter &writer, Node *node, const auto &keywords = node->doc().keywords(); for (const Atom *keyword : keywords) { QString title = keyword->string(); - QString name = Doc::canonicalTitle(title); + QString name = Doc::canonicalTitle(title); writer.writeStartElement("keyword"); writer.writeAttribute("name", name); if (name != title) @@ -1344,7 +1314,7 @@ void QDocIndexFiles::generateFunctionSection(QXmlStreamWriter &writer, FunctionN if (!href.isEmpty()) writer.writeAttribute("href", href); if (fn->threadSafeness() != Node::UnspecifiedSafeness) - writer.writeAttribute("threadsafety", getThreadSafenessString(fn->threadSafeness())); + writer.writeAttribute("threadsafety", getThreadSafenessString(fn->threadSafeness())); writer.writeAttribute("status", getStatusString(fn->status())); writer.writeAttribute("access", getAccessString(fn->access())); @@ -1366,11 +1336,11 @@ void QDocIndexFiles::generateFunctionSection(QXmlStreamWriter &writer, FunctionN QString brief = fn->doc().trimmedBriefText(fn->name()).toString(); writer.writeAttribute("meta", fn->metanessString()); if (fn->isCppNode()) { - writer.writeAttribute("virtual", fn->virtualness()); - writer.writeAttribute("const", fn->isConst() ? "true" : "false"); - writer.writeAttribute("static", fn->isStatic() ? "true" : "false"); - writer.writeAttribute("final", fn->isFinal() ? "true" : "false"); - writer.writeAttribute("override", fn->isOverride() ? "true" : "false"); + writer.writeAttribute("virtual", fn->virtualness()); + writer.writeAttribute("const", fn->isConst() ? "true" : "false"); + writer.writeAttribute("static", fn->isStatic() ? "true" : "false"); + writer.writeAttribute("final", fn->isFinal() ? "true" : "false"); + writer.writeAttribute("override", fn->isOverride() ? "true" : "false"); /* This ensures that for functions that have overloads, the first function written is the one that is not an @@ -1391,7 +1361,8 @@ void QDocIndexFiles::generateFunctionSection(QXmlStreamWriter &writer, FunctionN associatedProperties << node->name(); } associatedProperties.sort(); - writer.writeAttribute("associated-property", associatedProperties.join(QLatin1Char(','))); + writer.writeAttribute("associated-property", + associatedProperties.join(QLatin1Char(','))); } writer.writeAttribute("type", fn->returnType()); if (!brief.isEmpty()) @@ -1464,14 +1435,15 @@ void QDocIndexFiles::generateFunctionSections(QXmlStreamWriter &writer, Aggregat Generate index sections for the child nodes of the given \a node using the \a writer specified. */ -void QDocIndexFiles::generateIndexSections(QXmlStreamWriter &writer, Node *node, IndexSectionWriter *post) +void QDocIndexFiles::generateIndexSections(QXmlStreamWriter &writer, Node *node, + IndexSectionWriter *post) { /* Note that groups, modules, and QML modules are written after all the other nodes. */ - if (node->isCollectionNode() || - node->isGroup() || node->isModule() || node->isQmlModule() || node->isJsModule()) + if (node->isCollectionNode() || node->isGroup() || node->isModule() || node->isQmlModule() + || node->isJsModule()) return; if (generateIndexSection(writer, node, post)) { @@ -1537,10 +1509,8 @@ void QDocIndexFiles::generateIndexSections(QXmlStreamWriter &writer, Node *node, \a g is used to get the Config object that contains the variables from the module's .qdocconf file. */ -void QDocIndexFiles::generateIndex(const QString &fileName, - const QString &url, - const QString &title, - Generator *g) +void QDocIndexFiles::generateIndex(const QString &fileName, const QString &url, + const QString &title, Generator *g) { QFile file(fileName); if (!file.open(QFile::WriteOnly | QFile::Text)) diff --git a/src/qdoc/qdocindexfiles.h b/src/qdoc/qdocindexfiles.h index 0e758049a..96e73a9ed 100644 --- a/src/qdoc/qdocindexfiles.h +++ b/src/qdoc/qdocindexfiles.h @@ -57,7 +57,7 @@ class QDocIndexFiles friend class WebXMLGenerator; // for using generateIndexSections() private: - static QDocIndexFiles* qdocIndexFiles(); + static QDocIndexFiles *qdocIndexFiles(); static void destroyQDocIndexFiles(); QDocIndexFiles(); @@ -66,21 +66,25 @@ private: void readIndexes(const QStringList &indexFiles); void readIndexFile(const QString &path); void readIndexSection(QXmlStreamReader &reader, Node *current, const QString &indexUrl); - void insertTarget(TargetRec::TargetType type, const QXmlStreamAttributes &attributes, Node *node); + void insertTarget(TargetRec::TargetType type, const QXmlStreamAttributes &attributes, + Node *node); void resolveIndex(); - void generateIndex(const QString &fileName, const QString &url, const QString &title, Generator *g); + void generateIndex(const QString &fileName, const QString &url, const QString &title, + Generator *g); void generateFunctionSection(QXmlStreamWriter &writer, FunctionNode *fn); void generateFunctionSections(QXmlStreamWriter &writer, Aggregate *aggregate); - bool generateIndexSection(QXmlStreamWriter &writer, Node *node, IndexSectionWriter *post = nullptr); - void generateIndexSections(QXmlStreamWriter &writer, Node *node, IndexSectionWriter *post = nullptr); + bool generateIndexSection(QXmlStreamWriter &writer, Node *node, + IndexSectionWriter *post = nullptr); + void generateIndexSections(QXmlStreamWriter &writer, Node *node, + IndexSectionWriter *post = nullptr); private: - static QDocIndexFiles* qdocIndexFiles_; + static QDocIndexFiles *qdocIndexFiles_; QDocDatabase *qdb_; Generator *gen_; QString project_; - QVector<QPair<ClassNode *, QString> > basesList_; + QVector<QPair<ClassNode *, QString>> basesList_; }; QT_END_NAMESPACE diff --git a/src/qdoc/qdoctagfiles.cpp b/src/qdoc/qdoctagfiles.cpp index cd4e9e0e5..8d97ce48a 100644 --- a/src/qdoc/qdoctagfiles.cpp +++ b/src/qdoc/qdoctagfiles.cpp @@ -74,9 +74,9 @@ QDocTagFiles::~QDocTagFiles() */ QDocTagFiles *QDocTagFiles::qdocTagFiles() { - if (qdocTagFiles_ == nullptr) - qdocTagFiles_ = new QDocTagFiles; - return qdocTagFiles_; + if (qdocTagFiles_ == nullptr) + qdocTagFiles_ = new QDocTagFiles; + return qdocTagFiles_; } /*! @@ -243,85 +243,80 @@ void QDocTagFiles::generateTagFileMembers(QXmlStreamWriter &writer, const Aggreg writer.writeCharacters(node->fullDocumentName()); writer.writeEndElement(); break; - case Node::Function: - { - /* - Function nodes contain information about - the type of function being described. - */ - - const FunctionNode *functionNode = static_cast<const FunctionNode *>(node); - writer.writeAttribute("protection", access); - writer.writeAttribute("virtualness", functionNode->virtualness()); - writer.writeAttribute("static", functionNode->isStatic() ? "yes" : "no"); - - if (functionNode->isNonvirtual()) - writer.writeTextElement("type", functionNode->returnType()); - else - writer.writeTextElement("type", "virtual " + functionNode->returnType()); - - writer.writeTextElement("name", objName); - QStringList pieces = gen_->fullDocumentLocation(node, false).split(QLatin1Char('#')); - writer.writeTextElement("anchorfile", pieces[0]); - writer.writeTextElement("anchor", pieces[1]); - QString signature = functionNode->signature(false, false); - signature = signature.mid(signature.indexOf(QChar('('))).trimmed(); - if (functionNode->isConst()) - signature += " const"; - if (functionNode->isFinal()) - signature += " final"; - if (functionNode->isOverride()) - signature += " override"; - if (functionNode->isPureVirtual()) - signature += " = 0"; - writer.writeTextElement("arglist", signature); - } + case Node::Function: { + /* + Function nodes contain information about + the type of function being described. + */ + + const FunctionNode *functionNode = static_cast<const FunctionNode *>(node); + writer.writeAttribute("protection", access); + writer.writeAttribute("virtualness", functionNode->virtualness()); + writer.writeAttribute("static", functionNode->isStatic() ? "yes" : "no"); + + if (functionNode->isNonvirtual()) + writer.writeTextElement("type", functionNode->returnType()); + else + writer.writeTextElement("type", "virtual " + functionNode->returnType()); + + writer.writeTextElement("name", objName); + QStringList pieces = gen_->fullDocumentLocation(node, false).split(QLatin1Char('#')); + writer.writeTextElement("anchorfile", pieces[0]); + writer.writeTextElement("anchor", pieces[1]); + QString signature = functionNode->signature(false, false); + signature = signature.mid(signature.indexOf(QChar('('))).trimmed(); + if (functionNode->isConst()) + signature += " const"; + if (functionNode->isFinal()) + signature += " final"; + if (functionNode->isOverride()) + signature += " override"; + if (functionNode->isPureVirtual()) + signature += " = 0"; + writer.writeTextElement("arglist", signature); + } writer.writeEndElement(); // member break; - case Node::Property: - { - const PropertyNode *propertyNode = static_cast<const PropertyNode *>(node); - writer.writeAttribute("type", propertyNode->dataType()); - writer.writeTextElement("name", objName); - QStringList pieces = gen_->fullDocumentLocation(node, false).split(QLatin1Char('#')); - writer.writeTextElement("anchorfile", pieces[0]); - writer.writeTextElement("anchor", pieces[1]); - writer.writeTextElement("arglist", QString()); - } + case Node::Property: { + const PropertyNode *propertyNode = static_cast<const PropertyNode *>(node); + writer.writeAttribute("type", propertyNode->dataType()); + writer.writeTextElement("name", objName); + QStringList pieces = gen_->fullDocumentLocation(node, false).split(QLatin1Char('#')); + writer.writeTextElement("anchorfile", pieces[0]); + writer.writeTextElement("anchor", pieces[1]); + writer.writeTextElement("arglist", QString()); + } writer.writeEndElement(); // member break; - case Node::Enum: - { - const EnumNode *enumNode = static_cast<const EnumNode *>(node); - writer.writeTextElement("name", objName); - QStringList pieces = gen_->fullDocumentLocation(node, false).split(QLatin1Char('#')); - writer.writeTextElement("anchor", pieces[1]); - writer.writeTextElement("arglist", QString()); - writer.writeEndElement(); // member + case Node::Enum: { + const EnumNode *enumNode = static_cast<const EnumNode *>(node); + writer.writeTextElement("name", objName); + QStringList pieces = gen_->fullDocumentLocation(node, false).split(QLatin1Char('#')); + writer.writeTextElement("anchor", pieces[1]); + writer.writeTextElement("arglist", QString()); + writer.writeEndElement(); // member - for (int i = 0; i < enumNode->items().size(); ++i) { - EnumItem item = enumNode->items().value(i); - writer.writeStartElement("member"); - writer.writeAttribute("name", item.name()); - writer.writeTextElement("anchor", pieces[1]); - writer.writeTextElement("arglist", QString()); - writer.writeEndElement(); // member - } - } - break; - case Node::Typedef: - { - const TypedefNode *typedefNode = static_cast<const TypedefNode *>(node); - if (typedefNode->associatedEnum()) - writer.writeAttribute("type", typedefNode->associatedEnum()->fullDocumentName()); - else - writer.writeAttribute("type", QString()); - writer.writeTextElement("name", objName); - QStringList pieces = gen_->fullDocumentLocation(node, false).split(QLatin1Char('#')); - writer.writeTextElement("anchorfile", pieces[0]); + for (int i = 0; i < enumNode->items().size(); ++i) { + EnumItem item = enumNode->items().value(i); + writer.writeStartElement("member"); + writer.writeAttribute("name", item.name()); writer.writeTextElement("anchor", pieces[1]); writer.writeTextElement("arglist", QString()); + writer.writeEndElement(); // member } + } break; + case Node::Typedef: { + const TypedefNode *typedefNode = static_cast<const TypedefNode *>(node); + if (typedefNode->associatedEnum()) + writer.writeAttribute("type", typedefNode->associatedEnum()->fullDocumentName()); + else + writer.writeAttribute("type", QString()); + writer.writeTextElement("name", objName); + QStringList pieces = gen_->fullDocumentLocation(node, false).split(QLatin1Char('#')); + writer.writeTextElement("anchorfile", pieces[0]); + writer.writeTextElement("anchor", pieces[1]); + writer.writeTextElement("arglist", QString()); + } writer.writeEndElement(); // member break; @@ -343,12 +338,10 @@ void QDocTagFiles::generateTagFile(const QString &fileName, Generator *g) // If no path was specified or it doesn't exist, // default to the output directory if (fileInfo.fileName() == fileName || !fileInfo.dir().exists()) - file.setFileName(gen_->outputDir() + QLatin1Char('/') + - fileInfo.fileName()); + file.setFileName(gen_->outputDir() + QLatin1Char('/') + fileInfo.fileName()); if (!file.open(QFile::WriteOnly | QFile::Text)) { - Location::null.warning( - QString("Failed to open %1 for writing.").arg(file.fileName())); + Location::null.warning(QString("Failed to open %1 for writing.").arg(file.fileName())); return; } diff --git a/src/qdoc/qmlcodemarker.cpp b/src/qdoc/qmlcodemarker.cpp index 719fc710b..4ecfb6475 100644 --- a/src/qdoc/qmlcodemarker.cpp +++ b/src/qdoc/qmlcodemarker.cpp @@ -40,22 +40,18 @@ #include "generator.h" #ifndef QT_NO_DECLARATIVE -#include <private/qqmljsast_p.h> -#include <private/qqmljsastfwd_p.h> -#include <private/qqmljsengine_p.h> -#include <private/qqmljslexer_p.h> -#include <private/qqmljsparser_p.h> +# include <private/qqmljsast_p.h> +# include <private/qqmljsastfwd_p.h> +# include <private/qqmljsengine_p.h> +# include <private/qqmljslexer_p.h> +# include <private/qqmljsparser_p.h> #endif QT_BEGIN_NAMESPACE -QmlCodeMarker::QmlCodeMarker() -{ -} +QmlCodeMarker::QmlCodeMarker() {} -QmlCodeMarker::~QmlCodeMarker() -{ -} +QmlCodeMarker::~QmlCodeMarker() {} /*! Returns \c true if the \a code is recognized by the parser. @@ -103,8 +99,7 @@ Atom::AtomType QmlCodeMarker::atomType() const return Atom::Qml; } -QString QmlCodeMarker::markedUpCode(const QString &code, - const Node *relative, +QString QmlCodeMarker::markedUpCode(const QString &code, const Node *relative, const Location &location) { return addMarkUp(code, relative, location); @@ -127,8 +122,7 @@ QString QmlCodeMarker::markedUpFullName(const Node *node, const Node *relative) { if (node->name().isEmpty()) { return "global"; - } - else { + } else { QString fullName; for (;;) { fullName.prepend(markedUpName(node)); @@ -155,16 +149,14 @@ QString QmlCodeMarker::markedUpIncludes(const QStringList &includes) QString QmlCodeMarker::functionBeginRegExp(const QString &funcName) { return QLatin1Char('^') + QRegExp::escape("function " + funcName) + QLatin1Char('$'); - } -QString QmlCodeMarker::functionEndRegExp(const QString &/* funcName */) +QString QmlCodeMarker::functionEndRegExp(const QString & /* funcName */) { return "^\\}$"; } -QString QmlCodeMarker::addMarkUp(const QString &code, - const Node * /* relative */, +QString QmlCodeMarker::addMarkUp(const QString &code, const Node * /* relative */, const Location &location) { #ifndef QT_NO_DECLARATIVE @@ -185,14 +177,15 @@ QString QmlCodeMarker::addMarkUp(const QString &code, QmlMarkupVisitor visitor(code, pragmas, &engine); QQmlJS::AST::Node::accept(ast, &visitor); if (visitor.hasError()) { - location.warning(location.fileName() + - tr("Unable to analyze QML snippet. The output is incomplete.")); + location.warning(location.fileName() + + tr("Unable to analyze QML snippet. The output is incomplete.")); } output = visitor.markedUpCode(); } else { - location.warning(tr("Unable to parse QML snippet: \"%1\" at line %2, column %3").arg( - parser.errorMessage()).arg(parser.errorLineNumber()).arg( - parser.errorColumnNumber())); + location.warning(tr("Unable to parse QML snippet: \"%1\" at line %2, column %3") + .arg(parser.errorMessage()) + .arg(parser.errorLineNumber()) + .arg(parser.errorColumnNumber())); output = protect(code); } @@ -253,9 +246,7 @@ QVector<QQmlJS::AST::SourceLocation> QmlCodeMarker::extractPragmas(QString &scri token = l.lex(); } replaceWithSpace(script, startOffset, endOffset - startOffset); - removed.append(QQmlJS::AST::SourceLocation(startOffset, - endOffset - startOffset, - startLine, + removed.append(QQmlJS::AST::SourceLocation(startOffset, endOffset - startOffset, startLine, startColumn)); } return removed; diff --git a/src/qdoc/qmlcodemarker.h b/src/qdoc/qmlcodemarker.h index 81194cb36..c3435e840 100644 --- a/src/qdoc/qmlcodemarker.h +++ b/src/qdoc/qmlcodemarker.h @@ -36,7 +36,7 @@ #include "cppcodemarker.h" #ifndef QT_NO_DECLARATIVE -#include <private/qqmljsastfwd_p.h> +# include <private/qqmljsastfwd_p.h> #endif QT_BEGIN_NAMESPACE @@ -53,8 +53,7 @@ public: bool recognizeExtension(const QString &ext) override; bool recognizeLanguage(const QString &language) override; Atom::AtomType atomType() const override; - virtual QString markedUpCode(const QString &code, - const Node *relative, + virtual QString markedUpCode(const QString &code, const Node *relative, const Location &location) override; QString markedUpName(const Node *node) override; @@ -69,8 +68,7 @@ public: #endif private: - QString addMarkUp(const QString &code, const Node *relative, - const Location &location); + QString addMarkUp(const QString &code, const Node *relative, const Location &location); }; QT_END_NAMESPACE diff --git a/src/qdoc/qmlcodeparser.cpp b/src/qdoc/qmlcodeparser.cpp index 1b8688f00..06ce5e1a5 100644 --- a/src/qdoc/qmlcodeparser.cpp +++ b/src/qdoc/qmlcodeparser.cpp @@ -37,8 +37,8 @@ #include "qmlvisitor.h" #ifndef QT_NO_DECLARATIVE -#include <private/qqmljsast_p.h> -#include <private/qqmljsastvisitor_p.h> +# include <private/qqmljsast_p.h> +# include <private/qqmljsastvisitor_p.h> #endif #include <qdebug.h> @@ -49,8 +49,7 @@ QT_BEGIN_NAMESPACE */ QmlCodeParser::QmlCodeParser() #ifndef QT_NO_DECLARATIVE - : lexer(nullptr), - parser(nullptr) + : lexer(nullptr), parser(nullptr) #endif { } @@ -58,9 +57,7 @@ QmlCodeParser::QmlCodeParser() /*! Destroys the QML code parser. */ -QmlCodeParser::~QmlCodeParser() -{ -} +QmlCodeParser::~QmlCodeParser() {} /*! Initializes the code parser base class. The \a config argument @@ -136,10 +133,7 @@ void QmlCodeParser::parseSourceFile(const Location &location, const QString &fil if (parser->parse()) { QQmlJS::AST::UiProgram *ast = parser->ast(); - QmlDocVisitor visitor(filePath, - newCode, - &engine, - topicCommands() + commonMetaCommands(), + QmlDocVisitor visitor(filePath, newCode, &engine, topicCommands() + commonMetaCommands(), topicCommands()); QQmlJS::AST::Node::accept(ast, &visitor); if (visitor.hasError()) { @@ -150,12 +144,12 @@ void QmlCodeParser::parseSourceFile(const Location &location, const QString &fil const auto &messages = parser->diagnosticMessages(); for (const auto &msg : messages) { qDebug().nospace() << qPrintable(filePath) << ':' -#if Q_QML_PRIVATE_API_VERSION < 5 +# if Q_QML_PRIVATE_API_VERSION < 5 << msg.loc.startLine << ": QML syntax error at col " << msg.loc.startColumn -#else +# else << msg.line << ": QML syntax error at col " << msg.column -#endif +# endif << ": " << qPrintable(msg.message); } currentFile_.clear(); @@ -171,26 +165,14 @@ static QSet<QString> topicCommands_; const QSet<QString> &QmlCodeParser::topicCommands() { if (topicCommands_.isEmpty()) { - topicCommands_ << COMMAND_VARIABLE - << COMMAND_QMLCLASS - << COMMAND_QMLTYPE - << COMMAND_QMLPROPERTY - << COMMAND_QMLPROPERTYGROUP // mws 13/03/2019 - << COMMAND_QMLATTACHEDPROPERTY - << COMMAND_QMLSIGNAL - << COMMAND_QMLATTACHEDSIGNAL - << COMMAND_QMLMETHOD - << COMMAND_QMLATTACHEDMETHOD - << COMMAND_QMLBASICTYPE - << COMMAND_JSTYPE - << COMMAND_JSPROPERTY - << COMMAND_JSPROPERTYGROUP // mws 13/03/2019 - << COMMAND_JSATTACHEDPROPERTY - << COMMAND_JSSIGNAL - << COMMAND_JSATTACHEDSIGNAL - << COMMAND_JSMETHOD - << COMMAND_JSATTACHEDMETHOD - << COMMAND_JSBASICTYPE; + topicCommands_ << COMMAND_VARIABLE << COMMAND_QMLCLASS << COMMAND_QMLTYPE + << COMMAND_QMLPROPERTY << COMMAND_QMLPROPERTYGROUP // mws 13/03/2019 + << COMMAND_QMLATTACHEDPROPERTY << COMMAND_QMLSIGNAL + << COMMAND_QMLATTACHEDSIGNAL << COMMAND_QMLMETHOD + << COMMAND_QMLATTACHEDMETHOD << COMMAND_QMLBASICTYPE << COMMAND_JSTYPE + << COMMAND_JSPROPERTY << COMMAND_JSPROPERTYGROUP // mws 13/03/2019 + << COMMAND_JSATTACHEDPROPERTY << COMMAND_JSSIGNAL << COMMAND_JSATTACHEDSIGNAL + << COMMAND_JSMETHOD << COMMAND_JSATTACHEDMETHOD << COMMAND_JSBASICTYPE; } return topicCommands_; } @@ -235,15 +217,13 @@ void QmlCodeParser::extractPragmas(QString &script) token = l.lex(); - if (token != QQmlJSGrammar::T_IDENTIFIER || - l.tokenStartLine() != startLine || - script.mid(l.tokenOffset(), l.tokenLength()) != pragma) + if (token != QQmlJSGrammar::T_IDENTIFIER || l.tokenStartLine() != startLine + || script.mid(l.tokenOffset(), l.tokenLength()) != pragma) return; token = l.lex(); - if (token != QQmlJSGrammar::T_IDENTIFIER || - l.tokenStartLine() != startLine) + if (token != QQmlJSGrammar::T_IDENTIFIER || l.tokenStartLine() != startLine) return; QString pragmaValue = script.mid(l.tokenOffset(), l.tokenLength()); diff --git a/src/qdoc/qmlcodeparser.h b/src/qdoc/qmlcodeparser.h index 85923137b..f639f2115 100644 --- a/src/qdoc/qmlcodeparser.h +++ b/src/qdoc/qmlcodeparser.h @@ -38,9 +38,9 @@ #include <QtCore/qset.h> #ifndef QT_NO_DECLARATIVE -#include <private/qqmljsengine_p.h> -#include <private/qqmljslexer_p.h> -#include <private/qqmljsparser_p.h> +# include <private/qqmljsengine_p.h> +# include <private/qqmljslexer_p.h> +# include <private/qqmljsparser_p.h> #endif QT_BEGIN_NAMESPACE diff --git a/src/qdoc/qmlmarkupvisitor.cpp b/src/qdoc/qmlmarkupvisitor.cpp index dbcdf8aa5..434fe76bc 100644 --- a/src/qdoc/qmlmarkupvisitor.cpp +++ b/src/qdoc/qmlmarkupvisitor.cpp @@ -32,9 +32,9 @@ #include <QtCore/qstringlist.h> #ifndef QT_NO_DECLARATIVE -#include <private/qqmljsast_p.h> -#include <private/qqmljsastfwd_p.h> -#include <private/qqmljsengine_p.h> +# include <private/qqmljsast_p.h> +# include <private/qqmljsastfwd_p.h> +# include <private/qqmljsengine_p.h> #endif QT_BEGIN_NAMESPACE @@ -79,15 +79,13 @@ QmlMarkupVisitor::QmlMarkupVisitor(const QString &source, } } -QmlMarkupVisitor::~QmlMarkupVisitor() -{ -} +QmlMarkupVisitor::~QmlMarkupVisitor() {} // The protect() function is a copy of the one from CppCodeMarker. -static const QString samp = QLatin1String("&"); -static const QString slt = QLatin1String("<"); -static const QString sgt = QLatin1String(">"); +static const QString samp = QLatin1String("&"); +static const QString slt = QLatin1String("<"); +static const QString sgt = QLatin1String(">"); static const QString squot = QLatin1String("""); QString QmlMarkupVisitor::protect(const QString &str) @@ -98,11 +96,20 @@ QString QmlMarkupVisitor::protect(const QString &str) const QChar *data = str.constData(); for (int i = 0; i != n; ++i) { switch (data[i].unicode()) { - case '&': marked += samp; break; - case '<': marked += slt; break; - case '>': marked += sgt; break; - case '"': marked += squot; break; - default : marked += data[i]; + case '&': + marked += samp; + break; + case '<': + marked += slt; + break; + case '>': + marked += sgt; + break; + case '"': + marked += squot; + break; + default: + marked += data[i]; } } return marked; @@ -179,9 +186,9 @@ void QmlMarkupVisitor::addExtra(quint32 start, quint32 finish) cursor = finish; } -void QmlMarkupVisitor::addMarkedUpToken( - QQmlJS::AST::SourceLocation &location, const QString &tagName, - const QHash<QString, QString> &attributes) +void QmlMarkupVisitor::addMarkedUpToken(QQmlJS::AST::SourceLocation &location, + const QString &tagName, + const QHash<QString, QString> &attributes) { if (!location.isValid()) return; @@ -260,7 +267,7 @@ bool QmlMarkupVisitor::visit(QQmlJS::AST::UiPublicMember *member) addVerbatim(member->propertyToken); addVerbatim(member->typeModifierToken); addMarkedUpToken(member->typeToken, QLatin1String("type")); - //addVerbatim(member->identifierToken); + // addVerbatim(member->identifierToken); QQmlJS::AST::Node::accept(member->parameters, this); } addVerbatim(member->semicolonToken); @@ -309,7 +316,7 @@ bool QmlMarkupVisitor::visit(QQmlJS::AST::UiArrayMemberList *list) { for (QQmlJS::AST::UiArrayMemberList *it = list; it; it = it->next) { QQmlJS::AST::Node::accept(it->member, this); - //addVerbatim(it->commaToken); + // addVerbatim(it->commaToken); } return false; } @@ -387,12 +394,11 @@ void QmlMarkupVisitor::endVisit(QQmlJS::AST::ObjectPattern *literal) addVerbatim(literal->rbraceToken); } - bool QmlMarkupVisitor::visit(QQmlJS::AST::PatternElementList *list) { for (QQmlJS::AST::PatternElementList *it = list; it; it = it->next) { QQmlJS::AST::Node::accept(it->element, this); - //addVerbatim(it->commaToken); + // addVerbatim(it->commaToken); } QQmlJS::AST::Node::accept(list->elision, this); return false; @@ -409,7 +415,7 @@ bool QmlMarkupVisitor::visit(QQmlJS::AST::PatternProperty *list) QQmlJS::AST::Node::accept(list->name, this); addVerbatim(list->colonToken, list->colonToken); QQmlJS::AST::Node::accept(list->initializer, this); - //addVerbatim(list->commaToken, list->commaToken); + // addVerbatim(list->commaToken, list->commaToken); return false; } @@ -559,7 +565,7 @@ bool QmlMarkupVisitor::visit(QQmlJS::AST::VariableStatement *statement) { addVerbatim(statement->declarationKindToken); QQmlJS::AST::Node::accept(statement->declarations, this); - //addVerbatim(statement->semicolonToken); + // addVerbatim(statement->semicolonToken); return false; } @@ -692,7 +698,6 @@ void QmlMarkupVisitor::endVisit(QQmlJS::AST::CaseBlock *block) addVerbatim(block->rbraceToken, block->rbraceToken); } - bool QmlMarkupVisitor::visit(QQmlJS::AST::SwitchStatement *statement) { addMarkedUpToken(statement->switchToken, QLatin1String("keyword")); @@ -788,9 +793,9 @@ bool QmlMarkupVisitor::visit(QQmlJS::AST::FunctionDeclaration *declaration) bool QmlMarkupVisitor::visit(QQmlJS::AST::FormalParameterList *list) { -// addVerbatim(list->commaToken); + // addVerbatim(list->commaToken); QQmlJS::AST::Node::accept(list->element, this); - //addMarkedUpToken(list->identifierToken, QLatin1String("name")); + // addMarkedUpToken(list->identifierToken, QLatin1String("name")); return false; } diff --git a/src/qdoc/qmlmarkupvisitor.h b/src/qdoc/qmlmarkupvisitor.h index a0e3f870b..c9a012ae8 100644 --- a/src/qdoc/qmlmarkupvisitor.h +++ b/src/qdoc/qmlmarkupvisitor.h @@ -35,8 +35,8 @@ #include <QtCore/qstring.h> #ifndef QT_NO_DECLARATIVE -#include <private/qqmljsastvisitor_p.h> -#include <private/qqmljsengine_p.h> +# include <private/qqmljsastvisitor_p.h> +# include <private/qqmljsengine_p.h> #endif QT_BEGIN_NAMESPACE @@ -45,13 +45,9 @@ QT_BEGIN_NAMESPACE class QmlMarkupVisitor : public QQmlJS::AST::Visitor { public: - enum ExtraType{ - Comment, - Pragma - }; + enum ExtraType { Comment, Pragma }; - QmlMarkupVisitor(const QString &code, - const QVector<QQmlJS::AST::SourceLocation> &pragmas, + QmlMarkupVisitor(const QString &code, const QVector<QQmlJS::AST::SourceLocation> &pragmas, QQmlJS::Engine *engine); virtual ~QmlMarkupVisitor(); @@ -148,8 +144,7 @@ protected: private: typedef QHash<QString, QString> StringHash; void addExtra(quint32 start, quint32 finish); - void addMarkedUpToken(QQmlJS::AST::SourceLocation &location, - const QString &text, + void addMarkedUpToken(QQmlJS::AST::SourceLocation &location, const QString &text, const StringHash &attributes = StringHash()); void addVerbatim(QQmlJS::AST::SourceLocation first, QQmlJS::AST::SourceLocation last = QQmlJS::AST::SourceLocation()); diff --git a/src/qdoc/qmlvisitor.cpp b/src/qdoc/qmlvisitor.cpp index 6eb924570..d2d32b393 100644 --- a/src/qdoc/qmlvisitor.cpp +++ b/src/qdoc/qmlvisitor.cpp @@ -40,9 +40,9 @@ #include <QtCore/qstringlist.h> #ifndef QT_NO_DECLARATIVE -#include <private/qqmljsast_p.h> -#include <private/qqmljsastfwd_p.h> -#include <private/qqmljsengine_p.h> +# include <private/qqmljsast_p.h> +# include <private/qqmljsastfwd_p.h> +# include <private/qqmljsengine_p.h> #endif QT_BEGIN_NAMESPACE @@ -51,11 +51,8 @@ QT_BEGIN_NAMESPACE /*! The constructor stores all the parameters in local data members. */ -QmlDocVisitor::QmlDocVisitor(const QString &filePath, - const QString &code, - QQmlJS::Engine *engine, - const QSet<QString> &commands, - const QSet<QString> &topics) +QmlDocVisitor::QmlDocVisitor(const QString &filePath, const QString &code, QQmlJS::Engine *engine, + const QSet<QString> &commands, const QSet<QString> &topics) : nestingLevel(0) { lastEndOffset = 0; @@ -88,12 +85,10 @@ QQmlJS::AST::SourceLocation QmlDocVisitor::precedingComment(quint32 offset) cons if (loc.begin() <= lastEndOffset) { // Return if we reach the end of the preceding structure. break; - } - else if (usedComments.contains(loc.begin())) { + } else if (usedComments.contains(loc.begin())) { // Return if we encounter a previously used comment. break; - } - else if (loc.begin() > lastEndOffset && loc.end() < offset) { + } else if (loc.begin() > lastEndOffset && loc.end() < offset) { // Only examine multiline comments in order to avoid snippet markers. if (document.at(loc.offset - 1) == QLatin1Char('*')) { QString comment = document.mid(loc.offset, loc.length); @@ -109,7 +104,7 @@ QQmlJS::AST::SourceLocation QmlDocVisitor::precedingComment(quint32 offset) cons class QmlSignatureParser { - public: +public: QmlSignatureParser(FunctionNode *func, const QString &signature, const Location &loc); void readToken() { tok_ = tokenizer_->getToken(); } QString lexeme() { return tokenizer_->lexeme(); } @@ -120,7 +115,7 @@ class QmlSignatureParser bool matchParameter(); bool matchFunctionDecl(); - private: +private: QString signature_; QStringList names_; QString funcName_; @@ -160,9 +155,10 @@ bool QmlDocVisitor::applyDocumentation(QQmlJS::AST::SourceLocation location, Nod node->setDoc(doc); nodes.append(node); if (topicsUsed.size() > 0) { - for (int i=0; i<topicsUsed.size(); ++i) { + for (int i = 0; i < topicsUsed.size(); ++i) { QString topic = topicsUsed.at(i).topic; - if (!topic.startsWith(QLatin1String("qml")) && !topic.startsWith(QLatin1String("js"))) + if (!topic.startsWith(QLatin1String("qml")) + && !topic.startsWith(QLatin1String("js"))) continue; // maybe a qdoc warning here? mws 18/07/18 QString args = topicsUsed.at(i).args; if (topic == COMMAND_JSTYPE) { @@ -173,8 +169,7 @@ bool QmlDocVisitor::applyDocumentation(QQmlJS::AST::SourceLocation location, Nod if (qpa.name_ == nodePassedIn->name()) { if (nodePassedIn->isAlias()) nodePassedIn->setDataType(qpa.type_); - } - else { + } else { bool isAttached = topic.contains(QLatin1String("attached")); QmlPropertyNode *n = parent->hasQmlProperty(qpa.name_, isAttached); if (n == nullptr) @@ -186,12 +181,12 @@ bool QmlDocVisitor::applyDocumentation(QQmlJS::AST::SourceLocation location, Nod n->markDefault(); if (isAttached) n->markReadOnly(0); - if ((topic == COMMAND_JSPROPERTY) || (topic == COMMAND_JSATTACHEDPROPERTY)) + if ((topic == COMMAND_JSPROPERTY) + || (topic == COMMAND_JSATTACHEDPROPERTY)) n->changeType(Node::QmlProperty, Node::JsProperty); nodes.append(n); } - } - else + } else qDebug() << " FAILED TO PARSE QML OR JS PROPERTY:" << topic << args; } else if (topic.endsWith(QLatin1String("method"))) { if (node->isFunction()) { @@ -203,7 +198,7 @@ bool QmlDocVisitor::applyDocumentation(QQmlJS::AST::SourceLocation location, Nod } } } - for (int i=0; i<nodes.size(); ++i) + for (int i = 0; i < nodes.size(); ++i) applyMetacommands(loc, nodes.at(i), doc); usedComments.insert(loc.offset); if (doc.isEmpty()) { @@ -217,7 +212,8 @@ bool QmlDocVisitor::applyDocumentation(QQmlJS::AST::SourceLocation location, Nod return false; } -QmlSignatureParser::QmlSignatureParser(FunctionNode *func, const QString &signature, const Location &loc) +QmlSignatureParser::QmlSignatureParser(FunctionNode *func, const QString &signature, + const Location &loc) : signature_(signature), func_(func), location_(loc) { QByteArray latin1 = signature.toLatin1(); @@ -256,11 +252,8 @@ bool QmlSignatureParser::matchTypeAndName(CodeChunk *type, QString *var) bool virgin = true; if (tok_ != Tok_Ident) { - while (match(Tok_signed) || - match(Tok_unsigned) || - match(Tok_short) || - match(Tok_long) || - match(Tok_int64)) { + while (match(Tok_signed) || match(Tok_unsigned) || match(Tok_short) || match(Tok_long) + || match(Tok_int64)) { type->append(previousLexeme()); virgin = false; } @@ -269,19 +262,12 @@ bool QmlSignatureParser::matchTypeAndName(CodeChunk *type, QString *var) if (virgin) { if (match(Tok_Ident)) { type->append(previousLexeme()); - } - else if (match(Tok_void) || - match(Tok_int) || - match(Tok_char) || - match(Tok_double) || - match(Tok_Ellipsis)) + } else if (match(Tok_void) || match(Tok_int) || match(Tok_char) || match(Tok_double) + || match(Tok_Ellipsis)) type->append(previousLexeme()); else return false; - } - else if (match(Tok_int) || - match(Tok_char) || - match(Tok_double)) { + } else if (match(Tok_int) || match(Tok_char) || match(Tok_double)) { type->append(previousLexeme()); } @@ -291,10 +277,7 @@ bool QmlSignatureParser::matchTypeAndName(CodeChunk *type, QString *var) break; } - while (match(Tok_Ampersand) || - match(Tok_Aster) || - match(Tok_const) || - match(Tok_Caret)) + while (match(Tok_Ampersand) || match(Tok_Aster) || match(Tok_const) || match(Tok_Caret)) type->append(previousLexeme()); /* @@ -308,8 +291,8 @@ bool QmlSignatureParser::matchTypeAndName(CodeChunk *type, QString *var) if (tok_ == Tok_LeftBracket) { int bracketDepth0 = tokenizer_->bracketDepth(); - while ((tokenizer_->bracketDepth() >= bracketDepth0 && tok_ != Tok_Eoi) || - tok_ == Tok_RightBracket) { + while ((tokenizer_->bracketDepth() >= bracketDepth0 && tok_ != Tok_Eoi) + || tok_ == Tok_RightBracket) { type->append(lexeme()); readToken(); } @@ -333,10 +316,9 @@ bool QmlSignatureParser::matchParameter() return false; if (match(Tok_Equal)) { int parenDepth0 = tokenizer_->parenDepth(); - while (tokenizer_->parenDepth() >= parenDepth0 && - (tok_ != Tok_Comma || - tokenizer_->parenDepth() > parenDepth0) && - tok_ != Tok_Eoi) { + while (tokenizer_->parenDepth() >= parenDepth0 + && (tok_ != Tok_Comma || tokenizer_->parenDepth() > parenDepth0) + && tok_ != Tok_Eoi) { defaultValue.append(lexeme()); readToken(); } @@ -405,9 +387,7 @@ bool QmlSignatureParser::matchFunctionDecl() are found, a qdoc warning is emitted and false is returned. */ -bool QmlDocVisitor::splitQmlPropertyArg(const Doc &doc, - const QString &arg, - QmlPropArgs& qpa) +bool QmlDocVisitor::splitQmlPropertyArg(const Doc &doc, const QString &arg, QmlPropArgs &qpa) { qpa.clear(); QStringList blankSplit = arg.split(QLatin1Char(' ')); @@ -419,20 +399,17 @@ bool QmlDocVisitor::splitQmlPropertyArg(const Doc &doc, qpa.component_ = colonSplit[1]; qpa.name_ = colonSplit[2]; return true; - } - else if (colonSplit.size() == 2) { + } else if (colonSplit.size() == 2) { qpa.component_ = colonSplit[0]; qpa.name_ = colonSplit[1]; return true; - } - else if (colonSplit.size() == 1) { + } else if (colonSplit.size() == 1) { qpa.name_ = colonSplit[0]; return true; } QString msg = "Unrecognizable QML module/component qualifier for " + arg; doc.location().warning(tr(msg.toLatin1().data())); - } - else { + } else { QString msg = "Missing property type for " + arg; doc.location().warning(tr(msg.toLatin1().data())); } @@ -442,9 +419,7 @@ bool QmlDocVisitor::splitQmlPropertyArg(const Doc &doc, /*! Applies the metacommands found in the comment. */ -void QmlDocVisitor::applyMetacommands(QQmlJS::AST::SourceLocation, - Node *node, - Doc &doc) +void QmlDocVisitor::applyMetacommands(QQmlJS::AST::SourceLocation, Node *node, Doc &doc) { QDocDatabase *qdb = QDocDatabase::qdocDB(); QSet<QString> metacommands = doc.metaCommandsUsed(); @@ -456,51 +431,38 @@ void QmlDocVisitor::applyMetacommands(QQmlJS::AST::SourceLocation, if (node->isQmlType() || node->isJsType()) { node->setAbstract(true); } - } - else if (command == COMMAND_DEPRECATED) { + } else if (command == COMMAND_DEPRECATED) { node->setStatus(Node::Obsolete); - } - else if ((command == COMMAND_INQMLMODULE) || (command == COMMAND_INJSMODULE)) { - qdb->addToQmlModule(args[0].first,node); - } - else if (command == COMMAND_QMLINHERITS) { + } else if ((command == COMMAND_INQMLMODULE) || (command == COMMAND_INJSMODULE)) { + qdb->addToQmlModule(args[0].first, node); + } else if (command == COMMAND_QMLINHERITS) { if (node->name() == args[0].first) doc.location().warning(tr("%1 tries to inherit itself").arg(args[0].first)); else if (node->isQmlType() || node->isJsType()) { QmlTypeNode *qmlType = static_cast<QmlTypeNode *>(node); qmlType->setQmlBaseName(args[0].first); } - } - else if (command == COMMAND_QMLDEFAULT) { + } else if (command == COMMAND_QMLDEFAULT) { node->markDefault(); - } - else if (command == COMMAND_QMLREADONLY) { + } else if (command == COMMAND_QMLREADONLY) { node->markReadOnly(1); - } - else if ((command == COMMAND_INGROUP) && !args.isEmpty()) { + } else if ((command == COMMAND_INGROUP) && !args.isEmpty()) { for (const auto &argument : args) QDocDatabase::qdocDB()->addToGroup(argument.first, node); - } - else if (command == COMMAND_INTERNAL) { + } else if (command == COMMAND_INTERNAL) { node->setStatus(Node::Internal); - } - else if (command == COMMAND_OBSOLETE) { + } else if (command == COMMAND_OBSOLETE) { node->setStatus(Node::Obsolete); - } - else if (command == COMMAND_PAGEKEYWORDS) { + } else if (command == COMMAND_PAGEKEYWORDS) { // Not done yet. Do we need this? - } - else if (command == COMMAND_PRELIMINARY) { + } else if (command == COMMAND_PRELIMINARY) { node->setStatus(Node::Preliminary); - } - else if (command == COMMAND_SINCE) { + } else if (command == COMMAND_SINCE) { QString arg = args[0].first; //.join(' '); node->setSince(arg); - } - else if (command == COMMAND_WRAPPER) { + } else if (command == COMMAND_WRAPPER) { node->setWrapper(); - } - else { + } else { doc.location().warning(tr("The \\%1 command is ignored in QML files").arg(command)); } } @@ -543,7 +505,7 @@ bool QmlDocVisitor::visit(QQmlJS::AST::UiObjectDefinition *definition) if (current->isNamespace()) { QmlTypeNode *component = nullptr; - Node *candidate = current ->findChildNode(name, Node::QML); + Node *candidate = current->findChildNode(name, Node::QML); if (candidate != nullptr) component = static_cast<QmlTypeNode *>(candidate); else @@ -577,7 +539,7 @@ bool QmlDocVisitor::visit(QQmlJS::AST::UiImport *import) { QString name = document.mid(import->fileNameToken.offset, import->fileNameToken.length); if (name[0] == '\"') - name = name.mid(1, name.length()-2); + name = name.mid(1, name.length() - 2); QString version = document.mid(import->versionToken.offset, import->versionToken.length); QString importId = document.mid(import->importIdToken.offset, import->importIdToken.length); QString importUri = getFullyQualifiedId(import->importUri); @@ -608,20 +570,18 @@ bool QmlDocVisitor::visit(QQmlJS::AST::UiArrayBinding *) return true; } -void QmlDocVisitor::endVisit(QQmlJS::AST::UiArrayBinding *) -{ -} +void QmlDocVisitor::endVisit(QQmlJS::AST::UiArrayBinding *) {} -template <typename T> +template<typename T> QString qualifiedIdToString(T node); -template <> +template<> QString qualifiedIdToString(QStringRef node) { return node.toString(); } -template <> +template<> QString qualifiedIdToString(QQmlJS::AST::UiQualifiedId *node) { QString s; @@ -647,8 +607,7 @@ bool QmlDocVisitor::visit(QQmlJS::AST::UiPublicMember *member) return true; } switch (member->type) { - case QQmlJS::AST::UiPublicMember::Signal: - { + case QQmlJS::AST::UiPublicMember::Signal: { if (current->isQmlType() || current->isJsType()) { QmlTypeNode *qmlType = static_cast<QmlTypeNode *>(current); if (qmlType) { @@ -668,8 +627,7 @@ bool QmlDocVisitor::visit(QQmlJS::AST::UiPublicMember *member) } break; } - case QQmlJS::AST::UiPublicMember::Property: - { + case QQmlJS::AST::UiPublicMember::Property: { QString type = qualifiedIdToString(member->memberType); QString name = member->name.toString(); if (current->isQmlType() || current->isJsType()) { @@ -697,7 +655,7 @@ bool QmlDocVisitor::visit(QQmlJS::AST::UiPublicMember *member) /*! End the visit of the \a member. */ -void QmlDocVisitor::endVisit(QQmlJS::AST::UiPublicMember* member) +void QmlDocVisitor::endVisit(QQmlJS::AST::UiPublicMember *member) { lastEndOffset = member->lastSourceLocation().end(); } @@ -711,7 +669,7 @@ bool QmlDocVisitor::visit(QQmlJS::AST::IdentifierPropertyName *) Begin the visit of the function declaration \a fd, but only if the nesting level is 1. */ -bool QmlDocVisitor::visit(QQmlJS::AST::FunctionDeclaration* fd) +bool QmlDocVisitor::visit(QQmlJS::AST::FunctionDeclaration *fd) { if (nestingLevel <= 1) { FunctionNode::Metaness metaness = FunctionNode::QmlMethod; @@ -738,7 +696,7 @@ bool QmlDocVisitor::visit(QQmlJS::AST::FunctionDeclaration* fd) /*! End the visit of the function declaration, \a fd. */ -void QmlDocVisitor::endVisit(QQmlJS::AST::FunctionDeclaration* fd) +void QmlDocVisitor::endVisit(QQmlJS::AST::FunctionDeclaration *fd) { lastEndOffset = fd->lastSourceLocation().end(); } @@ -752,22 +710,22 @@ void QmlDocVisitor::endVisit(QQmlJS::AST::FunctionDeclaration* fd) documentation, that discussion must take place in the comment for the signal. */ -bool QmlDocVisitor::visit(QQmlJS::AST::UiScriptBinding* ) +bool QmlDocVisitor::visit(QQmlJS::AST::UiScriptBinding *) { return true; } -void QmlDocVisitor::endVisit(QQmlJS::AST::UiScriptBinding* sb) +void QmlDocVisitor::endVisit(QQmlJS::AST::UiScriptBinding *sb) { lastEndOffset = sb->lastSourceLocation().end(); } -bool QmlDocVisitor::visit(QQmlJS::AST::UiQualifiedId* ) +bool QmlDocVisitor::visit(QQmlJS::AST::UiQualifiedId *) { return true; } -void QmlDocVisitor::endVisit(QQmlJS::AST::UiQualifiedId* ) +void QmlDocVisitor::endVisit(QQmlJS::AST::UiQualifiedId *) { // nothing. } diff --git a/src/qdoc/qmlvisitor.h b/src/qdoc/qmlvisitor.h index fae02c1e2..6c10c5258 100644 --- a/src/qdoc/qmlvisitor.h +++ b/src/qdoc/qmlvisitor.h @@ -34,8 +34,8 @@ #include <QtCore/qstring.h> #ifndef QT_NO_DECLARATIVE -#include <private/qqmljsastvisitor_p.h> -#include <private/qqmljsengine_p.h> +# include <private/qqmljsastvisitor_p.h> +# include <private/qqmljsengine_p.h> #endif QT_BEGIN_NAMESPACE @@ -47,7 +47,8 @@ struct QmlPropArgs QString component_; QString name_; - void clear() { + void clear() + { type_.clear(); module_.clear(); component_.clear(); @@ -61,11 +62,8 @@ class QmlDocVisitor : public QQmlJS::AST::Visitor Q_DECLARE_TR_FUNCTIONS(QDoc::QmlDocVisitor) public: - QmlDocVisitor(const QString &filePath, - const QString &code, - QQmlJS::Engine *engine, - const QSet<QString> &commands, - const QSet<QString> &topics); + QmlDocVisitor(const QString &filePath, const QString &code, QQmlJS::Engine *engine, + const QSet<QString> &commands, const QSet<QString> &topics); ~QmlDocVisitor() override; bool visit(QQmlJS::AST::UiImport *import) override; @@ -101,9 +99,7 @@ private: QQmlJS::AST::SourceLocation precedingComment(quint32 offset) const; bool applyDocumentation(QQmlJS::AST::SourceLocation location, Node *node); void applyMetacommands(QQmlJS::AST::SourceLocation location, Node *node, Doc &doc); - bool splitQmlPropertyArg(const Doc &doc, - const QString &arg, - QmlPropArgs& qpa); + bool splitQmlPropertyArg(const Doc &doc, const QString &arg, QmlPropArgs &qpa); QQmlJS::Engine *engine; quint32 lastEndOffset; diff --git a/src/qdoc/quoter.cpp b/src/qdoc/quoter.cpp index 7dd13233e..a313ab5c5 100644 --- a/src/qdoc/quoter.cpp +++ b/src/qdoc/quoter.cpp @@ -34,7 +34,7 @@ QT_BEGIN_NAMESPACE -QHash<QString,QString> Quoter::commentHash; +QHash<QString, QString> Quoter::commentHash; static void replaceMultipleNewlines(QString &s) { @@ -106,8 +106,7 @@ static void trimWhiteSpace(QString &str) str.resize(++j); } -Quoter::Quoter() - : silent(false) +Quoter::Quoter() : silent(false) { /* We're going to hard code these delimiters: * C++, Qt, Qt Script, Java: @@ -138,9 +137,8 @@ void Quoter::reset() codeLocation = Location::null; } -void Quoter::quoteFromFile(const QString &userFriendlyFilePath, - const QString &plainCode, - const QString &markedCode) +void Quoter::quoteFromFile(const QString &userFriendlyFilePath, const QString &plainCode, + const QString &markedCode) { silent = false; @@ -186,7 +184,7 @@ QString Quoter::quoteLine(const Location &docLocation, const QString &command, const QString &pattern) { if (plainLines.isEmpty()) { - failedAtEnd( docLocation, command ); + failedAtEnd(docLocation, command); return QString(); } @@ -200,8 +198,7 @@ QString Quoter::quoteLine(const Location &docLocation, const QString &command, if (!silent) { docLocation.warning(tr("Command '\\%1' failed").arg(command)); - codeLocation.warning(tr("Pattern '%1' didn't match here") - .arg(pattern)); + codeLocation.warning(tr("Pattern '%1' didn't match here").arg(pattern)); silent = true; } return QString(); @@ -249,8 +246,7 @@ QString Quoter::quoteSnippet(const Location &docLocation, const QString &identif return t; } -QString Quoter::quoteTo(const Location &docLocation, const QString &command, - const QString &pattern) +QString Quoter::quoteTo(const Location &docLocation, const QString &command, const QString &pattern) { QString t; QString comment = commentForCode(); @@ -298,21 +294,18 @@ QString Quoter::getLine(int unindent) return t; } -bool Quoter::match(const Location &docLocation, const QString &pattern0, - const QString &line) +bool Quoter::match(const Location &docLocation, const QString &pattern0, const QString &line) { QString str = line; while (str.endsWith(QLatin1Char('\n'))) str.truncate(str.length() - 1); QString pattern = pattern0; - if (pattern.startsWith(QLatin1Char('/')) - && pattern.endsWith(QLatin1Char('/')) - && pattern.length() > 2) { + if (pattern.startsWith(QLatin1Char('/')) && pattern.endsWith(QLatin1Char('/')) + && pattern.length() > 2) { QRegExp rx(pattern.mid(1, pattern.length() - 2)); if (!silent && !rx.isValid()) { - docLocation.warning(tr("Invalid regular expression '%1'") - .arg(rx.pattern())); + docLocation.warning(tr("Invalid regular expression '%1'").arg(rx.pattern())); silent = true; } return str.indexOf(rx) != -1; @@ -325,11 +318,12 @@ bool Quoter::match(const Location &docLocation, const QString &pattern0, void Quoter::failedAtEnd(const Location &docLocation, const QString &command) { if (!silent && !command.isEmpty()) { - if (codeLocation.filePath().isEmpty() ) { + if (codeLocation.filePath().isEmpty()) { docLocation.warning(tr("Unexpected '\\%1'").arg(command)); } else { docLocation.warning(tr("Command '\\%1' failed at end of file '%2'") - .arg(command).arg(codeLocation.filePath())); + .arg(command) + .arg(codeLocation.filePath())); } silent = true; } diff --git a/src/qdoc/quoter.h b/src/qdoc/quoter.h index 6dec63641..ed21828cf 100644 --- a/src/qdoc/quoter.h +++ b/src/qdoc/quoter.h @@ -48,14 +48,11 @@ public: Quoter(); void reset(); - void quoteFromFile(const QString &userFriendlyFileName, - const QString &plainCode, const QString &markedCode); - QString quoteLine(const Location &docLocation, const QString &command, - const QString &pattern); - QString quoteTo(const Location &docLocation, const QString &command, - const QString &pattern); - QString quoteUntil(const Location &docLocation, const QString &command, - const QString &pattern); + void quoteFromFile(const QString &userFriendlyFileName, const QString &plainCode, + const QString &markedCode); + QString quoteLine(const Location &docLocation, const QString &command, const QString &pattern); + QString quoteTo(const Location &docLocation, const QString &command, const QString &pattern); + QString quoteUntil(const Location &docLocation, const QString &command, const QString &pattern); QString quoteSnippet(const Location &docLocation, const QString &identifier); static QStringList splitLines(const QString &line); @@ -63,17 +60,15 @@ public: private: QString getLine(int unindent = 0); void failedAtEnd(const Location &docLocation, const QString &command); - bool match(const Location &docLocation, const QString &pattern, - const QString &line); + bool match(const Location &docLocation, const QString &pattern, const QString &line); QString commentForCode() const; - QString removeSpecialLines(const QString &line, const QString &comment, - int unindent = 0); + QString removeSpecialLines(const QString &line, const QString &comment, int unindent = 0); bool silent; QStringList plainLines; QStringList markedLines; Location codeLocation; - static QHash<QString,QString> commentHash; + static QHash<QString, QString> commentHash; }; QT_END_NAMESPACE diff --git a/src/qdoc/sections.cpp b/src/qdoc/sections.cpp index 7fd39bc4f..7d5bcf03f 100644 --- a/src/qdoc/sections.cpp +++ b/src/qdoc/sections.cpp @@ -38,17 +38,21 @@ QT_BEGIN_NAMESPACE -//Aggregate *Sections::aggregate_ = nullptr; +// Aggregate *Sections::aggregate_ = nullptr; static bool sectionsInitialized = false; QVector<Section> Sections::stdSummarySections_(7, Section(Section::Summary, Section::Active)); QVector<Section> Sections::stdDetailsSections_(7, Section(Section::Details, Section::Active)); -QVector<Section> Sections::stdCppClassSummarySections_(18, Section(Section::Summary, Section::Active)); -QVector<Section> Sections::stdCppClassDetailsSections_(6, Section(Section::Details, Section::Active)); +QVector<Section> Sections::stdCppClassSummarySections_(18, + Section(Section::Summary, Section::Active)); +QVector<Section> Sections::stdCppClassDetailsSections_(6, + Section(Section::Details, Section::Active)); QVector<Section> Sections::sinceSections_(15, Section(Section::Details, Section::Active)); QVector<Section> Sections::allMembers_(1, Section(Section::AllMembers, Section::Active)); -QVector<Section> Sections::stdQmlTypeSummarySections_(7, Section(Section::Summary, Section::Active)); -QVector<Section> Sections::stdQmlTypeDetailsSections_(7, Section(Section::Details, Section::Active)); +QVector<Section> Sections::stdQmlTypeSummarySections_(7, + Section(Section::Summary, Section::Active)); +QVector<Section> Sections::stdQmlTypeDetailsSections_(7, + Section(Section::Details, Section::Active)); /*! \class Section @@ -61,9 +65,9 @@ QVector<Section> Sections::stdQmlTypeDetailsSections_(7, Section(Section::Detail */ Section::Section(Style style, Status status) : style_(style), status_(status), aggregate_(nullptr) { - //members_.reserve(100); - //obsoleteMembers_.reserve(50); - //reimplementedMembers_.reserve(50); + // members_.reserve(100); + // obsoleteMembers_.reserve(50); + // reimplementedMembers_.reserve(50); } /*! @@ -88,7 +92,7 @@ void Section::clear() reimplementedMemberMap_.clear(); if (!classMapList_.isEmpty()) { for (int i = 0; i < classMapList_.size(); i++) { - ClassMap* cm = classMapList_[i]; + ClassMap *cm = classMapList_[i]; classMapList_[i] = nullptr; delete cm; } @@ -102,7 +106,7 @@ void Section::clear() inheritedMembers_.clear(); if (!classKeysNodesList_.isEmpty()) { for (int i = 0; i < classKeysNodesList_.size(); i++) { - ClassKeysNodes* ckn = classKeysNodesList_[i]; + ClassKeysNodes *ckn = classKeysNodesList_[i]; classKeysNodesList_[i] = nullptr; delete ckn; } @@ -133,7 +137,7 @@ QString Section::sortName(const Node *node, const QString *name) // we want 'qint8' to appear before 'qint16' if (numDigits > 0) { for (int i = 0; i < 4 - numDigits; ++i) - nodeName.insert(nodeName.size()-numDigits-1, QLatin1Char('0')); + nodeName.insert(nodeName.size() - numDigits - 1, QLatin1Char('0')); } if (node->isFunction()) { @@ -144,8 +148,7 @@ QString Section::sortName(const Node *node, const QString *name) sortNo = QLatin1String("C"); else if (fn->isDtor()) sortNo = QLatin1String("D"); - else if (nodeName.startsWith(QLatin1String("operator")) - && nodeName.length() > 8 + else if (nodeName.startsWith(QLatin1String("operator")) && nodeName.length() > 8 && !nodeName[8].isLetterOrNumber()) sortNo = QLatin1String("F"); else @@ -185,12 +188,11 @@ void Section::insert(Node *node) if (node->isPrivate() || node->isInternal()) { irrelevant = true; - } - else if (node->isFunction()) { + } else if (node->isFunction()) { FunctionNode *func = static_cast<FunctionNode *>(node); irrelevant = (inherited && (func->isSomeCtor() || func->isDtor())); - } - else if (node->isClassNode() || node->isEnumType() || node->isTypedef() || node->isVariable()) { + } else if (node->isClassNode() || node->isEnumType() || node->isTypedef() + || node->isVariable()) { irrelevant = (inherited && style_ != AllMembers); if (!irrelevant && style_ == Details && node->isTypedef()) { const TypedefNode *tdn = static_cast<const TypedefNode *>(node); @@ -211,7 +213,8 @@ void Section::insert(Node *node) memberMap_.insertMulti(key, node); } if (inherited && (node->parent()->isClassNode() || node->parent()->isNamespace())) { - if (inheritedMembers_.isEmpty() || inheritedMembers_.last().first != node->parent()) { + if (inheritedMembers_.isEmpty() + || inheritedMembers_.last().first != node->parent()) { QPair<Aggregate *, int> p(node->parent(), 0); inheritedMembers_.append(p); } @@ -284,8 +287,8 @@ void Section::reduce() obsoleteMembers_ = obsoleteMemberMap_.values().toVector(); reimplementedMembers_ = reimplementedMemberMap_.values().toVector(); for (int i = 0; i < classMapList_.size(); i++) { - ClassMap* cm = classMapList_[i]; - ClassKeysNodes* ckn = new ClassKeysNodes; + ClassMap *cm = classMapList_[i]; + ClassKeysNodes *ckn = new ClassKeysNodes; ckn->first = cm->first; ckn->second.second = cm->second.values().toVector(); ckn->second.first = cm->second.keys(); @@ -397,11 +400,9 @@ Sections::Sections(const NodeMultiMap &nsmap) : aggregate_(nullptr) sections[SinceGlobalFunctions].appendMember(node); else sections[SinceNamespaceFunctions].appendMember(node); - } - else + } else sections[SinceGlobalFunctions].appendMember(node); - } - else + } else sections[SinceGlobalFunctions].appendMember(node); } break; @@ -456,8 +457,7 @@ Sections::~Sections() break; } aggregate_ = nullptr; - } - else { + } else { clear(sinceSections()); } } @@ -467,7 +467,7 @@ Sections::~Sections() */ void Sections::initAggregate(SectionVector &v, Aggregate *aggregate) { - for (int i = 0; i< v.size(); ++i) + for (int i = 0; i < v.size(); ++i) v[i].setAggregate(aggregate); } @@ -499,7 +499,8 @@ void Sections::initSections() v[8].init("Protected Functions", "protected function", "protected functions"); v[9].init("Protected Slots", "protected slot", "protected slots"); v[10].init("Protected Variables", "protected type", "protected variables"); - v[11].init("Static Protected Members", "static protected member", "static protected members"); + v[11].init("Static Protected Members", "static protected member", + "static protected members"); v[12].init("Private Types", "private type", "private types"); v[13].init("Private Functions", "private function", "private functions"); v[14].init("Private Slots", "private slot", "private slots"); @@ -572,13 +573,13 @@ void Sections::initSections() { QVector<Section> &v = stdQmlTypeDetailsSections_; - v[0].init("Property Documentation","qmlprop","member","members"); - v[1].init("Attached Property Documentation","qmlattprop", "member","members"); - v[2].init("Signal Documentation","qmlsig","signal","signals"); - v[3].init("Signal Handler Documentation","qmlsighan","signal handler","signal handlers"); - v[4].init("Attached Signal Documentation","qmlattsig", "signal","signals"); - v[5].init("Method Documentation","qmlmeth","member","members"); - v[6].init("Attached Method Documentation","qmlattmeth", "member","members"); + v[0].init("Property Documentation", "qmlprop", "member", "members"); + v[1].init("Attached Property Documentation", "qmlattprop", "member", "members"); + v[2].init("Signal Documentation", "qmlsig", "signal", "signals"); + v[3].init("Signal Handler Documentation", "qmlsighan", "signal handler", "signal handlers"); + v[4].init("Attached Signal Documentation", "qmlattsig", "signal", "signals"); + v[5].init("Method Documentation", "qmlmeth", "member", "members"); + v[6].init("Attached Method Documentation", "qmlattmeth", "member", "members"); } } @@ -623,32 +624,31 @@ void Sections::stdRefPageSwitch(SectionVector &v, Node *n, Node *t) case Node::Typedef: v[StdTypes].insert(n); return; - case Node::Function: - { - FunctionNode *func = static_cast<FunctionNode *>(t); - if (func->isMacro()) - v[StdMacros].insert(n); - else - v[StdFunctions].insert(n); - } + case Node::Function: { + FunctionNode *func = static_cast<FunctionNode *>(t); + if (func->isMacro()) + v[StdMacros].insert(n); + else + v[StdFunctions].insert(n); + } return; - case Node::Variable: - { - const VariableNode *var = static_cast<const VariableNode *>(t); - if (!var->doc().isEmpty()) { - if (var->isStatic()) - v[StdStaticVariables].insert(n); - else - v[StdVariables].insert(n); - } + case Node::Variable: { + const VariableNode *var = static_cast<const VariableNode *>(t); + if (!var->doc().isEmpty()) { + if (var->isStatic()) + v[StdStaticVariables].insert(n); + else + v[StdVariables].insert(n); } + } return; - case Node::SharedComment: - { - SharedCommentNode *scn = static_cast<SharedCommentNode *>(t); - if (!scn->doc().isEmpty() && scn->collective().count()) - stdRefPageSwitch(v, scn, scn->collective().first()); // TODO: warn about mixed node types in collective? - } + case Node::SharedComment: { + SharedCommentNode *scn = static_cast<SharedCommentNode *>(t); + if (!scn->doc().isEmpty() && scn->collective().count()) + stdRefPageSwitch( + v, scn, + scn->collective().first()); // TODO: warn about mixed node types in collective? + } return; default: return; @@ -738,24 +738,20 @@ void Sections::distributeNodeInSummaryVector(SectionVector &sv, Node *n) sv[PrivateSlots].insert(fn); else sv[ProtectedSlots].insert(fn); - } - else if (fn->isSignal()) { + } else if (fn->isSignal()) { if (fn->isPublic()) sv[Signals].insert(fn); - } - else if (fn->isPublic()) { + } else if (fn->isPublic()) { if (fn->isStatic()) sv[StaticPublicMembers].insert(fn); else if (!sv[PublicFunctions].insertReimplementedMember(fn)) sv[PublicFunctions].insert(fn); - } - else if (fn->isPrivate()) { + } else if (fn->isPrivate()) { if (fn->isStatic()) sv[StaticPrivateMembers].insert(fn); else if (!sv[PrivateFunctions].insertReimplementedMember(fn)) sv[PrivateFunctions].insert(fn); - } - else { // protected + } else { // protected if (fn->isStatic()) sv[StaticProtectedMembers].insert(fn); else if (!sv[ProtectedFunctions].insertReimplementedMember(fn)) @@ -775,8 +771,7 @@ void Sections::distributeNodeInSummaryVector(SectionVector &sv, Node *n) sv[StaticPrivateMembers].insert(n); else sv[StaticProtectedMembers].insert(n); - } - else { + } else { if (n->isPublic()) sv[PublicVariables].insert(n); else if (!n->isPrivate()) @@ -810,7 +805,7 @@ void Sections::distributeNodeInDetailsVector(SectionVector &dv, Node *n) if (n->isSharingComment()) return; - // t is the reference node to be tested - typically it's this node (n), but for + // t is the reference node to be tested - typically it's this node (n), but for // shared comment nodes we need to distribute based on the nodes in its collective. Node *t = n; @@ -926,7 +921,7 @@ void Sections::distributeQmlNodeInSummaryVector(SectionVector &sv, Node *n, bool sv[QmlMethods].insert(fn); } } else if (n->isSharedCommentNode()) { - SharedCommentNode *scn = static_cast<SharedCommentNode*>(n); + SharedCommentNode *scn = static_cast<SharedCommentNode *>(n); if (scn->isPropertyGroup()) { sv[QmlProperties].insert(scn); } else { @@ -957,11 +952,9 @@ void Sections::buildStdCppClassRefPageSections() bool documentAll = true; if (aggregate_->parent() && !aggregate_->name().isEmpty() && !aggregate_->hasDoc()) documentAll = false; - for (auto it = aggregate_->constBegin(); it != aggregate_->constEnd();++it) { + for (auto it = aggregate_->constBegin(); it != aggregate_->constEnd(); ++it) { Node *n = *it; - if (!n->isPrivate() - && !n->isProperty() - && !n->isRelatedNonmember() + if (!n->isPrivate() && !n->isProperty() && !n->isRelatedNonmember() && !n->isSharedCommentNode()) allMembers.insert(n); if (!documentAll && !n->hasDoc()) @@ -983,14 +976,12 @@ void Sections::buildStdCppClassRefPageSections() ClassNode *cn = stack.pop(); for (auto it = cn->constBegin(); it != cn->constEnd(); ++it) { Node *n = *it; - if (!n->isPrivate() - && !n->isProperty() - && !n->isRelatedNonmember() + if (!n->isPrivate() && !n->isProperty() && !n->isRelatedNonmember() && !n->isSharedCommentNode()) allMembers.insert(n); if (!documentAll && !n->hasDoc()) continue; - //distributeNodeInSummaryVector(sv, n); Why was this here? mws 03/07/2019 + // distributeNodeInSummaryVector(sv, n); Why was this here? mws 03/07/2019 } pushBaseClasses(stack, cn); } @@ -999,14 +990,13 @@ void Sections::buildStdCppClassRefPageSections() allMembers.reduce(); } - /*! Build the section vectors for a standard reference page, when the aggregate node is a QML type. */ void Sections::buildStdQmlTypeRefPageSections() { - ClassMap* classMap = nullptr; + ClassMap *classMap = nullptr; SectionVector &summarySections = stdQmlTypeSummarySections(); SectionVector &detailsSections = stdQmlTypeDetailsSections(); Section &allMembers = allMembersSection(); @@ -1015,7 +1005,7 @@ void Sections::buildStdQmlTypeRefPageSections() while (true) { if (!qtn->isAbstract() || !classMap) classMap = allMembers.newClassMap(qtn); - for (auto it = qtn->constBegin(); it !=qtn->constEnd(); ++it) { + for (auto it = qtn->constBegin(); it != qtn->constEnd(); ++it) { Node *n = *it; if (n->isInternal()) continue; @@ -1028,8 +1018,7 @@ void Sections::buildStdQmlTypeRefPageSections() } if (qtn->qmlBaseNode() == qtn) { qDebug() << "qdoc internal error: circular type definition." - << "QML type" << qtn->name() - << "can't be its own base type"; + << "QML type" << qtn->name() << "can't be its own base type"; qtn = nullptr; break; } @@ -1052,8 +1041,7 @@ void Sections::buildStdQmlTypeRefPageSections() } if (qtn->qmlBaseNode() == qtn) { qDebug() << "qdoc internal error: circular type definition." - << "QML type" << qtn->name() - << "can't be its own base type"; + << "QML type" << qtn->name() << "can't be its own base type"; qtn = nullptr; break; } @@ -1070,7 +1058,8 @@ void Sections::buildStdQmlTypeRefPageSections() have not been modified. Otherwise, both vectors will contain pointers to the sections that contain obsolete members. */ -bool Sections::hasObsoleteMembers(SectionPtrVector *summary_spv, SectionPtrVector *details_spv) const +bool Sections::hasObsoleteMembers(SectionPtrVector *summary_spv, + SectionPtrVector *details_spv) const { const SectionVector *sections = nullptr; if (aggregate_->isClassNode()) @@ -1096,5 +1085,4 @@ bool Sections::hasObsoleteMembers(SectionPtrVector *summary_spv, SectionPtrVecto return !summary_spv->isEmpty(); } - QT_END_NAMESPACE diff --git a/src/qdoc/sections.h b/src/qdoc/sections.h index 9c1514c2d..90596b394 100644 --- a/src/qdoc/sections.h +++ b/src/qdoc/sections.h @@ -36,7 +36,7 @@ QT_BEGIN_NAMESPACE typedef QMultiMap<QString, Node *> MemberMap; // the string is the member signature -typedef QPair<const QmlTypeNode *, MemberMap> ClassMap; // the node is the QML type +typedef QPair<const QmlTypeNode *, MemberMap> ClassMap; // the node is the QML type typedef QVector<ClassMap *> ClassMapList; typedef QPair<QStringList, NodeVector> KeysAndNodes; @@ -50,27 +50,30 @@ public: enum Status { Obsolete, Active }; public: - Section() : style_(Details), status_(Active), aggregate_(nullptr) { } + Section() : style_(Details), status_(Active), aggregate_(nullptr) {} Section(Style style, Status status); ~Section(); - void init(const QString &title) { - title_ = title; - } - void init(const QString &singular, - const QString &plural) { - singular_ = singular; plural_ = plural; + void init(const QString &title) { title_ = title; } + void init(const QString &singular, const QString &plural) + { + singular_ = singular; + plural_ = plural; } - void init(const QString &title, - const QString &singular, - const QString &plural) { - title_ = title; divClass_.clear(); singular_= singular; plural_ = plural; + void init(const QString &title, const QString &singular, const QString &plural) + { + title_ = title; + divClass_.clear(); + singular_ = singular; + plural_ = plural; } - void init(const QString &title, - const QString &divClass, - const QString &singular, - const QString &plural) { - title_ = title; divClass_ = divClass; singular_= singular; plural_ = plural; + void init(const QString &title, const QString &divClass, const QString &singular, + const QString &plural) + { + title_ = title; + divClass_ = divClass; + singular_ = singular; + plural_ = plural; } void insert(Node *node); @@ -84,11 +87,10 @@ public: void clear(); void reduce(); - bool isEmpty() const { - return (memberMap_.isEmpty() && - inheritedMembers_.isEmpty() && - reimplementedMemberMap_.isEmpty() && - classMapList_.isEmpty()); + bool isEmpty() const + { + return (memberMap_.isEmpty() && inheritedMembers_.isEmpty() + && reimplementedMemberMap_.isEmpty() && classMapList_.isEmpty()); } Style style() const { return style_; } @@ -101,7 +103,7 @@ public: const QStringList &keys(Status t) const { return (t == Obsolete ? obsoleteKeys_ : keys_); } const NodeVector &members() const { return members_; } const NodeVector &reimplementedMembers() const { return reimplementedMembers_; } - const QVector<QPair<Aggregate*, int> > &inheritedMembers() const { return inheritedMembers_; } + const QVector<QPair<Aggregate *, int>> &inheritedMembers() const { return inheritedMembers_; } ClassKeysNodesList &classKeysNodesList() { return classKeysNodesList_; } const NodeVector &obsoleteMembers() const { return obsoleteMembers_; } void appendMembers(const NodeVector &nv) { members_.append(nv); } @@ -112,8 +114,8 @@ private: QString sortName(const Node *node, const QString *name = nullptr); private: - Style style_; - Status status_; + Style style_; + Status status_; QString title_; QString divClass_; QString singular_; @@ -125,7 +127,7 @@ private: NodeVector members_; NodeVector obsoleteMembers_; NodeVector reimplementedMembers_; - QVector<QPair<Aggregate *, int> > inheritedMembers_; + QVector<QPair<Aggregate *, int>> inheritedMembers_; ClassKeysNodesList classKeysNodesList_; QMultiMap<QString, Node *> memberMap_; @@ -247,7 +249,6 @@ private: static SectionVector stdQmlTypeDetailsSections_; static SectionVector sinceSections_; static SectionVector allMembers_; - }; QT_END_NAMESPACE diff --git a/src/qdoc/text.cpp b/src/qdoc/text.cpp index c80ef00e3..b3e3b4106 100644 --- a/src/qdoc/text.cpp +++ b/src/qdoc/text.cpp @@ -38,19 +38,14 @@ QT_BEGIN_NAMESPACE -Text::Text() - : first(nullptr), last(nullptr) -{ -} +Text::Text() : first(nullptr), last(nullptr) {} -Text::Text(const QString &str) - : first(nullptr), last(nullptr) +Text::Text(const QString &str) : first(nullptr), last(nullptr) { operator<<(str); } -Text::Text(const Text &text) - : first(nullptr), last(nullptr) +Text::Text(const Text &text) : first(nullptr), last(nullptr) { operator=(text); } @@ -79,22 +74,19 @@ Text &Text::operator<<(const QString &string) return operator<<(Atom(Atom::String, string)); } -Text &Text::operator<<(const Atom& atom) +Text &Text::operator<<(const Atom &atom) { if (atom.count() < 2) { if (first == nullptr) { first = new Atom(atom.type(), atom.string()); last = first; - } - else + } else last = new Atom(last, atom.type(), atom.string()); - } - else { + } else { if (first == nullptr) { first = new Atom(atom.type(), atom.string(), atom.string(1)); last = first; - } - else + } else last = new Atom(last, atom.type(), atom.string(), atom.string(1)); } return *this; @@ -110,8 +102,7 @@ Text &Text::operator<<(const LinkAtom &atom) if (first == nullptr) { first = new LinkAtom(atom); last = first; - } - else + } else last = new LinkAtom(last, atom); return *this; } @@ -164,9 +155,8 @@ QString Text::toString() const QString str; const Atom *atom = firstAtom(); while (atom != nullptr) { - if (atom->type() == Atom::String || - atom->type() == Atom::AutoLink || - atom->type() == Atom::C) + if (atom->type() == Atom::String || atom->type() == Atom::AutoLink + || atom->type() == Atom::C) str += atom->string(); atom = atom->next(); } @@ -180,9 +170,8 @@ bool Text::contains(const QString &str) const { const Atom *atom = firstAtom(); while (atom != nullptr) { - if (atom->type() == Atom::String || - atom->type() == Atom::AutoLink || - atom->type() == Atom::C) + if (atom->type() == Atom::String || atom->type() == Atom::AutoLink + || atom->type() == Atom::C) if (atom->string().contains(str, Qt::CaseInsensitive)) return true; atom = atom->next(); @@ -190,7 +179,8 @@ bool Text::contains(const QString &str) const return false; } -Text Text::subText(Atom::AtomType left, Atom::AtomType right, const Atom *from, bool inclusive) const +Text Text::subText(Atom::AtomType left, Atom::AtomType right, const Atom *from, + bool inclusive) const { const Atom *begin = from ? from : firstAtom(); const Atom *end; @@ -256,7 +246,8 @@ void Text::dump() const str.replace(QRegExp("[^\x20-\x7e]"), "?"); if (!str.isEmpty()) str = " \"" + str + QLatin1Char('"'); - fprintf(stderr, " %-15s%s\n", atom->typeString().toLatin1().data(), str.toLatin1().data()); + fprintf(stderr, " %-15s%s\n", atom->typeString().toLatin1().data(), + str.toLatin1().data()); atom = atom->next(); } } diff --git a/src/qdoc/text.h b/src/qdoc/text.h index 7c31fcde0..704a44968 100644 --- a/src/qdoc/text.h +++ b/src/qdoc/text.h @@ -51,7 +51,7 @@ public: Atom *lastAtom() { return last; } Text &operator<<(Atom::AtomType atomType); Text &operator<<(const QString &string); - Text &operator<<(const Atom& atom); + Text &operator<<(const Atom &atom); Text &operator<<(const LinkAtom &atom); Text &operator<<(const Text &text); void stripFirstAtom(); @@ -62,7 +62,8 @@ public: QString toString() const; const Atom *firstAtom() const { return first; } const Atom *lastAtom() const { return last; } - Text subText(Atom::AtomType left, Atom::AtomType right, const Atom *from = nullptr, bool inclusive = false) const; + Text subText(Atom::AtomType left, Atom::AtomType right, const Atom *from = nullptr, + bool inclusive = false) const; void dump() const; void clear(); @@ -72,23 +73,34 @@ public: static int compare(const Text &text1, const Text &text2); private: - Atom *first; Atom *last; }; inline bool operator==(const Text &text1, const Text &text2) -{ return Text::compare(text1, text2) == 0; } +{ + return Text::compare(text1, text2) == 0; +} inline bool operator!=(const Text &text1, const Text &text2) -{ return Text::compare(text1, text2) != 0; } +{ + return Text::compare(text1, text2) != 0; +} inline bool operator<(const Text &text1, const Text &text2) -{ return Text::compare(text1, text2) < 0; } +{ + return Text::compare(text1, text2) < 0; +} inline bool operator<=(const Text &text1, const Text &text2) -{ return Text::compare(text1, text2) <= 0; } +{ + return Text::compare(text1, text2) <= 0; +} inline bool operator>(const Text &text1, const Text &text2) -{ return Text::compare(text1, text2) > 0; } +{ + return Text::compare(text1, text2) > 0; +} inline bool operator>=(const Text &text1, const Text &text2) -{ return Text::compare(text1, text2) >= 0; } +{ + return Text::compare(text1, text2) >= 0; +} QT_END_NAMESPACE diff --git a/src/qdoc/tokenizer.cpp b/src/qdoc/tokenizer.cpp index af3837c3a..d15b6d318 100644 --- a/src/qdoc/tokenizer.cpp +++ b/src/qdoc/tokenizer.cpp @@ -42,42 +42,69 @@ QT_BEGIN_NAMESPACE -#define LANGUAGE_CPP "Cpp" +#define LANGUAGE_CPP "Cpp" /* qmake ignore Q_OBJECT */ /* Keep in sync with tokenizer.h. */ -static const char *kwords[] = { - "char", "class", "const", "double", "enum", "explicit", - "friend", "inline", "int", "long", "namespace", "operator", - "private", "protected", "public", "short", "signals", "signed", - "slots", "static", "struct", "template", "typedef", "typename", - "union", "unsigned", "using", "virtual", "void", "volatile", - "__int64", "default", "delete", "final", "override", - "Q_OBJECT", - "Q_OVERRIDE", - "Q_PROPERTY", - "Q_PRIVATE_PROPERTY", - "Q_DECLARE_SEQUENTIAL_ITERATOR", - "Q_DECLARE_MUTABLE_SEQUENTIAL_ITERATOR", - "Q_DECLARE_ASSOCIATIVE_ITERATOR", - "Q_DECLARE_MUTABLE_ASSOCIATIVE_ITERATOR", - "Q_DECLARE_FLAGS", - "Q_SIGNALS", - "Q_SLOTS", - "QT_COMPAT", - "QT_COMPAT_CONSTRUCTOR", - "QT_DEPRECATED", - "QT_MOC_COMPAT", - "QT_MODULE", - "QT3_SUPPORT", - "QT3_SUPPORT_CONSTRUCTOR", - "QT3_MOC_SUPPORT", - "QDOC_PROPERTY", - "QPrivateSignal" -}; +static const char *kwords[] = { "char", + "class", + "const", + "double", + "enum", + "explicit", + "friend", + "inline", + "int", + "long", + "namespace", + "operator", + "private", + "protected", + "public", + "short", + "signals", + "signed", + "slots", + "static", + "struct", + "template", + "typedef", + "typename", + "union", + "unsigned", + "using", + "virtual", + "void", + "volatile", + "__int64", + "default", + "delete", + "final", + "override", + "Q_OBJECT", + "Q_OVERRIDE", + "Q_PROPERTY", + "Q_PRIVATE_PROPERTY", + "Q_DECLARE_SEQUENTIAL_ITERATOR", + "Q_DECLARE_MUTABLE_SEQUENTIAL_ITERATOR", + "Q_DECLARE_ASSOCIATIVE_ITERATOR", + "Q_DECLARE_MUTABLE_ASSOCIATIVE_ITERATOR", + "Q_DECLARE_FLAGS", + "Q_SIGNALS", + "Q_SLOTS", + "QT_COMPAT", + "QT_COMPAT_CONSTRUCTOR", + "QT_DEPRECATED", + "QT_MOC_COMPAT", + "QT_MODULE", + "QT3_SUPPORT", + "QT3_SUPPORT_CONSTRUCTOR", + "QT3_MOC_SUPPORT", + "QDOC_PROPERTY", + "QPrivateSignal" }; static const int KwordHashTableSize = 4096; static int kwordHashTable[KwordHashTableSize]; @@ -102,8 +129,7 @@ static QTextCodec *sourceCodec = nullptr; */ static int hashKword(const char *s, int len) { - return (((uchar) s[0]) + (((uchar) s[2]) << 5) + - (((uchar) s[len - 1]) << 3)) % KwordHashTableSize; + return (((uchar)s[0]) + (((uchar)s[2]) << 5) + (((uchar)s[len - 1]) << 3)) % KwordHashTableSize; } static void insertKwordIntoHash(const char *s, int number) @@ -124,8 +150,7 @@ Tokenizer::Tokenizer(const Location &loc, QFile &in) start(loc); } -Tokenizer::Tokenizer(const Location &loc, const QByteArray &in) - : yyIn(in) +Tokenizer::Tokenizer(const Location &loc, const QByteArray &in) : yyIn(in) { init(); yyPos = 0; @@ -152,8 +177,7 @@ int Tokenizer::getToken() do { yyCh = getChar(); } while (isspace(yyCh)); - } - else if (isalpha(yyCh) || yyCh == '_') { + } else if (isalpha(yyCh) || yyCh == '_') { do { yyCh = getChar(); } while (isalnum(yyCh) || yyCh == '_'); @@ -163,8 +187,7 @@ int Tokenizer::getToken() int i = kwordHashTable[k]; if (i == 0) { return Tok_Ident; - } - else if (i == -1) { + } else if (i == -1) { if (!parsingMacro && ignoredTokensAndDirectives->contains(yyLex)) { if (ignoredTokensAndDirectives->value(yyLex)) { // it's a directive int parenDepth = 0; @@ -180,9 +203,8 @@ int Tokenizer::getToken() } break; } - } - else if (strcmp(yyLex, kwords[i - 1]) == 0) { - int ret = (int) Tok_FirstKeyword + i - 1; + } else if (strcmp(yyLex, kwords[i - 1]) == 0) { + int ret = (int)Tok_FirstKeyword + i - 1; if (ret != Tok_typename) return ret; break; @@ -191,15 +213,12 @@ int Tokenizer::getToken() if (++k == KwordHashTableSize) k = 0; } - } - else if (isdigit(yyCh)) { + } else if (isdigit(yyCh)) { do { yyCh = getChar(); - } while (isalnum(yyCh) || yyCh == '.' || yyCh == '+' || - yyCh == '-'); + } while (isalnum(yyCh) || yyCh == '.' || yyCh == '+' || yyCh == '-'); return Tok_Number; - } - else { + } else { switch (yyCh) { case '!': case '%': @@ -234,8 +253,7 @@ int Tokenizer::getToken() if (yyCh == '=') { yyCh = getChar(); return Tok_SomeOperator; - } - else { + } else { return Tok_Ampersand; } case '\'': @@ -255,8 +273,7 @@ int Tokenizer::getToken() if (yyCh == EOF) { yyTokLoc.warning(tr("Unterminated C++ character literal")); - } - else { + } else { yyCh = getChar(); return Tok_Number; } @@ -328,8 +345,7 @@ int Tokenizer::getToken() } else if (isdigit(yyCh)) { do { yyCh = getChar(); - } while (isalnum(yyCh) || yyCh == '.' || yyCh == '+' || - yyCh == '-'); + } while (isalnum(yyCh) || yyCh == '.' || yyCh == '+' || yyCh == '-'); return Tok_Number; } return Tok_SomeOperator; @@ -462,10 +478,11 @@ int Tokenizer::getToken() default: // ### We should really prevent qdoc from looking at snippet files rather than // ### suppress warnings when reading them. - if (yyNumPreprocessorSkipping == 0 && !(yyTokLoc.fileName().endsWith(".qdoc") || - yyTokLoc.fileName().endsWith(".js"))) { - yyTokLoc.warning(tr("Hostile character 0x%1 in C++ source") - .arg((uchar)yyCh, 1, 16)); + if (yyNumPreprocessorSkipping == 0 + && !(yyTokLoc.fileName().endsWith(".qdoc") + || yyTokLoc.fileName().endsWith(".js"))) { + yyTokLoc.warning( + tr("Hostile character 0x%1 in C++ source").arg((uchar)yyCh, 1, 16)); } yyCh = getChar(); } @@ -526,8 +543,8 @@ void Tokenizer::initialize(const Config &config) insertKwordIntoHash(tb.data(), -1); } - const QStringList directives = config.getStringList(LANGUAGE_CPP + Config::dot - + CONFIG_IGNOREDIRECTIVES); + const QStringList directives = + config.getStringList(LANGUAGE_CPP + Config::dot + CONFIG_IGNOREDIRECTIVES); for (const auto &directive : directives) { const QByteArray db = directive.toLatin1(); ignoredTokensAndDirectives->insert(db, true); @@ -558,8 +575,8 @@ void Tokenizer::terminate() void Tokenizer::init() { - yyLexBuf1 = new char[(int) yyLexBufSize]; - yyLexBuf2 = new char[(int) yyLexBufSize]; + yyLexBuf1 = new char[(int)yyLexBufSize]; + yyLexBuf2 = new char[(int)yyLexBufSize]; yyPrevLex = yyLexBuf1; yyPrevLex[0] = '\0'; yyLex = yyLexBuf2; @@ -754,11 +771,9 @@ bool Tokenizer::isTrue(const QString &condition) } } if (firstOr != -1) - return isTrue(condition.left(firstOr)) || - isTrue(condition.mid(firstOr + 2)); + return isTrue(condition.left(firstOr)) || isTrue(condition.mid(firstOr + 2)); if (firstAnd != -1) - return isTrue(condition.left(firstAnd)) && - isTrue(condition.mid(firstAnd + 2)); + return isTrue(condition.left(firstAnd)) && isTrue(condition.mid(firstAnd + 2)); QString t = condition.simplified(); if (t.isEmpty()) diff --git a/src/qdoc/tokenizer.h b/src/qdoc/tokenizer.h index 2f0c1937c..4f35090fe 100644 --- a/src/qdoc/tokenizer.h +++ b/src/qdoc/tokenizer.h @@ -49,30 +49,93 @@ QT_BEGIN_NAMESPACE tokenizer.cpp as well, and possibly adjust Tok_FirstKeyword and Tok_LastKeyword. */ -enum { Tok_Eoi, Tok_Ampersand, Tok_Aster, Tok_Caret, Tok_LeftParen, - Tok_RightParen, Tok_LeftParenAster, Tok_Equal, Tok_LeftBrace, - Tok_RightBrace, Tok_Semicolon, Tok_Colon, Tok_LeftAngle, - Tok_RightAngle, Tok_Comma, Tok_Ellipsis, Tok_Gulbrandsen, - Tok_LeftBracket, Tok_RightBracket, Tok_Tilde, Tok_SomeOperator, - Tok_Number, Tok_String, Tok_Doc, Tok_Comment, Tok_Ident, Tok_At, - Tok_char, Tok_class, Tok_const, Tok_double, Tok_enum, - Tok_explicit, Tok_friend, Tok_inline, Tok_int, Tok_long, - Tok_namespace, Tok_operator, Tok_private, Tok_protected, - Tok_public, Tok_short, Tok_signals, Tok_signed, Tok_slots, - Tok_static, Tok_struct, Tok_template, Tok_typedef, - Tok_typename, Tok_union, Tok_unsigned, Tok_using, Tok_virtual, - Tok_void, Tok_volatile, Tok_int64, Tok_default, Tok_delete, Tok_final, - Tok_override, - Tok_Q_OBJECT, Tok_Q_OVERRIDE, - Tok_Q_PROPERTY, Tok_Q_PRIVATE_PROPERTY, Tok_Q_DECLARE_SEQUENTIAL_ITERATOR, - Tok_Q_DECLARE_MUTABLE_SEQUENTIAL_ITERATOR, - Tok_Q_DECLARE_ASSOCIATIVE_ITERATOR, - Tok_Q_DECLARE_MUTABLE_ASSOCIATIVE_ITERATOR, - Tok_Q_DECLARE_FLAGS, Tok_Q_SIGNALS, Tok_Q_SLOTS, Tok_QT_COMPAT, - Tok_QT_COMPAT_CONSTRUCTOR, Tok_QT_DEPRECATED, Tok_QT_MOC_COMPAT, - Tok_QT_MODULE, Tok_QT3_SUPPORT, Tok_QT3_SUPPORT_CONSTRUCTOR, - Tok_QT3_MOC_SUPPORT, Tok_QDOC_PROPERTY, Tok_QPrivateSignal, - Tok_FirstKeyword = Tok_char, Tok_LastKeyword = Tok_QPrivateSignal }; +enum { + Tok_Eoi, + Tok_Ampersand, + Tok_Aster, + Tok_Caret, + Tok_LeftParen, + Tok_RightParen, + Tok_LeftParenAster, + Tok_Equal, + Tok_LeftBrace, + Tok_RightBrace, + Tok_Semicolon, + Tok_Colon, + Tok_LeftAngle, + Tok_RightAngle, + Tok_Comma, + Tok_Ellipsis, + Tok_Gulbrandsen, + Tok_LeftBracket, + Tok_RightBracket, + Tok_Tilde, + Tok_SomeOperator, + Tok_Number, + Tok_String, + Tok_Doc, + Tok_Comment, + Tok_Ident, + Tok_At, + Tok_char, + Tok_class, + Tok_const, + Tok_double, + Tok_enum, + Tok_explicit, + Tok_friend, + Tok_inline, + Tok_int, + Tok_long, + Tok_namespace, + Tok_operator, + Tok_private, + Tok_protected, + Tok_public, + Tok_short, + Tok_signals, + Tok_signed, + Tok_slots, + Tok_static, + Tok_struct, + Tok_template, + Tok_typedef, + Tok_typename, + Tok_union, + Tok_unsigned, + Tok_using, + Tok_virtual, + Tok_void, + Tok_volatile, + Tok_int64, + Tok_default, + Tok_delete, + Tok_final, + Tok_override, + Tok_Q_OBJECT, + Tok_Q_OVERRIDE, + Tok_Q_PROPERTY, + Tok_Q_PRIVATE_PROPERTY, + Tok_Q_DECLARE_SEQUENTIAL_ITERATOR, + Tok_Q_DECLARE_MUTABLE_SEQUENTIAL_ITERATOR, + Tok_Q_DECLARE_ASSOCIATIVE_ITERATOR, + Tok_Q_DECLARE_MUTABLE_ASSOCIATIVE_ITERATOR, + Tok_Q_DECLARE_FLAGS, + Tok_Q_SIGNALS, + Tok_Q_SLOTS, + Tok_QT_COMPAT, + Tok_QT_COMPAT_CONSTRUCTOR, + Tok_QT_DEPRECATED, + Tok_QT_MOC_COMPAT, + Tok_QT_MODULE, + Tok_QT3_SUPPORT, + Tok_QT3_SUPPORT_CONSTRUCTOR, + Tok_QT3_MOC_SUPPORT, + Tok_QDOC_PROPERTY, + Tok_QPrivateSignal, + Tok_FirstKeyword = Tok_char, + Tok_LastKeyword = Tok_QPrivateSignal +}; /* The Tokenizer class implements lexical analysis of C++ source @@ -120,17 +183,14 @@ private: */ enum { yyLexBufSize = 524288 }; - int getch() - { - return yyPos == yyIn.size() ? EOF : yyIn[yyPos++]; - } + int getch() { return yyPos == yyIn.size() ? EOF : yyIn[yyPos++]; } inline int getChar() { if (yyCh == EOF) return EOF; if (yyLexLen < yyLexBufSize - 1) { - yyLex[yyLexLen++] = (char) yyCh; + yyLex[yyLexLen++] = (char)yyCh; yyLex[yyLexLen] = '\0'; } yyCurLoc.advance(yyCh); diff --git a/src/qdoc/tree.cpp b/src/qdoc/tree.cpp index 6ff473bdc..718b16fc5 100644 --- a/src/qdoc/tree.cpp +++ b/src/qdoc/tree.cpp @@ -144,7 +144,8 @@ Node *Tree::findNodeForInclude(const QStringList &path) const Aggregate *Tree::findAggregate(const QString &name) { QStringList path = name.split(QLatin1String("::")); - return static_cast<Aggregate *>(findNodeRecursive(path, 0, const_cast<NamespaceNode *>(root()), &Node::isFirstClassAggregate)); + return static_cast<Aggregate *>(findNodeRecursive(path, 0, const_cast<NamespaceNode *>(root()), + &Node::isFirstClassAggregate)); } /*! @@ -217,8 +218,7 @@ Aggregate *Tree::findRelatesNode(const QStringList &path) Inserts function name \a funcName and function role \a funcRole into the property function map for the specified \a property. */ -void Tree::addPropertyFunction(PropertyNode *property, - const QString &funcName, +void Tree::addPropertyFunction(PropertyNode *property, const QString &funcName, PropertyNode::FunctionRole funcRole) { unresolvedPropertyMap[property].insert(funcRole, funcName); @@ -295,7 +295,7 @@ void Tree::resolvePropertyOverriddenFromPtrs(Aggregate *n) void Tree::resolveProperties() { for (auto propEntry = unresolvedPropertyMap.constBegin(); - propEntry != unresolvedPropertyMap.constEnd(); ++propEntry) { + propEntry != unresolvedPropertyMap.constEnd(); ++propEntry) { PropertyNode *property = propEntry.key(); Aggregate *parent = property->parent(); QString getterName = (*propEntry)[PropertyNode::Getter]; @@ -306,19 +306,15 @@ void Tree::resolveProperties() for (auto it = parent->constBegin(); it != parent->constEnd(); ++it) { if ((*it)->isFunction()) { FunctionNode *function = static_cast<FunctionNode *>(*it); - if (function->access() == property->access() && - (function->status() == property->status() || - function->doc().isEmpty())) { + if (function->access() == property->access() + && (function->status() == property->status() || function->doc().isEmpty())) { if (function->name() == getterName) { property->addFunction(function, PropertyNode::Getter); - } - else if (function->name() == setterName) { + } else if (function->name() == setterName) { property->addFunction(function, PropertyNode::Setter); - } - else if (function->name() == resetterName) { + } else if (function->name() == resetterName) { property->addFunction(function, PropertyNode::Resetter); - } - else if (function->name() == notifierName) { + } else if (function->name() == notifierName) { property->addSignal(function, PropertyNode::Notifier); } } @@ -327,7 +323,7 @@ void Tree::resolveProperties() } for (auto propEntry = unresolvedPropertyMap.constBegin(); - propEntry != unresolvedPropertyMap.constEnd(); ++propEntry) { + propEntry != unresolvedPropertyMap.constEnd(); ++propEntry) { PropertyNode *property = propEntry.key(); // redo it to set the property functions if (property->overriddenFrom()) @@ -422,7 +418,7 @@ ClassList Tree::allBaseClasses(const ClassNode *classNode) const search at the tree root. \a subtype is not used unless \a type is \c{Page}. */ -Node *Tree::findNodeByNameAndType(const QStringList &path, bool (Node::*isMatch) () const) const +Node *Tree::findNodeByNameAndType(const QStringList &path, bool (Node::*isMatch)() const) const { return findNodeRecursive(path, 0, root(), isMatch); } @@ -443,10 +439,8 @@ Node *Tree::findNodeByNameAndType(const QStringList &path, bool (Node::*isMatch) If the algorithm is successful, the pointer to the final node is returned. Otherwise 0 is returned. */ -Node *Tree::findNodeRecursive(const QStringList &path, - int pathIndex, - const Node *start, - bool (Node::*isMatch) () const) const +Node *Tree::findNodeRecursive(const QStringList &path, int pathIndex, const Node *start, + bool (Node::*isMatch)() const) const { if (start == nullptr || path.isEmpty()) return nullptr; @@ -460,13 +454,12 @@ Node *Tree::findNodeRecursive(const QStringList &path, if (node == nullptr) continue; if (node->name() == name) { - if (pathIndex+1 >= path.size()) { + if (pathIndex + 1 >= path.size()) { if ((node->*(isMatch))()) return node; continue; - } - else { // Search the children of n for the next name in the path. - node = findNodeRecursive(path, pathIndex+1, node, isMatch); + } else { // Search the children of n for the next name in the path. + node = findNodeRecursive(path, pathIndex + 1, node, isMatch); if (node != nullptr) return node; } @@ -488,11 +481,8 @@ Node *Tree::findNodeRecursive(const QStringList &path, If a matching node is found, \a ref is an output parameter that is set to the HTML reference to use for the link. */ -const Node *Tree::findNodeForTarget(const QStringList &path, - const QString &target, - const Node *start, - int flags, - Node::Genus genus, +const Node *Tree::findNodeForTarget(const QStringList &path, const QString &target, + const Node *start, int flags, Node::Genus genus, QString &ref) const { const Node *node = nullptr; @@ -533,8 +523,8 @@ const Node *Tree::findNodeForTarget(const QStringList &path, type node. */ int path_idx = 0; - if (((genus == Node::QML) || (genus == Node::DontCare)) && - (path.size() >= 2) && !path[0].isEmpty()) { + if (((genus == Node::QML) || (genus == Node::DontCare)) && (path.size() >= 2) + && !path[0].isEmpty()) { QmlTypeNode *qcn = lookupQmlType(QString(path[0] + "::" + path[1])); if (qcn) { current = qcn; @@ -544,8 +534,7 @@ const Node *Tree::findNodeForTarget(const QStringList &path, if (!ref.isEmpty()) return current; return nullptr; - } - else + } else return current; } path_idx = 2; @@ -554,7 +543,8 @@ const Node *Tree::findNodeForTarget(const QStringList &path, while (current != nullptr) { if (current->isAggregate()) { // Should this be isPageNode() ??? - const Node *node = matchPathAndTarget(path, path_idx, target, current, flags, genus, ref); + const Node *node = + matchPathAndTarget(path, path_idx, target, current, flags, genus, ref); if (node) return node; } @@ -584,12 +574,8 @@ const Node *Tree::findNodeForTarget(const QStringList &path, \a path is a not a fully-qualified name. \a node is most often the root of this Tree. */ -const Node *Tree::matchPathAndTarget(const QStringList &path, - int idx, - const QString &target, - const Node *node, - int flags, - Node::Genus genus, +const Node *Tree::matchPathAndTarget(const QStringList &path, int idx, const QString &target, + const Node *node, int flags, Node::Genus genus, QString &ref) const { /* @@ -621,21 +607,22 @@ const Node *Tree::matchPathAndTarget(const QStringList &path, } } if (target.isEmpty()) { - if ((idx) == (path.size()-1) && node->isAggregate() && (flags & SearchEnumValues)) { - const Node *t = static_cast<const Aggregate *>(node)->findEnumNodeForValue(path.at(idx)); + if ((idx) == (path.size() - 1) && node->isAggregate() && (flags & SearchEnumValues)) { + const Node *t = + static_cast<const Aggregate *>(node)->findEnumNodeForValue(path.at(idx)); if (t) return t; } } - if (((genus == Node::CPP) || (genus == Node::DontCare)) && - node->isClassNode() && (flags & SearchBaseClasses)) { + if (((genus == Node::CPP) || (genus == Node::DontCare)) && node->isClassNode() + && (flags & SearchBaseClasses)) { const ClassList bases = allBaseClasses(static_cast<const ClassNode *>(node)); for (const auto *base : bases) { const Node *t = matchPathAndTarget(path, idx, target, base, flags, genus, ref); - if (t && ! t->isPrivate()) + if (t && !t->isPrivate()) return t; if (target.isEmpty()) { - if ((idx) == (path.size()-1) && (flags & SearchEnumValues)) { + if ((idx) == (path.size() - 1) && (flags & SearchEnumValues)) { t = base->findEnumNodeForValue(path.at(idx)); if (t) return t; @@ -652,9 +639,7 @@ const Node *Tree::matchPathAndTarget(const QStringList &path, recursively if no match is found. The \a flags are used to restrict the search. */ -const Node *Tree::findNode(const QStringList &path, - const Node *start, - int flags, +const Node *Tree::findNode(const QStringList &path, const Node *start, int flags, Node::Genus genus) const { const Node *current = start; @@ -674,8 +659,8 @@ const Node *Tree::findNode(const QStringList &path, If the answer is yes, the reference identifies a QML type node. */ - if (((genus == Node::QML) || (genus == Node::DontCare)) && - (path.size() >= 2) && !path[0].isEmpty()) { + if (((genus == Node::QML) || (genus == Node::DontCare)) && (path.size() >= 2) + && !path[0].isEmpty()) { QmlTypeNode *qcn = lookupQmlType(QString(path[0] + "::" + path[1])); if (qcn != nullptr) { node = qcn; @@ -689,16 +674,18 @@ const Node *Tree::findNode(const QStringList &path, if (node == nullptr || !node->isAggregate()) break; - // Clear the TypesOnly flag until the last path segment, as e.g. namespaces are not types. - // We also ignore module nodes as they are not aggregates and thus have no children. + // Clear the TypesOnly flag until the last path segment, as e.g. namespaces are not + // types. We also ignore module nodes as they are not aggregates and thus have no + // children. int tmpFlags = (i < path.size() - 1) ? (flags & ~TypesOnly) | IgnoreModules : flags; - const Node *next = static_cast<const Aggregate *>(node)->findChildNode(path.at(i), genus, tmpFlags); - if ((next == nullptr) && (flags & SearchEnumValues) && i == path.size()-1) { + const Node *next = static_cast<const Aggregate *>(node)->findChildNode(path.at(i), + genus, tmpFlags); + if ((next == nullptr) && (flags & SearchEnumValues) && i == path.size() - 1) { next = static_cast<const Aggregate *>(node)->findEnumNodeForValue(path.at(i)); } - if ((next == nullptr) && ((genus == Node::CPP) || (genus == Node::DontCare)) && - node->isClassNode() && (flags & SearchBaseClasses)) { + if ((next == nullptr) && ((genus == Node::CPP) || (genus == Node::DontCare)) + && node->isClassNode() && (flags & SearchBaseClasses)) { const ClassList bases = allBaseClasses(static_cast<const ClassNode *>(node)); for (const auto *base : bases) { next = base->findChildNode(path.at(i), genus, tmpFlags); @@ -752,11 +739,8 @@ QString Tree::getRef(const QString &target, const Node *node) const the \a node, the \a priority. and a canonicalized form of the \a name, which is later used. */ -void Tree::insertTarget(const QString &name, - const QString &title, - TargetRec::TargetType type, - Node *node, - int priority) +void Tree::insertTarget(const QString &name, const QString &title, TargetRec::TargetType type, + Node *node, int priority) { TargetRec *target = new TargetRec(name, title, type, node, priority); nodesByTargetRef_.insert(name, target); @@ -838,8 +822,8 @@ void Tree::resolveTargets(Aggregate *root) This function searches for a \a target anchor node. If it finds one, it sets \a ref and returns the found node. */ -const Node* -Tree::findUnambiguousTarget(const QString &target, Node::Genus genus, QString &ref) const +const Node *Tree::findUnambiguousTarget(const QString &target, Node::Genus genus, + QString &ref) const { int numBestTargets = 0; TargetRec *bestTarget = nullptr; @@ -856,8 +840,7 @@ Tree::findUnambiguousTarget(const QString &target, Node::Genus genus, QString &r bestTargetList.clear(); bestTargetList.append(candidate); numBestTargets = 1; - } - else if (candidate->priority_ == bestTarget->priority_) { + } else if (candidate->priority_ == bestTarget->priority_) { bestTargetList.append(candidate); ++numBestTargets; } @@ -881,8 +864,7 @@ Tree::findUnambiguousTarget(const QString &target, Node::Genus genus, QString &r bestTargetList.clear(); bestTargetList.append(candidate); numBestTargets = 1; - } - else if (candidate->priority_ == bestTarget->priority_) { + } else if (candidate->priority_ == bestTarget->priority_) { bestTargetList.append(candidate); ++numBestTargets; } @@ -923,7 +905,8 @@ const PageNode *Tree::findPageNodeByTitle(const QString &title) const ++j; } if (j != pageNodesByTitle_.cend()) { - it.value()->location().warning("This page title exists in more than one file: " + title); + it.value()->location().warning("This page title exists in more than one file: " + + title); j.value()->location().warning("[It also exists here]"); } } @@ -1157,7 +1140,7 @@ CollectionNode *Tree::addToQmlModule(const QString &name, Node *node) node->setQmlModule(cn); if (node->isQmlType()) { QmlTypeNode *n = static_cast<QmlTypeNode *>(node); - for (int i=0; i<qmid.size(); ++i) { + for (int i = 0; i < qmid.size(); ++i) { QString key = qmid[i] + "::" + node->name(); insertQmlType(key, n); } @@ -1188,7 +1171,7 @@ CollectionNode *Tree::addToJsModule(const QString &name, Node *node) node->setQmlModule(cn); if (node->isJsType()) { QmlTypeNode *n = static_cast<QmlTypeNode *>(node); - for (int i=0; i<qmid.size(); ++i) { + for (int i = 0; i < qmid.size(); ++i) { QString key = qmid[i] + "::" + node->name(); insertQmlType(key, n); } @@ -1203,7 +1186,7 @@ CollectionNode *Tree::addToJsModule(const QString &name, Node *node) void Tree::insertQmlType(const QString &key, QmlTypeNode *n) { if (!qmlTypeMap_.contains(key)) - qmlTypeMap_.insert(key,n); + qmlTypeMap_.insert(key, n); } /*! @@ -1218,13 +1201,11 @@ void Tree::insertQmlType(const QString &key, QmlTypeNode *n) pointer to it is returned. Otherwise, nullis returned. If \a relative is ull, the search begins at the tree root. */ -const FunctionNode *Tree::findFunctionNode(const QStringList &path, - const Parameters ¶meters, - const Node *relative, - Node::Genus genus) const +const FunctionNode *Tree::findFunctionNode(const QStringList &path, const Parameters ¶meters, + const Node *relative, Node::Genus genus) const { - if (path.size() == 3 && !path[0].isEmpty() && - ((genus == Node::QML) || (genus == Node::DontCare))) { + if (path.size() == 3 && !path[0].isEmpty() + && ((genus == Node::QML) || (genus == Node::DontCare))) { QmlTypeNode *qcn = lookupQmlType(QString(path[0] + "::" + path[1])); if (qcn == nullptr) { QStringList p(path[1]); @@ -1307,11 +1288,8 @@ const FunctionNode *Tree::findFunctionNode(const QStringList &path, The node \a t */ -QString Tree::getNewLinkTarget(const Node *locNode, - const Node *t, - const QString &fileName, - QString &text, - bool broken) +QString Tree::getNewLinkTarget(const Node *locNode, const Node *t, const QString &fileName, + QString &text, bool broken) { QString physicalModuleName; if (t != nullptr && !broken) { @@ -1319,8 +1297,7 @@ QString Tree::getNewLinkTarget(const Node *locNode, if (tree != this) tree->incrementLinkCount(); physicalModuleName = tree->physicalModuleName(); - } - else + } else physicalModuleName = "broken"; incrementLinkCount(); QString target = QString("qa-target-%1").arg(-(linkCount())); @@ -1330,8 +1307,7 @@ QString Tree::getNewLinkTarget(const Node *locNode, if (it == targetListMap_->end()) { tList = new TargetList; it = targetListMap_->insert(physicalModuleName, tList); - } - else + } else tList = it.value(); tList->append(tloc); return target; diff --git a/src/qdoc/tree.h b/src/qdoc/tree.h index 0d56425dc..b7e4dce75 100644 --- a/src/qdoc/tree.h +++ b/src/qdoc/tree.h @@ -47,12 +47,10 @@ struct TargetRec public: enum TargetType { Unknown, Target, Keyword, Contents, Class, Function, Page, Subtitle }; - TargetRec(const QString &name, - const QString &title, - TargetRec::TargetType type, - Node *node, + TargetRec(const QString &name, const QString &title, TargetRec::TargetType type, Node *node, int priority) - : node_(node), ref_(name), title_(title), priority_(priority), type_(type) { + : node_(node), ref_(name), title_(title), priority_(priority), type_(type) + { // Discard the dedicated ref for keywords - they always // link to the top of the QDoc comment they appear in if (type == Keyword) @@ -72,8 +70,11 @@ public: struct TargetLoc { public: - TargetLoc(const Node *loc, const QString &t, const QString &fileName, const QString &text, bool broken) - : loc_(loc), target_(t), fileName_(fileName), text_(text), broken_(broken) { } + TargetLoc(const Node *loc, const QString &t, const QString &fileName, const QString &text, + bool broken) + : loc_(loc), target_(t), fileName_(fileName), text_(text), broken_(broken) + { + } const Node *loc_; QString target_; QString fileName_; @@ -119,52 +120,34 @@ private: // The rest of the class is private. Node *findNodeForInclude(const QStringList &path) const; ClassNode *findClassNode(const QStringList &path, const Node *start = nullptr) const; NamespaceNode *findNamespaceNode(const QStringList &path) const; - const FunctionNode *findFunctionNode(const QStringList &path, - const Parameters ¶meters, - const Node *relative, - Node::Genus genus) const; - Node *findNodeRecursive(const QStringList &path, - int pathIndex, - const Node *start, - bool (Node::*) () const) const; - const Node *findNodeForTarget(const QStringList &path, - const QString &target, - const Node *node, - int flags, - Node::Genus genus, - QString &ref) const; - const Node *matchPathAndTarget(const QStringList &path, - int idx, - const QString &target, - const Node *node, - int flags, - Node::Genus genus, + const FunctionNode *findFunctionNode(const QStringList &path, const Parameters ¶meters, + const Node *relative, Node::Genus genus) const; + Node *findNodeRecursive(const QStringList &path, int pathIndex, const Node *start, + bool (Node::*)() const) const; + const Node *findNodeForTarget(const QStringList &path, const QString &target, const Node *node, + int flags, Node::Genus genus, QString &ref) const; + const Node *matchPathAndTarget(const QStringList &path, int idx, const QString &target, + const Node *node, int flags, Node::Genus genus, QString &ref) const; - const Node *findNode(const QStringList &path, - const Node *relative, - int flags, + const Node *findNode(const QStringList &path, const Node *relative, int flags, Node::Genus genus) const; QmlTypeNode *findQmlTypeNode(const QStringList &path); - Node *findNodeByNameAndType(const QStringList &path, bool (Node::*isMatch) () const) const; + Node *findNodeByNameAndType(const QStringList &path, bool (Node::*isMatch)() const) const; Aggregate *findRelatesNode(const QStringList &path); QString getRef(const QString &target, const Node *node) const; - void insertTarget(const QString &name, - const QString &title, - TargetRec::TargetType type, - Node *node, - int priority); + void insertTarget(const QString &name, const QString &title, TargetRec::TargetType type, + Node *node, int priority); void resolveTargets(Aggregate *root); const Node *findUnambiguousTarget(const QString &target, Node::Genus genus, QString &ref) const; const PageNode *findPageNodeByTitle(const QString &title) const; - void addPropertyFunction(PropertyNode *property, - const QString &funcName, + void addPropertyFunction(PropertyNode *property, const QString &funcName, PropertyNode::FunctionRole funcRole); void resolveBaseClasses(Aggregate *n); - void resolveBaseClassesHelper(int pass, ClassNode* cn); + void resolveBaseClassesHelper(int pass, ClassNode *cn); void resolvePropertyOverriddenFromPtrs(Aggregate *n); void resolveProperties(); void resolveCppToQmlLinks(); @@ -187,8 +170,14 @@ private: // The rest of the class is private. CollectionNode *findGroup(const QString &name) { return findCollection(name, Node::Group); } CollectionNode *findModule(const QString &name) { return findCollection(name, Node::Module); } - CollectionNode *findQmlModule(const QString &name) { return findCollection(name, Node::QmlModule); } - CollectionNode *findJsModule(const QString &name) { return findCollection(name, Node::JsModule); } + CollectionNode *findQmlModule(const QString &name) + { + return findCollection(name, Node::QmlModule); + } + CollectionNode *findJsModule(const QString &name) + { + return findCollection(name, Node::JsModule); + } CollectionNode *addGroup(const QString &name) { return findGroup(name); } CollectionNode *addModule(const QString &name) { return findModule(name); } @@ -211,12 +200,9 @@ private: // The rest of the class is private. bool docsHaveBeenGenerated() const { return docsHaveBeenGenerated_; } void setTreeHasBeenAnalyzed() { treeHasBeenAnalyzed_ = true; } void setdocsHaveBeenGenerated() { docsHaveBeenGenerated_ = true; } - QString getNewLinkTarget(const Node *locNode, - const Node *t, - const QString &fileName, - QString &text, - bool broken); - TargetList* getTargetList(const QString &module); + QString getNewLinkTarget(const Node *locNode, const Node *t, const QString &fileName, + QString &text, bool broken); + TargetList *getTargetList(const QString &module); QStringList getTargetListKeys() { return targetListMap_->keys(); } FunctionNode *findFunctionNodeForTag(const QString &tag, Aggregate *parent = nullptr); FunctionNode *findMacroNode(const QString &t, const Aggregate *parent = nullptr); diff --git a/src/qdoc/utilities.cpp b/src/qdoc/utilities.cpp index 308bb2c66..5bcafe0a7 100644 --- a/src/qdoc/utilities.cpp +++ b/src/qdoc/utilities.cpp @@ -35,25 +35,25 @@ \brief This namespace holds QDoc-internal utility methods. */ namespace Utilities { - static inline void setDebugEnabled(bool value) - { - const_cast<QLoggingCategory &>(lcQdoc()).setEnabled(QtDebugMsg, value); - } +static inline void setDebugEnabled(bool value) +{ + const_cast<QLoggingCategory &>(lcQdoc()).setEnabled(QtDebugMsg, value); +} - void startDebugging(const QString &message) - { - setDebugEnabled(true); - qCDebug(lcQdoc, "START DEBUGGING: %ls", qUtf16Printable(message)); - } +void startDebugging(const QString &message) +{ + setDebugEnabled(true); + qCDebug(lcQdoc, "START DEBUGGING: %ls", qUtf16Printable(message)); +} - void stopDebugging(const QString &message) - { - qCDebug(lcQdoc, "STOP DEBUGGING: %ls", qUtf16Printable(message)); - setDebugEnabled(false); - } +void stopDebugging(const QString &message) +{ + qCDebug(lcQdoc, "STOP DEBUGGING: %ls", qUtf16Printable(message)); + setDebugEnabled(false); +} - bool debugging() - { - return lcQdoc().isEnabled(QtDebugMsg); - } +bool debugging() +{ + return lcQdoc().isEnabled(QtDebugMsg); +} } diff --git a/src/qdoc/utilities.h b/src/qdoc/utilities.h index da848795e..841099aea 100644 --- a/src/qdoc/utilities.h +++ b/src/qdoc/utilities.h @@ -31,11 +31,10 @@ #include <QtCore/qstring.h> -namespace Utilities -{ - void startDebugging(const QString &message); - void stopDebugging(const QString &message); - bool debugging(); +namespace Utilities { +void startDebugging(const QString &message); +void stopDebugging(const QString &message); +bool debugging(); }; #endif // UTILITIES_H diff --git a/src/qdoc/webxmlgenerator.cpp b/src/qdoc/webxmlgenerator.cpp index 330f3d474..c7312d418 100644 --- a/src/qdoc/webxmlgenerator.cpp +++ b/src/qdoc/webxmlgenerator.cpp @@ -41,7 +41,6 @@ QT_BEGIN_NAMESPACE static CodeMarker *marker_ = nullptr; - void WebXMLGenerator::initializeGenerator(const Config &config) { HtmlGenerator::initializeGenerator(config); @@ -71,9 +70,7 @@ QString WebXMLGenerator::fileExtension() const Some pages produce supplementary output while being generated, and that's handled here. */ -int WebXMLGenerator::generateAtom(const Atom *atom, - const Node *relative, - CodeMarker *marker) +int WebXMLGenerator::generateAtom(const Atom *atom, const Node *relative, CodeMarker *marker) { if (supplement && currentWriter) addAtomElements(*currentWriter.data(), atom, relative, marker); @@ -120,9 +117,8 @@ void WebXMLGenerator::generatePageNode(PageNode *pn, CodeMarker * /* marker */) endSubPage(); } -void WebXMLGenerator::generateExampleFilePage(const Node *en, - const QString &file, - CodeMarker * /* marker */) +void WebXMLGenerator::generateExampleFilePage(const Node *en, const QString &file, + CodeMarker * /* marker */) { QByteArray data; QXmlStreamWriter writer(&data); @@ -140,9 +136,8 @@ void WebXMLGenerator::generateExampleFilePage(const Node *en, writer.writeAttribute("subtitle", file); writer.writeStartElement("description"); QString userFriendlyFilePath; // unused - writer.writeAttribute("path", Doc::resolveFile(en->doc().location(), - file, - &userFriendlyFilePath)); + writer.writeAttribute("path", + Doc::resolveFile(en->doc().location(), file, &userFriendlyFilePath)); writer.writeAttribute("line", "0"); writer.writeAttribute("column", "0"); @@ -151,14 +146,12 @@ void WebXMLGenerator::generateExampleFilePage(const Node *en, QString code = quoter.quoteTo(en->location(), QString(), QString()); writer.writeTextElement("code", trimmedTrailing(code, QString(), QString())); - writer.writeEndElement(); // description writer.writeEndElement(); // page writer.writeEndElement(); // document writer.writeEndElement(); // WebXML writer.writeEndDocument(); - out() << data; endFilePage(); } @@ -267,8 +260,7 @@ void WebXMLGenerator::generateDocumentation(Node *node) qdb_->mergeCollections(static_cast<CollectionNode *>(node)); generatePageNode(static_cast<PageNode *>(node), nullptr); } - } - else if (node->isTextPageNode()) + } else if (node->isTextPageNode()) generatePageNode(static_cast<PageNode *>(node), nullptr); // else if TODO: anything else? } @@ -276,16 +268,15 @@ void WebXMLGenerator::generateDocumentation(Node *node) if (node->isAggregate()) { Aggregate *aggregate = static_cast<Aggregate *>(node); for (auto c : aggregate->childNodes()) { - if ((c->isAggregate() || - c->isTextPageNode() || - c->isCollectionNode()) && !c->isPrivate()) + if ((c->isAggregate() || c->isTextPageNode() || c->isCollectionNode()) + && !c->isPrivate()) generateDocumentation(c); } } } -const Atom *WebXMLGenerator::addAtomElements(QXmlStreamWriter &writer, - const Atom *atom, const Node *relative, CodeMarker *marker) +const Atom *WebXMLGenerator::addAtomElements(QXmlStreamWriter &writer, const Atom *atom, + const Node *relative, CodeMarker *marker) { bool keepQuoting = false; @@ -293,13 +284,11 @@ const Atom *WebXMLGenerator::addAtomElements(QXmlStreamWriter &writer, return nullptr; switch (atom->type()) { - case Atom::AnnotatedList: - { - const CollectionNode* cn = qdb_->getCollectionNode(atom->string(), Node::Group); + case Atom::AnnotatedList: { + const CollectionNode *cn = qdb_->getCollectionNode(atom->string(), Node::Group); if (cn) generateAnnotatedList(writer, relative, cn->members()); - } - break; + } break; case Atom::AutoLink: if (!inLink && !inSectionHeading) { const Node *node = nullptr; @@ -348,9 +337,8 @@ const Atom *WebXMLGenerator::addAtomElements(QXmlStreamWriter &writer, const QVector<QStringRef> words = str.splitRef(' '); if (!words.isEmpty()) { const QStringRef &first(words.at(0)); - if (!(first == "contains" || first == "specifies" - || first == "describes" || first == "defines" - || first == "holds" || first == "determines")) + if (!(first == "contains" || first == "specifies" || first == "describes" + || first == "defines" || first == "holds" || first == "determines")) writer.writeCharacters(" holds "); else writer.writeCharacters(" "); @@ -378,7 +366,8 @@ const Atom *WebXMLGenerator::addAtomElements(QXmlStreamWriter &writer, case Atom::Code: if (!hasQuotingInformation) - writer.writeTextElement("code", trimmedTrailing(plainCode(atom->string()), QString(), QString())); + writer.writeTextElement( + "code", trimmedTrailing(plainCode(atom->string()), QString(), QString())); else keepQuoting = true; break; @@ -386,22 +375,26 @@ const Atom *WebXMLGenerator::addAtomElements(QXmlStreamWriter &writer, #ifdef QDOC_QML case Atom::Qml: if (!hasQuotingInformation) - writer.writeTextElement("qml", trimmedTrailing(plainCode(atom->string()), QString(), QString())); + writer.writeTextElement( + "qml", trimmedTrailing(plainCode(atom->string()), QString(), QString())); else keepQuoting = true; #endif case Atom::CodeBad: - writer.writeTextElement("badcode", trimmedTrailing(plainCode(atom->string()), QString(), QString())); + writer.writeTextElement("badcode", + trimmedTrailing(plainCode(atom->string()), QString(), QString())); break; case Atom::CodeNew: writer.writeTextElement("para", "you can rewrite it as"); - writer.writeTextElement("newcode", trimmedTrailing(plainCode(atom->string()), QString(), QString())); + writer.writeTextElement("newcode", + trimmedTrailing(plainCode(atom->string()), QString(), QString())); break; case Atom::CodeOld: writer.writeTextElement("para", "For example, if you have code like"); - writer.writeTextElement("oldcode", trimmedTrailing(plainCode(atom->string()), QString(), QString())); + writer.writeTextElement("oldcode", + trimmedTrailing(plainCode(atom->string()), QString(), QString())); break; case Atom::CodeQuoteArgument: @@ -424,25 +417,21 @@ const Atom *WebXMLGenerator::addAtomElements(QXmlStreamWriter &writer, } break; - case Atom::ExampleFileLink: - { + case Atom::ExampleFileLink: { if (!inLink) { QString link = linkForExampleFile(atom->string(), relative); if (!link.isEmpty()) startLink(writer, atom, relative, link); } - } - break; + } break; - case Atom::ExampleImageLink: - { + case Atom::ExampleImageLink: { if (!inLink) { QString link = atom->string(); if (!link.isEmpty()) startLink(writer, atom, nullptr, "images/used-in-examples/" + link); } - } - break; + } break; case Atom::FootnoteLeft: writer.writeStartElement("footnote"); @@ -459,8 +448,7 @@ const Atom *WebXMLGenerator::addAtomElements(QXmlStreamWriter &writer, writer.writeStartElement("raw"); writer.writeAttribute("format", atom->string()); break; - case Atom::FormattingLeft: - { + case Atom::FormattingLeft: { if (atom->string() == ATOM_FORMATTING_BOLD) writer.writeStartElement("bold"); else if (atom->string() == ATOM_FORMATTING_ITALIC) @@ -477,11 +465,9 @@ const Atom *WebXMLGenerator::addAtomElements(QXmlStreamWriter &writer, writer.writeStartElement("argument"); else if (atom->string() == ATOM_FORMATTING_INDEX) writer.writeStartElement("index"); - } - break; + } break; - case Atom::FormattingRight: - { + case Atom::FormattingRight: { if (atom->string() == ATOM_FORMATTING_BOLD) writer.writeEndElement(); else if (atom->string() == ATOM_FORMATTING_ITALIC) @@ -565,8 +551,7 @@ const Atom *WebXMLGenerator::addAtomElements(QXmlStreamWriter &writer, writer.writeAttribute("type", "enum"); else writer.writeAttribute("type", "definition"); - } - else { + } else { writer.writeAttribute("type", "ordered"); if (atom->string() == ATOM_LIST_UPPERALPHA) writer.writeAttribute("start", "A"); @@ -583,14 +568,12 @@ const Atom *WebXMLGenerator::addAtomElements(QXmlStreamWriter &writer, case Atom::ListItemNumber: break; - case Atom::ListTagLeft: - { + case Atom::ListTagLeft: { writer.writeStartElement("definition"); - writer.writeTextElement("term", plainCode( - marker->markedUpEnumValue(atom->next()->string(), relative))); - } - break; + writer.writeTextElement( + "term", plainCode(marker->markedUpEnumValue(atom->next()->string(), relative))); + } break; case Atom::ListTagRight: writer.writeEndElement(); // definition @@ -650,14 +633,12 @@ const Atom *WebXMLGenerator::addAtomElements(QXmlStreamWriter &writer, writer.writeEndElement(); // section break; - case Atom::SectionHeadingLeft: - { + case Atom::SectionHeadingLeft: { writer.writeStartElement("heading"); int unit = atom->string().toInt(); // + hOffset(relative) writer.writeAttribute("level", QString::number(unit)); inSectionHeading = true; - } - break; + } break; case Atom::SectionHeadingRight: writer.writeEndElement(); // heading @@ -671,7 +652,6 @@ const Atom *WebXMLGenerator::addAtomElements(QXmlStreamWriter &writer, case Atom::SnippetCommand: if (quoting_) { writer.writeStartElement(atom->string()); - } break; @@ -722,8 +702,7 @@ const Atom *WebXMLGenerator::addAtomElements(QXmlStreamWriter &writer, writer.writeEndElement(); // row break; - case Atom::TableItemLeft: - { + case Atom::TableItemLeft: { writer.writeStartElement("item"); QStringList spans = atom->string().split(","); if (spans.size() == 2) { @@ -732,8 +711,7 @@ const Atom *WebXMLGenerator::addAtomElements(QXmlStreamWriter &writer, if (spans.at(1) != "1") writer.writeAttribute("rowspan", spans.at(1).trimmed()); } - } - break; + } break; case Atom::TableItemRight: writer.writeEndElement(); // item break; @@ -754,11 +732,10 @@ const Atom *WebXMLGenerator::addAtomElements(QXmlStreamWriter &writer, hasQuotingInformation = keepQuoting; return atom->next(); - } -void WebXMLGenerator::startLink(QXmlStreamWriter &writer, const Atom *atom, - const Node *node, const QString &link) +void WebXMLGenerator::startLink(QXmlStreamWriter &writer, const Atom *atom, const Node *node, + const QString &link) { QString fullName = link; if (node) @@ -776,8 +753,7 @@ void WebXMLGenerator::startLink(QXmlStreamWriter &writer, const Atom *atom, case Node::Enum: writer.writeAttribute("enum", fullName); break; - case Node::Example: - { + case Node::Example: { const ExampleNode *en = static_cast<const ExampleNode *>(node); QString fileTitle = exampleFileTitle(en, atom->string()); if (!fileTitle.isEmpty()) { @@ -785,17 +761,15 @@ void WebXMLGenerator::startLink(QXmlStreamWriter &writer, const Atom *atom, break; } } - Q_FALLTHROUGH(); + Q_FALLTHROUGH(); case Node::Page: writer.writeAttribute("page", fullName); break; - case Node::Property: - { + case Node::Property: { const PropertyNode *propertyNode = static_cast<const PropertyNode *>(node); if (propertyNode->getters().size() > 0) writer.writeAttribute("getter", propertyNode->getters().at(0)->fullName()); - } - break; + } break; default: break; } @@ -804,7 +778,8 @@ void WebXMLGenerator::startLink(QXmlStreamWriter &writer, const Atom *atom, } } -void WebXMLGenerator::endLink(QXmlStreamWriter &writer) { +void WebXMLGenerator::endLink(QXmlStreamWriter &writer) +{ if (inLink) { writer.writeEndElement(); // link inLink = false; @@ -855,14 +830,14 @@ void WebXMLGenerator::generateRelations(QXmlStreamWriter &writer, const Node *no } } -void WebXMLGenerator::generateAnnotatedList(QXmlStreamWriter &writer, - const Node *relative, const NodeMap &nodeMap) +void WebXMLGenerator::generateAnnotatedList(QXmlStreamWriter &writer, const Node *relative, + const NodeMap &nodeMap) { generateAnnotatedList(writer, relative, nodeMap.values()); } -void WebXMLGenerator::generateAnnotatedList(QXmlStreamWriter &writer, - const Node *relative, const NodeList &nodeList) +void WebXMLGenerator::generateAnnotatedList(QXmlStreamWriter &writer, const Node *relative, + const NodeList &nodeList) { writer.writeStartElement("table"); writer.writeAttribute("width", "100%"); diff --git a/src/qdoc/webxmlgenerator.h b/src/qdoc/webxmlgenerator.h index 565be82c9..71fd9df24 100644 --- a/src/qdoc/webxmlgenerator.h +++ b/src/qdoc/webxmlgenerator.h @@ -59,13 +59,14 @@ protected: QString fileExtension() const override; virtual const Atom *addAtomElements(QXmlStreamWriter &writer, const Atom *atom, - const Node *relative, CodeMarker *marker); + const Node *relative, CodeMarker *marker); virtual void generateIndexSections(QXmlStreamWriter &writer, Node *node); - private: - void generateAnnotatedList(QXmlStreamWriter &writer, const Node *relative, const NodeMap &nodeMap); - void generateAnnotatedList(QXmlStreamWriter &writer, const Node *relative, const NodeList &nodeList); + void generateAnnotatedList(QXmlStreamWriter &writer, const Node *relative, + const NodeMap &nodeMap); + void generateAnnotatedList(QXmlStreamWriter &writer, const Node *relative, + const NodeList &nodeList); void generateRelations(QXmlStreamWriter &writer, const Node *node); void startLink(QXmlStreamWriter &writer, const Atom *atom, const Node *node, const QString &link); diff --git a/src/qdoc/xmlgenerator.cpp b/src/qdoc/xmlgenerator.cpp index 05cd1b963..8b266ca18 100644 --- a/src/qdoc/xmlgenerator.cpp +++ b/src/qdoc/xmlgenerator.cpp @@ -40,10 +40,8 @@ QT_BEGIN_NAMESPACE */ bool XmlGenerator::hasBrief(const Node *node) { - return !(node->isQmlType() - || node->isPageNode() - || node->isCollectionNode() - || node->isJsType()); + return !(node->isQmlType() || node->isPageNode() || node->isCollectionNode() + || node->isJsType()); } /*! @@ -92,23 +90,19 @@ int XmlGenerator::hOffset(const Node *node) */ void XmlGenerator::rewritePropertyBrief(const Atom *atom, const Node *relative) { - if (relative->nodeType() == Node::Property || - relative->nodeType() == Node::Variable) { + if (relative->nodeType() == Node::Property || relative->nodeType() == Node::Variable) { atom = atom->next(); if (atom && atom->type() == Atom::String) { QString firstWord = - atom->string().toLower().section(' ', 0, 0, QString::SectionSkipEmpty); - if (firstWord == QLatin1String("the") - || firstWord == QLatin1String("a") - || firstWord == QLatin1String("an") - || firstWord == QLatin1String("whether") + atom->string().toLower().section(' ', 0, 0, QString::SectionSkipEmpty); + if (firstWord == QLatin1String("the") || firstWord == QLatin1String("a") + || firstWord == QLatin1String("an") || firstWord == QLatin1String("whether") || firstWord == QLatin1String("which")) { QString str = QLatin1String("This ") - + QLatin1String(relative->nodeType() == Node::Property ? - "property" : "variable") - + QLatin1String(" holds ") - + atom->string().left(1).toLower() - + atom->string().mid(1); + + QLatin1String(relative->nodeType() == Node::Property ? "property" + : "variable") + + QLatin1String(" holds ") + atom->string().left(1).toLower() + + atom->string().mid(1); const_cast<Atom *>(atom)->setString(str); } } @@ -140,7 +134,7 @@ void XmlGenerator::setImageFileName(const Node *relative, const QString &fileNam if (relative->isExample()) { const auto cen = static_cast<const ExampleNode *>(relative); if (cen->imageFileName().isEmpty()) { - auto *en = const_cast<ExampleNode*>(cen); + auto *en = const_cast<ExampleNode *>(cen); en->setImageFileName(fileName); } } @@ -250,8 +244,7 @@ QString XmlGenerator::refForNode(const Node *node) if (tdn->associatedEnum()) return refForNode(tdn->associatedEnum()); ref = node->name() + "-typedef"; - } - break; + } break; case Node::Function: { const auto fn = static_cast<const FunctionNode *>(node); switch (fn->metaness()) { @@ -279,8 +272,7 @@ QString XmlGenerator::refForNode(const Node *node) } break; } - } - break; + } break; case Node::JsProperty: case Node::QmlProperty: if (node->isAttached()) @@ -324,15 +316,14 @@ QString XmlGenerator::linkForNode(const Node *node, const Node *relative) return QString(); QString fn = fileName(node); - if (node && node->parent() - && (node->parent()->isQmlType() || node->parent()->isJsType()) + if (node && node->parent() && (node->parent()->isQmlType() || node->parent()->isJsType()) && node->parent()->isAbstract()) { if (Generator::qmlTypeContext()) { if (Generator::qmlTypeContext()->inherits(node->parent())) { fn = fileName(Generator::qmlTypeContext()); } else if (node->parent()->isInternal()) { - node->doc().location().warning( - tr("Cannot link to property in internal type '%1'").arg(node->parent()->name())); + node->doc().location().warning(tr("Cannot link to property in internal type '%1'") + .arg(node->parent()->name())); return QString(); } } @@ -356,8 +347,8 @@ QString XmlGenerator::linkForNode(const Node *node, const Node *relative) back down into the other subdirectory. */ if (node && relative && (node != relative)) { - if (useOutputSubdirs() && !node->isExternalPage() && - node->outputSubdirectory() != relative->outputSubdirectory()) { + if (useOutputSubdirs() && !node->isExternalPage() + && node->outputSubdirectory() != relative->outputSubdirectory()) { if (link.startsWith(QString(node->outputSubdirectory() + QLatin1Char('/')))) { link.prepend(QString("../")); } else { diff --git a/src/qdoc/xmlgenerator.h b/src/qdoc/xmlgenerator.h index 4bf1ca938..41744ff21 100644 --- a/src/qdoc/xmlgenerator.h +++ b/src/qdoc/xmlgenerator.h @@ -59,7 +59,7 @@ protected: QString refForNode(const Node *node); QString linkForNode(const Node *node, const Node *relative); QString getLink(const Atom *atom, const Node *relative, const Node **node); - QString getAutoLink(const Atom *atom, const Node *relative, const Node** node); + QString getAutoLink(const Atom *atom, const Node *relative, const Node **node); const QPair<QString, QString> anchorForNode(const Node *node); @@ -68,4 +68,4 @@ protected: QT_END_NAMESPACE -#endif //XMLGENERATOR_H +#endif // XMLGENERATOR_H diff --git a/src/qdoc/yyindent.cpp b/src/qdoc/yyindent.cpp index c78e132b6..581a97a3e 100644 --- a/src/qdoc/yyindent.cpp +++ b/src/qdoc/yyindent.cpp @@ -247,7 +247,7 @@ static QString trimmedCodeLine(const QString &t) /* Remove C++-style comments. */ - k = trimmed.indexOf( "//" ); + k = trimmed.indexOf("//"); if (k != -1) trimmed.truncate(k); @@ -309,10 +309,8 @@ static const bool *yyLeftBraceFollows = nullptr; Saves and restores the state of the global linizer. This enables backtracking. */ -#define YY_SAVE() \ - LinizerState savedState = *yyLinizerState -#define YY_RESTORE() \ - *yyLinizerState = savedState +#define YY_SAVE() LinizerState savedState = *yyLinizerState +#define YY_RESTORE() *yyLinizerState = savedState /* Advances to the previous line in yyProgram and update yyLine @@ -323,8 +321,7 @@ static bool readLine() { int k; - yyLinizerState->leftBraceFollows = - (firstNonWhiteSpace(yyLinizerState->line) == QChar('{')); + yyLinizerState->leftBraceFollows = (firstNonWhiteSpace(yyLinizerState->line) == QChar('{')); do { if (yyLinizerState->iter == yyProgram->constBegin()) { @@ -374,7 +371,7 @@ static bool readLine() Remove preprocessor directives. */ k = 0; - while (k < (int) yyLinizerState->line.length()) { + while (k < (int)yyLinizerState->line.length()) { QChar ch = yyLinizerState->line[k]; if (ch == QChar('#')) { yyLinizerState->line.clear(); @@ -397,8 +394,7 @@ static bool readLine() the other way around, as we are parsing backwards. */ yyLinizerState->braceDepth += - yyLinizerState->line.count('}') - - yyLinizerState->line.count('{'); + yyLinizerState->line.count('}') - yyLinizerState->line.count('{'); /* We use a dirty trick for @@ -413,8 +409,7 @@ static bool readLine() */ if (yyLinizerState->pendingRightBrace) yyLinizerState->braceDepth++; - yyLinizerState->pendingRightBrace = - (yyLinizerState->line.indexOf(*braceX) == 0); + yyLinizerState->pendingRightBrace = (yyLinizerState->line.indexOf(*braceX) == 0); if (yyLinizerState->pendingRightBrace) yyLinizerState->braceDepth--; } while (yyLinizerState->line.isEmpty()); @@ -502,7 +497,7 @@ static int indentWhenBottomLineStartsInCComment() */ int indent = columnForIndex(*yyLine, k); k += 2; - while (k < (int) yyLine->length()) { + while (k < (int)yyLine->length()) { if (!(*yyLine)[k].isSpace()) return columnForIndex(*yyLine, k); k++; @@ -623,14 +618,13 @@ static bool isUnfinishedLine() if (yyLine->isEmpty()) return false; - QChar lastCh = (*yyLine)[(int) yyLine->length() - 1]; + QChar lastCh = (*yyLine)[(int)yyLine->length() - 1]; if (QString("{};").indexOf(lastCh) == -1 && !yyLine->endsWith("...")) { /* It doesn't end with ';' or similar. If it's neither "Q_OBJECT" nor "if ( x )", it must be an unfinished line. */ - unf = (yyLine->indexOf("Q_OBJECT") == -1 && - !matchBracelessControlStatement()); + unf = (yyLine->indexOf("Q_OBJECT") == -1 && !matchBracelessControlStatement()); } else if (lastCh == QChar(';')) { if (lastParen(*yyLine) == QChar('(')) { /* @@ -639,8 +633,8 @@ static bool isUnfinishedLine() for ( int i = 1; i < 10; */ unf = true; - } else if (readLine() && yyLine->endsWith(QLatin1Char(';')) && - lastParen(*yyLine) == QChar('(')) { + } else if (readLine() && yyLine->endsWith(QLatin1Char(';')) + && lastParen(*yyLine) == QChar('(')) { /* Exception: @@ -719,8 +713,8 @@ static int indentForContinuationLine() Such a brace must be treated just like the other delimiters. */ - if ( braceDepth == -1 ) { - if (j < (int) yyLine->length() - 1) { + if (braceDepth == -1) { + if (j < (int)yyLine->length() - 1) { hook = j; } else { return 0; // shouldn't happen @@ -753,12 +747,10 @@ static int indentForContinuationLine() end of the unfinished lines or by unbalanced parentheses. */ - if (QString("!=<>").indexOf((*yyLine)[j - 1]) == -1 && - (*yyLine)[j + 1] != '=') { - if (braceDepth == 0 && delimDepth == 0 && - j < (int) yyLine->length() - 1 && - !yyLine->endsWith(QLatin1Char(',')) && - (yyLine->contains('(') == yyLine->contains(')'))) + if (QString("!=<>").indexOf((*yyLine)[j - 1]) == -1 && (*yyLine)[j + 1] != '=') { + if (braceDepth == 0 && delimDepth == 0 && j < (int)yyLine->length() - 1 + && !yyLine->endsWith(QLatin1Char(',')) + && (yyLine->contains('(') == yyLine->contains(')'))) hook = j; } } @@ -780,7 +772,7 @@ static int indentForContinuationLine() "foo foo foo foo foo foo foo foo foo") ); */ hook++; - while (hook < (int) yyLine->length()) { + while (hook < (int)yyLine->length()) { if (!(*yyLine)[hook].isSpace()) return columnForIndex(*yyLine, hook); hook++; @@ -991,8 +983,7 @@ static void initializeIndenter() { literal = new QRegExp("([\"'])(?:\\\\.|[^\\\\])*\\1"); literal->setMinimal(true); - label = new QRegExp( - "^\\s*((?:case\\b([^:]|::)+|[a-zA-Z_0-9]+)(?:\\s+slots)?:)(?!:)"); + label = new QRegExp("^\\s*((?:case\\b([^:]|::)+|[a-zA-Z_0-9]+)(?:\\s+slots)?:)(?!:)"); inlineCComment = new QRegExp("/\\*.*\\*/"); inlineCComment->setMinimal(true); braceX = new QRegExp("^\\s*\\}\\s*(?:else|catch)\\b"); @@ -1068,10 +1059,9 @@ int indentForBottomLine(const QStringList &program, QChar typedIn) */ indent -= ppIndentSize; } else if (okay(typedIn, ':')) { - QRegExp caseLabel( - "\\s*(?:case\\b(?:[^:]|::)+" - "|(?:public|protected|private|signals|default)(?:\\s+slots)?\\s*" - ")?:.*" ); + QRegExp caseLabel("\\s*(?:case\\b(?:[^:]|::)+" + "|(?:public|protected|private|signals|default)(?:\\s+slots)?\\s*" + ")?:.*"); if (caseLabel.exactMatch(bottomLine)) { /* @@ -1106,60 +1096,60 @@ QT_END_NAMESPACE Test driver. */ -#include <qfile.h> -#include <qtextstream.h> +# include <qfile.h> +# include <qtextstream.h> -#include <errno.h> +# include <errno.h> QT_BEGIN_NAMESPACE -static QString fileContents( const QString &fileName ) +static QString fileContents(const QString &fileName) { - QFile f( fileName ); - if ( !f.open(QFile::ReadOnly) ) { - qWarning( "yyindent error: Cannot open file '%s' for reading: %s", - fileName.toLatin1().data(), strerror(errno) ); + QFile f(fileName); + if (!f.open(QFile::ReadOnly)) { + qWarning("yyindent error: Cannot open file '%s' for reading: %s", + fileName.toLatin1().data(), strerror(errno)); return QString(); } - QTextStream t( &f ); + QTextStream t(&f); QString contents = t.read(); f.close(); - if ( contents.isEmpty() ) - qWarning( "yyindent error: File '%s' is empty", fileName.toLatin1().data() ); + if (contents.isEmpty()) + qWarning("yyindent error: File '%s' is empty", fileName.toLatin1().data()); return contents; } QT_END_NAMESPACE -int main( int argc, char **argv ) +int main(int argc, char **argv) { QT_USE_NAMESPACE - if ( argc != 2 ) { - qWarning( "usage: yyindent file.cpp" ); + if (argc != 2) { + qWarning("usage: yyindent file.cpp"); return 1; } - QString code = fileContents( argv[1] ); - QStringList program = QStringList::split( '\n', code, true ); + QString code = fileContents(argv[1]); + QStringList program = QStringList::split('\n', code, true); QStringList p; QString out; - while ( !program.isEmpty() && program.last().trimmed().isEmpty() ) - program.remove( program.fromLast() ); + while (!program.isEmpty() && program.last().trimmed().isEmpty()) + program.remove(program.fromLast()); QStringList::ConstIterator line = program.constBegin(); - while ( line != program.constEnd() ) { - p.push_back( *line ); - QChar typedIn = firstNonWhiteSpace( *line ); - if ( p.last().endsWith(QLatin1Char(':')) ) + while (line != program.constEnd()) { + p.push_back(*line); + QChar typedIn = firstNonWhiteSpace(*line); + if (p.last().endsWith(QLatin1Char(':'))) typedIn = ':'; - int indent = indentForBottomLine( p, typedIn ); + int indent = indentForBottomLine(p, typedIn); - if ( !(*line).trimmed().isEmpty() ) { - for ( int j = 0; j < indent; j++ ) + if (!(*line).trimmed().isEmpty()) { + for (int j = 0; j < indent; j++) out += QLatin1Char(' '); out += (*line).trimmed(); } @@ -1167,10 +1157,10 @@ int main( int argc, char **argv ) ++line; } - while ( out.endsWith(QLatin1Char('\n')) ) - out.truncate( out.length() - 1 ); + while (out.endsWith(QLatin1Char('\n'))) + out.truncate(out.length() - 1); - printf( "%s\n", out.toLatin1().data() ); + printf("%s\n", out.toLatin1().data()); return 0; } -- cgit v1.2.3