sw/qa/extras/ww8export/data/tdf133504_wrapNotBeside.doc |binary
 sw/qa/extras/ww8export/ww8export.cxx                    |    8 +++++
 sw/source/filter/ww8/ww8par6.cxx                        |   24 ++++++++++++----
 3 files changed, 27 insertions(+), 5 deletions(-)

New commits:
commit f1bf753e52e1c1150de96ca3073cbaef76f10b50
Author:     Justin Luth <jl...@mail.com>
AuthorDate: Thu May 25 12:19:16 2023 -0400
Commit:     Miklos Vajna <vmik...@collabora.com>
CommitDate: Thu Oct 5 08:28:08 2023 +0200

    tdf#133504 doc import: set the correct wrap
    
    Umm, I'm amazed that
    1.) this hasn't been a bigger, burning issue, and
    2.) that no one has ever investigated or fixed this.
    It was super easy.
    
    The code is mind boggling though. "Auto" and "Not Beside" are NONE,
    but around, none, tight, and through are "Optimal"?
    
    How about auto is optimal, around/tight are parallel,
    none is none, and through is through.
    
    Lets try that and see how it works.
    
    Prior patchsets submitted searched for existing examples.
    They suggest that MS Word's UI only allows for notBeside and around,
    but I kept the others there just in case something can trigger them.
    
    Change-Id: I893dfd66737bcc3148b48c68cb6df778d3f528c8
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/152286
    Reviewed-by: Justin Luth <jl...@mail.com>
    Tested-by: Jenkins
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/157558
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com>
    Reviewed-by: Miklos Vajna <vmik...@collabora.com>

diff --git a/sw/qa/extras/ww8export/data/tdf133504_wrapNotBeside.doc 
b/sw/qa/extras/ww8export/data/tdf133504_wrapNotBeside.doc
new file mode 100644
index 000000000000..865023e34489
Binary files /dev/null and 
b/sw/qa/extras/ww8export/data/tdf133504_wrapNotBeside.doc differ
diff --git a/sw/qa/extras/ww8export/ww8export.cxx 
b/sw/qa/extras/ww8export/ww8export.cxx
index f4274a629d39..52bda1efeb55 100644
--- a/sw/qa/extras/ww8export/ww8export.cxx
+++ b/sw/qa/extras/ww8export/ww8export.cxx
@@ -28,6 +28,7 @@
 #include <com/sun/star/table/TableBorder.hpp>
 #include <com/sun/star/table/TableBorder2.hpp>
 #include <com/sun/star/text/GraphicCrop.hpp>
+#include <com/sun/star/text/WrapTextMode.hpp>
 #include <com/sun/star/text/XFormField.hpp>
 #include <com/sun/star/text/XTextField.hpp>
 #include <com/sun/star/text/XTextFieldsSupplier.hpp>
@@ -577,6 +578,13 @@ DECLARE_WW8EXPORT_TEST(testBnc787942, "bnc787942.doc")
 
     // this is on page 1 in Word
     parseDump("/root/page[1]/body/txt[4]/anchored");
+
+    CPPUNIT_ASSERT_EQUAL(text::WrapTextMode_PARALLEL, 
getProperty<text::WrapTextMode>(getShape(1), "Surround"));
+}
+
+DECLARE_WW8EXPORT_TEST(testTdf133504_wrapNotBeside, 
"tdf133504_wrapNotBeside.doc")
+{
+    CPPUNIT_ASSERT_EQUAL(text::WrapTextMode_NONE, 
getProperty<text::WrapTextMode>(getShape(1), "Surround"));
 }
 
 DECLARE_WW8EXPORT_TEST(testLayoutHanging, "fdo68967.doc")
diff --git a/sw/source/filter/ww8/ww8par6.cxx b/sw/source/filter/ww8/ww8par6.cxx
index 8047f92c6e71..607e06ac0724 100644
--- a/sw/source/filter/ww8/ww8par6.cxx
+++ b/sw/source/filter/ww8/ww8par6.cxx
@@ -1912,7 +1912,6 @@ eHRel(text::RelOrientation::PAGE_FRAME),
 eVRel(text::RelOrientation::FRAME),
 eVAlign(text::VertOrientation::NONE),
 eHAlign(text::HoriOrientation::NONE),
-eSurround(( rWW.nPWr > 1 ) ? css::text::WrapTextMode_DYNAMIC : 
css::text::WrapTextMode_NONE),
 nXBind(( rWW.nTPc & 0xc0 ) >> 6),
 nYBind(( rWW.nTPc & 0x30 ) >> 4),
 nNewNetWidth(MINFLY),
@@ -1920,10 +1919,25 @@ nLineSpace(0),
 bAutoWidth(false),
 bTogglePos(false)
 {
-    //#i119466 mapping "Around" wrap setting to "Parallel" for table
-    const bool bIsTable = 
rIo.m_xPlcxMan->HasParaSprm(NS_sprm::PFInTable::val).pSprm;
-    if (bIsTable && rWW.nPWr == 2)
-        eSurround = css::text::WrapTextMode_PARALLEL;
+    switch(rWW.nPWr)
+    {
+        case 0: // ST_Wrap: auto
+            eSurround = css::text::WrapTextMode_DYNAMIC;
+            break;
+        case 1: // ST_Wrap: notBeside
+        case 3: // ST_Wrap: none
+            eSurround = css::text::WrapTextMode_NONE;
+            break;
+        case 2: // ST_Wrap: around
+        case 4: // ST_Wrap: tight
+            eSurround = css::text::WrapTextMode_PARALLEL;
+            break;
+        case 5: // St_Wrap: through
+            eSurround = css::text::WrapTextMode_THROUGH;
+            break;
+        default:
+            eSurround = css::text::WrapTextMode_DYNAMIC;
+    }
 
     /*
      #95905#, #83307# seems to have gone away now, so re-enable parallel

Reply via email to