[Libreoffice-commits] core.git: Branch 'libreoffice-7-2' - editeng/source include/editeng sw/qa sw/source
Vasily Melenchuk (via logerrit)
logerrit at kemper.freedesktop.org
Tue Jul 27 08:52:32 UTC 2021
editeng/source/items/numitem.cxx | 10 ++++++++++
include/editeng/numitem.hxx | 2 +-
sw/qa/core/fields/data/tdf143424.odt |binary
sw/qa/core/fields/fields.cxx | 34 ++++++++++++++++++++++++++++++++++
sw/source/core/doc/number.cxx | 3 ++-
sw/source/filter/ww8/wrtw8num.cxx | 2 +-
6 files changed, 48 insertions(+), 3 deletions(-)
New commits:
commit cd5c97ef20510bf13ef32bf268f086d758e8d577
Author: Vasily Melenchuk <vasily.melenchuk at cib.de>
AuthorDate: Wed Jul 21 12:21:07 2021 +0300
Commit: Thorsten Behrens <thorsten.behrens at allotropia.de>
CommitDate: Tue Jul 27 10:51:59 2021 +0200
tdf#143424: support for "Chapter number without separator"
If LO is using list format strings (this is default behavior since
aa5c6d12) it was not able to show just numbering without all formatting,
as it used in some fields.
Change-Id: Ib4695b8e1c2d7a451522c7e04af2216d16aceefe
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/119309
Reviewed-by: Thorsten Behrens <thorsten.behrens at allotropia.de>
Tested-by: Jenkins
(cherry picked from commit d44730148a95933f4a45a70241cb6d1d0546f626)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/119440
diff --git a/editeng/source/items/numitem.cxx b/editeng/source/items/numitem.cxx
index 9c55ef1e401c..a726e70d7101 100644
--- a/editeng/source/items/numitem.cxx
+++ b/editeng/source/items/numitem.cxx
@@ -608,6 +608,16 @@ void SvxNumberFormat::SetListFormat(std::optional<OUString> oSet)
sSuffix = sListFormat->copy(nLastReplacement);
}
+OUString SvxNumberFormat::GetListFormat(bool bIncludePrefixSuffix /*= true*/) const
+{
+ assert(sListFormat.has_value());
+
+ if (bIncludePrefixSuffix)
+ return *sListFormat;
+
+ // Strip prefix & suffix from string
+ return sListFormat->copy(sPrefix.getLength(), sListFormat->getLength() - sPrefix.getLength() - sSuffix.getLength());
+}
OUString SvxNumberFormat::GetCharFormatName()const
{
diff --git a/include/editeng/numitem.hxx b/include/editeng/numitem.hxx
index f955ea15d008..19cfd3922c1e 100644
--- a/include/editeng/numitem.hxx
+++ b/include/editeng/numitem.hxx
@@ -175,7 +175,7 @@ public:
void SetListFormat(const OUString& rPrefix, const OUString& rSuffix, int nLevel);
void SetListFormat(std::optional<OUString> oSet = std::nullopt);
bool HasListFormat() const { return sListFormat.has_value(); }
- const OUString& GetListFormat() const { return *sListFormat; }
+ OUString GetListFormat(bool bIncludePrefixSuffix = true) const;
void SetCharFormatName(const OUString& rSet){ sCharStyleName = rSet; }
virtual OUString GetCharFormatName()const;
diff --git a/sw/qa/core/fields/data/tdf143424.odt b/sw/qa/core/fields/data/tdf143424.odt
new file mode 100644
index 000000000000..d485267f12e4
Binary files /dev/null and b/sw/qa/core/fields/data/tdf143424.odt differ
diff --git a/sw/qa/core/fields/fields.cxx b/sw/qa/core/fields/fields.cxx
index 74b94d7a3f8e..7f59597831ea 100644
--- a/sw/qa/core/fields/fields.cxx
+++ b/sw/qa/core/fields/fields.cxx
@@ -10,6 +10,8 @@
#include <swmodeltestbase.hxx>
#include <com/sun/star/text/XTextDocument.hpp>
+#include <com/sun/star/text/XTextField.hpp>
+#include <com/sun/star/text/XTextFieldsSupplier.hpp>
#include <comphelper/propertyvalue.hxx>
@@ -26,6 +28,8 @@ class Test : public SwModelTestBase
{
};
+constexpr OUStringLiteral DATA_DIRECTORY = u"/sw/qa/core/fields/data/";
+
CPPUNIT_TEST_FIXTURE(Test, testAuthorityTooltip)
{
// Create a document with a bibliography reference in it.
@@ -62,6 +66,36 @@ CPPUNIT_TEST_FIXTURE(Test, testAuthorityTooltip)
// first inserting an empty bibliography table into the document.
CPPUNIT_ASSERT_EQUAL(OUString("ARJ00: Ar, J, mytitle, 2020"), aTooltip);
}
+
+CPPUNIT_TEST_FIXTURE(Test, testTdf143424)
+{
+ createSwDoc(DATA_DIRECTORY, "tdf143424.odt");
+
+ uno::Reference<text::XTextFieldsSupplier> xTextFieldsSupplier(mxComponent, uno::UNO_QUERY);
+ uno::Reference<container::XEnumerationAccess> xFieldsAccess(
+ xTextFieldsSupplier->getTextFields());
+ uno::Reference<container::XEnumeration> xFields(xFieldsAccess->createEnumeration());
+
+ // TODO: I have no idea why fields are enumerated in invalid order, not like in document
+
+ // Field: Chapter Format: Chapter name
+ uno::Reference<text::XTextField> xField(xFields->nextElement(), uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(OUString("Another title"), xField->getPresentation(false));
+
+ // Field: Chapter Format: Chapter number and name
+ xField.set(xFields->nextElement(), uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(OUString("Chapter 2 -Another title"), xField->getPresentation(false));
+ // ^^ seems here must be a separator
+ // Please modify this testcase once this behavior will be fixed. For now I just fix and check this behavior
+
+ // Field: Chapter Format: Chapter number
+ xField.set(xFields->nextElement(), uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(OUString("Chapter 2 -"), xField->getPresentation(false));
+
+ // Field: Chapter Format: Chapter number without separator
+ xField.set(xFields->nextElement(), uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(OUString("2"), xField->getPresentation(false));
+}
}
CPPUNIT_PLUGIN_IMPLEMENT();
diff --git a/sw/source/core/doc/number.cxx b/sw/source/core/doc/number.cxx
index c545448cf90c..7d82a12623b6 100644
--- a/sw/source/core/doc/number.cxx
+++ b/sw/source/core/doc/number.cxx
@@ -666,7 +666,8 @@ OUString SwNumRule::MakeNumString( const SwNumberTree::tNumberVector & rNumVecto
if (rMyNFormat.HasListFormat())
{
- OUString sLevelFormat = rMyNFormat.GetListFormat();
+ OUString sLevelFormat = rMyNFormat.GetListFormat(bInclStrings);
+
// In this case we are ignoring GetIncludeUpperLevels: we put all
// level numbers requested by level format
for (SwNumberTree::tNumberVector::size_type i=0; i <= nLevel; ++i)
diff --git a/sw/source/filter/ww8/wrtw8num.cxx b/sw/source/filter/ww8/wrtw8num.cxx
index 1f77b6d41d34..3ebc95e2407c 100644
--- a/sw/source/filter/ww8/wrtw8num.cxx
+++ b/sw/source/filter/ww8/wrtw8num.cxx
@@ -510,7 +510,7 @@ void MSWordExportBase::NumberingLevel(
sal_uInt8* pLvlPos = aNumLvlPos;
// the numbering string has to be restrict
// to the level currently working on.
- sNumStr = rRule.MakeNumString(aNumVector, false, true, nLvl);
+ sNumStr = rRule.MakeNumString(aNumVector, true, true, nLvl);
// now search the nums in the string
for (sal_uInt8 i = 0; i <= nLvl; ++i)
More information about the Libreoffice-commits
mailing list