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

Justin Luth justin_luth at sil.org
Tue May 16 12:53:31 UTC 2017


 sw/qa/extras/ooxmlexport/ooxmlexport9.cxx    |   18 ++++++++++++++++++
 sw/qa/extras/ooxmlimport/ooxmlimport.cxx     |    7 -------
 sw/source/filter/ww8/docxattributeoutput.cxx |    7 +++++--
 3 files changed, 23 insertions(+), 9 deletions(-)

New commits:
commit c7e31f492140a064d9c152583bda3d111c8bee83
Author: Justin Luth <justin_luth at sil.org>
Date:   Mon May 15 09:28:59 2017 +0300

    tdf#107801 docx export: support w:kern
    
    Writer only enables or disables pair kerning (autokern).
    Word uses a minimum font size to determine which characters
    to kern. Since these documents are round-tripping through
    Writer, and every size is kerned by Writer, the minimum size is
    forced to 1pt and the original minimum font size is lost.
    
    This is a followup to commit 38b0c24fa5cbb4246e03d77ac022dfdc9fdede03
    for related tdf#105454 DOCX import: fix unwanted enabled-by-default
    kerning.
    
    Tested in Word 2003, 2007, 2013.
    
    Change-Id: I7678a544f455fd06bec5e7d864b5c27ab26bf6d3
    Reviewed-on: https://gerrit.libreoffice.org/37574
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Justin Luth <justin_luth at sil.org>
    Reviewed-by: Miklos Vajna <vmiklos at collabora.co.uk>

diff --git a/sw/qa/extras/ooxmlimport/data/kern.docx b/sw/qa/extras/ooxmlexport/data/kern.docx
similarity index 100%
rename from sw/qa/extras/ooxmlimport/data/kern.docx
rename to sw/qa/extras/ooxmlexport/data/kern.docx
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport9.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport9.cxx
index 7370fe83da3d..73077b4fe40a 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport9.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport9.cxx
@@ -91,10 +91,25 @@ DECLARE_OOXMLEXPORT_TEST(testTdf106970, "tdf106970.docx")
     CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(494), getProperty<sal_Int32>(getParagraph(4), "ParaBottomMargin"));
 }
 
+DECLARE_OOXMLEXPORT_TEST(testKern, "kern.docx")
+{
+    CPPUNIT_ASSERT(getProperty<bool>(getRun(getParagraph(1), 1), "CharAutoKerning"));
+    // This failed: kerning was also enabled for the second paragraph.
+    CPPUNIT_ASSERT(!getProperty<bool>(getRun(getParagraph(2), 1), "CharAutoKerning"));
+
+    uno::Reference<beans::XPropertySet> xStyle(getStyles("ParagraphStyles")->getByName("Default Style"), uno::UNO_QUERY);
+    //tdf107801: kerning normally isn't enabled by default for .docx
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("AutoKern should be false", false, getProperty<bool>(xStyle, "CharAutoKerning"));
+}
+
 DECLARE_OOXMLEXPORT_TEST(testTdf89377, "tdf89377_tableWithBreakBeforeParaStyle.docx")
 {
     // the paragraph style should set table's text-flow break-before-page
     CPPUNIT_ASSERT_EQUAL( 3, getPages() );
+
+    uno::Reference<beans::XPropertySet> xStyle(getStyles("ParagraphStyles")->getByName("Default Style"), uno::UNO_QUERY);
+    //tdf107801: kerning info wasn't exported previously.
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("AutoKern should be true", true, getProperty<bool>(xStyle, "CharAutoKerning"));
 }
 
 DECLARE_OOXMLEXPORT_TEST(testTdf104420, "tdf104420_lostParagraph.docx")
@@ -358,6 +373,9 @@ DECLARE_OOXMLEXPORT_TEST(testTdf103651, "tdf103651.docx")
     xTextField->getPropertyValue("Content") >>= sContent;
     // Comment in the first paragraph should not have smiley ( 0xf04a ).
     CPPUNIT_ASSERT_EQUAL( sal_Int32( -1 ) , sContent.indexOf( u'\xf04a' ));
+
+    // this document has a w:kern setting in the DocDefault character properties.  Ensure it applies.
+    CPPUNIT_ASSERT(getProperty<bool>(getRun(getParagraph(1), 1), "CharAutoKerning"));
 }
 
 DECLARE_OOXMLEXPORT_TEST(testTdf99227, "tdf99227.docx")
diff --git a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
index a314b212b81a..87ccce61d9b5 100644
--- a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
+++ b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
@@ -669,13 +669,6 @@ DECLARE_OOXMLIMPORT_TEST(testN820504, "n820504.docx")
     CPPUNIT_ASSERT_EQUAL(text::TextContentAnchorType_AT_CHARACTER, getProperty<text::TextContentAnchorType>(getShape(1), "AnchorType"));
 }
 
-DECLARE_OOXMLIMPORT_TEST(testKern, "kern.docx")
-{
-    CPPUNIT_ASSERT(getProperty<bool>(getRun(getParagraph(1), 1), "CharAutoKerning"));
-    // This failed: kerning was also enabled for the second paragraph.
-    CPPUNIT_ASSERT(!getProperty<bool>(getRun(getParagraph(2), 1), "CharAutoKerning"));
-}
-
 DECLARE_OOXMLIMPORT_TEST(testFdo43641, "fdo43641.docx")
 {
     uno::Reference<container::XIndexAccess> xGroupShape(getShape(1), uno::UNO_QUERY);
diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx
index 83dfe43b5372..f82667c6ed2c 100644
--- a/sw/source/filter/ww8/docxattributeoutput.cxx
+++ b/sw/source/filter/ww8/docxattributeoutput.cxx
@@ -6483,9 +6483,12 @@ void DocxAttributeOutput::CharWeight( const SvxWeightItem& rWeight )
         m_pSerializer->singleElementNS( XML_w, XML_b, FSNS( XML_w, XML_val ), "false", FSEND );
 }
 
-void DocxAttributeOutput::CharAutoKern( const SvxAutoKernItem& )
+void DocxAttributeOutput::CharAutoKern( const SvxAutoKernItem& rAutoKern )
 {
-    SAL_INFO("sw.ww8", "TODO DocxAttributeOutput::CharAutoKern()" );
+    // auto kerning is bound to a minimum font size in Word - but is just a boolean in Writer :-(
+    // kerning is based on half-point sizes, so 2 enables kerning for fontsize 1pt or higher. (1 is treated as size 12, and 0 is treated as disabled.)
+    const OString sFontSize = OString::number( (sal_uInt32) rAutoKern.GetValue() * 2 );
+    m_pSerializer->singleElementNS(XML_w, XML_kern, FSNS( XML_w, XML_val ), sFontSize.getStr(), FSEND );
 }
 
 void DocxAttributeOutput::CharAnimatedText( const SvxBlinkItem& rBlink )


More information about the Libreoffice-commits mailing list