sw/qa/extras/ooxmlexport/data/tdf132766.docx |binary
 sw/qa/extras/ooxmlexport/ooxmlexport12.cxx   |   21 +++-----
 sw/qa/extras/ooxmlexport/ooxmlexport14.cxx   |   16 ++++++
 sw/source/filter/ww8/docxattributeoutput.cxx |    5 +-
 sw/source/filter/ww8/wrtw8num.cxx            |   65 +++++++++++----------------
 5 files changed, 55 insertions(+), 52 deletions(-)

New commits:
commit ec43d70911736b821e527109fadb3537635091de
Author:     Vasily Melenchuk <[email protected]>
AuthorDate: Sat May 9 14:35:25 2020 +0300
Commit:     Thorsten Behrens <[email protected]>
CommitDate: Thu May 14 21:52:44 2020 +0200

    tdf#132766: DOCX export: always try to set bullet font for list
    
    There are some problems with bullet if we use MS Wingdigs bullets
    and do not specify Symbol font for it. It shiuld be either UTF-8
    or Symbol, but not mixture of both.
    
    Change-Id: Ie4a6f7e8fee6cfab21a18fc080f33d1bff455dd9
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/93846
    Tested-by: Jenkins
    Reviewed-by: Thorsten Behrens <[email protected]>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/94158

diff --git a/sw/qa/extras/ooxmlexport/data/tdf132766.docx 
b/sw/qa/extras/ooxmlexport/data/tdf132766.docx
new file mode 100644
index 000000000000..aba5e82312b7
Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf132766.docx differ
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport12.cxx 
b/sw/qa/extras/ooxmlexport/ooxmlexport12.cxx
index ad7297a6db5b..7fabda15147d 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport12.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport12.cxx
@@ -946,19 +946,14 @@ DECLARE_OOXMLEXPORT_EXPORTONLY_TEST(testTdf94628, 
"tdf94628.docx")
     uno::Sequence<beans::PropertyValue> aProps;
     xLevels->getByIndex(0) >>= aProps; // 1st level
 
-    for (int i = 0; i < aProps.getLength(); ++i)
-    {
-        const beans::PropertyValue& rProp = aProps[i];
-        if (rProp.Name == "BulletChar")
-        {
-            // Check for 'BLACK UPPER RIGHT TRIANGLE' (U+25E5) as a bullet
-            CPPUNIT_ASSERT_EQUAL(OUString(u"\u25E5"), 
rProp.Value.get<OUString>());
-            return;
-        }
-    }
-
-    // Shouldn't reach here
-    CPPUNIT_FAIL("Did not find bullet with level 0");
+    OUString sBulletChar = std::find_if(aProps.begin(), aProps.end(),
+                                        [](const beans::PropertyValue& rValue) 
{
+                                            return rValue.Name == "BulletChar";
+                                        })
+                               ->Value.get<OUString>();
+    // Actually for 'BLACK UPPER RIGHT TRIANGLE' is \u25E5
+    // But we use Wingdings 3 font here, so code is different
+    CPPUNIT_ASSERT_EQUAL(OUString(u"\uF07B"), sBulletChar);
 }
 
 DECLARE_OOXMLEXPORT_TEST(testTdf122594, "tdf122594.docx")
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport14.cxx 
b/sw/qa/extras/ooxmlexport/ooxmlexport14.cxx
index 37248db1500c..c59bc16709df 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport14.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport14.cxx
@@ -244,6 +244,22 @@ DECLARE_OOXMLEXPORT_TEST(testTdf121658, "tdf121658.docx")
     assertXPath(pXmlSettings, "/w:settings/w:doNotHyphenateCaps");
 }
 
+DECLARE_OOXMLEXPORT_EXPORTONLY_TEST(testTdf132766, "tdf132766.docx")
+{
+    xmlDocPtr pXmlDoc = parseExport("word/numbering.xml");
+    CPPUNIT_ASSERT(pXmlDoc);
+
+    // Ensure that for list=1 and level=0 we wrote correct bullet char and 
correct font
+    assertXPath(pXmlDoc, 
"//w:numbering/w:abstractNum[@w:abstractNumId='1']/w:lvl[@w:ilvl='0']/w:lvlText",
+                "val", u"\uF0B7");
+    assertXPath(pXmlDoc, 
"//w:numbering/w:abstractNum[@w:abstractNumId='1']/w:lvl[@w:ilvl='0']/w:rPr/w:rFonts",
+                "ascii", "Symbol");
+    assertXPath(pXmlDoc, 
"//w:numbering/w:abstractNum[@w:abstractNumId='1']/w:lvl[@w:ilvl='0']/w:rPr/w:rFonts",
+                "hAnsi", "Symbol");
+    assertXPath(pXmlDoc, 
"//w:numbering/w:abstractNum[@w:abstractNumId='1']/w:lvl[@w:ilvl='0']/w:rPr/w:rFonts",
+                "cs", "Symbol");
+}
+
 DECLARE_OOXMLEXPORT_TEST(testTdf124367, "tdf124367.docx")
 {
     uno::Reference<text::XTextTablesSupplier> xTablesSupplier(mxComponent, 
uno::UNO_QUERY);
diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx 
b/sw/source/filter/ww8/docxattributeoutput.cxx
index 80c79b9a1287..432c7f919039 100644
--- a/sw/source/filter/ww8/docxattributeoutput.cxx
+++ b/sw/source/filter/ww8/docxattributeoutput.cxx
@@ -6871,7 +6871,10 @@ void DocxAttributeOutput::NumberingLevel( sal_uInt8 
nLevel,
                     FSNS( XML_w, XML_cs ), aFamilyName,
                     FSNS( XML_w, XML_hint ), "default" );
         }
-        m_rExport.OutputItemSet( *pOutSet, false, true, 
i18n::ScriptType::LATIN, m_rExport.m_bExportModeRTF );
+        else
+        {
+            m_rExport.OutputItemSet(*pOutSet, false, true, 
i18n::ScriptType::LATIN, m_rExport.m_bExportModeRTF);
+        }
 
         WriteCollectedRunProperties();
 
diff --git a/sw/source/filter/ww8/wrtw8num.cxx 
b/sw/source/filter/ww8/wrtw8num.cxx
index afe0204a48cd..ffd793d6db79 100644
--- a/sw/source/filter/ww8/wrtw8num.cxx
+++ b/sw/source/filter/ww8/wrtw8num.cxx
@@ -451,7 +451,11 @@ void MSWordExportBase::NumberingLevel(
     // #i86652#
     if (rFormat.GetPositionAndSpaceMode() == 
SvxNumberFormat::LABEL_WIDTH_AND_POSITION)
     {
-        nFollow = 2;     // ixchFollow: 0 - tab, 1 - blank, 2 - nothing
+        // <nFollow = 2>, if minimum label width equals 0 and
+        // minimum distance between label and text equals 0
+        nFollow = (rFormat.GetFirstLineOffset() == 0 &&
+            rFormat.GetCharTextDistance() == 0)
+            ? 2 : 0;     // ixchFollow: 0 - tab, 1 - blank, 2 - nothing
     }
     else if (rFormat.GetPositionAndSpaceMode() == 
SvxNumberFormat::LABEL_ALIGNMENT)
     {
@@ -489,44 +493,20 @@ void MSWordExportBase::NumberingLevel(
     const vcl::Font* pBulletFont=nullptr;
     rtl_TextEncoding eChrSet=0;
     FontFamily eFamily=FAMILY_DECORATIVE;
-
     if (!rRule.Get(nLvl).GetListFormat().isEmpty())
     {
-        // We have stored list format, use it
+        // Nothing to construct: we have it already
         sNumStr = rRule.Get(nLvl).GetListFormat();
     }
     else if (SVX_NUM_CHAR_SPECIAL == rFormat.GetNumberingType() ||
         SVX_NUM_BITMAP == rFormat.GetNumberingType())
     {
+        // Use bullet
         sNumStr = OUString(rFormat.GetBulletChar());
-        bWriteBullet = true;
-
-        pBulletFont = rFormat.GetBulletFont();
-        if (!pBulletFont)
-        {
-            pBulletFont = &numfunc::GetDefBulletFont();
-        }
-
-        eChrSet = pBulletFont->GetCharSet();
-        sFontName = pBulletFont->GetFamilyName();
-        eFamily = pBulletFont->GetFamilyType();
-
-        if (IsStarSymbol(sFontName))
-            SubstituteBullet( sNumStr, eChrSet, sFontName );
-
-        // #i86652#
-        if (rFormat.GetPositionAndSpaceMode() ==
-                                SvxNumberFormat::LABEL_WIDTH_AND_POSITION)
-        {
-            // <nFollow = 2>, if minimum label width equals 0 and
-            // minimum distance between label and text equals 0
-            nFollow = (rFormat.GetFirstLineOffset() == 0 &&
-                       rFormat.GetCharTextDistance() == 0)
-                      ? 2 : 0;     // ixchFollow: 0 - tab, 1 - blank, 2 - 
nothing
-        }
     }
     else
     {
+        // Construct list format string from prefix, level numbers and suffix
         if (SVX_NUM_NUMBER_NONE != rFormat.GetNumberingType())
         {
             sal_uInt8* pLvlPos = aNumLvlPos;
@@ -546,16 +526,6 @@ void MSWordExportBase::NumberingLevel(
                     sNumStr = sNumStr.replaceAt( nFnd, 1, 
OUString(static_cast<char>(i)) );
                 }
             }
-            // #i86652#
-            if (rFormat.GetPositionAndSpaceMode() ==
-                                    SvxNumberFormat::LABEL_WIDTH_AND_POSITION)
-            {
-                // <nFollow = 2>, if minimum label width equals 0 and
-                // minimum distance between label and text equals 0
-                nFollow = (rFormat.GetFirstLineOffset() == 0 &&
-                           rFormat.GetCharTextDistance() == 0)
-                          ? 2 : 0;     // ixchFollow: 0 - tab, 1 - blank, 2 - 
nothing
-            }
         }
 
         if (!rFormat.GetPrefix().isEmpty())
@@ -563,6 +533,25 @@ void MSWordExportBase::NumberingLevel(
         sNumStr += rFormat.GetSuffix();
     }
 
+    if (SVX_NUM_CHAR_SPECIAL == rFormat.GetNumberingType() ||
+        SVX_NUM_BITMAP == rFormat.GetNumberingType())
+    {
+        bWriteBullet = true;
+
+        pBulletFont = rFormat.GetBulletFont();
+        if (!pBulletFont)
+        {
+            pBulletFont = &numfunc::GetDefBulletFont();
+        }
+
+        eChrSet = pBulletFont->GetCharSet();
+        sFontName = pBulletFont->GetFamilyName();
+        eFamily = pBulletFont->GetFamilyType();
+
+        if (IsStarSymbol(sFontName))
+            SubstituteBullet(sNumStr, eChrSet, sFontName);
+    }
+
     // Attributes of the numbering
     std::unique_ptr<wwFont> pPseudoFont;
     const SfxItemSet* pOutSet = nullptr;
_______________________________________________
Libreoffice-commits mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to