diff options
author | Miklos Vajna <vmiklos@collabora.co.uk> | 2014-10-01 15:58:11 +0200 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.co.uk> | 2014-10-01 16:15:37 +0200 |
commit | d691156db9b3348371c14b4f17d242beff3e9f47 (patch) | |
tree | b37b807efbad1c66aa64bd0996916cd6da14f561 /sw | |
parent | be5b4223c803505064c6d82a3d209da560c9838b (diff) |
DocxAttributeOutput::CharEscapement: avoid writing <w:sz> twice
As comments-nested.odt shows, that would lead to invalid output.
Change-Id: I5c8f7ae0df60f80b0e58f7007c2f7f5e2a1cee87
Diffstat (limited to 'sw')
-rw-r--r-- | sw/qa/extras/ooxmlexport/ooxmlexport2.cxx | 6 | ||||
-rw-r--r-- | sw/source/filter/ww8/docxattributeoutput.cxx | 2 | ||||
-rw-r--r-- | sw/source/filter/ww8/wrtw8esh.cxx | 10 | ||||
-rw-r--r-- | sw/source/filter/ww8/wrtww8.cxx | 1 | ||||
-rw-r--r-- | sw/source/filter/ww8/wrtww8.hxx | 2 |
5 files changed, 18 insertions, 3 deletions
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport2.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport2.cxx index 32a63d5de784..2086d4aff4f2 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport2.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport2.cxx @@ -81,7 +81,11 @@ protected: bool mustValidate(const char* filename) const SAL_OVERRIDE { const char* aWhitelist[] = { - "zoom.docx" + "page-graphic-background.odt", + "zoom.docx", + "empty.odt", + "fdo38244.docx", + "comments-nested.odt" }; std::vector<const char*> vWhitelist(aWhitelist, aWhitelist + SAL_N_ELEMENTS(aWhitelist)); diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx index f206acf805cc..da0c48c84888 100644 --- a/sw/source/filter/ww8/docxattributeoutput.cxx +++ b/sw/source/filter/ww8/docxattributeoutput.cxx @@ -6062,7 +6062,7 @@ void DocxAttributeOutput::CharEscapement( const SvxEscapementItem& rEscapement ) m_pSerializer->singleElementNS( XML_w, XML_position, FSNS( XML_w, XML_val ), sPos.getStr( ), FSEND ); - if( 100 != nProp || sIss.match( OString( "baseline" ) ) ) + if( ( 100 != nProp || sIss.match( OString( "baseline" ) ) ) && !m_rExport.mbFontSizeWritten ) { OString sSize = OString::number( ( nHeight * nProp + 500 ) / 1000 ); m_pSerializer->singleElementNS( XML_w, XML_sz, diff --git a/sw/source/filter/ww8/wrtw8esh.cxx b/sw/source/filter/ww8/wrtw8esh.cxx index 4d526502daa7..1c2f3ff8bf32 100644 --- a/sw/source/filter/ww8/wrtw8esh.cxx +++ b/sw/source/filter/ww8/wrtw8esh.cxx @@ -1174,6 +1174,8 @@ void MSWord_SdrAttrIter::OutAttr( sal_Int32 nSwPos ) const SfxItemPool& rDstPool = m_rExport.pDoc->GetAttrPool(); nTmpSwPos = nSwPos; + // Did we already produce a <w:sz> element? + m_rExport.mbFontSizeWritten = false; for(std::vector<EECharAttrib>::const_iterator i = aTxtAtrArr.begin(); i < aTxtAtrArr.end(); ++i) { if (nSwPos >= i->nStart && nSwPos < i->nEnd) @@ -1201,7 +1203,12 @@ void MSWord_SdrAttrIter::OutAttr( sal_Int32 nSwPos ) // use always the SW-Which Id ! SfxPoolItem* pI = i->pAttr->Clone(); pI->SetWhich( nWhich ); - m_rExport.AttrOutput().OutputItem( *pI ); + // Will this item produce a <w:sz> element? + bool bFontSizeItem = nWhich == RES_CHRATR_FONTSIZE || nWhich == RES_CHRATR_CJK_FONTSIZE; + if (!m_rExport.mbFontSizeWritten || !bFontSizeItem) + m_rExport.AttrOutput().OutputItem( *pI ); + if (bFontSizeItem) + m_rExport.mbFontSizeWritten = true; delete pI; } } @@ -1210,6 +1217,7 @@ void MSWord_SdrAttrIter::OutAttr( sal_Int32 nSwPos ) if( nSwPos < i->nStart ) break; } + m_rExport.mbFontSizeWritten = false; nTmpSwPos = 0; // HasTextItem nur in dem obigen Bereich erlaubt m_rExport.pOutFmtNode = pOldMod; diff --git a/sw/source/filter/ww8/wrtww8.cxx b/sw/source/filter/ww8/wrtww8.cxx index eeda7ee6d2da..e64c9dd488ab 100644 --- a/sw/source/filter/ww8/wrtww8.cxx +++ b/sw/source/filter/ww8/wrtww8.cxx @@ -3523,6 +3523,7 @@ MSWordExportBase::MSWordExportBase( SwDoc *pDocument, SwPaM *pCurrentPam, SwPaM , bHideTabLeaderAndPageNumbers(false) , mbExportModeRTF(false) , mbOutOutlineOnly(false) + , mbFontSizeWritten(false) , pDoc(pDocument) , pCurPam(pCurrentPam) , pOrigPam(pOriginalPam) diff --git a/sw/source/filter/ww8/wrtww8.hxx b/sw/source/filter/ww8/wrtww8.hxx index 811016537574..c72584787293 100644 --- a/sw/source/filter/ww8/wrtww8.hxx +++ b/sw/source/filter/ww8/wrtww8.hxx @@ -551,6 +551,8 @@ public: bool bHideTabLeaderAndPageNumbers : 1 ; // true: the 'z' field of TOC is set. bool mbExportModeRTF; bool mbOutOutlineOnly; // export outline nodes, only (send outline to clipboard/presentation) + /// Is font size written already as part of the current character properties? + bool mbFontSizeWritten; SwDoc *pDoc; SwPaM *pCurPam, *pOrigPam; |