[Libreoffice-commits] core.git: oox/source sw/qa

umeshkadam umesh.kadam at synerzip.com
Fri Feb 14 12:12:46 CET 2014


 oox/source/export/drawingml.cxx             |   15 +++++++++++++--
 sw/qa/extras/ooxmlexport/data/FDO74774.docx |binary
 sw/qa/extras/ooxmlexport/ooxmlexport.cxx    |   15 +++++++++++++++
 3 files changed, 28 insertions(+), 2 deletions(-)

New commits:
commit cf4e5e497974edc5d19d6899fbe01cdf2451b341
Author: umeshkadam <umesh.kadam at synerzip.com>
Date:   Mon Feb 10 17:28:13 2014 +0530

    FDO#74774 : issue with number of child nodes of tag CubicBezierTo.
    
    Issue :
     - Number of child nodes required by cubicBexTo should be 3 of type "pt".
       While exporting, sometimes the child nodes are less than 3.
       The sequence of writing these tags was getting messed up.
    
    Implementation :
     - corrected the logic for writing the sequence of cubicBexTo tag.
    
    Change-Id: Ic26db72b2c516276c2e6452a21b4106d6a0a1a80
    Reviewed-on: https://gerrit.libreoffice.org/7990
    Reviewed-by: Miklos Vajna <vmiklos at collabora.co.uk>
    Tested-by: Miklos Vajna <vmiklos at collabora.co.uk>

diff --git a/oox/source/export/drawingml.cxx b/oox/source/export/drawingml.cxx
index bdec63d..d03a0d8 100644
--- a/oox/source/export/drawingml.cxx
+++ b/oox/source/export/drawingml.cxx
@@ -1812,6 +1812,7 @@ void DrawingML::WritePolyPolygon( const PolyPolygon& rPolyPolygon )
             mpFS->endElementNS( XML_a, XML_moveTo );
         }
 
+        sal_Int32 nCounter = 0 ;
         for( sal_uInt16 j = 1; j < rPoly.GetSize(); j ++ )
         {
             enum PolyFlags flags = rPoly.GetFlags(j);
@@ -1821,7 +1822,10 @@ void DrawingML::WritePolyPolygon( const PolyPolygon& rPolyPolygon )
                 bBezier = sal_True;
             }
             else if( flags == POLY_NORMAL && !bBezier )
+            {
                 mpFS->startElementNS( XML_a, XML_lnTo, FSEND );
+                ++nCounter ;
+            }
 
             mpFS->singleElementNS( XML_a, XML_pt,
                                    XML_x, I64S( rPoly[j].X() - aRect.Left() ),
@@ -1835,12 +1839,19 @@ void DrawingML::WritePolyPolygon( const PolyPolygon& rPolyPolygon )
             }
             else if( flags == POLY_NORMAL && !bBezier )
                 mpFS->endElementNS( XML_a, XML_lnTo );
-            else if( bBezier && ( j % 3 ) == 0 )
+
+            /* ( j % 3 == 0 ) will fail to address the iterations
+               that have been dedicated to XML_lnTo in case if the
+               flag is POLY_NORMAL.
+               Similarly the sequence would go wrong if we do not
+               make the flag bBezier as false after ending the element.
+            */
+            else if( bBezier && ( ( j - nCounter ) % 3 ) == 0 )
             {
                 // //a:cubicBezTo can only contain 3 //a:pt elements, so we
                 // need to break things up...
                 mpFS->endElementNS( XML_a, XML_cubicBezTo );
-                mpFS->startElementNS( XML_a, XML_cubicBezTo, FSEND );
+                bBezier = sal_False;
             }
         }
 
diff --git a/sw/qa/extras/ooxmlexport/data/FDO74774.docx b/sw/qa/extras/ooxmlexport/data/FDO74774.docx
new file mode 100644
index 0000000..1124247
Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/FDO74774.docx differ
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
index 722c455..46d7adf 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
@@ -3200,6 +3200,21 @@ DECLARE_OOXMLEXPORT_TEST(testExtentValue, "fdo74605.docx")
 
 #endif
 
+DECLARE_OOXMLEXPORT_TEST( testChildNodesOfCubicBezierTo, "FDO74774.docx")
+{
+    /* Number of children required by cubicBexTo is 3 of type "pt".
+       While exporting, sometimes the child nodes are less than 3.
+       The test case ensures that there are 3 child nodes of type "pt"
+       for cubicBexTo
+     */
+    xmlDocPtr pXmlDoc = parseExport("word/document.xml");
+    if (!pXmlDoc)
+        return;
+
+    assertXPath( pXmlDoc,
+        "/w:document/w:body/w:p[2]/w:r[1]/mc:AlternateContent[1]/mc:Choice/w:drawing[1]/wp:inline[1]/a:graphic[1]/a:graphicData[1]/wpg:wgp[1]/wps:wsp[3]/wps:spPr[1]/a:custGeom[1]/a:pathLst[1]/a:path[1]/a:cubicBezTo[2]/a:pt[3]");
+}
+
 CPPUNIT_PLUGIN_IMPLEMENT();
 
 


More information about the Libreoffice-commits mailing list