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

Justin Luth justin_luth at sil.org
Sun Oct 18 21:36:19 PDT 2015


 sw/qa/extras/ooxmlexport/data/tdf36117_verticalAdjustment.docx |binary
 sw/qa/extras/ooxmlexport/ooxmlexport7.cxx                      |   27 ++++++++++
 sw/source/core/unocore/unomap.cxx                              |    1 
 sw/source/core/unocore/unostyle.cxx                            |   15 +++++
 sw/source/filter/ww8/docxattributeoutput.cxx                   |   21 +++++++
 sw/source/filter/ww8/docxattributeoutput.hxx                   |    3 +
 writerfilter/source/dmapper/DomainMapper.cxx                   |   25 +++++++++
 writerfilter/source/dmapper/PropertyIds.cxx                    |    1 
 writerfilter/source/dmapper/PropertyIds.hxx                    |    1 
 9 files changed, 94 insertions(+)

New commits:
commit 664197d95becd516c3dac25a50439078ba61e051
Author: Justin Luth <justin_luth at sil.org>
Date:   Thu Sep 10 11:41:11 2015 +0300

    tdf#36117 .docx preserve page vertical alignment after RT
    
    Change-Id: I90174f7a98e9bd01f45ee668f127356ff3e0e4ed
    Reviewed-on: https://gerrit.libreoffice.org/18481
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Justin Luth <justin_luth at sil.org>

diff --git a/sw/qa/extras/ooxmlexport/data/tdf36117_verticalAdjustment.docx b/sw/qa/extras/ooxmlexport/data/tdf36117_verticalAdjustment.docx
new file mode 100644
index 0000000..70fdec7
Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf36117_verticalAdjustment.docx differ
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport7.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport7.cxx
index f95f5d2..0b82bcf 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport7.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport7.cxx
@@ -23,6 +23,7 @@
 #include <com/sun/star/style/LineSpacing.hpp>
 #include <com/sun/star/style/LineSpacingMode.hpp>
 #include <com/sun/star/text/GraphicCrop.hpp>
+#include <pagedesc.hxx>
 
 #include <comphelper/sequenceashashmap.hxx>
 
@@ -1005,6 +1006,32 @@ DECLARE_OOXMLEXPORT_TEST(testExportAdjustmentValue, "tdf91429.docx")
     assertXPath(pXmlDoc,"/w:document/w:body/w:p/w:r[1]/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:spPr/a:prstGeom/a:avLst/a:gd", "fmla", "val 50000");
 }
 
+DECLARE_OOXMLEXPORT_TEST(testTextVerticalAdjustment, "tdf36117_verticalAdjustment.docx")
+{
+    //Preserve the page vertical alignment setting for .docx
+    SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument *>(mxComponent.get());
+    CPPUNIT_ASSERT(pTextDoc);
+    SwDoc* pDoc = pTextDoc->GetDocShell()->GetDoc();
+    CPPUNIT_ASSERT(pDoc);
+
+    SwPageDesc &Desc = pDoc->GetPageDesc( 0 );
+    drawing::TextVerticalAdjust nVA = Desc.GetVerticalAdjustment();
+    CPPUNIT_ASSERT_EQUAL( drawing::TextVerticalAdjust_CENTER, nVA );
+
+    Desc = pDoc->GetPageDesc( 1 );
+    nVA = Desc.GetVerticalAdjustment();
+    CPPUNIT_ASSERT_EQUAL( drawing::TextVerticalAdjust_TOP, nVA );
+
+    Desc = pDoc->GetPageDesc( 2 );
+    nVA = Desc.GetVerticalAdjustment();
+    CPPUNIT_ASSERT_EQUAL( drawing::TextVerticalAdjust_BOTTOM, nVA );
+
+    Desc = pTextDoc->GetDocShell()->GetDoc()->GetPageDesc( 3 );
+    nVA = Desc.GetVerticalAdjustment();
+    CPPUNIT_ASSERT_EQUAL( drawing::TextVerticalAdjust_BLOCK, nVA );
+}
+
+
 DECLARE_OOXMLEXPORT_TEST(testTDF87348, "tdf87348_linkedTextboxes.docx")
 {
     int followCount=0;
diff --git a/sw/source/core/unocore/unomap.cxx b/sw/source/core/unocore/unomap.cxx
index 5d118c6..4f38b25 100644
--- a/sw/source/core/unocore/unomap.cxx
+++ b/sw/source/core/unocore/unomap.cxx
@@ -1033,6 +1033,7 @@ const SfxItemPropertyMapEntry* SwUnoPropertyMapProvider::GetPropertyMapEntries(s
                     { OUString(UNO_NAME_SIZE), SID_ATTR_PAGE_SIZE,  cppu::UnoType<css::awt::Size>::get(),             PROPERTY_NONE,   MID_SIZE_SIZE|CONVERT_TWIPS},
                     { OUString(UNO_NAME_WIDTH), SID_ATTR_PAGE_SIZE,     cppu::UnoType<sal_Int32>::get()  ,         PROPERTY_NONE, MID_SIZE_WIDTH|CONVERT_TWIPS},
                     { OUString(UNO_NAME_HEIGHT), SID_ATTR_PAGE_SIZE,    cppu::UnoType<sal_Int32>::get()  ,         PROPERTY_NONE, MID_SIZE_HEIGHT|CONVERT_TWIPS            },
+                    { OUString(UNO_NAME_TEXT_VERT_ADJUST), RES_TEXT_VERT_ADJUST, cppu::UnoType<css::drawing::TextVerticalAdjust>::get(), PROPERTY_NONE, 0 },
                     { OUString(UNO_NAME_TEXT_COLUMNS), RES_COL,                cppu::UnoType<css::text::XTextColumns>::get(),    PROPERTY_NONE, MID_COLUMNS},
                     { OUString(UNO_NAME_TOP_MARGIN), RES_UL_SPACE,          cppu::UnoType<sal_Int32>::get(), PROPERTY_NONE, MID_UP_MARGIN|CONVERT_TWIPS},
                     { OUString(UNO_NAME_BOTTOM_MARGIN), RES_UL_SPACE,           cppu::UnoType<sal_Int32>::get(), PROPERTY_NONE, MID_LO_MARGIN|CONVERT_TWIPS},
diff --git a/sw/source/core/unocore/unostyle.cxx b/sw/source/core/unocore/unostyle.cxx
index 3f99c3c..d297a26 100644
--- a/sw/source/core/unocore/unostyle.cxx
+++ b/sw/source/core/unocore/unostyle.cxx
@@ -1994,6 +1994,21 @@ static void lcl_SetStyleProperty(const SfxItemPropertySimpleEntry& rEntry,
             bDone = true;
             break;
         }
+        case RES_TEXT_VERT_ADJUST:
+        {
+            if( pDoc )
+            {
+                SwPageDesc* pPageDesc = pDoc->FindPageDesc( rBase.GetOldPageDesc().GetName() );
+                if( pPageDesc )
+                {
+                    drawing::TextVerticalAdjust nVA;
+                    rValue >>= nVA;
+                    pPageDesc->SetVerticalAdjustment( nVA );
+                }
+            }
+            bDone = true;
+            break;
+        }
         case FN_UNO_IS_AUTO_UPDATE:
         {
             bool bAuto = *static_cast<sal_Bool const *>(aValue.getValue());
diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx
index 24b943d..55d1d6c 100644
--- a/sw/source/filter/ww8/docxattributeoutput.cxx
+++ b/sw/source/filter/ww8/docxattributeoutput.cxx
@@ -5762,6 +5762,27 @@ void DocxAttributeOutput::SectionType( sal_uInt8 nBreakCode )
                 FSEND );
 }
 
+void DocxAttributeOutput::TextVerticalAdjustment( const drawing::TextVerticalAdjust nVA )
+{
+    switch( nVA )
+    {
+        case drawing::TextVerticalAdjust_CENTER:
+            m_pSerializer->singleElementNS( XML_w, XML_vAlign,
+                FSNS( XML_w, XML_val ), "center", FSEND );
+            break;
+        case drawing::TextVerticalAdjust_BOTTOM:
+            m_pSerializer->singleElementNS( XML_w, XML_vAlign,
+                FSNS( XML_w, XML_val ), "bottom", FSEND );
+            break;
+        case drawing::TextVerticalAdjust_BLOCK:  //justify
+            m_pSerializer->singleElementNS( XML_w, XML_vAlign,
+                FSNS( XML_w, XML_val ), "both", FSEND );
+            break;
+        default:
+            break;
+    }
+}
+
 void DocxAttributeOutput::StartFont( const OUString& rFamilyName ) const
 {
     m_pSerializer->startElementNS( XML_w, XML_font,
diff --git a/sw/source/filter/ww8/docxattributeoutput.hxx b/sw/source/filter/ww8/docxattributeoutput.hxx
index 07e293a..c2ed379 100644
--- a/sw/source/filter/ww8/docxattributeoutput.hxx
+++ b/sw/source/filter/ww8/docxattributeoutput.hxx
@@ -290,6 +290,9 @@ public:
     /// msword::ColumnBreak or msword::PageBreak
     virtual void SectionBreak( sal_uInt8 nC, const WW8_SepInfo* pSectionInfo = NULL ) override;
 
+    // preserve DOCX page vertical alignment
+    virtual void TextVerticalAdjustment( const drawing::TextVerticalAdjust ) SAL_OVERRIDE;
+
     /// Start of the section properties.
     virtual void StartSection() override;
 
diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx
index 34b8465..4132d82 100644
--- a/writerfilter/source/dmapper/DomainMapper.cxx
+++ b/writerfilter/source/dmapper/DomainMapper.cxx
@@ -31,6 +31,7 @@
 #include <oox/drawingml/drawingmltypes.hxx>
 #include <com/sun/star/document/XDocumentPropertiesSupplier.hpp>
 #include <com/sun/star/document/XOOXMLDocumentPropertiesImporter.hpp>
+#include <com/sun/star/drawing/TextVerticalAdjust.hpp>
 #include <com/sun/star/table/ShadowFormat.hpp>
 #include <com/sun/star/text/HoriOrientation.hpp>
 #include <com/sun/star/text/RelOrientation.hpp>
@@ -2305,7 +2306,31 @@ void DomainMapper::sprmWithProps( Sprm& rSprm, PropertyMapPtr rContext )
         rContext->Insert(PROP_MIRROR_INDENTS, uno::makeAny( nIntValue != 0 ), true, PARA_GRAB_BAG);
     break;
     case NS_ooxml::LN_EG_SectPrContents_formProt: //section protection, only form editing is enabled - unsupported
+    break;
     case NS_ooxml::LN_EG_SectPrContents_vAlign:
+    {
+        OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
+        if( pSectionContext )
+        {
+            drawing::TextVerticalAdjust nVA = drawing::TextVerticalAdjust_TOP;
+            switch( nIntValue )
+            {
+                case NS_ooxml::LN_Value_ST_VerticalJc_center: //92367
+                    nVA = drawing::TextVerticalAdjust_CENTER;
+                    break;
+                case NS_ooxml::LN_Value_ST_VerticalJc_both:   //92368 - justify
+                    nVA = drawing::TextVerticalAdjust_BLOCK;
+                    break;
+                case NS_ooxml::LN_Value_ST_VerticalJc_bottom: //92369
+                    nVA = drawing::TextVerticalAdjust_BOTTOM;
+                    break;
+                default:
+                    break;
+            }
+            pSectionContext->Insert( PROP_TEXT_VERTICAL_ADJUST, uno::makeAny( nVA ), true, PARA_GRAB_BAG );
+        }
+    }
+    break;
     case NS_ooxml::LN_EG_RPrBase_fitText:
     break;
     case NS_ooxml::LN_ffdata:
diff --git a/writerfilter/source/dmapper/PropertyIds.cxx b/writerfilter/source/dmapper/PropertyIds.cxx
index e8b85d7..426987f 100644
--- a/writerfilter/source/dmapper/PropertyIds.cxx
+++ b/writerfilter/source/dmapper/PropertyIds.cxx
@@ -277,6 +277,7 @@ OUString getPropertyName( PropertyIds eId )
         case PROP_WIDTH_TYPE :    sName = "WidthType"; break;
         case PROP_TBL_LOOK : sName = "TblLook"; break;
         case PROP_TEXT_RANGE:    sName = "TextRange"; break;
+        case PROP_TEXT_VERTICAL_ADJUST     :    sName = "TextVerticalAdjust"; break;
         case PROP_SERVICE_CHAR_STYLE       :    sName = "com.sun.star.style.CharacterStyle"; break;
         case PROP_SERVICE_PARA_STYLE       :    sName = "com.sun.star.style.ParagraphStyle"; break;
         case PROP_CHARACTER_STYLES :    sName = "CharacterStyles"; break;
diff --git a/writerfilter/source/dmapper/PropertyIds.hxx b/writerfilter/source/dmapper/PropertyIds.hxx
index 75a2a9b..cf3abe8 100644
--- a/writerfilter/source/dmapper/PropertyIds.hxx
+++ b/writerfilter/source/dmapper/PropertyIds.hxx
@@ -286,6 +286,7 @@ enum PropertyIds
         ,PROP_TEXT
         ,PROP_TEXT_COLUMNS
         ,PROP_TEXT_RANGE
+        ,PROP_TEXT_VERTICAL_ADJUST
         ,PROP_TITLE
         ,PROP_TOKEN_CHAPTER_INFO
         ,PROP_TOKEN_HYPERLINK_END


More information about the Libreoffice-commits mailing list