diff options
author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2022-03-16 11:00:05 +0100 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2022-03-17 08:43:03 +0100 |
commit | 1a447831e6298065d57af6243b6cb4a7b63889df (patch) | |
tree | 5408da6336af5d2f9ad9c42c229f37ab714d1e6b | |
parent | 71f584197063e907910653fa8bddcde617210544 (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>
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\ |