diff options
Diffstat (limited to 'tools')
-rw-r--r-- | tools/configure/configureapp.cpp | 69 | ||||
-rw-r--r-- | tools/qdoc3/doc/qdoc-manual.qdoc | 21 | ||||
-rw-r--r-- | tools/qdoc3/helpprojectwriter.cpp | 124 | ||||
-rw-r--r-- | tools/qdoc3/helpprojectwriter.h | 1 |
4 files changed, 139 insertions, 76 deletions
diff --git a/tools/configure/configureapp.cpp b/tools/configure/configureapp.cpp index c3de09e..ae1af89 100644 --- a/tools/configure/configureapp.cpp +++ b/tools/configure/configureapp.cpp @@ -581,17 +581,13 @@ void Configure::parseCmdLine() // Image formats -------------------------------------------- else if (configCmdLine.at(i) == "-no-gif") dictionary[ "GIF" ] = "no"; - else if( configCmdLine.at(i) == "-qt-gif" ) - dictionary[ "GIF" ] = "auto"; else if (configCmdLine.at(i) == "-no-libtiff") { dictionary[ "TIFF"] = "no"; dictionary[ "LIBTIFF" ] = "no"; } else if (configCmdLine.at(i) == "-qt-libtiff") { - dictionary[ "TIFF" ] = "plugin"; dictionary[ "LIBTIFF" ] = "qt"; } else if (configCmdLine.at(i) == "-system-libtiff") { - dictionary[ "TIFF" ] = "plugin"; dictionary[ "LIBTIFF" ] = "system"; } @@ -599,10 +595,8 @@ void Configure::parseCmdLine() dictionary[ "JPEG" ] = "no"; dictionary[ "LIBJPEG" ] = "no"; } else if (configCmdLine.at(i) == "-qt-libjpeg") { - dictionary[ "JPEG" ] = "plugin"; dictionary[ "LIBJPEG" ] = "qt"; } else if (configCmdLine.at(i) == "-system-libjpeg") { - dictionary[ "JPEG" ] = "plugin"; dictionary[ "LIBJPEG" ] = "system"; } @@ -610,10 +604,8 @@ void Configure::parseCmdLine() dictionary[ "PNG" ] = "no"; dictionary[ "LIBPNG" ] = "no"; } else if (configCmdLine.at(i) == "-qt-libpng") { - dictionary[ "PNG" ] = "qt"; dictionary[ "LIBPNG" ] = "qt"; } else if (configCmdLine.at(i) == "-system-libpng") { - dictionary[ "PNG" ] = "qt"; dictionary[ "LIBPNG" ] = "system"; } @@ -621,10 +613,8 @@ void Configure::parseCmdLine() dictionary[ "MNG" ] = "no"; dictionary[ "LIBMNG" ] = "no"; } else if (configCmdLine.at(i) == "-qt-libmng") { - dictionary[ "MNG" ] = "qt"; dictionary[ "LIBMNG" ] = "qt"; } else if (configCmdLine.at(i) == "-system-libmng") { - dictionary[ "MNG" ] = "qt"; dictionary[ "LIBMNG" ] = "system"; } @@ -1750,22 +1740,22 @@ bool Configure::displayHelp() desc("ZLIB", "qt", "-qt-zlib", "Use the zlib bundled with Qt."); desc("ZLIB", "system", "-system-zlib", "Use zlib from the operating system.\nSee http://www.gzip.org/zlib\n"); - desc("GIF", "no", "-no-gif", "Do not compile the plugin for GIF reading support."); - desc("GIF", "auto", "-qt-gif", "Compile the plugin for GIF reading support.\nSee also src/plugins/imageformats/gif/qgifhandler.h\n"); + desc("GIF", "no", "-no-gif", "Do not compile GIF reading support."); + desc("GIF", "auto", "-qt-gif", "Compile GIF reading support.\nSee also src/gui/image/qgifhandler.h\n"); - desc("LIBPNG", "no", "-no-libpng", "Do not compile in PNG support."); + desc("LIBPNG", "no", "-no-libpng", "Do not compile PNG support."); desc("LIBPNG", "qt", "-qt-libpng", "Use the libpng bundled with Qt."); desc("LIBPNG", "system","-system-libpng", "Use libpng from the operating system.\nSee http://www.libpng.org/pub/png\n"); - desc("LIBMNG", "no", "-no-libmng", "Do not compile in MNG support."); + desc("LIBMNG", "no", "-no-libmng", "Do not compile MNG support."); desc("LIBMNG", "qt", "-qt-libmng", "Use the libmng bundled with Qt."); desc("LIBMNG", "system","-system-libmng", "Use libmng from the operating system.\nSee See http://www.libmng.com\n"); - desc("LIBTIFF", "no", "-no-libtiff", "Do not compile the plugin for TIFF support."); + desc("LIBTIFF", "no", "-no-libtiff", "Do not compile TIFF support."); desc("LIBTIFF", "qt", "-qt-libtiff", "Use the libtiff bundled with Qt."); desc("LIBTIFF", "system","-system-libtiff", "Use libtiff from the operating system.\nSee http://www.libtiff.org\n"); - desc("LIBJPEG", "no", "-no-libjpeg", "Do not compile the plugin for JPEG support."); + desc("LIBJPEG", "no", "-no-libjpeg", "Do not compile JPEG support."); desc("LIBJPEG", "qt", "-qt-libjpeg", "Use the libjpeg bundled with Qt."); desc("LIBJPEG", "system","-system-libjpeg", "Use libjpeg from the operating system.\nSee http://www.ijg.org\n"); @@ -1957,21 +1947,28 @@ QString Configure::defaultTo(const QString &option) || option == "LIBTIFF") return "system"; - // We want PNG built-in + // PNG is always built-in, never a plugin if (option == "PNG") - return "qt"; + return "yes"; - // The JPEG image library can only be a plugin - if (option == "JPEG" - || option == "MNG" || option == "TIFF") - return "plugin"; - - // GIF off by default - if (option == "GIF") { - if (dictionary["SHARED"] == "yes") + // These database drivers and image formats can be built-in or plugins. + // Prefer plugins when Qt is shared. + if (dictionary[ "SHARED" ] == "yes") { + if (option == "SQL_MYSQL" + || option == "SQL_MYSQL" + || option == "SQL_ODBC" + || option == "SQL_OCI" + || option == "SQL_PSQL" + || option == "SQL_TDS" + || option == "SQL_DB2" + || option == "SQL_SQLITE" + || option == "SQL_SQLITE2" + || option == "SQL_IBASE" + || option == "JPEG" + || option == "MNG" + || option == "TIFF" + || option == "GIF") return "plugin"; - else - return "yes"; } // By default we do not want to compile OCI driver when compiling with @@ -1981,18 +1978,6 @@ QString Configure::defaultTo(const QString &option) && option == "SQL_OCI") return "no"; - if (option == "SQL_MYSQL" - || option == "SQL_MYSQL" - || option == "SQL_ODBC" - || option == "SQL_OCI" - || option == "SQL_PSQL" - || option == "SQL_TDS" - || option == "SQL_DB2" - || option == "SQL_SQLITE" - || option == "SQL_SQLITE2" - || option == "SQL_IBASE") - return "plugin"; - if (option == "SYNCQT" && (!QFile::exists(sourcePath + "/bin/syncqt") || !QFile::exists(sourcePath + "/bin/syncqt.bat"))) @@ -2469,14 +2454,14 @@ void Configure::generateOutputVars() if (dictionary[ "PNG" ] == "no") qtConfig += "no-png"; - else if( dictionary[ "PNG" ] == "qt" ) + else if (dictionary[ "PNG" ] == "yes") qtConfig += "png"; if (dictionary[ "LIBPNG" ] == "system") qtConfig += "system-png"; if (dictionary[ "MNG" ] == "no") qtConfig += "no-mng"; - else if( dictionary[ "MNG" ] == "qt" ) + else if (dictionary[ "MNG" ] == "yes") qtConfig += "mng"; if (dictionary[ "LIBMNG" ] == "system") qtConfig += "system-mng"; diff --git a/tools/qdoc3/doc/qdoc-manual.qdoc b/tools/qdoc3/doc/qdoc-manual.qdoc index 57c17ba..c3ab731 100644 --- a/tools/qdoc3/doc/qdoc-manual.qdoc +++ b/tools/qdoc3/doc/qdoc-manual.qdoc @@ -8075,6 +8075,27 @@ qhp.Qt.subprojects.examples.indexTitle = Qt Examples qhp.Qt.subprojects.examples.selectors = fake:example \endcode + + To create a table of contents for a manual, create a subproject with + a \c{type} property and set it to \c{manual}. The page in the documentation + referred to by the \c{indexTitle} property must contain a list of links + that acts as a table of contents for the whole manual. QDoc will take the + information in this list and create a table of contents for the subproject. + + For example, the configuration file for Qt Creator defines only one + subproject for its documentation, including all the documentation in a + single manual: + + \code + qhp.QtCreator.subprojects = manual + qhp.QtCreator.subprojects.manual.title = Qt Creator Manual + qhp.QtCreator.subprojects.manual.indexTitle = Qt Creator Manual + qhp.QtCreator.subprojects.manual.type = manual + \endcode + + In this example, the page entitled "Qt Creator Manual" contains a nested + list of links to pages in the documentation which is duplicated in + Qt Assistant's Contents tab. */ /*! diff --git a/tools/qdoc3/helpprojectwriter.cpp b/tools/qdoc3/helpprojectwriter.cpp index edba097..98246c4 100644 --- a/tools/qdoc3/helpprojectwriter.cpp +++ b/tools/qdoc3/helpprojectwriter.cpp @@ -41,7 +41,7 @@ #include <QHash> #include <QMap> -#include <qdebug.h> +//#include <qdebug.h> #include "atom.h" #include "helpprojectwriter.h" @@ -91,6 +91,7 @@ HelpProjectWriter::HelpProjectWriter(const Config &config, const QString &defaul subproject.title = config.getString(subprefix + "title"); subproject.indexTitle = config.getString(subprefix + "indexTitle"); subproject.sortPages = config.getBool(subprefix + "sortPages"); + subproject.type = config.getString(subprefix + "type"); readSelectors(subproject, config.getStringList(subprefix + "selectors")); project.subprojects[name] = subproject; } @@ -625,44 +626,99 @@ void HelpProjectWriter::generateProject(HelpProject &project) foreach (const QString &name, project.subprojects.keys()) { SubProject subproject = project.subprojects[name]; - if (!name.isEmpty()) { - writer.writeStartElement("section"); - QString indexPath = tree->fullDocumentLocation(tree->findFakeNodeByTitle(subproject.indexTitle)); - writer.writeAttribute("ref", HtmlGenerator::cleanRef(indexPath)); - writer.writeAttribute("title", subproject.title); - project.files.insert(indexPath); - } - if (subproject.sortPages) { - QStringList titles = subproject.nodes.keys(); - titles.sort(); - foreach (const QString &title, titles) - writeNode(project, writer, subproject.nodes[title]); + if (subproject.type == QLatin1String("manual")) { + + const FakeNode *indexPage = tree->findFakeNodeByTitle(subproject.indexTitle); + if (indexPage) { + Text indexBody = indexPage->doc().body(); + const Atom *atom = indexBody.firstAtom(); + QStack<int> sectionStack; + bool inItem = false; + + while (atom) { + switch (atom->type()) { + case Atom::ListLeft: + sectionStack.push(0); + break; + case Atom::ListRight: + if (sectionStack.pop() > 0) + writer.writeEndElement(); // section + break; + case Atom::ListItemLeft: + inItem = true; + break; + case Atom::ListItemRight: + inItem = false; + break; + case Atom::Link: + if (inItem) { + if (sectionStack.top() > 0) + writer.writeEndElement(); // section + + const FakeNode *page = tree->findFakeNodeByTitle(atom->string()); + writer.writeStartElement("section"); + QString indexPath = tree->fullDocumentLocation(page); + writer.writeAttribute("ref", HtmlGenerator::cleanRef(indexPath)); + writer.writeAttribute("title", atom->string()); + project.files.insert(indexPath); + + sectionStack.top() += 1; + } + break; + default: + ; + } + + if (atom == indexBody.lastAtom()) + break; + atom = atom->next(); + } + } else + rootNode->doc().location().warning( + tr("Failed to find index: %1").arg(subproject.indexTitle) + ); + } else { - // Find a contents node and navigate from there, using the NextLink values. - foreach (const Node *node, subproject.nodes) { - QString nextTitle = node->links().value(Node::NextLink).first; - if (!nextTitle.isEmpty() && - node->links().value(Node::ContentsLink).first.isEmpty()) { - - FakeNode *nextPage = const_cast<FakeNode *>(tree->findFakeNodeByTitle(nextTitle)); - - // Write the contents node. - writeNode(project, writer, node); - - while (nextPage) { - writeNode(project, writer, nextPage); - nextTitle = nextPage->links().value(Node::NextLink).first; - if(nextTitle.isEmpty()) - break; - nextPage = const_cast<FakeNode *>(tree->findFakeNodeByTitle(nextTitle)); + + if (!name.isEmpty()) { + writer.writeStartElement("section"); + QString indexPath = tree->fullDocumentLocation(tree->findFakeNodeByTitle(subproject.indexTitle)); + writer.writeAttribute("ref", HtmlGenerator::cleanRef(indexPath)); + writer.writeAttribute("title", subproject.title); + project.files.insert(indexPath); + } + if (subproject.sortPages) { + QStringList titles = subproject.nodes.keys(); + titles.sort(); + foreach (const QString &title, titles) + writeNode(project, writer, subproject.nodes[title]); + } else { + // Find a contents node and navigate from there, using the NextLink values. + foreach (const Node *node, subproject.nodes) { + QString nextTitle = node->links().value(Node::NextLink).first; + if (!nextTitle.isEmpty() && + node->links().value(Node::ContentsLink).first.isEmpty()) { + + FakeNode *nextPage = const_cast<FakeNode *>(tree->findFakeNodeByTitle(nextTitle)); + + // Write the contents node. + writeNode(project, writer, node); + + while (nextPage) { + writeNode(project, writer, nextPage); + nextTitle = nextPage->links().value(Node::NextLink).first; + if(nextTitle.isEmpty()) + break; + nextPage = const_cast<FakeNode *>(tree->findFakeNodeByTitle(nextTitle)); + } + break; } - break; } } - } - if (!name.isEmpty()) - writer.writeEndElement(); // section + if (!name.isEmpty()) + writer.writeEndElement(); // section + } } writer.writeEndElement(); // section diff --git a/tools/qdoc3/helpprojectwriter.h b/tools/qdoc3/helpprojectwriter.h index 511a9dd..7a67dff 100644 --- a/tools/qdoc3/helpprojectwriter.h +++ b/tools/qdoc3/helpprojectwriter.h @@ -60,6 +60,7 @@ struct SubProject QString indexTitle; QHash<Node::Type, QSet<FakeNode::SubType> > selectors; bool sortPages; + QString type; QHash<QString, const Node *> nodes; }; |