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 );
                                         }
                                     }

Reply via email to