[Libreoffice-commits] core.git: sw/qa sw/source

Miklos Vajna (via logerrit) logerrit at kemper.freedesktop.org
Sat Feb 27 14:45:19 UTC 2021


 sw/qa/core/tox/tox.cxx        |   43 ++++++++++++++++++++++++++++++++++++++++++
 sw/source/core/tox/txmsrt.cxx |   14 ++++++++++++-
 2 files changed, 56 insertions(+), 1 deletion(-)

New commits:
commit 107638884395a193133613e2a464a4a9a870c0e3
Author:     Miklos Vajna <vmiklos at collabora.com>
AuthorDate: Fri Feb 26 17:32:17 2021 +0100
Commit:     Miklos Vajna <vmiklos at collabora.com>
CommitDate: Sat Feb 27 15:44:35 2021 +0100

    sw bibliography, refer to a page: strip URLs in the bibliography table
    
    In case multiple bibliography entries refer to the same source, just
    different page numbers, then it's pointless to list those sources
    multiple times in the bibliography table.
    
    As a first step, strip the page fragment of those URLs, so later we can
    merge these entries.
    
    Change-Id: I02991d3d19742092198309174aa3d662622fa505
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/111653
    Reviewed-by: Miklos Vajna <vmiklos at collabora.com>
    Tested-by: Jenkins

diff --git a/sw/qa/core/tox/tox.cxx b/sw/qa/core/tox/tox.cxx
index b9a075119293..22c0bd3cafa1 100644
--- a/sw/qa/core/tox/tox.cxx
+++ b/sw/qa/core/tox/tox.cxx
@@ -64,6 +64,49 @@ CPPUNIT_TEST_FIXTURE(Test, testAuthorityLinkClick)
     // i.e. the URL was not clickable and the table row was a single text portion.
     CPPUNIT_ASSERT_EQUAL(OUString("http://www.example.com/test.pdf"), aActual);
 }
+
+CPPUNIT_TEST_FIXTURE(Test, testAuthorityTableEntryURL)
+{
+    // Given a document with a bibliography reference (of type WWW) in it:
+    createSwDoc();
+    uno::Reference<lang::XMultiServiceFactory> xFactory(mxComponent, uno::UNO_QUERY);
+    uno::Reference<beans::XPropertySet> xField(
+        xFactory->createInstance("com.sun.star.text.TextField.Bibliography"), uno::UNO_QUERY);
+    uno::Sequence<beans::PropertyValue> aFields = {
+        comphelper::makePropertyValue("BibiliographicType", text::BibliographyDataType::WWW),
+        comphelper::makePropertyValue("Identifier", OUString("AT")),
+        comphelper::makePropertyValue("Author", OUString("Author")),
+        comphelper::makePropertyValue("Title", OUString("Title")),
+        comphelper::makePropertyValue("URL", OUString("http://www.example.com/test.pdf#page=1")),
+    };
+    xField->setPropertyValue("Fields", uno::makeAny(aFields));
+    uno::Reference<text::XTextDocument> xTextDocument(mxComponent, uno::UNO_QUERY);
+    uno::Reference<text::XText> xText = xTextDocument->getText();
+    uno::Reference<text::XTextCursor> xCursor = xText->createTextCursor();
+    uno::Reference<text::XTextContent> xContent(xField, uno::UNO_QUERY);
+    xText->insertTextContent(xCursor, xContent, /*bAbsorb=*/false);
+    // Create a bibliography table.
+    uno::Reference<text::XTextContent> xTable(
+        xFactory->createInstance("com.sun.star.text.Bibliography"), uno::UNO_QUERY);
+    xCursor->gotoEnd(/*bExpand=*/false);
+    xText->insertControlCharacter(xCursor, text::ControlCharacter::APPEND_PARAGRAPH,
+                                  /*bAbsorb=*/false);
+    xText->insertTextContent(xCursor, xTable, /*bAbsorb=*/false);
+
+    // When updating that table:
+    uno::Reference<text::XDocumentIndex> xTableIndex(xTable, uno::UNO_QUERY);
+    xTableIndex->update();
+
+    // Then the page number from the source's URL should be stripped:
+    // Paragraph index: Reference, table header, table row.
+    // Portion index: ID, etc; then the URL.
+    auto aActual = getProperty<OUString>(getRun(getParagraph(3), 2), "HyperLinkURL");
+    // Without the accompanying fix in place, this test would have failed with:
+    // - Expected: http://www.example.com/test.pdf
+    // - Actual  : http://www.example.com/test.pdf#page=1
+    // i.e. the page number was still part of the bibliography table.
+    CPPUNIT_ASSERT_EQUAL(OUString("http://www.example.com/test.pdf"), aActual);
+}
 }
 
 CPPUNIT_PLUGIN_IMPLEMENT();
diff --git a/sw/source/core/tox/txmsrt.cxx b/sw/source/core/tox/txmsrt.cxx
index 25456a292169..7c2748c82bd2 100644
--- a/sw/source/core/tox/txmsrt.cxx
+++ b/sw/source/core/tox/txmsrt.cxx
@@ -19,6 +19,7 @@
 
 #include <unotools/charclass.hxx>
 #include <osl/diagnose.h>
+#include <tools/urlobj.hxx>
 #include <txtfld.hxx>
 #include <doc.hxx>
 #include <IDocumentLayoutAccess.hxx>
@@ -844,7 +845,18 @@ OUString SwTOXAuthority::GetText(sal_uInt16 nAuthField, const SwRootFrame* pLayo
 void SwTOXAuthority::FillText(SwTextNode& rNd, const SwIndex& rInsPos, sal_uInt16 nAuthField,
                               SwRootFrame const* const pLayout) const
 {
-    rNd.InsertText(GetText(nAuthField, pLayout), rInsPos);
+    OUString aText = GetText(nAuthField, pLayout);
+    if (nAuthField == AUTH_FIELD_URL)
+    {
+        INetURLObject aObject(aText);
+        if (aObject.GetMark().startsWith("page="))
+        {
+            aObject.SetMark(OUString());
+            aText = aObject.GetMainURL(INetURLObject::DecodeMechanism::NONE);
+        }
+    }
+
+    rNd.InsertText(aText, rInsPos);
 }
 
 bool SwTOXAuthority::equivalent(const SwTOXSortTabBase& rCmp)


More information about the Libreoffice-commits mailing list