[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