schema/libreoffice/OpenDocument-v1.4+libreoffice-schema.rng | 272 ------------ xmloff/qa/unit/draw.cxx | 22 xmloff/source/draw/shapeexport.cxx | 14 3 files changed, 32 insertions(+), 276 deletions(-)
New commits: commit 146dac7d30823678b9e87f8128904f5815c1a2ed Author: Xisco Fauli <[email protected]> AuthorDate: Wed Sep 25 16:04:27 2024 +0200 Commit: Xisco Fauli <[email protected]> CommitDate: Wed Sep 25 19:31:28 2024 +0200 tdf#162690, tdf#162687: Adapt to ODF 1.4 After this, the workaround introduced to OpenDocument-v1.4+libreoffice-schema.rng in afa4965e4df6f1f0c43c0a059f216e7f8a21ba82 "schema: update to ODF 1.4 OS" can be removed Change-Id: Iecf31cec0bf187155a97e5b6ccf8173b6aba82fc Reviewed-on: https://gerrit.libreoffice.org/c/core/+/173940 Tested-by: Jenkins Reviewed-by: Xisco Fauli <[email protected]> diff --git a/schema/libreoffice/OpenDocument-v1.4+libreoffice-schema.rng b/schema/libreoffice/OpenDocument-v1.4+libreoffice-schema.rng index eeaeda439504..a805123d7e24 100644 --- a/schema/libreoffice/OpenDocument-v1.4+libreoffice-schema.rng +++ b/schema/libreoffice/OpenDocument-v1.4+libreoffice-schema.rng @@ -2928,268 +2928,8 @@ xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1. </rng:optional> </rng:define> - <!-- FIXME: tdf#162690 --> - <rng:define name="draw-enhanced-geometry-attlist" combine="choice"> - <rng:interleave> - <rng:optional> - <rng:attribute name="draw:type"> - <rng:ref name="custom-shape-type"/> - </rng:attribute> - </rng:optional> - <rng:optional> - <rng:attribute name="svg:viewBox"> - <rng:list> - <rng:ref name="integer"/> - <rng:ref name="integer"/> - <rng:ref name="integer"/> - <rng:ref name="integer"/> - </rng:list> - </rng:attribute> - </rng:optional> - <rng:optional> - <rng:attribute name="draw:mirror-vertical"> - <rng:ref name="boolean"/> - </rng:attribute> - </rng:optional> - <rng:optional> - <rng:attribute name="draw:mirror-horizontal"> - <rng:ref name="boolean"/> - </rng:attribute> - </rng:optional> - <rng:optional> - <rng:attribute name="draw:text-rotate-angle"> - <rng:ref name="angle"/> - </rng:attribute> - </rng:optional> - <rng:optional> - <rng:attribute name="draw:extrusion-allowed"> - <rng:ref name="boolean"/> - </rng:attribute> - </rng:optional> - <rng:optional> - <rng:attribute name="draw:text-path-allowed"> - <rng:ref name="boolean"/> - </rng:attribute> - </rng:optional> - <rng:optional> - <rng:attribute name="draw:concentric-gradient-fill-allowed"> - <rng:ref name="boolean"/> - </rng:attribute> - </rng:optional> - <rng:optional> - <rng:attribute name="draw:extrusion"> - <rng:ref name="boolean"/> - </rng:attribute> - </rng:optional> - <rng:optional> - <rng:attribute name="draw:extrusion-brightness"> - <rng:ref name="zeroToHundredPercent"/> - </rng:attribute> - </rng:optional> - <rng:optional> - <rng:attribute name="draw:extrusion-depth"> - <rng:list> - <rng:ref name="length"/> - <rng:ref name="double"/> - </rng:list> - </rng:attribute> - </rng:optional> - <rng:optional> - <rng:attribute name="draw:extrusion-diffusion"> - <rng:ref name="percent"/> - </rng:attribute> - </rng:optional> - <rng:optional> - <rng:attribute name="draw:extrusion-number-of-line-segments"> - <rng:ref name="integer"/> - </rng:attribute> - </rng:optional> - <rng:optional> - <rng:attribute name="draw:extrusion-light-face"> - <rng:ref name="boolean"/> - </rng:attribute> - </rng:optional> - <rng:optional> - <rng:attribute name="draw:extrusion-first-light-harsh"> - <rng:ref name="boolean"/> - </rng:attribute> - </rng:optional> - <rng:optional> - <rng:attribute name="draw:extrusion-second-light-harsh"> - <rng:ref name="boolean"/> - </rng:attribute> - </rng:optional> - <rng:optional> - <rng:attribute name="draw:extrusion-first-light-level"> - <rng:ref name="zeroToHundredPercent"/> - </rng:attribute> - </rng:optional> - <rng:optional> - <rng:attribute name="draw:extrusion-second-light-level"> - <rng:ref name="zeroToHundredPercent"/> - </rng:attribute> - </rng:optional> - <rng:optional> - <rng:attribute name="draw:extrusion-first-light-direction"> - <rng:ref name="vector3D"/> - </rng:attribute> - </rng:optional> - <rng:optional> - <rng:attribute name="draw:extrusion-second-light-direction"> - <rng:ref name="vector3D"/> - </rng:attribute> - </rng:optional> - <rng:optional> - <rng:attribute name="draw:extrusion-metal"> - <rng:ref name="boolean"/> - </rng:attribute> - </rng:optional> - <!-- https://issues.oasis-open.org/browse/OFFICE-4123 --> - <rng:optional> - <rng:attribute name="draw:extrusion-metal-type"> - <rng:ref name="namespacedToken"/> - </rng:attribute> - </rng:optional> - <rng:optional> - <rng:attribute name="dr3d:shade-mode"> - <rng:choice> - <rng:value>flat</rng:value> - <rng:value>phong</rng:value> - <rng:value>gouraud</rng:value> - <rng:value>draft</rng:value> - </rng:choice> - </rng:attribute> - </rng:optional> - <rng:optional> - <rng:attribute name="draw:extrusion-rotation-angle"> - <rng:list> - <rng:ref name="angle"/> - <rng:ref name="angle"/> - </rng:list> - </rng:attribute> - </rng:optional> - <rng:optional> - <rng:attribute name="draw:extrusion-rotation-center"> - <rng:ref name="vector3D"/> - </rng:attribute> - </rng:optional> - <rng:optional> - <rng:attribute name="draw:extrusion-shininess"> - <rng:ref name="zeroToHundredPercent"/> - </rng:attribute> - </rng:optional> - <rng:optional> - <rng:attribute name="draw:extrusion-skew"> - <rng:list> - <rng:ref name="double"/> - <rng:ref name="angle"/> - </rng:list> - </rng:attribute> - </rng:optional> - <rng:optional> - <rng:attribute name="draw:extrusion-specularity"> - <rng:ref name="zeroToHundredPercent"/> - </rng:attribute> - </rng:optional> - <rng:optional> - <rng:attribute name="dr3d:projection"> - <rng:choice> - <rng:value>parallel</rng:value> - <rng:value>perspective</rng:value> - </rng:choice> - </rng:attribute> - </rng:optional> - <rng:optional> - <rng:attribute name="draw:extrusion-viewpoint"> - <rng:ref name="point3D"/> - </rng:attribute> - </rng:optional> - <rng:optional> - <rng:attribute name="draw:extrusion-origin"> - <rng:list> - <rng:ref name="extrusionOrigin"/> - <rng:ref name="extrusionOrigin"/> - </rng:list> - </rng:attribute> - </rng:optional> - <rng:optional> - <rng:attribute name="draw:extrusion-color"> - <rng:ref name="boolean"/> - </rng:attribute> - </rng:optional> - <rng:optional> - <rng:attribute name="draw:enhanced-path"> - <rng:ref name="string"/> - </rng:attribute> - </rng:optional> - <rng:optional> - <rng:attribute name="draw:path-stretchpoint-x"> - <rng:ref name="double"/> - </rng:attribute> - </rng:optional> - <rng:optional> - <rng:attribute name="draw:path-stretchpoint-y"> - <rng:ref name="double"/> - </rng:attribute> - </rng:optional> - <rng:optional> - <rng:attribute name="draw:text-areas"> - <rng:ref name="string"/> - </rng:attribute> - </rng:optional> - <rng:optional> - <rng:attribute name="draw:glue-points"> - <rng:ref name="string"/> - </rng:attribute> - </rng:optional> - <rng:optional> - <rng:attribute name="draw:glue-point-type"> - <rng:choice> - <rng:value>none</rng:value> - <rng:value>segments</rng:value> - <rng:value>rectangle</rng:value> - </rng:choice> - </rng:attribute> - </rng:optional> - <rng:optional> - <rng:attribute name="draw:glue-point-leaving-directions"> - <rng:ref name="string"/> - </rng:attribute> - </rng:optional> - <rng:optional> - <rng:attribute name="draw:text-path"> - <rng:ref name="boolean"/> - </rng:attribute> - </rng:optional> - <rng:optional> - <rng:attribute name="draw:text-path-mode"> - <rng:choice> - <rng:value>normal</rng:value> - <rng:value>path</rng:value> - <rng:value>shape</rng:value> - </rng:choice> - </rng:attribute> - </rng:optional> - <rng:optional> - <rng:attribute name="draw:text-path-scale"> - <rng:choice> - <rng:value>path</rng:value> - <rng:value>shape</rng:value> - </rng:choice> - </rng:attribute> - </rng:optional> - <rng:optional> - <rng:attribute name="draw:text-path-same-letter-heights"> - <rng:ref name="boolean"/> - </rng:attribute> - </rng:optional> - <rng:optional> - <rng:attribute name="draw:modifiers"> - <rng:ref name="string"/> - </rng:attribute> - </rng:optional> - - <!-- TODO no proposal --> + <!-- TODO no proposal --> + <rng:define name="draw-enhanced-geometry-attlist" combine="interleave"> <rng:optional> <rng:attribute name="drawooo:sub-view-size"> <rng:ref name="string"/> @@ -3200,22 +2940,24 @@ xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1. <rng:ref name="string"/> </rng:attribute> </rng:optional> + </rng:define> <!-- FIXME: tdf#162686 --> + <rng:define name="draw-enhanced-geometry-attlist" combine="interleave"> <rng:optional> <rng:attribute name="loext:extrusion-metal-type"> <rng:ref name="namespacedToken"/> </rng:attribute> </rng:optional> + </rng:define> - <!-- FIXME: tdf#162686 --> + <!-- FIXME: tdf#162687 --> + <rng:define name="draw-enhanced-geometry-attlist" combine="interleave"> <rng:optional> <rng:attribute name="loext:extrusion-specularity-loext"> <rng:ref name="percent"/> </rng:attribute> </rng:optional> - - </rng:interleave> </rng:define> <!-- TODO no proposal --> diff --git a/xmloff/qa/unit/draw.cxx b/xmloff/qa/unit/draw.cxx index 85ac46936eb8..9ff1ca07a88d 100644 --- a/xmloff/qa/unit/draw.cxx +++ b/xmloff/qa/unit/draw.cxx @@ -600,7 +600,7 @@ CPPUNIT_TEST_FIXTURE(XmloffDrawTest, testExtrusionSpecularityExtended) // assert XML. xmlDocUniquePtr pXmlDoc = parseExport(u"content.xml"_ustr); - assertXPath(pXmlDoc, "//draw:enhanced-geometry[@draw:extrusion-specularity='100%']"_ostr); + assertXPath(pXmlDoc, "//draw:enhanced-geometry[@draw:extrusion-specularity='100']"_ostr); assertXPath(pXmlDoc, "//draw:enhanced-geometry[@loext:extrusion-specularity-loext='122.0703125%']"_ostr); @@ -611,6 +611,26 @@ CPPUNIT_TEST_FIXTURE(XmloffDrawTest, testExtrusionSpecularityExtended) lcl_assertSpecularityProperty("from ODF 1.3 extended", xShapeReload); } +CPPUNIT_TEST_FIXTURE(XmloffDrawTest, testExtrusionSpecularityStrict) +{ + loadFromFile(u"tdf147580_extrusion-specularity.doc"); + // verify property + uno::Reference<drawing::XShape> xShape(getShape(0)); + lcl_assertSpecularityProperty("from doc", xShape); + + skipValidation(); + const SvtSaveOptions::ODFDefaultVersion nCurrentODFVersion(GetODFDefaultVersion()); + SetODFDefaultVersion(SvtSaveOptions::ODFVER_014); + save(u"writer8"_ustr); + + // assert XML. + xmlDocUniquePtr pXmlDoc = parseExport(u"content.xml"_ustr); + assertXPath(pXmlDoc, + "//draw:enhanced-geometry[@draw:extrusion-specularity='122.0703125']"_ostr); + + SetODFDefaultVersion(nCurrentODFVersion); +} + CPPUNIT_TEST_FIXTURE(XmloffDrawTest, testExtrusionSpecularity) { loadFromFile(u"tdf147580_extrusion-specularity.doc"); diff --git a/xmloff/source/draw/shapeexport.cxx b/xmloff/source/draw/shapeexport.cxx index 99e7e916cf4d..a72f327e0846 100644 --- a/xmloff/source/draw/shapeexport.cxx +++ b/xmloff/source/draw/shapeexport.cxx @@ -4704,8 +4704,7 @@ static void ImpExportEnhancedGeometry( SvXMLExport& rExport, const uno::Referenc if ( rProp.Value >>= fExtrusionSpecularity ) { SvtSaveOptions::ODFSaneDefaultVersion eVersion = rExport.getSaneDefaultVersion(); - if (fExtrusionSpecularity > 100.0 && eVersion >= SvtSaveOptions::ODFSVER_012 - && (eVersion & SvtSaveOptions::ODFSVER_EXTENDED)) + if (fExtrusionSpecularity > 100.0 && eVersion & SvtSaveOptions::ODFSVER_EXTENDED) { // tdf#147580 write values > 100% in loext ::sax::Converter::convertDouble( @@ -4719,18 +4718,13 @@ static void ImpExportEnhancedGeometry( SvXMLExport& rExport, const uno::Referenc rExport.AddAttribute( XML_NAMESPACE_LO_EXT, XML_EXTRUSION_SPECULARITY_LOEXT, aStr ); } // tdf#147580 ODF 1 allows arbitrary percent, later versions not - if (eVersion >= SvtSaveOptions::ODFSVER_012) + if (eVersion >= SvtSaveOptions::ODFSVER_012 && eVersion < SvtSaveOptions::ODFSVER_014) { fExtrusionSpecularity = std::clamp<double>(fExtrusionSpecularity, 0.0, 100.0); } - ::sax::Converter::convertDouble( - aStrBuffer, - fExtrusionSpecularity, - false, - util::MeasureUnit::PERCENT, - util::MeasureUnit::PERCENT); - aStrBuffer.append( '%' ); + ::sax::Converter::convertDouble( aStrBuffer, fExtrusionSpecularity ); aStr = aStrBuffer.makeStringAndClear(); + rExport.AddAttribute( XML_NAMESPACE_DRAW, XML_EXTRUSION_SPECULARITY, aStr ); } }
