diff options
author | Hugo Parente Lima <hugo.pl@gmail.com> | 2011-08-01 16:21:45 -0300 |
---|---|---|
committer | Hugo Parente Lima <hugo.pl@gmail.com> | 2011-08-01 16:54:08 -0300 |
commit | 5b3bbb1545b8a6d60e71118892dfb7a95bbb57ae (patch) | |
tree | 8571911d001de9af770c590a533572bb4df77c78 | |
parent | a24119d9cf8ce72c88d037069cb90aa8cc9a82a2 (diff) |
Write a fancy index for PySide docs.
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
Marcelo Lira <marcelo.lira@openbossa.org>
-rw-r--r-- | generators/qtdoc/qtdocgenerator.cpp | 75 |
1 files changed, 69 insertions, 6 deletions
diff --git a/generators/qtdoc/qtdocgenerator.cpp b/generators/qtdoc/qtdocgenerator.cpp index 91d2f2b28..27c1ba876 100644 --- a/generators/qtdoc/qtdocgenerator.cpp +++ b/generators/qtdoc/qtdocgenerator.cpp @@ -1412,6 +1412,64 @@ void QtDocGenerator::writeFunction(QTextStream& s, bool writeDoc, const Abstract } } +static void writeFancyToc(QTextStream& s, const QStringList& items, int cols = 4) +{ + typedef QMap<QChar, QStringList> TocMap; + TocMap tocMap; + QChar Q('Q'); + QChar idx; + foreach (QString item, items) { + if (item.isEmpty()) + continue; + if (item.startsWith(Q) && item.length() > 1) + idx = item[1]; + item.chop(4); // Remove the .rst extension + tocMap[idx] << item; + } + QtXmlToSphinx::Table table; + QtXmlToSphinx::TableRow row; + + int itemsPerCol = (items.size() + tocMap.size()*2) / cols; + QString currentColData; + int i = 0; + QTextStream ss(¤tColData); + QMutableMapIterator<QChar, QStringList> it(tocMap); + while (it.hasNext()) { + it.next(); + qSort(it.value()); + + if (i) + ss << endl; + + ss << "**" << it.key() << "**" << endl << endl; + i += 2; // a letter title is equivalent to two entries in space + foreach (QString item, it.value()) { + ss << "* :doc:`" << item << "`" << endl; + ++i; + + // end of column detected! + if (i > itemsPerCol) { + ss.flush(); + QtXmlToSphinx::TableCell cell(currentColData); + row << cell; + currentColData.clear(); + i = 0; + } + } + } + if (i) { + ss.flush(); + QtXmlToSphinx::TableCell cell(currentColData); + row << cell; + currentColData.clear(); + i = 0; + } + table << row; + table.normalize(); + s << ".. container:: pysidetoc" << endl << endl; + s << table; +} + void QtDocGenerator::finishGeneration() { if (classes().isEmpty()) @@ -1428,11 +1486,9 @@ void QtDocGenerator::finishGeneration() QString title = it.key() + " contents"; s << title << endl; s << createRepeatedChar(title.length(), '*') << endl << endl; - s << ".. toctree::" << endl; /* Avoid showing "Detailed Description for *every* class in toc tree */ Indentation indentation(INDENT); - s << INDENT << ":maxdepth: 1" << endl << endl; // Search for extra-sections if (!m_extraSectionDir.isEmpty()) { @@ -1453,11 +1509,18 @@ void QtDocGenerator::finishGeneration() it.value().append(fileList); } - qSort(it.value()); - foreach (QString className, it.value()) { - s << INDENT << className << endl; + writeFancyToc(s, it.value()); + + s << INDENT << ".. container:: hide" << endl << endl; + { + Indentation indentation(INDENT); + s << INDENT << ".. toctree::" << endl; + Indentation deeperIndentation(INDENT); + s << INDENT << ":maxdepth: 1" << endl << endl; + foreach (QString className, it.value()) + s << INDENT << className << endl; + s << endl << endl; } - s << endl << endl; s << "Detailed Description" << endl; s << "--------------------" << endl << endl; |