summaryrefslogtreecommitdiff
path: root/oox/source/export/drawingml.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'oox/source/export/drawingml.cxx')
-rw-r--r--oox/source/export/drawingml.cxx75
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 )