sw/qa/extras/indexing/IndexingExportTest.cxx           |   31 +++++++++++++++++
 sw/qa/extras/indexing/data/IndexingExport_Sections.odt |binary
 sw/source/filter/indexing/IndexingExport.cxx           |   16 +++++++-
 3 files changed, 45 insertions(+), 2 deletions(-)

New commits:
commit 27230f51281e3ce608de6632a485cebd4de3a781
Author:     Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk>
AuthorDate: Fri Jun 18 21:36:29 2021 +0900
Commit:     Tomaž Vajngerl <qui...@gmail.com>
CommitDate: Wed Sep 1 05:09:03 2021 +0200

    indexing: indexing sections for the IndexingExport
    
    Adds handling of sections to the IndexingExport. SectionNode also
    derives from StartNode, so we handle it similar as the tables.
    
    Change-Id: I5eb8d599bdf680144b161aa93295ea3d360eb5c0
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/117452
    Tested-by: Jenkins
    Reviewed-by: Tomaž Vajngerl <qui...@gmail.com>
    (cherry picked from commit 2ce10eedfb1de8beef8ddfa457f1e19545846f86)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/121105
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com>

diff --git a/sw/qa/extras/indexing/IndexingExportTest.cxx 
b/sw/qa/extras/indexing/IndexingExportTest.cxx
index fbc2c9d0ece2..f714b50f042a 100644
--- a/sw/qa/extras/indexing/IndexingExportTest.cxx
+++ b/sw/qa/extras/indexing/IndexingExportTest.cxx
@@ -31,6 +31,7 @@ public:
     void testIndexingExport_OLE();
     void testIndexingExport_Shapes();
     void testIndexingExport_Tables();
+    void testIndexingExport_Sections();
 
     CPPUNIT_TEST_SUITE(IndexingExportTest);
     CPPUNIT_TEST(testIndexingExport_Paragraphs);
@@ -38,6 +39,7 @@ public:
     CPPUNIT_TEST(testIndexingExport_OLE);
     CPPUNIT_TEST(testIndexingExport_Shapes);
     CPPUNIT_TEST(testIndexingExport_Tables);
+    CPPUNIT_TEST(testIndexingExport_Sections);
     CPPUNIT_TEST_SUITE_END();
 };
 
@@ -214,6 +216,35 @@ void IndexingExportTest::testIndexingExport_Tables()
     assertXPathContent(pXmlDoc, "/indexing/table[3]/paragraph[21]", "D5");
 }
 
+void IndexingExportTest::testIndexingExport_Sections()
+{
+    SwDoc* pDoc = createDoc("IndexingExport_Sections.odt");
+    CPPUNIT_ASSERT(pDoc);
+
+    SvMemoryStream aMemoryStream;
+    sw::IndexingExport aIndexingExport(aMemoryStream, pDoc);
+    aIndexingExport.runExport();
+    aMemoryStream.Seek(0);
+
+    xmlDocUniquePtr pXmlDoc = parseXmlStream(&aMemoryStream);
+    CPPUNIT_ASSERT(pXmlDoc);
+
+    assertXPath(pXmlDoc, "/indexing");
+
+    assertXPath(pXmlDoc, "/indexing/section[1]", "name", "Section1");
+    assertXPathContent(pXmlDoc, "/indexing/section[1]/paragraph[1]",
+                       "This is a paragraph in a Section1");
+    assertXPathContent(pXmlDoc, "/indexing/section[1]/paragraph[2]", "Section1 
- Paragraph 2");
+    assertXPathContent(pXmlDoc, "/indexing/section[1]/paragraph[3]", "Section1 
- Paragraph 3");
+
+    assertXPath(pXmlDoc, "/indexing/section[2]", "name", "Section2");
+    assertXPathContent(pXmlDoc, "/indexing/section[2]/paragraph[1]", "Section2 
- Paragraph 1");
+    assertXPathContent(pXmlDoc, "/indexing/section[2]/paragraph[2]", "Section2 
- Paragraph 2");
+
+    assertXPathContent(pXmlDoc, "/indexing/paragraph[1]", "This is a paragraph 
outside sections");
+    assertXPathContent(pXmlDoc, "/indexing/paragraph[2]", "This is a paragraph 
outside sections");
+}
+
 CPPUNIT_TEST_SUITE_REGISTRATION(IndexingExportTest);
 CPPUNIT_PLUGIN_IMPLEMENT();
 
diff --git a/sw/qa/extras/indexing/data/IndexingExport_Sections.odt 
b/sw/qa/extras/indexing/data/IndexingExport_Sections.odt
new file mode 100644
index 000000000000..ef92c83efd25
Binary files /dev/null and 
b/sw/qa/extras/indexing/data/IndexingExport_Sections.odt differ
diff --git a/sw/source/filter/indexing/IndexingExport.cxx 
b/sw/source/filter/indexing/IndexingExport.cxx
index b02bef0c9fe2..17a1670bd73c 100644
--- a/sw/source/filter/indexing/IndexingExport.cxx
+++ b/sw/source/filter/indexing/IndexingExport.cxx
@@ -56,8 +56,11 @@ public:
         {
             handleTableNode(pNode->GetTableNode());
         }
-
-        if (pNode->IsEndNode())
+        else if (pNode->IsSectionNode())
+        {
+            handleSectionNode(pNode->GetSectionNode());
+        }
+        else if (pNode->IsEndNode())
         {
             handleEndNode(pNode->GetEndNode());
         }
@@ -138,6 +141,15 @@ public:
         maNodeStack.push_back(pTableNode);
     }
 
+    void handleSectionNode(SwSectionNode* pSectionNode)
+    {
+        m_rXmlWriter.startElement("section");
+        m_rXmlWriter.attribute("index", pSectionNode->GetIndex());
+        m_rXmlWriter.attribute("name", 
pSectionNode->GetSection().GetSectionName());
+
+        maNodeStack.push_back(pSectionNode);
+    }
+
     void handleEndNode(SwEndNode* pEndNode)
     {
         if (!maNodeStack.empty() && pEndNode->StartOfSectionNode() == 
maNodeStack.back())

Reply via email to