summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustin Luth <justin_luth@sil.org>2015-09-10 11:41:11 +0300
committerJustin Luth <justin_luth@sil.org>2015-10-19 04:35:55 +0000
commit664197d95becd516c3dac25a50439078ba61e051 (patch)
tree85199c219b30c973a1c151b360c490fcfd16bce3
parent51df957e1a40d2f3511345c1600c05dd35f34b6b (diff)
tdf#36117 .docx preserve page vertical alignment after RT
Change-Id: I90174f7a98e9bd01f45ee668f127356ff3e0e4ed Reviewed-on: https://gerrit.libreoffice.org/18481 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Justin Luth <justin_luth@sil.org>
-rw-r--r--sw/qa/extras/ooxmlexport/data/tdf36117_verticalAdjustment.docxbin0 -> 13309 bytes
-rw-r--r--sw/qa/extras/ooxmlexport/ooxmlexport7.cxx27
-rw-r--r--sw/source/core/unocore/unomap.cxx1
-rw-r--r--sw/source/core/unocore/unostyle.cxx15
-rw-r--r--sw/source/filter/ww8/docxattributeoutput.cxx21
-rw-r--r--sw/source/filter/ww8/docxattributeoutput.hxx3
-rw-r--r--writerfilter/source/dmapper/DomainMapper.cxx25
-rw-r--r--writerfilter/source/dmapper/PropertyIds.cxx1
-rw-r--r--writerfilter/source/dmapper/PropertyIds.hxx1
9 files changed, 94 insertions, 0 deletions
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 000000000000..70fdec72dde0
--- /dev/null
+++ b/sw/qa/extras/ooxmlexport/data/tdf36117_verticalAdjustment.docx
Binary files differ
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport7.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport7.cxx
index f95f5d28a0fb..0b82bcf3654d 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 5d118c6d6ab4..4f38b2567fa8 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 3f99c3c2a49f..d297a262bb5b 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 24b943d0af2a..55d1d6cd09cd 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 07e293aa389f..c2ed3795d4a2 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 34b84654e929..4132d825d0bc 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 e8b85d745432..426987fb635c 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 75a2a9b70ca0..cf3abe89ce97 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