i18npool/CppunitTest_i18npool_defaultnumberingprovider.mk | 44 +++++++ i18npool/Module_i18npool.mk | 1 i18npool/qa/cppunit/test_defaultnumberingprovider.cxx | 57 ++++++++++ i18npool/source/defaultnumberingprovider/defaultnumberingprovider.cxx | 29 +++++ include/editeng/svxenum.hxx | 3 offapi/com/sun/star/style/NumberingType.idl | 7 + sw/qa/extras/odfexport/data/arabic-zero-numbering.odt |binary sw/qa/extras/odfexport/odfexport.cxx | 13 ++ sw/qa/extras/ooxmlexport/data/arabic-zero-numbering.docx |binary sw/qa/extras/ooxmlexport/ooxmlexport14.cxx | 13 ++ sw/source/filter/ww8/docxattributeoutput.cxx | 1 writerfilter/source/dmapper/ConversionHelper.cxx | 4 12 files changed, 170 insertions(+), 2 deletions(-)
New commits: commit a295ccd382cbed73e4b35a321efd53987c873981 Author: Miklos Vajna <vmik...@collabora.com> AuthorDate: Wed Mar 4 09:13:11 2020 +0100 Commit: Miklos Vajna <vmik...@collabora.com> CommitDate: Thu May 14 11:38:36 2020 +0200 sw padded numbering: add DOCX filter DOCX uses <w:numFmt w:val="decimalZero"/> for this. (cherry picked from commit 5435ea2afc5da5633a440f2f06d79265bcbb040c) Change-Id: I12a4a88f472af42a04244d30f9e59fc0b8b4855c diff --git a/sw/qa/extras/ooxmlexport/data/arabic-zero-numbering.docx b/sw/qa/extras/ooxmlexport/data/arabic-zero-numbering.docx new file mode 100644 index 000000000000..f87dce364c9e Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/arabic-zero-numbering.docx differ diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport14.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport14.cxx index 3df3eea38bde..fb272a618cb2 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport14.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport14.cxx @@ -107,6 +107,19 @@ DECLARE_OOXMLEXPORT_TEST(testTdf87569v, "tdf87569_vml.docx") text::RelOrientation::FRAME, nValue); } +DECLARE_ODFEXPORT_TEST(testArabicZeroNumbering, "arabic-zero-numbering.docx") +{ + auto xNumberingRules + = getProperty<uno::Reference<container::XIndexAccess>>(getParagraph(1), "NumberingRules"); + comphelper::SequenceAsHashMap aMap(xNumberingRules->getByIndex(0)); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 64 + // - Actual : 4 + // i.e. numbering type was ARABIC, not ARABIC_ZERO. + CPPUNIT_ASSERT_EQUAL(static_cast<sal_uInt16>(style::NumberingType::ARABIC_ZERO), + aMap["NumberingType"].get<sal_uInt16>()); +} + DECLARE_OOXMLEXPORT_TEST(testTdf87569d, "tdf87569_drawingml.docx") { //if the original tdf87569 sample is upgraded it will have drawingml shapes... diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx index 8c6fa174a88b..36ee2c7fb4da 100644 --- a/sw/source/filter/ww8/docxattributeoutput.cxx +++ b/sw/source/filter/ww8/docxattributeoutput.cxx @@ -6373,6 +6373,7 @@ static OString impl_LevelNFC( sal_uInt16 nNumberingType , const SfxItemSet *pOut case style::NumberingType::TEXT_CARDINAL: aType="cardinalText"; break; case style::NumberingType::TEXT_ORDINAL: aType="ordinalText"; break; case style::NumberingType::SYMBOL_CHICAGO: aType="chicago"; break; + case style::NumberingType::ARABIC_ZERO: aType = "decimalZero"; break; /* Fallback the rest to decimal. case style::NumberingType::NATIVE_NUMBERING: diff --git a/writerfilter/source/dmapper/ConversionHelper.cxx b/writerfilter/source/dmapper/ConversionHelper.cxx index 542a3cb55ecd..81d0dce54fa9 100644 --- a/writerfilter/source/dmapper/ConversionHelper.cxx +++ b/writerfilter/source/dmapper/ConversionHelper.cxx @@ -586,6 +586,9 @@ sal_Int16 ConvertNumberingType(sal_Int32 nFmt) case NS_ooxml::LN_Value_ST_NumberFormat_chicago: nRet = style::NumberingType::SYMBOL_CHICAGO; break; + case NS_ooxml::LN_Value_ST_NumberFormat_decimalZero: + nRet = style::NumberingType::ARABIC_ZERO; + break; default: nRet = style::NumberingType::ARABIC; } /* TODO: Lots of additional values are available - some are supported in the I18 framework @@ -593,7 +596,6 @@ sal_Int16 ConvertNumberingType(sal_Int32 nFmt) NS_ooxml::LN_Value_ST_NumberFormat_decimalFullWidth = 91691; NS_ooxml::LN_Value_ST_NumberFormat_decimalHalfWidth = 91692; NS_ooxml::LN_Value_ST_NumberFormat_japaneseDigitalTenThousand = 91694; - NS_ooxml::LN_Value_ST_NumberFormat_decimalZero = 91699; NS_ooxml::LN_Value_ST_NumberFormat_decimalEnclosedFullstop = 91703; NS_ooxml::LN_Value_ST_NumberFormat_decimalEnclosedParen = 91704; NS_ooxml::LN_Value_ST_NumberFormat_ideographZodiacTraditional = 91709; commit 7f2fc930474ecc2237d2dc0170d0dddebf7932ba Author: Miklos Vajna <vmik...@collabora.com> AuthorDate: Tue Mar 3 15:54:19 2020 +0100 Commit: Miklos Vajna <vmik...@collabora.com> CommitDate: Thu May 14 11:35:56 2020 +0200 sw padded numbering: add ODF filter ODF allows any string as style:num-format="...", go with "01, 02, 03, ...", because that seems to be consistent with both DefaultNumberingProvider::makeNumberingIdentifier()'s fallback mechanism and with OOXML (which uses "001, 002, 003, ..." for the "pad to 3" case). (cherry picked from commit 7a8450c3ecf1a8000cb37981c981fdd55d196df4) Conflicts: sw/qa/extras/odfexport/odfexport.cxx Change-Id: I5c5c7ee5bd61175afc3e682276e69344852106d5 diff --git a/i18npool/source/defaultnumberingprovider/defaultnumberingprovider.cxx b/i18npool/source/defaultnumberingprovider/defaultnumberingprovider.cxx index 372837595708..797d7360a283 100644 --- a/i18npool/source/defaultnumberingprovider/defaultnumberingprovider.cxx +++ b/i18npool/source/defaultnumberingprovider/defaultnumberingprovider.cxx @@ -1039,6 +1039,7 @@ static const Supported_NumberingType aSupportedTypes[] = {style::NumberingType::CHARS_PERSIAN_WORD, nullptr, LANG_CTL}, {style::NumberingType::CHARS_GREEK_UPPER_LETTER, C_GR_A ", " C_GR_B ", ... (gr)", LANG_ALL}, {style::NumberingType::CHARS_GREEK_LOWER_LETTER, S_GR_A ", " S_GR_B ", ... (gr)", LANG_ALL}, + {style::NumberingType::ARABIC_ZERO, "01, 02, 03, ...", LANG_ALL}, }; static const sal_Int32 nSupported_NumberingTypes = SAL_N_ELEMENTS(aSupportedTypes); diff --git a/sw/qa/extras/odfexport/data/arabic-zero-numbering.odt b/sw/qa/extras/odfexport/data/arabic-zero-numbering.odt new file mode 100644 index 000000000000..2a445b22748a Binary files /dev/null and b/sw/qa/extras/odfexport/data/arabic-zero-numbering.odt differ diff --git a/sw/qa/extras/odfexport/odfexport.cxx b/sw/qa/extras/odfexport/odfexport.cxx index cd7ec96315f4..0d5c28f07ebd 100644 --- a/sw/qa/extras/odfexport/odfexport.cxx +++ b/sw/qa/extras/odfexport/odfexport.cxx @@ -2335,5 +2335,18 @@ DECLARE_ODFEXPORT_TEST(testPageContentBottom, "page-content-bottom.odt") CPPUNIT_ASSERT_EQUAL(nExpected, getProperty<sal_Int16>(xShape, "VertOrientRelation")); } +DECLARE_ODFEXPORT_TEST(testArabicZeroNumbering, "arabic-zero-numbering.odt") +{ + auto xNumberingRules + = getProperty<uno::Reference<container::XIndexAccess>>(getParagraph(1), "NumberingRules"); + comphelper::SequenceAsHashMap aMap(xNumberingRules->getByIndex(0)); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 64 + // - Actual : 4 + // i.e. numbering type was ARABIC, not ARABIC_ZERO. + CPPUNIT_ASSERT_EQUAL(static_cast<sal_uInt16>(style::NumberingType::ARABIC_ZERO), + aMap["NumberingType"].get<sal_uInt16>()); +} + CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ commit 2a4e767ea83e49fafb639e66e74403c2ff9270ac Author: Miklos Vajna <vmik...@collabora.com> AuthorDate: Tue Mar 3 09:27:01 2020 +0100 Commit: Miklos Vajna <vmik...@collabora.com> CommitDate: Thu May 14 11:34:47 2020 +0200 sw padded numbering: add layout lcl_formatArabicZero() looks a bit over-complicated with its hardcoded limit of 2. Word supports limits of 3, 4 and 5 as well, so prepare for handling them in a generic way. (cherry picked from commit 642b7706101a991efc7e312f59dece640d8bfb60) Change-Id: If6e5634b11616f0ac05e1387016e22f4b171bbfb diff --git a/i18npool/CppunitTest_i18npool_defaultnumberingprovider.mk b/i18npool/CppunitTest_i18npool_defaultnumberingprovider.mk new file mode 100644 index 000000000000..421affb90b35 --- /dev/null +++ b/i18npool/CppunitTest_i18npool_defaultnumberingprovider.mk @@ -0,0 +1,44 @@ +# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*- +#************************************************************************* +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +#************************************************************************* + +$(eval $(call gb_CppunitTest_CppunitTest,i18npool_defaultnumberingprovider)) + +$(eval $(call gb_CppunitTest_use_externals,i18npool_defaultnumberingprovider,\ + boost_headers \ +)) + +$(eval $(call gb_CppunitTest_add_exception_objects,i18npool_defaultnumberingprovider, \ + i18npool/qa/cppunit/test_defaultnumberingprovider \ +)) + +$(eval $(call gb_CppunitTest_use_libraries,i18npool_defaultnumberingprovider, \ + comphelper \ + cppu \ + sal \ + test \ + unotest \ + utl \ +)) + +$(eval $(call gb_CppunitTest_use_sdk_api,i18npool_defaultnumberingprovider)) + +$(eval $(call gb_CppunitTest_use_ure,i18npool_defaultnumberingprovider)) +$(eval $(call gb_CppunitTest_use_vcl,i18npool_defaultnumberingprovider)) + +$(eval $(call gb_CppunitTest_use_rdb,i18npool_defaultnumberingprovider,services)) + +$(eval $(call gb_CppunitTest_use_custom_headers,i18npool_defaultnumberingprovider,\ + officecfg/registry \ +)) + +$(eval $(call gb_CppunitTest_use_configuration,i18npool_defaultnumberingprovider)) + +# vim: set noet sw=4 ts=4: diff --git a/i18npool/Module_i18npool.mk b/i18npool/Module_i18npool.mk index 0e1f5e6cef72..8a770bb4f0e3 100644 --- a/i18npool/Module_i18npool.mk +++ b/i18npool/Module_i18npool.mk @@ -43,6 +43,7 @@ $(eval $(call gb_Module_add_check_targets,i18npool,\ CppunitTest_i18npool_test_characterclassification \ CppunitTest_i18npool_test_ordinalsuffix \ CppunitTest_i18npool_test_textsearch \ + CppunitTest_i18npool_defaultnumberingprovider \ )) # vim: set noet sw=4 ts=4: diff --git a/i18npool/qa/cppunit/test_defaultnumberingprovider.cxx b/i18npool/qa/cppunit/test_defaultnumberingprovider.cxx new file mode 100644 index 000000000000..2a1cb55502e2 --- /dev/null +++ b/i18npool/qa/cppunit/test_defaultnumberingprovider.cxx @@ -0,0 +1,57 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include <test/bootstrapfixture.hxx> + +#include <com/sun/star/style/NumberingType.hpp> +#include <com/sun/star/text/DefaultNumberingProvider.hpp> +#include <com/sun/star/text/XNumberingFormatter.hpp> + +#include <comphelper/processfactory.hxx> +#include <comphelper/propertyvalue.hxx> + +using namespace ::com::sun::star; + +/// i18npool defaultnumberingprovider tests. +class I18npoolDefaultnumberingproviderTest : public test::BootstrapFixture +{ +}; + +CPPUNIT_TEST_FIXTURE(I18npoolDefaultnumberingproviderTest, testArabicZero) +{ + uno::Reference<uno::XComponentContext> xComponentContext + = comphelper::getComponentContext(getMultiServiceFactory()); + + // 1 -> "01" + uno::Reference<text::XNumberingFormatter> xFormatter( + text::DefaultNumberingProvider::create(xComponentContext), uno::UNO_QUERY); + uno::Sequence<beans::PropertyValue> aProperties = { + comphelper::makePropertyValue("NumberingType", + static_cast<sal_uInt16>(style::NumberingType::ARABIC_ZERO)), + comphelper::makePropertyValue("Value", static_cast<sal_Int32>(1)), + }; + lang::Locale aLocale; + OUString aActual = xFormatter->makeNumberingString(aProperties, aLocale); + // Without the accompanying fix in place, this test would have failed with a + // lang.IllegalArgumentException, support for ARABIC_ZERO was missing. + CPPUNIT_ASSERT_EQUAL(OUString("01"), aActual); + + // 10 -> "10" + aProperties = { + comphelper::makePropertyValue("NumberingType", + static_cast<sal_uInt16>(style::NumberingType::ARABIC_ZERO)), + comphelper::makePropertyValue("Value", static_cast<sal_Int32>(10)), + }; + aActual = xFormatter->makeNumberingString(aProperties, aLocale); + CPPUNIT_ASSERT_EQUAL(OUString("10"), aActual); +} + +CPPUNIT_PLUGIN_IMPLEMENT(); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/i18npool/source/defaultnumberingprovider/defaultnumberingprovider.cxx b/i18npool/source/defaultnumberingprovider/defaultnumberingprovider.cxx index a81b00143989..372837595708 100644 --- a/i18npool/source/defaultnumberingprovider/defaultnumberingprovider.cxx +++ b/i18npool/source/defaultnumberingprovider/defaultnumberingprovider.cxx @@ -552,6 +552,30 @@ bool should_ignore( const OUString& s ) return s == " " || (!s.isEmpty() && s[0]==0); } +/** + * Turn nNumber into a string and pad the result to 2 using zero characters. + */ +static OUString lcl_formatArabicZero(sal_Int32 nNumber) +{ + sal_Int32 nLimit = 2; + OUString aRet = OUString::number(nNumber); + sal_Int32 nDiff = nLimit - aRet.getLength(); + + if (nDiff <= 0) + { + return aRet; + } + + OUStringBuffer aBuffer; + aBuffer.setLength(nDiff); + for (sal_Int32 i = 0; i < nDiff; ++i) + { + aBuffer[i] = '0'; + } + aBuffer.append(aRet); + return aBuffer.makeStringAndClear(); +} + static Any getPropertyByName( const Sequence<beans::PropertyValue>& aProperties, const char* name, bool bRequired ) @@ -913,6 +937,10 @@ DefaultNumberingProvider::makeNumberingString( const Sequence<beans::PropertyVal lcl_formatChars1( table_Chicago, 4, number-1, result ); // *, +, |, S, **, ++, ... break; + case ARABIC_ZERO: + result += lcl_formatArabicZero(number); + break; + default: OSL_ASSERT(false); throw IllegalArgumentException(); commit 2cdf69ea6412e20860d70d1ee7f0d5acb73a97e4 Author: Miklos Vajna <vmik...@collabora.com> AuthorDate: Mon Mar 2 17:17:56 2020 +0100 Commit: Miklos Vajna <vmik...@collabora.com> CommitDate: Thu May 14 10:52:17 2020 +0200 sw padded numbering: add doc model and UNO API The idea is to behave similar to Arabic numbering, but pad the result on the left up to 2 characters. Word has this feature, so far Writer falled back to plain Arabic numbering. This is just the document model, not layout yet. (cherry picked from commit 6b80bd446de4bf19df3a9b124881e1fe12402ca8) Change-Id: I8ac90536848d00b8678129184db0849130724dee diff --git a/include/editeng/svxenum.hxx b/include/editeng/svxenum.hxx index 3c4bbe266347..f425e97cde0c 100644 --- a/include/editeng/svxenum.hxx +++ b/include/editeng/svxenum.hxx @@ -205,7 +205,8 @@ enum SvxNumType : sal_Int16 SVX_NUM_TEXT_NUMBER = css::style::NumberingType::TEXT_NUMBER, SVX_NUM_TEXT_CARDINAL = css::style::NumberingType::TEXT_CARDINAL, SVX_NUM_TEXT_ORDINAL = css::style::NumberingType::TEXT_ORDINAL, - SVX_NUM_SYMBOL_CHICAGO = css::style::NumberingType::SYMBOL_CHICAGO + SVX_NUM_SYMBOL_CHICAGO = css::style::NumberingType::SYMBOL_CHICAGO, + SVX_NUM_ARABIC_ZERO = css::style::NumberingType::ARABIC_ZERO }; #endif diff --git a/offapi/com/sun/star/style/NumberingType.idl b/offapi/com/sun/star/style/NumberingType.idl index 183d719c89a2..66159a818e66 100644 --- a/offapi/com/sun/star/style/NumberingType.idl +++ b/offapi/com/sun/star/style/NumberingType.idl @@ -492,6 +492,13 @@ published constants NumberingType ASTERISK ASTERISK, DAGGER DAGGER, etc. */ const short SYMBOL_CHICAGO = 63; + + /** Numbering is in Arabic numbers, padded with zero to have a length of at least two, as "01, + 02, ..., 10, 11, ...". + + @since LibreOffice 7.0 + */ + const short ARABIC_ZERO = 64; }; _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits