aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2022-03-16 11:00:05 +0100
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2022-03-17 08:43:03 +0100
commit1a447831e6298065d57af6243b6cb4a7b63889df (patch)
tree5408da6336af5d2f9ad9c42c229f37ab714d1e6b
parent71f584197063e907910653fa8bddcde617210544 (diff)
shiboken6/documentation generator: Fix handling of <header> tags
<header> in WebXML is either a table header or a description of a C++ header with "name"/"href" attributes. Split the handler and ignore <header> with "name" attributes for table handling. This also fixes the broken formatting of table headers which did not work since the member variable m_tableHasHeader was always cleared in handleRowTag. Pick-to: 6.2 Change-Id: I5a52648c14d61dec1991df67083256fe68e4e0eb Reviewed-by: Christian Tismer <tismer@stackless.com>
-rw-r--r--sources/shiboken6/generator/qtdoc/qtxmltosphinx.cpp22
-rw-r--r--sources/shiboken6/generator/qtdoc/qtxmltosphinx.h2
-rw-r--r--sources/shiboken6/tests/qtxmltosphinxtest/qtxmltosphinxtest.cpp12
3 files changed, 21 insertions, 15 deletions
diff --git a/sources/shiboken6/generator/qtdoc/qtxmltosphinx.cpp b/sources/shiboken6/generator/qtdoc/qtxmltosphinx.cpp
index 0dbfda036..0cc796d30 100644
--- a/sources/shiboken6/generator/qtdoc/qtxmltosphinx.cpp
+++ b/sources/shiboken6/generator/qtdoc/qtxmltosphinx.cpp
@@ -315,7 +315,7 @@ void QtXmlToSphinx::callHandler(WebXmlTag t, QXmlStreamReader &r)
handleTableTag(r);
break;
case WebXmlTag::header:
- handleRowTag(r);
+ handleHeaderTag(r);
break;
case WebXmlTag::row:
handleRowTag(r);
@@ -429,7 +429,6 @@ void QtXmlToSphinx::formatCurrentTable()
{
if (m_currentTable.isEmpty())
return;
- m_currentTable.setHeaderEnabled(m_tableHasHeader);
m_currentTable.normalize();
m_output << '\n';
m_currentTable.format(m_output);
@@ -935,7 +934,6 @@ void QtXmlToSphinx::handleTableTag(QXmlStreamReader& reader)
if (parentTag() == WebXmlTag::para)
handleParaTagEnd(); // End <para> to prevent the table from being rst-escaped
m_currentTable.clear();
- m_tableHasHeader = false;
} else if (token == QXmlStreamReader::EndElement) {
// write the table on m_output
formatCurrentTable();
@@ -982,15 +980,23 @@ void QtXmlToSphinx::handleItemTag(QXmlStreamReader& reader)
}
}
-void QtXmlToSphinx::handleRowTag(QXmlStreamReader& reader)
+void QtXmlToSphinx::handleHeaderTag(QXmlStreamReader &reader)
{
- QXmlStreamReader::TokenType token = reader.tokenType();
- if (token == QXmlStreamReader::StartElement) {
- m_tableHasHeader = reader.name() == QLatin1String("header");
+ // <header> in WebXML is either a table header or a description of a
+ // C++ header with "name"/"href" attributes.
+ if (reader.tokenType() == QXmlStreamReader::StartElement
+ && !reader.attributes().hasAttribute(u"name"_qs)) {
+ m_currentTable.setHeaderEnabled(true);
m_currentTable.appendRow({});
}
}
+void QtXmlToSphinx::handleRowTag(QXmlStreamReader& reader)
+{
+ if (reader.tokenType() == QXmlStreamReader::StartElement)
+ m_currentTable.appendRow({});
+}
+
enum ListType { BulletList, OrderedList, EnumeratedList };
static inline ListType webXmlListType(QStringView t)
@@ -1012,7 +1018,7 @@ void QtXmlToSphinx::handleListTag(QXmlStreamReader& reader)
if (listType == EnumeratedList) {
m_currentTable.appendRow(TableRow{TableCell(QLatin1String("Constant")),
TableCell(QLatin1String("Description"))});
- m_tableHasHeader = true;
+ m_currentTable.setHeaderEnabled(true);
}
m_output.indent();
} else if (token == QXmlStreamReader::EndElement) {
diff --git a/sources/shiboken6/generator/qtdoc/qtxmltosphinx.h b/sources/shiboken6/generator/qtdoc/qtxmltosphinx.h
index 94fde81da..c56f2aad9 100644
--- a/sources/shiboken6/generator/qtdoc/qtxmltosphinx.h
+++ b/sources/shiboken6/generator/qtdoc/qtxmltosphinx.h
@@ -159,6 +159,7 @@ private:
// table tagsvoid QtXmlToSphinx::handleValueTag(QXmlStreamReader& reader)
void handleTableTag(QXmlStreamReader& reader);
+ void handleHeaderTag(QXmlStreamReader& reader);
void handleRowTag(QXmlStreamReader& reader);
void handleItemTag(QXmlStreamReader& reader);
void handleRawTag(QXmlStreamReader& reader);
@@ -189,7 +190,6 @@ private:
Table m_currentTable;
QScopedPointer<QtXmlToSphinxLink> m_linkContext; // for <link>
QScopedPointer<QtXmlToSphinxLink> m_seeAlsoContext; // for <see-also>foo()</see-also>
- bool m_tableHasHeader = false;
QString m_context;
const QtXmlToSphinxDocGeneratorInterface *m_generator;
const QtXmlToSphinxParameters &m_parameters;
diff --git a/sources/shiboken6/tests/qtxmltosphinxtest/qtxmltosphinxtest.cpp b/sources/shiboken6/tests/qtxmltosphinxtest/qtxmltosphinxtest.cpp
index ea60d36b5..b9cb10d39 100644
--- a/sources/shiboken6/tests/qtxmltosphinxtest/qtxmltosphinxtest.cpp
+++ b/sources/shiboken6/tests/qtxmltosphinxtest/qtxmltosphinxtest.cpp
@@ -105,7 +105,7 @@ void QtXmlToSphinxTest::testTable_data()
const char *expected = "\n\
+--------+--------+\n\
|Header 1|Header 2|\n\
- +--------+--------+\n\
+ +========+========+\n\
|1 1 |1 2 |\n\
+--------+--------+\n\
|2 1 |2 2 |\n\
@@ -144,7 +144,7 @@ void QtXmlToSphinxTest::testTable_data()
expected = "\n\
+---------------+--------+\n\
|Header 1 |Header 2|\n\
- +---------------+--------+\n\
+ +===============+========+\n\
|I'm a big text! |\n\
+---------------+--------+\n\
|2 1 |2 2 |\n\
@@ -183,7 +183,7 @@ void QtXmlToSphinxTest::testTable_data()
expected = "\n\
+--------+--------+\n\
|Header 1|Header 2|\n\
- +--------+--------+\n\
+ +========+========+\n\
|1.1 |1.2 |\n\
+ +--------+\n\
| |2 2 |\n\
@@ -228,7 +228,7 @@ void QtXmlToSphinxTest::testTable_data()
expected = "\n\
+--------+--------+--------+\n\
|Header 1|Header 2|Header 3|\n\
- +--------+--------+--------+\n\
+ +========+========+========+\n\
|1.1 |1.2 |\n\
+ +--------+--------+\n\
| |2 2 |2 3 |\n\
@@ -278,7 +278,7 @@ void QtXmlToSphinxTest::testTable_data()
expected = "\n\
+--+--+--+--+\n\
|h1|h2|h3|h4|\n\
- +--+--+--+--+\n\
+ +==+==+==+==+\n\
|A |B |C |D |\n\
+ + +--+--+\n\
| | |E |F |\n\
@@ -345,7 +345,7 @@ void QtXmlToSphinxTest::testTable_data()
expected = "\n\
+--------+------------+\n\
|Header 1|Header 2 |\n\
- +--------+------------+\n\
+ +========+============+\n\
|1.1 |1.2 |\n\
+--------+------------+\n\
|2 2 2 3 2 4 2 5|\n\