diff options
Diffstat (limited to 'src/tools/qdoc')
-rw-r--r-- | src/tools/qdoc/codeparser.cpp | 7 | ||||
-rw-r--r-- | src/tools/qdoc/config.cpp | 2 | ||||
-rw-r--r-- | src/tools/qdoc/cppcodeparser.cpp | 18 | ||||
-rw-r--r-- | src/tools/qdoc/ditaxmlgenerator.cpp | 13 | ||||
-rw-r--r-- | src/tools/qdoc/doc/config/qdoc.qdocconf | 3 | ||||
-rw-r--r-- | src/tools/qdoc/generator.cpp | 2 | ||||
-rw-r--r-- | src/tools/qdoc/helpprojectwriter.cpp | 1 | ||||
-rw-r--r-- | src/tools/qdoc/htmlgenerator.cpp | 17 | ||||
-rw-r--r-- | src/tools/qdoc/node.cpp | 12 | ||||
-rw-r--r-- | src/tools/qdoc/node.h | 11 | ||||
-rw-r--r-- | src/tools/qdoc/qdocindexfiles.cpp | 19 | ||||
-rw-r--r-- | src/tools/qdoc/qmlcodeparser.cpp | 5 | ||||
-rw-r--r-- | src/tools/qdoc/qmlvisitor.cpp | 4 | ||||
-rw-r--r-- | src/tools/qdoc/text.cpp | 5 |
14 files changed, 103 insertions, 16 deletions
diff --git a/src/tools/qdoc/codeparser.cpp b/src/tools/qdoc/codeparser.cpp index 557a6f08fa..7b534a6c95 100644 --- a/src/tools/qdoc/codeparser.cpp +++ b/src/tools/qdoc/codeparser.cpp @@ -70,6 +70,7 @@ QT_BEGIN_NAMESPACE #define COMMAND_SUBTITLE Doc::alias(QLatin1String("subtitle")) #define COMMAND_THREADSAFE Doc::alias(QLatin1String("threadsafe")) #define COMMAND_TITLE Doc::alias(QLatin1String("title")) +#define COMMAND_WRAPPER Doc::alias(QLatin1String("wrapper")) QString CodeParser::currentSubDir_; QList<CodeParser *> CodeParser::parsers; @@ -219,7 +220,8 @@ QSet<QString> CodeParser::commonMetaCommands() << COMMAND_SINCE << COMMAND_SUBTITLE << COMMAND_THREADSAFE - << COMMAND_TITLE; + << COMMAND_TITLE + << COMMAND_WRAPPER; } /*! @@ -286,6 +288,9 @@ void CodeParser::processCommonMetaCommand(const Location& location, else if (command == COMMAND_SINCE) { node->setSince(arg.first); } + else if (command == COMMAND_WRAPPER) { + node->setWrapper(); + } else if (command == COMMAND_PAGEKEYWORDS) { node->addPageKeywords(arg.first); } diff --git a/src/tools/qdoc/config.cpp b/src/tools/qdoc/config.cpp index ce3b34841e..107af96607 100644 --- a/src/tools/qdoc/config.cpp +++ b/src/tools/qdoc/config.cpp @@ -310,7 +310,6 @@ QString Config::getString(const QString& var) const { QList<ConfigVar> configVars = configVars_.values(var); QString value; - int high = 0; if (!configVars.empty()) { int i = configVars.size() - 1; while (i >= 0) { @@ -324,7 +323,6 @@ QString Config::getString(const QString& var) const if (!value.isEmpty() && !value.endsWith(QChar('\n'))) value.append(QChar(' ')); value.append(cv.values_[j]); - high = j; } } --i; diff --git a/src/tools/qdoc/cppcodeparser.cpp b/src/tools/qdoc/cppcodeparser.cpp index db7c637b53..dc086c853d 100644 --- a/src/tools/qdoc/cppcodeparser.cpp +++ b/src/tools/qdoc/cppcodeparser.cpp @@ -1598,7 +1598,11 @@ bool CppCodeParser::matchBaseList(ClassNode *classe, bool isClass) } /*! - Parse a C++ class, union, or struct declarion. + Parse a C++ class, union, or struct declaration. + + This function only handles one level of class nesting, but that is + sufficient for Qt because there are no cases of class nesting more + than one level deep. */ bool CppCodeParser::matchClassDecl(InnerNode *parent, const QString &templateStuff) @@ -1612,6 +1616,18 @@ bool CppCodeParser::matchClassDecl(InnerNode *parent, return false; while (tok == Tok_Ident) readToken(); + if (tok == Tok_Gulbrandsen) { + Node* n = parent->findChildNodeByNameAndType(previousLexeme(),Node::Class); + if (n) { + parent = static_cast<InnerNode*>(n); + if (parent) { + readToken(); + if (tok != Tok_Ident) + return false; + readToken(); + } + } + } if (tok != Tok_Colon && tok != Tok_LeftBrace) return false; diff --git a/src/tools/qdoc/ditaxmlgenerator.cpp b/src/tools/qdoc/ditaxmlgenerator.cpp index 314dda3a9d..eea1845e17 100644 --- a/src/tools/qdoc/ditaxmlgenerator.cpp +++ b/src/tools/qdoc/ditaxmlgenerator.cpp @@ -2763,11 +2763,22 @@ void DitaXmlGenerator::generateAnnotatedList(const Node* relative, writeEndTag(); // </p> writeEndTag(); // <entry> } + else if (!node->reconstitutedBrief().isEmpty()) { + writeStartTag(DT_entry); + writeStartTag(DT_p); + writeCharacters(node->reconstitutedBrief()); + writeEndTag(); // </p> + writeEndTag(); // <entry> + } } else { writeStartTag(DT_entry); writeStartTag(DT_p); - writeCharacters(protectEnc(node->doc().briefText().toString())); // zzz + if (!node->reconstitutedBrief().isEmpty()) { + writeCharacters(node->reconstitutedBrief()); + } + else + writeCharacters(protectEnc(node->doc().briefText().toString())); writeEndTag(); // </p> writeEndTag(); // <entry> } diff --git a/src/tools/qdoc/doc/config/qdoc.qdocconf b/src/tools/qdoc/doc/config/qdoc.qdocconf index 84e9689f50..a7fbb38463 100644 --- a/src/tools/qdoc/doc/config/qdoc.qdocconf +++ b/src/tools/qdoc/doc/config/qdoc.qdocconf @@ -13,7 +13,8 @@ exampledirs = .. \ config imagedirs = ../../../doc/src/templates/images \ - images + ../images \ + ../../../../widgets/doc/images \ tagfile = ../html/qdoc.tags diff --git a/src/tools/qdoc/generator.cpp b/src/tools/qdoc/generator.cpp index d9ee0e42ee..11521fc554 100644 --- a/src/tools/qdoc/generator.cpp +++ b/src/tools/qdoc/generator.cpp @@ -656,7 +656,7 @@ void Generator::generateBody(const Node *node, CodeMarker *marker) } } if (node->doc().isEmpty()) { - if (!quiet && !node->isReimp()) { // ### might be unnecessary + if (!node->isWrapper() && !quiet && !node->isReimp()) { // ### might be unnecessary node->location().warning(tr("No documentation for '%1'").arg(node->plainFullName())); } } diff --git a/src/tools/qdoc/helpprojectwriter.cpp b/src/tools/qdoc/helpprojectwriter.cpp index fdba15700f..0cdb2de776 100644 --- a/src/tools/qdoc/helpprojectwriter.cpp +++ b/src/tools/qdoc/helpprojectwriter.cpp @@ -375,6 +375,7 @@ bool HelpProjectWriter::generateSection(HelpProject &project, case Node::Document: { const DocNode *docNode = static_cast<const DocNode*>(node); if (docNode->subType() != Node::ExternalPage && + docNode->subType() != Node::Image && !docNode->fullTitle().isEmpty()) { if (docNode->subType() != Node::File) { diff --git a/src/tools/qdoc/htmlgenerator.cpp b/src/tools/qdoc/htmlgenerator.cpp index d5e079d910..2dc4c1e6c6 100644 --- a/src/tools/qdoc/htmlgenerator.cpp +++ b/src/tools/qdoc/htmlgenerator.cpp @@ -2287,10 +2287,19 @@ void HtmlGenerator::generateAnnotatedList(const Node *relative, generateText(brief, node, marker); out() << "</p></td>"; } + else if (!node->reconstitutedBrief().isEmpty()) { + out() << "<td class=\"tblDescr\"><p>"; + out() << node->reconstitutedBrief(); + out() << "</p></td>"; + } } else { out() << "<td class=\"tblDescr\"><p>"; - out() << protectEnc(node->doc().briefText().toString()); + if (!node->reconstitutedBrief().isEmpty()) { + out() << node->reconstitutedBrief(); + } + else + out() << protectEnc(node->doc().briefText().toString()); out() << "</p></td>"; } out() << "</tr>\n"; @@ -4117,8 +4126,6 @@ void HtmlGenerator::generateManifestFile(QString manifest, QString element) if (child->subType() == Node::File) { QString file = child->name(); if (file.endsWith(".pro") || file.endsWith(".qmlproject")) { - if (file.startsWith("demos/")) - file = file.mid(6); proFiles << file; } } @@ -4233,8 +4240,6 @@ void HtmlGenerator::generateManifestFile(QString manifest, QString element) if (baseName.compare(ename, Qt::CaseInsensitive) == 0) { if (!usedNames.contains(fileName)) { writer.writeStartElement("fileToOpen"); - if (file.startsWith("demos/")) - file = file.mid(6); writer.writeCharacters(examplesPath + file); writer.writeEndElement(); // fileToOpen usedNames.insert(fileName); @@ -4244,8 +4249,6 @@ void HtmlGenerator::generateManifestFile(QString manifest, QString element) fileName.toLower().endsWith("main.qml")) { if (!usedNames.contains(fileName)) { writer.writeStartElement("fileToOpen"); - if (file.startsWith("demos/")) - file = file.mid(6); writer.writeCharacters(examplesPath + file); writer.writeEndElement(); // fileToOpen usedNames.insert(fileName); diff --git a/src/tools/qdoc/node.cpp b/src/tools/qdoc/node.cpp index 028c0a0b2a..e627cf859e 100644 --- a/src/tools/qdoc/node.cpp +++ b/src/tools/qdoc/node.cpp @@ -1079,6 +1079,16 @@ void InnerNode::deleteChildren() */ /*! + Returns true if the node is a class node or a QML type node + that is marked as being a wrapper class or QML type, or if + it is a member of a wrapper class or type. + */ +bool Node::isWrapper() const +{ + return (parent_ ? parent_->isWrapper() : false); +} + +/*! */ const Node *InnerNode::findChildNodeByName(const QString& name) const { @@ -1441,6 +1451,7 @@ ClassNode::ClassNode(InnerNode *parent, const QString& name) : InnerNode(Class, parent, name) { abstract_ = false; + wrapper_ = false; qmlelement = 0; setPageType(ApiPage); } @@ -2105,6 +2116,7 @@ QmlClassNode::QmlClassNode(InnerNode *parent, const QString& name) : DocNode(parent, name, QmlClass, Node::ApiPage), abstract_(false), cnodeRequired_(false), + wrapper_(false), cnode_(0), baseNode_(0) { diff --git a/src/tools/qdoc/node.h b/src/tools/qdoc/node.h index d1a95358f0..bc75df2992 100644 --- a/src/tools/qdoc/node.h +++ b/src/tools/qdoc/node.h @@ -179,6 +179,7 @@ public: void setLink(LinkType linkType, const QString &link, const QString &desc); void setUrl(const QString &url); void setTemplateStuff(const QString &templateStuff) { templateStuff_ = templateStuff; } + void setReconstitutedBrief(const QString &t) { reconstitutedBrief_ = t; } void setPageType(PageType t) { pageType_ = t; } void setPageType(const QString& t); void setParent(InnerNode* n) { parent_ = n; } @@ -200,11 +201,13 @@ public: virtual bool isCollisionNode() const { return false; } virtual bool isAttached() const { return false; } virtual bool isGroup() const { return false; } + virtual bool isWrapper() const; 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 QString title() const { return QString(); } virtual bool hasProperty(const QString& ) const { return false; } virtual void getMemberNamespaces(NodeMap& ) { } @@ -235,6 +238,7 @@ public: ThreadSafeness inheritedThreadSafeness() const; QString since() const { return since_; } QString templateStuff() const { return templateStuff_; } + const QString& reconstitutedBrief() const { return reconstitutedBrief_; } PageType pageType() const { return pageType_; } QString pageTypeString() const; QString nodeTypeString() const; @@ -296,6 +300,7 @@ private: QString url_; QString since_; QString templateStuff_; + QString reconstitutedBrief_; mutable QString uuid_; QString outSubDir_; QString qmlModuleName_; @@ -437,8 +442,10 @@ public: ClassNode(InnerNode* parent, const QString& name); virtual ~ClassNode() { } virtual bool isClass() const { return true; } + virtual bool isWrapper() const { return wrapper_; } virtual QString obsoleteLink() const { return obsoleteLink_; } virtual void setObsoleteLink(const QString& t) { obsoleteLink_ = t; }; + virtual void setWrapper() { wrapper_ = true; } void addBaseClass(Access access, ClassNode* node, @@ -463,6 +470,7 @@ private: QList<RelatedClass> derived; QList<RelatedClass> ignoredBases; bool abstract_; + bool wrapper_; QString sname; QString obsoleteLink_; QmlClassNode* qmlelement; @@ -568,7 +576,9 @@ public: virtual void setCurrentChild(); virtual void clearCurrentChild(); virtual bool isAbstract() const { return abstract_; } + virtual bool isWrapper() const { return wrapper_; } virtual void setAbstract(bool b) { abstract_ = b; } + virtual void setWrapper() { wrapper_ = true; } virtual bool isInternal() const { return (status() == Internal); } virtual QString qmlFullBaseName() const; virtual QString obsoleteLink() const { return obsoleteLink_; } @@ -592,6 +602,7 @@ public: private: bool abstract_; bool cnodeRequired_; + bool wrapper_; ClassNode* cnode_; QString baseName_; QString obsoleteLink_; diff --git a/src/tools/qdoc/qdocindexfiles.cpp b/src/tools/qdoc/qdocindexfiles.cpp index 59adc63c9e..daba2cc78a 100644 --- a/src/tools/qdoc/qdocindexfiles.cpp +++ b/src/tools/qdoc/qdocindexfiles.cpp @@ -505,6 +505,10 @@ void QDocIndexFiles::readIndexSection(const QDomElement& element, node->setDoc(doc); node->setIndexNodeFlag(); node->setOutputSubdirectory(project_.toLower()); + QString briefAttr = element.attribute("brief"); + if (!briefAttr.isEmpty()) { + node->setReconstitutedBrief(briefAttr); + } if (node->isInnerNode()) { InnerNode* inner = static_cast<InnerNode*>(node); @@ -754,6 +758,7 @@ bool QDocIndexFiles::generateIndexSection(QXmlStreamWriter& writer, writer.writeAttribute("since", node->since()); } + QString brief = node->doc().briefText().toString(); switch (node->type()) { case Node::Class: { @@ -769,6 +774,8 @@ bool QDocIndexFiles::generateIndexSection(QXmlStreamWriter& writer, if (!node->moduleName().isEmpty()) writer.writeAttribute("module", node->moduleName()); writeMembersAttribute(writer, classNode, Node::Document, Node::Group, "groups"); + if (!brief.isEmpty()) + writer.writeAttribute("brief", brief); } break; case Node::Namespace: @@ -777,6 +784,8 @@ bool QDocIndexFiles::generateIndexSection(QXmlStreamWriter& writer, if (!namespaceNode->moduleName().isEmpty()) writer.writeAttribute("module", namespaceNode->moduleName()); writeMembersAttribute(writer, namespaceNode, Node::Document, Node::Group, "groups"); + if (!brief.isEmpty()) + writer.writeAttribute("brief", brief); } break; case Node::Document: @@ -843,6 +852,8 @@ bool QDocIndexFiles::generateIndexSection(QXmlStreamWriter& writer, writer.writeAttribute("module", node->moduleName()); } writeMembersAttribute(writer, docNode, Node::Document, Node::Group, "groups"); + if (!brief.isEmpty()) + writer.writeAttribute("brief", brief); } break; case Node::Function: @@ -902,6 +913,8 @@ bool QDocIndexFiles::generateIndexSection(QXmlStreamWriter& writer, if (propertyNode) writer.writeAttribute("associated-property", propertyNode->name()); writer.writeAttribute("type", functionNode->returnType()); + if (!brief.isEmpty()) + writer.writeAttribute("brief", brief); } break; case Node::QmlProperty: @@ -910,12 +923,16 @@ bool QDocIndexFiles::generateIndexSection(QXmlStreamWriter& writer, writer.writeAttribute("type", qpn->dataType()); writer.writeAttribute("attached", qpn->isAttached() ? "true" : "false"); writer.writeAttribute("writable", qpn->isWritable(qdb_) ? "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); foreach (const Node* fnNode, propertyNode->getters()) { if (fnNode) { const FunctionNode* functionNode = static_cast<const FunctionNode*>(fnNode); @@ -955,6 +972,8 @@ bool QDocIndexFiles::generateIndexSection(QXmlStreamWriter& writer, 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; default: diff --git a/src/tools/qdoc/qmlcodeparser.cpp b/src/tools/qdoc/qmlcodeparser.cpp index c86982eb95..b9c0ad9218 100644 --- a/src/tools/qdoc/qmlcodeparser.cpp +++ b/src/tools/qdoc/qmlcodeparser.cpp @@ -63,6 +63,7 @@ QT_BEGIN_NAMESPACE #define COMMAND_PAGEKEYWORDS Doc::alias("pagekeywords") #define COMMAND_PRELIMINARY Doc::alias("preliminary") #define COMMAND_SINCE Doc::alias("since") +#define COMMAND_WRAPPER Doc::alias("wrapper") #define COMMAND_QMLABSTRACT Doc::alias("qmlabstract") #define COMMAND_QMLCLASS Doc::alias("qmlclass") @@ -228,8 +229,8 @@ QSet<QString> QmlCodeParser::otherMetaCommands() << COMMAND_PRELIMINARY << COMMAND_SINCE << COMMAND_QMLABSTRACT - << COMMAND_INQMLMODULE; - + << COMMAND_INQMLMODULE + << COMMAND_WRAPPER; } /*! diff --git a/src/tools/qdoc/qmlvisitor.cpp b/src/tools/qdoc/qmlvisitor.cpp index ac659720b2..86b86c8f34 100644 --- a/src/tools/qdoc/qmlvisitor.cpp +++ b/src/tools/qdoc/qmlvisitor.cpp @@ -60,6 +60,7 @@ QT_BEGIN_NAMESPACE #define COMMAND_PAGEKEYWORDS Doc::alias(QLatin1String("pagekeywords")) #define COMMAND_PRELIMINARY Doc::alias(QLatin1String("preliminary")) #define COMMAND_SINCE Doc::alias(QLatin1String("since")) +#define COMMAND_WRAPPER Doc::alias(QLatin1String("wrapper")) #define COMMAND_QMLABSTRACT Doc::alias(QLatin1String("qmlabstract")) #define COMMAND_QMLCLASS Doc::alias(QLatin1String("qmlclass")) @@ -367,6 +368,9 @@ void QmlDocVisitor::applyMetacommands(QQmlJS::AST::SourceLocation, QString arg = args[0].first; //.join(' '); node->setSince(arg); } + else if (command == COMMAND_WRAPPER) { + node->setWrapper(); + } else { doc.location().warning(tr("The \\%1 command is ignored in QML files").arg(command)); } diff --git a/src/tools/qdoc/text.cpp b/src/tools/qdoc/text.cpp index 2d218bd469..e2f682726d 100644 --- a/src/tools/qdoc/text.cpp +++ b/src/tools/qdoc/text.cpp @@ -149,6 +149,11 @@ void Text::stripLastAtom() } } +/*! + This function traverses the atom list of the Text object, + extracting all the string parts. It concatenates them to + a result string and returns it. + */ QString Text::toString() const { QString str; |