diff options
Diffstat (limited to 'src')
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<CXTranslationUnit_Flags>(0); static CXIndex index_ = nullptr; #ifndef QT_NO_DEBUG_STREAM -template <class T> +template<class T> static QDebug operator<<(QDebug debug, const std::vector<T> &v) { QDebugStateSaver saver(debug); @@ -90,10 +90,13 @@ static QDebug operator<<(QDebug debug, const std::vector<T> &v) T can be any functor that is callable with a CXCursor parameter and returns a CXChildVisitResult (in other word compatible with function<CXChildVisitResult(CXCursor)> */ -template <typename T> bool visitChildrenLambda(CXCursor cursor, T &&lambda) +template<typename T> +bool visitChildrenLambda(CXCursor cursor, T &&lambda) { - CXCursorVisitor visitor = [](CXCursor c, CXCursor , CXClientData client_data) -> CXChildVisitResult - { return (*static_cast<T *>(client_data))(c); }; + CXCursorVisitor visitor = [](CXCursor c, CXCursor, + CXClientData client_data) -> CXChildVisitResult { + return (*static_cast<T *>(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<QString, QString> &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<Aggregate *> 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<NamespaceNode *>(parent_->findNonfunctionChild(namespaceName, &Node::isNamespace)); + ns = static_cast<NamespaceNode *>( + 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(); - QScopedValueRollback<Aggregate *>setParent(parent_, ns); + QScopedValueRollback<Aggregate *> 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<ENUM>) 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<XXX> 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<EnumNode *>(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<QByteArray> includePathsFromHeaders(const QHash<QString, QString> QVector<QByteArray> 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<int>(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<int>(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_Flags>(CXTranslationUnit_Incomplete | CXTranslationUnit_SkipFunctionBodies | CXTranslationUnit_KeepGoing); + flags_ = static_cast<CXTranslationUnit_Flags>(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_Flags>(CXTranslationUnit_Incomplete | CXTranslationUnit_SkipFunctionBodies | CXTranslationUnit_KeepGoing); + flags_ = static_cast<CXTranslationUnit_Flags>(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<int>(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<int>(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_Flags>(CXTranslationUnit_Incomplete | - CXTranslationUnit_SkipFunctionBodies | - CXTranslationUnit_KeepGoing); + CXTranslationUnit_Flags flags = static_cast<CXTranslationUnit_Flags>( + 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<unsigned long>(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<quintptr>(node)); - } - else { + } else { return QString::number(reinterpret_cast<qulonglong>(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("</") + tag + QLatin1Char('>')); + return (QLatin1Char('<') + tag + QLatin1Char('>') + protect(name) + QLatin1String("</") + tag + + QLatin1Char('>')); } 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("</") + tag + QLatin1Char('>'); + return QLatin1Char('<') + tag + QLatin1Char('>') + protect(node->name()) + QLatin1String("</") + + tag + QLatin1Char('>'); } QString CodeMarker::linkTag(const Node *node, const QString &body) { - return QLatin1String("<@link node=\"") + stringForNode(node) - + QLatin1String("\">") + body + QLatin1String("</@link>"); + return QLatin1String("<@link node=\"") + stringForNode(node) + QLatin1String("\">") + body + + QLatin1String("</@link>"); } 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<const ClassNode *>(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<const FunctionNode *>(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<const PropertyNode *>(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<QString> commonMetaCommands_; const QSet<QString> &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<QString> &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<QString, QStringList> 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<Config *>(this)->lastLocation_ = cv.location_; if (!cv.values_.isEmpty()) { if (!cv.plus_) value.clear(); - for (int j=0; j<cv.values_.size(); ++j) { + for (int j = 0; j < cv.values_.size(); ++j) { if (!value.isEmpty() && !value.endsWith(QChar('\n'))) value.append(QChar(' ')); value.append(cv.values_[j]); @@ -601,7 +600,7 @@ QStringList Config::getCanonicalPathList(const QString &var, bool validate) cons if (!configVars.empty()) { int i = configVars.size() - 1; while (i >= 0) { - const ConfigVar& cv = configVars[i]; + const ConfigVar &cv = configVars[i]; if (!cv.location_.isEmpty()) const_cast<Config *>(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<sl.size(); ++i) { + for (int i = 0; i < sl.size(); ++i) { QDir dir(sl[i].simplified()); QString path = dir.path(); if (dir.isRelative()) @@ -746,8 +745,7 @@ QString Config::getIncludeFilePath(const QString &fileName) const The directories in \a excludedDirs are avoided. The files in \a excludedFiles are not included in the return list. */ -QStringList Config::getAllFiles(const QString &filesVar, - const QString &dirsVar, +QStringList Config::getAllFiles(const QString &filesVar, const QString &dirsVar, const QSet<QString> &excludedDirs, const QSet<QString> &excludedFiles) { @@ -794,10 +792,8 @@ QStringList Config::getExampleImageFiles(const QSet<QString> &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<QString> &exclud return excludedFiles.contains(fileName); } -QStringList Config::getFilesHere(const QString &uncleanDir, - const QString &nameFilter, - const Location &location, - const QSet<QString> &excludedDirs, +QStringList Config::getFilesHere(const QString &uncleanDir, const QString &nameFilter, + const Location &location, const QSet<QString> &excludedDirs, const QSet<QString> &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<QRegExp> getRegExpList(const QString &var) const; QSet<QString> 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<QString> &excludedDirs = QSet<QString>(), const QSet<QString> &excludedFiles = QSet<QString>()); QString getIncludeFilePath(const QString &fileName) const; - QStringList getExampleQdocFiles(const QSet<QString> &excludedDirs, const QSet<QString> &excludedFiles); - QStringList getExampleImageFiles(const QSet<QString> &excludedDirs, const QSet<QString> &excludedFiles); + QStringList getExampleQdocFiles(const QSet<QString> &excludedDirs, + const QSet<QString> &excludedFiles); + QStringList getExampleImageFiles(const QSet<QString> &excludedDirs, + const QSet<QString> &excludedFiles); static QStringList loadMaster(const QString &fileName); static bool isFileExcluded(const QString &fileName, const QSet<QString> &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<QString> &excludedDirs = QSet<QString>(), const QSet<QString> &excludedFiles = QSet<QString>()); - 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<QString, QString> uncompressedFiles; static QMap<QString, QString> 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 + "</@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 + "</@headerfile>></@preprocessor>\n"; + code += "<@preprocessor>#include <<@headerfile>" + include + + "</@headerfile>></@preprocessor>\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<QString> 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<QString> 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<QString> &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<NamespaceNode *>(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; i<topics.size(); ++i) { + for (int i = 0; i < topics.size(); ++i) { QString cmd = topics.at(i).topic; arg = topics.at(i).args; - if ((cmd == COMMAND_QMLPROPERTY) || (cmd == COMMAND_QMLATTACHEDPROPERTY) || - (cmd == COMMAND_JSPROPERTY) || (cmd == COMMAND_JSATTACHEDPROPERTY)) { + if ((cmd == COMMAND_QMLPROPERTY) || (cmd == COMMAND_QMLATTACHEDPROPERTY) + || (cmd == COMMAND_JSPROPERTY) || (cmd == COMMAND_JSATTACHEDPROPERTY)) { bool attached = topics.at(i).topic.contains(QLatin1String("attached")); if (splitQmlPropertyArg(arg, type, module, qmlTypeName, property, doc.location())) { if (qmlType != qdb_->findQmlType(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<QString> &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<Aggregate *>(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<SharedCommentNode *>(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<FunctionNode *>(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<QmlTypeNode *>(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<QString> 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<QString> &topicCommands(); static const QSet<QString> &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<QString, NodeTypeTestFunc> nodeTypeTestFuncMap_; QMap<QString, Node::NodeType> 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<QString, int> QHash_QString_int; typedef QHash<QString, Macro> QHash_QString_Macro; @@ -296,24 +295,20 @@ Q_GLOBAL_STATIC(QHash_QString_Macro, macroHash) class DocPrivateExtra { public: - Doc::Sections granularity_; - Doc::Sections section_; // ### - QVector<Atom *> tableOfContents_; - QVector<int> tableOfContentsLevels_; - QVector<Atom *> keywords_; - QVector<Atom *> targets_; - QStringMultiMap metaMap_; - - DocPrivateExtra() - : granularity_(Doc::Part) - , section_(Doc::NoSection) - { } + Doc::Sections granularity_; + Doc::Sections section_; // ### + QVector<Atom *> tableOfContents_; + QVector<int> tableOfContentsLevels_; + QVector<Atom *> keywords_; + QVector<Atom *> 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<QString, ArgList> 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<QString> &metaCommandSet, + void parse(const QString &source, DocPrivate *docPrivate, const QSet<QString> &metaCommandSet, const QSet<QString> &possibleTopics); static int endCmdFor(int cmd); @@ -443,8 +430,7 @@ public: private: Location &location(); - QString detailsUnknownCommand(const QSet<QString> &metaCommandSet, - const QString &str); + QString detailsUnknownCommand(const QSet<QString> &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<QString> &metaCommandSet, - const QSet<QString> &possibleTopics) +void DocParser::parse(const QString &source, DocPrivate *docPrivate, + const QSet<QString> &metaCommandSet, const QSet<QString> &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<QString> &metaCommandSet, - const QString &str) +QString DocParser::detailsUnknownCommand(const QSet<QString> &metaCommandSet, const QString &str) { QSet<QString> commandSet = metaCommandSet; int i = 0; @@ -1648,7 +1620,8 @@ QString DocParser::detailsUnknownCommand(const QSet<QString> &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<lineBuffer.size()) { + if (i < lineBuffer.size()) { if (lineBuffer[i].contains(identifier)) { break; } } - } - else + } else result += lineBuffer[i] + QLatin1Char('\n'); ++i; } while (i < lineBuffer.size()); if (result.isEmpty()) { location().warning(tr("Empty qdoc snippet '%1' in '%2'") - .arg(identifier) - .arg(userFriendlyFilePath)); - } - else { + .arg(identifier) + .arg(userFriendlyFilePath)); + } else { input_.insert(pos, result); len = input_.length(); openedInputs.push(pos + result.length()); @@ -1759,8 +1723,7 @@ void DocParser::startFormat(const QString &format, int cmd) for (const auto &item : qAsConst(pendingFormats)) { if (item == format) { - location().warning(tr("Cannot nest '\\%1' commands") - .arg(cmdName(cmd))); + location().warning(tr("Cannot nest '\\%1' commands").arg(cmdName(cmd))); return; } } @@ -1772,8 +1735,7 @@ void DocParser::startFormat(const QString &format, int cmd) pendingFormats.insert(braceDepth, format); ++braceDepth; ++pos; - } - else { + } else { append(Atom::String, getArgument()); append(Atom::FormattingRight, format); if (format == ATOM_FORMATTING_INDEX && indexStartedPara) { @@ -1791,24 +1753,15 @@ bool DocParser::openCommand(int cmd) if (cmd != CMD_LINK) { if (outer == CMD_LIST) { ok = (cmd == CMD_FOOTNOTE || cmd == CMD_LIST); - } - else if (outer == CMD_SIDEBAR) { - ok = (cmd == CMD_LIST || - cmd == CMD_QUOTATION || - cmd == CMD_SIDEBAR); - } - else if (outer == CMD_QUOTATION) { + } else if (outer == CMD_SIDEBAR) { + ok = (cmd == CMD_LIST || cmd == CMD_QUOTATION || cmd == CMD_SIDEBAR); + } else if (outer == CMD_QUOTATION) { ok = (cmd == CMD_LIST); - } - else if (outer == CMD_TABLE) { - ok = (cmd == CMD_LIST || - cmd == CMD_FOOTNOTE || - cmd == CMD_QUOTATION); - } - else if (outer == CMD_FOOTNOTE || outer == CMD_LINK) { + } else if (outer == CMD_TABLE) { + ok = (cmd == CMD_LIST || cmd == CMD_FOOTNOTE || cmd == CMD_QUOTATION); + } else if (outer == CMD_FOOTNOTE || outer == CMD_LINK) { ok = false; - } - else if (outer == CMD_TOPICREF) + } else if (outer == CMD_TOPICREF) ok = (cmd == CMD_TOPICREF || cmd == CMD_MAPREF); else if (outer == CMD_MAPREF) ok = false; @@ -1816,8 +1769,7 @@ bool DocParser::openCommand(int cmd) if (ok) { openedCommands.push(cmd); - } - else { + } else { location().warning(tr("Can't use '\\%1' in '\\%2'").arg(cmdName(cmd)).arg(cmdName(outer))); } return ok; @@ -1828,8 +1780,7 @@ bool DocParser::closeCommand(int endCmd) if (endCmdFor(openedCommands.top()) == endCmd && openedCommands.size() > 1) { openedCommands.pop(); return true; - } - else { + } else { bool contains = false; QStack<int> 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<QString> &metaCommandSet, - const QSet<QString> &topics) +Doc::Doc(const Location &start_loc, const Location &end_loc, const QString &source, + const QSet<QString> &metaCommandSet, const QSet<QString> &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<Topic> TopicList; @@ -70,8 +74,8 @@ typedef QVector<DitaRef *> 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<QString> &metaCommandSet, - const QSet<QString> &topics); + Doc(const Location &start_loc, const Location &end_loc, const QString &source, + const QSet<QString> &metaCommandSet, const QSet<QString> &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 <QtCore/qdir.h> #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<QString, QMap<QString, QString> > Generator::fmtLeftMaps; -QMap<QString, QMap<QString, QString> > Generator::fmtRightMaps; +QMap<QString, QMap<QString, QString>> Generator::fmtLeftMaps; +QMap<QString, QMap<QString, QString>> Generator::fmtRightMaps; QVector<Generator *> 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<RelatedClass> &rc) { - QMap<QString,Text> classMap; + QMap<QString, Text> 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<QString,Text> classMap; + QMap<QString, Text> 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<const FunctionNode *>(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<const TypedefNode *>(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() << "<p>"; generateText(text, node, marker); out() << "</p>"; - } - else if (func->isCtor()) { + } else if (func->isCtor()) { Text text; text << "Default constructs an instance of "; text << func->parent()->name() << "."; out() << "<p>"; generateText(text, node, marker); out() << "</p>"; - } - else if (func->isCCtor()) { + } else if (func->isCCtor()) { Text text; text << "Copy constructor."; out() << "<p>"; generateText(text, node, marker); out() << "</p>"; - } - else if (func->isMCtor()) { + } else if (func->isMCtor()) { Text text; text << "Move-copy constructor."; out() << "<p>"; generateText(text, node, marker); out() << "</p>"; - } - else if (func->isCAssign()) { + } else if (func->isCAssign()) { Text text; text << "Copy-assignment operator."; out() << "<p>"; generateText(text, node, marker); out() << "</p>"; - } - else if (func->isMAssign()) { + } else if (func->isMAssign()) { Text text; text << "Move-assignment operator."; out() << "<p>"; generateText(text, node, marker); out() << "</p>"; - } - 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<const FunctionNode *>(node); if (!fn->overridesThis().isEmpty()) @@ -886,8 +842,8 @@ void Generator::generateBody(const Node *node, CodeMarker *marker) const auto &documentedItemList = enume->doc().enumItemNames(); QSet<QString> documentedItems(documentedItemList.cbegin(), documentedItemList.cend()); const QSet<QString> 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; <install path>/<example name> 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<RelatedClass> &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<PageNode *>(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<Aggregate *>(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<const Aggregate *>(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<QStringMultiMap&>(inner->doc().metaTagMap()); + QStringMultiMap &metaTagMap = const_cast<QStringMultiMap &>(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:" <<i; + qDebug() << "haystack:" << src << "needle:" << tag << "i:" << i; // skip tag i += tag.length(); @@ -2188,8 +2063,7 @@ void Generator::supplementAlsoList(const Node *node, QVector<Text> &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<Text> &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<Text> &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<Text> &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<QString, QString> &formattingLeftMap(); QMap<QString, QString> &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<QString, QStringList> editionGroupMap; QMap<QString, QStringList> editionModuleMap; QString naturalLanguage; #ifndef QT_NO_TEXTCODEC - QTextCodec* outputCodec; + QTextCodec *outputCodec; QString outputEncoding; #endif QString tagFile_; QStack<QTextStream *> 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<QString, QMap<QString, QString> > fmtLeftMaps; - static QMap<QString, QMap<QString, QString> > fmtRightMaps; + static QMap<QString, QMap<QString, QString>> fmtLeftMaps; + static QMap<QString, QMap<QString, QString>> fmtRightMaps; static QVector<Generator *> 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<QString>(filterAttributes.cbegin(), filterAttributes.cend()); + project.filterAttributes = + QSet<QString>(filterAttributes.cbegin(), filterAttributes.cend()); project.includeIndexNodes = config.getBool(prefix + "includeIndexNodes"); const QSet<QString> 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<QString>(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<const PageNode *>(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<const CollectionNode *>(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<const EnumNode *>(node); - const auto items = enumNode->items(); - for (const auto &item : items) { - QStringList details; + { + const EnumNode *enumNode = static_cast<const EnumNode *>(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<const CollectionNode *>(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<const CollectionNode *>(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<const FunctionNode *>(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<const TypedefNode *>(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<const CollectionNode *>(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<const CollectionNode *>(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<QString> files = QSet<QString>(gen_->outputFileNames().cbegin(), gen_->outputFileNames().cend()); + QSet<QString> files = + QSet<QString>(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<QString> &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)(?: +[^>]*)?>)(.*)(</@\\2>)"); static QRegExp spanTag("</@(?:comment|preprocessor|string|char|number|op|type|name|keyword)>"); 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("<a href=\""); @@ -76,8 +74,7 @@ static void addLink(const QString &linkTarget, *res += QLatin1String("\">"); *res += nestedStuff; *res += QLatin1String("</a>"); - } - 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, "<b>", "</b>" }, - { ATOM_FORMATTING_INDEX, "<!--", "-->" }, - { ATOM_FORMATTING_ITALIC, "<i>", "</i>" }, - { ATOM_FORMATTING_PARAMETER, "<i>", "</i>" }, - { ATOM_FORMATTING_SUBSCRIPT, "<sub>", "</sub>" }, - { ATOM_FORMATTING_SUPERSCRIPT, "<sup>", "</sup>" }, - { ATOM_FORMATTING_TELETYPE, "<code>", "</code>" }, // <tt> tag is not supported in HTML5 - { ATOM_FORMATTING_UICONTROL, "<b>", "</b>" }, - { ATOM_FORMATTING_UNDERLINE, "<u>", "</u>" }, - { nullptr, nullptr, nullptr } - }; + } defaults[] = { { ATOM_FORMATTING_BOLD, "<b>", "</b>" }, + { ATOM_FORMATTING_INDEX, "<!--", "-->" }, + { ATOM_FORMATTING_ITALIC, "<i>", "</i>" }, + { ATOM_FORMATTING_PARAMETER, "<i>", "</i>" }, + { ATOM_FORMATTING_SUBSCRIPT, "<sub>", "</sub>" }, + { ATOM_FORMATTING_SUPERSCRIPT, "<sup>", "</sup>" }, + { ATOM_FORMATTING_TELETYPE, "<code>", + "</code>" }, // <tt> tag is not supported in HTML5 + { ATOM_FORMATTING_UICONTROL, "<b>", "</b>" }, + { ATOM_FORMATTING_UNDERLINE, "<u>", "</u>" }, + { 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<QString> 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\"><th class=\"tblConst\">Destination Module</th>" << "<th class=\"tblval\">Link Count</th></tr>\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() << "<tr><td class=\"topAlign\"><tt>" - << "<a href=\"" << fileName << "\">" - << strings.at(i) << "</a>" - << "</tt></td><td class=\"topAlign\"><tt>" << counts.at(i) - << "</tt></td></tr>\n"; + << "<a href=\"" << fileName << "\">" << strings.at(i) << "</a>" + << "</tt></td><td class=\"topAlign\"><tt>" << counts.at(i) << "</tt></td></tr>\n"; } int count = 0; fileName = generateLinksToBrokenLinksPage(marker, count); if (count != 0) { out() << "<tr><td class=\"topAlign\"><tt>" << "<a href=\"" << fileName << "\">" - << "Broken Links" << "</a>" - << "</tt></td><td class=\"topAlign\"><tt>" << count - << "</tt></td></tr>\n"; - + << "Broken Links" + << "</a>" + << "</tt></td><td class=\"topAlign\"><tt>" << count << "</tt></td></tr>\n"; } out() << "</table>\n"; t = "The Optimal \"depends\" Variable"; out() << "<h2>" << protectEnc(t) << "</h2>\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() << "<p>" << protectEnc(t) << "</p>\n"; out() << "<p>" << protectEnc(depends) << "</p>\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() << "<p>This is a list of links from " << defaultModuleName() - << " to " << module << ". "; + out() << "<p>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.</p>\n"; const TargetList *tlist = qdb_->getTargetList(module); if (tlist) { - out() << "<table class=\"valuelist\"><tr valign=\"top\" class=\"odd\"><th class=\"tblConst\">Link to link...</th><th class=\"tblval\">In file...</th><th class=\"tbldscr\">Somewhere after line number...</th></tr>\n"; + out() << "<table class=\"valuelist\"><tr valign=\"top\" class=\"odd\"><th " + "class=\"tblConst\">Link to link...</th><th class=\"tblval\">In file...</th><th " + "class=\"tbldscr\">Somewhere after line number...</th></tr>\n"; for (const TargetLoc *t : *tlist) { // e.g.: <a name="link-8421"></a><a href="layout.html">Layout Management</a> out() << "<tr><td class=\"topAlign\">"; @@ -490,7 +446,9 @@ QString HtmlGenerator::generateLinksToBrokenLinksPage(CodeMarker *marker, int &c out() << "<p>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.</p>\n"; - out() << "<table class=\"valuelist\"><tr valign=\"top\" class=\"odd\"><th class=\"tblConst\">Link to broken link...</th><th class=\"tblval\">In file...</th><th class=\"tbldscr\">Somewhere after line number...</th></tr>\n"; + out() << "<table class=\"valuelist\"><tr valign=\"top\" class=\"odd\"><th " + "class=\"tblConst\">Link to broken link...</th><th class=\"tblval\">In " + "file...</th><th class=\"tbldscr\">Somewhere after line number...</th></tr>\n"; for (const TargetLoc *t : *tlist) { // e.g.: <a name="link-8421"></a><a href="layout.html">Layout Management</a> out() << "<tr><td class=\"topAlign\">"; @@ -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() << "<a id=\"" << Doc::canonicalTitle(target) << "\" class=\"qa-mark\"></a>"; + out() << "<a id=\"" << Doc::canonicalTitle(target) + << "\" class=\"qa-mark\"></a>"; } 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() << "<pre class=\"qml\">" - << trimmedTrailing(highlightedCode(indent(codeIndent,atom->string()),relative, false, Node::QML), codePrefix, codeSuffix) + << trimmedTrailing(highlightedCode(indent(codeIndent, atom->string()), relative, + false, Node::QML), + codePrefix, codeSuffix) << "</pre>\n"; break; case Atom::JavaScript: out() << "<pre class=\"js\">" - << trimmedTrailing(highlightedCode(indent(codeIndent,atom->string()),relative, false, Node::JS), codePrefix, codeSuffix) + << trimmedTrailing(highlightedCode(indent(codeIndent, atom->string()), relative, + false, Node::JS), + codePrefix, codeSuffix) << "</pre>\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() << "<pre class=\"cpp\">" - << trimmedTrailing(highlightedCode(indent(codeIndent,atom->string()),relative), codePrefix, codeSuffix) + << trimmedTrailing(highlightedCode(indent(codeIndent, atom->string()), relative), + codePrefix, codeSuffix) << "</pre>\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() << "<pre class=\"cpp plain\">" - << trimmedTrailing(protectEnc(plainCode(indent(codeIndent,atom->string()))), codePrefix, codeSuffix) + << trimmedTrailing(protectEnc(plainCode(indent(codeIndent, atom->string()))), + codePrefix, codeSuffix) << "</pre>\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) << "<sub>" - << subscriptRegExp.cap(2) << "</sub>"; + out() << subscriptRegExp.cap(1) << "<sub>" << subscriptRegExp.cap(2) + << "</sub>"; 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() << "</span>"; - } - 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<CollectionNode *>(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() << "<ul>\n"; - const QVector<Section> sinceSections = sections.sinceSections(); - for (const auto §ion : sinceSections) { - if (!section.members().isEmpty()) { - out() << "<li>" - << "<a href=\"#" - << Doc::canonicalTitle(section.title()) - << "\">" - << section.title() - << "</a></li>\n"; - } + Sections sections(nsmap); + out() << "<ul>\n"; + const QVector<Section> sinceSections = sections.sinceSections(); + for (const auto §ion : sinceSections) { + if (!section.members().isEmpty()) { + out() << "<li>" + << "<a href=\"#" << Doc::canonicalTitle(section.title()) << "\">" + << section.title() << "</a></li>\n"; } - out() << "</ul>\n"; + } + out() << "</ul>\n"; - int idx = 0; - for (const auto §ion : sinceSections) { - if (!section.members().isEmpty()) { - out() << "<a name=\"" - << Doc::canonicalTitle(section.title()) - << "\"></a>\n"; - out() << "<h3>" << protectEnc(section.title()) << "</h3>\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<Node *> 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() << "<p>Class "; - - out() << "<a href=\"" - << linkForNode(map.key(), nullptr) - << "\">"; - QStringList pieces = map.key()->fullName().split("::"); - out() << protectEnc(pieces.last()); - out() << "</a>" << ":</p>\n"; - - generateSection(nv, nullptr, marker); - out() << "<br/>"; - } - } else { - generateSection(section.members(), nullptr, marker); + int idx = 0; + for (const auto §ion : sinceSections) { + if (!section.members().isEmpty()) { + out() << "<a name=\"" << Doc::canonicalTitle(section.title()) << "\"></a>\n"; + out() << "<h3>" << protectEnc(section.title()) << "</h3>\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<Node *> 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() << "<p>Class "; + + out() << "<a href=\"" << linkForNode(map.key(), nullptr) << "\">"; + QStringList pieces = map.key()->fullName().split("::"); + out() << protectEnc(pieces.last()); + out() << "</a>" + << ":</p>\n"; + + generateSection(nv, nullptr, marker); + out() << "<br/>"; + } + } else { + generateSection(section.members(), nullptr, marker); } - ++idx; } + ++idx; } - break; + } break; case Atom::BR: out() << "<br />\n"; break; @@ -847,8 +782,7 @@ int HtmlGenerator::generateAtom(const Atom *atom, const Node *relative, CodeMark out() << "<hr />\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() << "<p class=\"centerAlign\">"; if (fileName.isEmpty()) { relative->location().warning(tr("Missing image: %1").arg(protectEnc(atom->string()))); - out() << "<font color=\"red\">[Missing image " - << protectEnc(atom->string()) << "]</font>"; - } - else { + out() << "<font color=\"red\">[Missing image " << protectEnc(atom->string()) + << "]</font>"; + } else { QString prefix; out() << "<img src=\"" << protectEnc(prefix + fileName) << '"'; if (!text.isEmpty()) @@ -873,8 +806,7 @@ int HtmlGenerator::generateAtom(const Atom *atom, const Node *relative, CodeMark } if (atom->type() == Atom::Image) out() << "</p>"; - } - break; + } break; case Atom::ImageText: break; case Atom::ImportantLeft: @@ -905,8 +837,7 @@ int HtmlGenerator::generateAtom(const Atom *atom, const Node *relative, CodeMark out() << "<br/>"; 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() << "<a id=\"" << Doc::canonicalTitle(target) << "\" class=\"qa-mark\"></a>"; } - } - 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() << "</p>\n"; @@ -963,11 +886,9 @@ int HtmlGenerator::generateAtom(const Atom *atom, const Node *relative, CodeMark } if (atom->string() == ATOM_LIST_BULLET) { out() << "<ul>\n"; - } - else if (atom->string() == ATOM_LIST_TAG) { + } else if (atom->string() == ATOM_LIST_TAG) { out() << "<dl>\n"; - } - else if (atom->string() == ATOM_LIST_VALUE) { + } else if (atom->string() == ATOM_LIST_VALUE) { out() << "<div class=\"table\"><table class=\"valuelist\">"; threeColumnEnumValueTable_ = isThreeColumnEnumValueTable(atom); if (threeColumnEnumValueTable_) { @@ -983,34 +904,29 @@ int HtmlGenerator::generateAtom(const Atom *atom, const Node *relative, CodeMark out() << "<th class=\"tblval\">Value</th>"; out() << "<th class=\"tbldscr\">Description</th></tr>\n"; + } else { + out() << "<tr><th class=\"tblConst\">Constant</th><th " + "class=\"tblVal\">Value</th></tr>\n"; } - else { - out() << "<tr><th class=\"tblConst\">Constant</th><th class=\"tblVal\">Value</th></tr>\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("<ol class=\"%1\" type=\"%1\" start=\"%2\">").arg(olType) - .arg(atom->next()->string()); - } - else + out() << QString("<ol class=\"%1\" type=\"%1\" start=\"%2\">") + .arg(olType) + .arg(atom->next()->string()); + } else out() << QString("<ol class=\"%1\" type=\"%1\">").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() << "<dt>"; - } - else { // (atom->string() == ATOM_LIST_VALUE) + } else { // (atom->string() == ATOM_LIST_VALUE) QPair<QString, int> 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() << "<dd>"; - } - else if (atom->string() == ATOM_LIST_VALUE) { + } else if (atom->string() == ATOM_LIST_VALUE) { if (threeColumnEnumValueTable_) { out() << "</td><td class=\"topAlign\">"; if (matchAhead(atom, Atom::ListItemRight)) out() << " "; } - } - else { + } else { out() << "<li>"; } 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() << "</dd>\n"; - } - else if (atom->string() == ATOM_LIST_VALUE) { + } else if (atom->string() == ATOM_LIST_VALUE) { out() << "</td></tr>\n"; - } - else { + } else { out() << "</li>\n"; } break; case Atom::ListRight: if (atom->string() == ATOM_LIST_BULLET) { out() << "</ul>\n"; - } - else if (atom->string() == ATOM_LIST_TAG) { + } else if (atom->string() == ATOM_LIST_TAG) { out() << "</dl>\n"; - } - else if (atom->string() == ATOM_LIST_VALUE) { + } else if (atom->string() == ATOM_LIST_VALUE) { out() << "</table></div>\n"; - } - else { + } else { out() << "</ol>\n"; } break; @@ -1096,7 +1004,7 @@ int HtmlGenerator::generateAtom(const Atom *atom, const Node *relative, CodeMark out() << "</p>\n"; in_para = false; } - //if (!matchAhead(atom, Atom::ListItemRight) && !matchAhead(atom, Atom::TableItemRight)) + // if (!matchAhead(atom, Atom::ListItemRight) && !matchAhead(atom, Atom::TableItemRight)) // out() << "</p>\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() << "<h" + QString::number(unit) + QLatin1Char(' ') - << "id=\"" << Doc::canonicalTitle(Text::sectionHeading(atom).toString()) << "\">"; + out() << "<h" + QString::number(unit) + QLatin1Char(' ') << "id=\"" + << Doc::canonicalTitle(Text::sectionHeading(atom).toString()) << "\">"; 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<QString, QString> 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() << "</table></div>\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<tr class=\"qt-style\">"; - } - else { + } else { out() << "</thead>\n"; inTableHeader_ = false; } @@ -1184,21 +1088,19 @@ int HtmlGenerator::generateAtom(const Atom *atom, const Node *relative, CodeMark case Atom::TableRowRight: out() << "</tr>\n"; break; - case Atom::TableItemLeft: - { + case Atom::TableItemLeft: { if (inTableHeader_) out() << "<th "; else out() << "<td "; - for (int i=0; i<atom->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() << "</th>"; @@ -1237,8 +1138,7 @@ int HtmlGenerator::generateAtom(const Atom *atom, const Node *relative, CodeMark out() << "<b class=\"redFont\"><Missing HTML></b>"; break; case Atom::UnknownCommand: - out() << "<b class=\"redFont\"><code>\\" << protectEnc(atom->string()) - << "</code></b>"; + out() << "<b class=\"redFont\"><code>\\" << protectEnc(atom->string()) << "</code></b>"; break; case Atom::QmlText: case Atom::EndQmlText: @@ -1280,8 +1180,7 @@ void HtmlGenerator::generateCppReferencePage(Aggregate *aggregate, CodeMarker *m ns = static_cast<NamespaceNode *>(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() << "<p>"; generateText(brief, ns, marker); out() << "</p>\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() << "<div class=\"descr\">\n" // QTBUG-9504 - << "<h2 id=\"" << detailsRef << "\">" << "Detailed Description" << "</h2>\n"; + << "<h2 id=\"" << detailsRef << "\">" + << "Detailed Description" + << "</h2>\n"; generateBody(aggregate, marker); out() << "</div>\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<const PropertyNode *>(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<QString>(enumItemNameList.cbegin(), enumItemNameList.cend()) - - QSet<QString>(omitEnumItemNameList.cbegin(), omitEnumItemNameList.cend()); + - QSet<QString>(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() << "<div class=\"descr\">\n" // QTBUG-9504 - << "<h2 id=\"" << detailsRef << "\">" << "Detailed Description" << "</h2>\n"; + << "<h2 id=\"" << detailsRef << "\">" + << "Detailed Description" + << "</h2>\n"; generateBody(aggregate, marker); out() << "</div>\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<QString>(enumItemNameList.cbegin(), enumItemNameList.cend()) - - QSet<QString>(omitEnumItemNameList.cbegin(), omitEnumItemNameList.cend()); + const auto items = + QSet<QString>(enumItemNameList.cbegin(), enumItemNameList.cend()) + - QSet<QString>(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() << "<a name=\"" << ref - << "\"></a>" << divNavTop << '\n'; + out() << "<a name=\"" << ref << "\"></a>" << divNavTop << '\n'; out() << "<h2 id=\"" << ref << "\">" << protectEnc(section.title()) << "</h2>\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() << "<a name=\"" << detailsRef << "\"></a>" << divNavTop << '\n'; - out() << "<h2 id=\"" << detailsRef << "\">" << "Detailed Description" << "</h2>\n"; + out() << "<h2 id=\"" << detailsRef << "\">" + << "Detailed Description" + << "</h2>\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<Section> &stdQmlTypeSummarySections = sections.stdQmlTypeSummarySections(); for (const auto §ion : stdQmlTypeSummarySections) { if (!section.isEmpty()) { 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.members(), qbtn, marker); } } generateExtractionMark(qbtn, DetailedDescriptionMark); - out() << "<div class=\"descr\"> <a name=\"" << registerRef("details") << "\"></a>\n"; // QTBUG-9504 + out() << "<div class=\"descr\"> <a name=\"" << registerRef("details") + << "\"></a>\n"; // QTBUG-9504 generateBody(qbtn, marker); out() << "</div>\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() << "<div class=\"descr\"> <a name=\"" << registerRef("details") << "\"></a>\n"; // QTBUG-9504 + out() << "<div class=\"descr\"> <a name=\"" << registerRef("details") + << "\"></a>\n"; // QTBUG-9504 generateBody(pn, marker); out() << "</div>\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() << "<a name=\"" << ref << "\"></a>" << divNavTop << '\n'; out() << "<div class=\"descr\">\n"; // QTBUG-9504 - out() << "<h2 id=\"" << ref << "\">" << "Detailed Description" << "</h2>\n"; - } - else { + out() << "<h2 id=\"" << ref << "\">" + << "Detailed Description" + << "</h2>\n"; + } else { generateExtractionMark(cn, DetailedDescriptionMark); - out() << "<div class=\"descr\"> <a name=\"" << registerRef("details") << "\"></a>\n"; // QTBUG-9504 + out() << "<div class=\"descr\"> <a name=\"" << registerRef("details") + << "\"></a>\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<const Aggregate *>(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() << "</tr></table><table class=\"buildversion\"><tr>\n" << "<td id=\"buildversion\" width=\"100%\" align=\"right\">"; } else { @@ -1951,9 +1828,7 @@ void HtmlGenerator::generateNavigationBar(const QString &title, out() << "</li>\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("<?xml version=\"1.0\" encoding=\"%1\"?>\n").arg(outputEncoding); @@ -1967,25 +1842,22 @@ void HtmlGenerator::generateHeader(const QString &title, if (node && !node->doc().location().isEmpty()) out() << "<!-- " << node->doc().location().fileName() << " -->\n"; - //determine the rest of the <title> 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; } |