diff options
Diffstat (limited to 'oox/source/export/drawingml.cxx')
-rw-r--r-- | oox/source/export/drawingml.cxx | 75 |
1 files changed, 49 insertions, 26 deletions
diff --git a/oox/source/export/drawingml.cxx b/oox/source/export/drawingml.cxx index bd4c0c1eb644..d9bc62d5f8f0 100644 --- a/oox/source/export/drawingml.cxx +++ b/oox/source/export/drawingml.cxx @@ -1205,7 +1205,8 @@ void DrawingML::WriteShapeTransformation( const Reference< XShape >& rXShape, sa WriteTransformation( Rectangle( Point( aPos.X, aPos.Y ), Size( aSize.Width, aSize.Height ) ), nXmlNamespace, bFlipH, bFlipV, OOX_DRAWINGML_EXPORT_ROTATE_CLOCKWISIFY(nRotation) ); } -void DrawingML::WriteRunProperties( const Reference< XPropertySet >& rRun, bool bIsField, sal_Int32 nElement /*= XML_rPr*/, bool bCheckDirect/* = true */) +void DrawingML::WriteRunProperties( const Reference< XPropertySet >& rRun, bool bIsField, sal_Int32 nElement, bool bCheckDirect, + bool& rbOverridingCharHeight, sal_Int32& rnCharHeight ) { Reference< XPropertySet > rXPropSet( rRun, UNO_QUERY ); Reference< XPropertyState > rXPropState( rRun, UNO_QUERY ); @@ -1222,8 +1223,19 @@ void DrawingML::WriteRunProperties( const Reference< XPropertySet >& rRun, bool sal_Int32 nCharEscapement = 0; sal_Int32 nCharKerning = 0; - if( GETA( CharHeight ) ) + if ( nElement == XML_endParaRPr && rbOverridingCharHeight ) + { + nSize = rnCharHeight; + } + else if( GETA( CharHeight ) ) + { nSize = (sal_Int32) (100*(*o3tl::doAccess<float>(mAny))); + if ( nElement == XML_rPr ) + { + rbOverridingCharHeight = true; + rnCharHeight = nSize; + } + } if( GETA( CharKerning ) ) nCharKerning = (sal_Int32)(*o3tl::doAccess<sal_Int16>(mAny)); @@ -1580,7 +1592,8 @@ OString DrawingML::GetUUID() return OString(str, SAL_N_ELEMENTS(str)); } -void DrawingML::WriteRun( const Reference< XTextRange >& rRun ) +void DrawingML::WriteRun( const Reference< XTextRange >& rRun, + bool& rbOverridingCharHeight, sal_Int32& rnCharHeight) { Reference< XPropertySet > rXPropSet( rRun, UNO_QUERY ); sal_Int16 nLevel = -1; @@ -1619,29 +1632,37 @@ void DrawingML::WriteRun( const Reference< XTextRange >& rRun ) } } - if( ( bWriteField ) ) + if (sText == "\n") { - OString sUUID(GetUUID()); - mpFS->startElementNS( XML_a, XML_fld, - XML_id, sUUID.getStr(), - XML_type, OUStringToOString( sFieldValue, RTL_TEXTENCODING_UTF8 ).getStr(), - FSEND ); + mpFS->singleElementNS( XML_a, XML_br, + FSEND ); } else { - mpFS->startElementNS( XML_a, XML_r, FSEND ); - } + if( ( bWriteField ) ) + { + OString sUUID(GetUUID()); + mpFS->startElementNS( XML_a, XML_fld, + XML_id, sUUID.getStr(), + XML_type, OUStringToOString( sFieldValue, RTL_TEXTENCODING_UTF8 ).getStr(), + FSEND ); + } + else + { + mpFS->startElementNS( XML_a, XML_r, FSEND ); + } - Reference< XPropertySet > xPropSet( rRun, uno::UNO_QUERY ); - WriteRunProperties( xPropSet, bIsURLField ); - mpFS->startElementNS( XML_a, XML_t, FSEND ); - mpFS->writeEscaped( sText ); - mpFS->endElementNS( XML_a, XML_t ); + Reference< XPropertySet > xPropSet( rRun, uno::UNO_QUERY ); + WriteRunProperties( xPropSet, bIsURLField, XML_rPr, true, rbOverridingCharHeight, rnCharHeight ); + mpFS->startElementNS( XML_a, XML_t, FSEND ); + mpFS->writeEscaped( sText ); + mpFS->endElementNS( XML_a, XML_t ); - if( bWriteField ) - mpFS->endElementNS( XML_a, XML_fld ); - else - mpFS->endElementNS( XML_a, XML_r ); + if( bWriteField ) + mpFS->endElementNS( XML_a, XML_fld ); + else + mpFS->endElementNS( XML_a, XML_r ); + } } OUString GetAutoNumType(sal_Int16 nNumberingType, bool bSDot, bool bPBehind, bool bPBoth) @@ -2014,7 +2035,8 @@ void DrawingML::WriteParagraphProperties( const Reference< XTextContent >& rPara } } -void DrawingML::WriteParagraph( const Reference< XTextContent >& rParagraph ) +void DrawingML::WriteParagraph( const Reference< XTextContent >& rParagraph, + bool& rbOverridingCharHeight, sal_Int32& rnCharHeight ) { Reference< XEnumerationAccess > access( rParagraph, UNO_QUERY ); if( !access.is() ) @@ -2026,7 +2048,6 @@ void DrawingML::WriteParagraph( const Reference< XTextContent >& rParagraph ) mpFS->startElementNS( XML_a, XML_p, FSEND ); - bool bPropertiesWritten = false; while( enumeration->hasMoreElements() ) { @@ -2040,11 +2061,11 @@ void DrawingML::WriteParagraph( const Reference< XTextContent >& rParagraph ) WriteParagraphProperties( rParagraph ); bPropertiesWritten = true; } - WriteRun( run ); + WriteRun( run, rbOverridingCharHeight, rnCharHeight ); } } Reference< XPropertySet > rXPropSet( rParagraph, UNO_QUERY ); - WriteRunProperties( rXPropSet , false, XML_endParaRPr, false ); + WriteRunProperties( rXPropSet, false, XML_endParaRPr, false, rbOverridingCharHeight, rnCharHeight ); mpFS->endElementNS( XML_a, XML_p ); } @@ -2215,15 +2236,17 @@ void DrawingML::WriteText( const Reference< XInterface >& rXIface, const OUStrin return; } + bool bOverridingCharHeight = false; + sal_Int32 nCharHeight; + while( enumeration->hasMoreElements() ) { Reference< XTextContent > paragraph; Any any ( enumeration->nextElement() ); if( any >>= paragraph) - WriteParagraph( paragraph ); + WriteParagraph( paragraph, bOverridingCharHeight, nCharHeight ); } - } void DrawingML::WritePresetShape( const char* pShape , std::vector< std::pair<sal_Int32,sal_Int32>> & rAvList ) |