summaryrefslogtreecommitdiff
path: root/sw
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.co.uk>2014-10-01 15:58:11 +0200
committerMiklos Vajna <vmiklos@collabora.co.uk>2014-10-01 16:15:37 +0200
commitd691156db9b3348371c14b4f17d242beff3e9f47 (patch)
treeb37b807efbad1c66aa64bd0996916cd6da14f561 /sw
parentbe5b4223c803505064c6d82a3d209da560c9838b (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.cxx6
-rw-r--r--sw/source/filter/ww8/docxattributeoutput.cxx2
-rw-r--r--sw/source/filter/ww8/wrtw8esh.cxx10
-rw-r--r--sw/source/filter/ww8/wrtww8.cxx1
-rw-r--r--sw/source/filter/ww8/wrtww8.hxx2
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;