include/oox/export/utils.hxx | 20 ++++++++++++++++---- sc/qa/unit/ThemeImportExportTest.cxx | 22 +++++++++++----------- sd/qa/unit/export-tests-ooxml2.cxx | 10 +++++----- sd/qa/unit/export-tests-ooxml3.cxx | 6 +++--- 4 files changed, 35 insertions(+), 23 deletions(-)
New commits: commit 5fef483cc6f36bfda92263d52dbb0ec7d080868a Author: Michael Meeks <[email protected]> AuthorDate: Fri Oct 3 18:16:28 2025 +0100 Commit: Michael Meeks <[email protected]> CommitDate: Mon Oct 6 16:09:16 2025 +0200 oox: use a faster color hexification method with hex-in-uppercase. This reduces the xml diff to MS' generation. Change-Id: I10a3f1db3347d1fb06c0d823e4b5e50104318c91 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/191940 Reviewed-by: Caolán McNamara <[email protected]> Tested-by: Jenkins CollaboraOffice <[email protected]> Tested-by: Caolán McNamara <[email protected]> (cherry picked from commit 6219a5d42133048a7e384539f9454e222f96936f) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/191944 Tested-by: Jenkins Reviewed-by: Michael Meeks <[email protected]> diff --git a/include/oox/export/utils.hxx b/include/oox/export/utils.hxx index 00fd953a04e7..7bea6f3c36d4 100644 --- a/include/oox/export/utils.hxx +++ b/include/oox/export/utils.hxx @@ -23,17 +23,29 @@ #include <sal/config.h> #include <o3tl/unit_conversion.hxx> +#include <rtl/strbuf.hxx> #include <rtl/string.hxx> #include <sal/types.h> #include <cmath> +// Only used to output rgb colors as hex inline OString I32SHEX(sal_Int32 x) { - OString aStr = OString::number(x, 16); - while (aStr.getLength() < 6) - aStr = "0" + aStr; - return aStr; + assert(x <= 0xffffff); + rtl::OStringBuffer aRes(6); + aRes.setLength(6); + sal_Int32 n = 0; + for (int nShift = 24-4; nShift >=0; nShift -= 4) + { + char nDigit = static_cast<char>((x >> nShift) & 0xf); + if ( nDigit > 9 ) + aRes[n] = (nDigit-10) + 'A'; + else + aRes[n] = (nDigit + '0'); + n++; + } + return aRes.makeStringAndClear(); } /** diff --git a/sc/qa/unit/ThemeImportExportTest.cxx b/sc/qa/unit/ThemeImportExportTest.cxx index f2c7e8b0639a..5f09ab65247a 100644 --- a/sc/qa/unit/ThemeImportExportTest.cxx +++ b/sc/qa/unit/ThemeImportExportTest.cxx @@ -121,17 +121,17 @@ CPPUNIT_TEST_FIXTURE(ThemeImportExportTest, testThemeExportOOXML) OString aClrScheme = "/a:theme/a:themeElements/a:clrScheme"_ostr; assertXPath(pXmlDoc, aClrScheme, "name", u"Office"); assertXPath(pXmlDoc, aClrScheme + "/a:dk1/a:srgbClr", "val", u"000000"); - assertXPath(pXmlDoc, aClrScheme + "/a:lt1/a:srgbClr", "val", u"ffffff"); - assertXPath(pXmlDoc, aClrScheme + "/a:dk2/a:srgbClr", "val", u"44546a"); - assertXPath(pXmlDoc, aClrScheme + "/a:lt2/a:srgbClr", "val", u"e7e6e6"); - assertXPath(pXmlDoc, aClrScheme + "/a:accent1/a:srgbClr", "val", u"4472c4"); - assertXPath(pXmlDoc, aClrScheme + "/a:accent2/a:srgbClr", "val", u"ed7d31"); - assertXPath(pXmlDoc, aClrScheme + "/a:accent3/a:srgbClr", "val", u"a5a5a5"); - assertXPath(pXmlDoc, aClrScheme + "/a:accent4/a:srgbClr", "val", u"ffc000"); - assertXPath(pXmlDoc, aClrScheme + "/a:accent5/a:srgbClr", "val", u"5b9bd5"); - assertXPath(pXmlDoc, aClrScheme + "/a:accent6/a:srgbClr", "val", u"70ad47"); - assertXPath(pXmlDoc, aClrScheme + "/a:hlink/a:srgbClr", "val", u"0563c1"); - assertXPath(pXmlDoc, aClrScheme + "/a:folHlink/a:srgbClr", "val", u"954f72"); + assertXPath(pXmlDoc, aClrScheme + "/a:lt1/a:srgbClr", "val", u"FFFFFF"); + assertXPath(pXmlDoc, aClrScheme + "/a:dk2/a:srgbClr", "val", u"44546A"); + assertXPath(pXmlDoc, aClrScheme + "/a:lt2/a:srgbClr", "val", u"E7E6E6"); + assertXPath(pXmlDoc, aClrScheme + "/a:accent1/a:srgbClr", "val", u"4472C4"); + assertXPath(pXmlDoc, aClrScheme + "/a:accent2/a:srgbClr", "val", u"ED7D31"); + assertXPath(pXmlDoc, aClrScheme + "/a:accent3/a:srgbClr", "val", u"A5A5A5"); + assertXPath(pXmlDoc, aClrScheme + "/a:accent4/a:srgbClr", "val", u"FFC000"); + assertXPath(pXmlDoc, aClrScheme + "/a:accent5/a:srgbClr", "val", u"5B9BD5"); + assertXPath(pXmlDoc, aClrScheme + "/a:accent6/a:srgbClr", "val", u"70AD47"); + assertXPath(pXmlDoc, aClrScheme + "/a:hlink/a:srgbClr", "val", u"0563C1"); + assertXPath(pXmlDoc, aClrScheme + "/a:folHlink/a:srgbClr", "val", u"954F72"); } { diff --git a/sd/qa/unit/export-tests-ooxml2.cxx b/sd/qa/unit/export-tests-ooxml2.cxx index 8ac9d5aaa94e..5a0c7defd402 100644 --- a/sd/qa/unit/export-tests-ooxml2.cxx +++ b/sd/qa/unit/export-tests-ooxml2.cxx @@ -1381,7 +1381,7 @@ CPPUNIT_TEST_FIXTURE(SdOOXMLExportTest2, testTdf112333) "p:par/p:cTn/p:childTnLst/p:par/p:cTn/p:childTnLst/p:par/p:cTn/p:childTnLst/" "p:animClr/p:to/a:srgbClr", "val"); - CPPUNIT_ASSERT_EQUAL(u"0563c1"_ustr, sTo); + CPPUNIT_ASSERT_EQUAL(u"0563C1"_ustr, sTo); sAttributeName = getXPathContent( pXmlDocContent, "/p:sld/p:timing/p:tnLst/p:par/p:cTn/p:childTnLst/p:seq/p:cTn/p:childTnLst/" @@ -1694,10 +1694,10 @@ CPPUNIT_TEST_FIXTURE(SdOOXMLExportTest2, testAccentColor) u"accent6"); xmlDocUniquePtr pXmlDocTheme1 = parseExport(u"ppt/theme/theme1.xml"_ustr); assertXPath(pXmlDocTheme1, "/a:theme/a:themeElements/a:clrScheme/a:accent6/a:srgbClr", "val", - u"70ad47"); + u"70AD47"); xmlDocUniquePtr pXmlDocTheme2 = parseExport(u"ppt/theme/theme2.xml"_ustr); assertXPath(pXmlDocTheme2, "/a:theme/a:themeElements/a:clrScheme/a:accent6/a:srgbClr", "val", - u"deb340"); + u"DEB340"); // Without the accompanying fix in place, this test would have failed with: // - Expected: Motyw pakietu Office @@ -1714,9 +1714,9 @@ CPPUNIT_TEST_FIXTURE(SdOOXMLExportTest2, testThemeColors) xmlDocUniquePtr pXmlDocTheme2 = parseExport(u"ppt/theme/theme1.xml"_ustr); assertXPath(pXmlDocTheme2, "/a:theme/a:themeElements/a:clrScheme/a:dk2/a:srgbClr", "val", - u"44546a"); + u"44546A"); assertXPath(pXmlDocTheme2, "/a:theme/a:themeElements/a:clrScheme/a:accent3/a:srgbClr", "val", - u"a5a5a5"); + u"A5A5A5"); } CPPUNIT_TEST_FIXTURE(SdOOXMLExportTest2, testTdf111785) diff --git a/sd/qa/unit/export-tests-ooxml3.cxx b/sd/qa/unit/export-tests-ooxml3.cxx index 639a64555566..08f31b26945d 100644 --- a/sd/qa/unit/export-tests-ooxml3.cxx +++ b/sd/qa/unit/export-tests-ooxml3.cxx @@ -134,7 +134,7 @@ CPPUNIT_TEST_FIXTURE(SdOOXMLExportTest3, testTdf114848) xmlDocUniquePtr pXmlDocTheme1 = parseExport(u"ppt/theme/theme1.xml"_ustr); assertXPath(pXmlDocTheme1, "/a:theme/a:themeElements/a:clrScheme/a:dk2/a:srgbClr", "val", - u"1f497d"); + u"1F497D"); } CPPUNIT_TEST_FIXTURE(SdOOXMLExportTest3, testTdf147586) @@ -755,7 +755,7 @@ CPPUNIT_TEST_FIXTURE(SdOOXMLExportTest3, testTdf118835) xmlDocUniquePtr pXmlDocContent = parseExport(u"ppt/slides/slide1.xml"_ustr); assertXPath(pXmlDocContent, "(//p:animClr)[1]", "clrSpc", u"rgb"); assertXPathContent(pXmlDocContent, "(//p:animClr)[1]//p:attrName", u"style.color"); - assertXPath(pXmlDocContent, "(//p:animClr)[1]//p:to/a:srgbClr", "val", u"ed1c24"); + assertXPath(pXmlDocContent, "(//p:animClr)[1]//p:to/a:srgbClr", "val", u"ED1C24"); assertXPath(pXmlDocContent, "(//p:animClr)[2]", "clrSpc", u"rgb"); assertXPathContent(pXmlDocContent, "(//p:animClr)[2]//p:attrName", u"stroke.color"); @@ -763,7 +763,7 @@ CPPUNIT_TEST_FIXTURE(SdOOXMLExportTest3, testTdf118835) assertXPath(pXmlDocContent, "(//p:animClr)[3]", "clrSpc", u"rgb"); assertXPathContent(pXmlDocContent, "(//p:animClr)[3]//p:attrName", u"fillcolor"); - assertXPath(pXmlDocContent, "(//p:animClr)[3]//p:to/a:srgbClr", "val", u"fcd3c1"); + assertXPath(pXmlDocContent, "(//p:animClr)[3]//p:to/a:srgbClr", "val", u"FCD3C1"); assertXPath(pXmlDocContent, "(//p:animClr)[5]", "clrSpc", u"hsl"); assertXPathContent(pXmlDocContent, "(//p:animClr)[5]//p:attrName", u"fillcolor");
