sw/source/filter/ww8/docxattributeoutput.cxx | 118 +++++++++++++-------------- sw/source/filter/ww8/docxattributeoutput.hxx | 3 2 files changed, 64 insertions(+), 57 deletions(-)
New commits: commit 2e32184b5862e54f7dff17d456235f730c1ff5ea Author: Miklos Vajna <vmik...@collabora.co.uk> Date: Wed Dec 11 11:43:29 2013 +0100 VML export: factor out TextFrame handling code to its own method Change-Id: I2158aed3dfe71370add52759976232647286fa7e diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx index 1209e43..1da02b0 100644 --- a/sw/source/filter/ww8/docxattributeoutput.cxx +++ b/sw/source/filter/ww8/docxattributeoutput.cxx @@ -366,6 +366,66 @@ bool lcl_checkFrameBtlr(SwNode* pStartNode, sax_fastparser::FastAttributeList* p return false; } +void DocxAttributeOutput::WriteVMLTextFrame(sw::Frame* pParentFrame) +{ + const SwFrmFmt& rFrmFmt = pParentFrame->GetFrmFmt( ); + const SwNodeIndex* pNodeIndex = rFrmFmt.GetCntnt().GetCntntIdx(); + + sal_uLong nStt = pNodeIndex ? pNodeIndex->GetIndex()+1 : 0; + sal_uLong nEnd = pNodeIndex ? pNodeIndex->GetNode().EndOfSectionIndex() : 0; + + //Save data here and restore when out of scope + ExportDataSaveRestore aDataGuard(m_rExport, nStt, nEnd, pParentFrame); + + // When a frame has some low height, but automatically expanded due + // to lots of contents, this size contains the real size. + const Size aSize = pParentFrame->GetSize(); + m_pFlyFrameSize = &aSize; + + m_bTextFrameSyntax = true; + m_pFlyAttrList = m_pSerializer->createAttrList( ); + m_pTextboxAttrList = m_pSerializer->createAttrList(); + m_aTextFrameStyle = "position:absolute"; + m_rExport.OutputFormat( pParentFrame->GetFrmFmt(), false, false, true ); + m_pFlyAttrList->add(XML_style, m_aTextFrameStyle.makeStringAndClear()); + XFastAttributeListRef xFlyAttrList( m_pFlyAttrList ); + m_pFlyAttrList = NULL; + m_bFrameBtLr = lcl_checkFrameBtlr(m_rExport.pDoc->GetNodes()[nStt], m_pTextboxAttrList); + XFastAttributeListRef xTextboxAttrList(m_pTextboxAttrList); + m_pTextboxAttrList = NULL; + m_bTextFrameSyntax = false; + m_pFlyFrameSize = 0; + m_rExport.mpParentFrame = NULL; + + m_pSerializer->startElementNS( XML_w, XML_r, FSEND ); + m_pSerializer->startElementNS( XML_w, XML_pict, FSEND ); + m_pSerializer->startElementNS( XML_v, XML_rect, xFlyAttrList ); + lcl_TextFrameShadow(m_pSerializer, rFrmFmt); + if (m_pFlyFillAttrList) + { + XFastAttributeListRef xFlyFillAttrList(m_pFlyFillAttrList); + m_pFlyFillAttrList = NULL; + m_pSerializer->singleElementNS(XML_v, XML_fill, xFlyFillAttrList); + } + m_pSerializer->startElementNS( XML_v, XML_textbox, xTextboxAttrList ); + m_pSerializer->startElementNS( XML_w, XML_txbxContent, FSEND ); + m_rExport.WriteText( ); + m_pSerializer->endElementNS( XML_w, XML_txbxContent ); + m_pSerializer->endElementNS( XML_v, XML_textbox ); + + if (m_pFlyWrapAttrList) + { + XFastAttributeListRef xFlyWrapAttrList(m_pFlyWrapAttrList); + m_pFlyWrapAttrList = NULL; + m_pSerializer->singleElementNS(XML_w10, XML_wrap, xFlyWrapAttrList); + } + + m_pSerializer->endElementNS( XML_v, XML_rect ); + m_pSerializer->endElementNS( XML_w, XML_pict ); + m_pSerializer->endElementNS( XML_w, XML_r ); + m_bFrameBtLr = false; +} + void DocxAttributeOutput::EndParagraph( ww8::WW8TableNodeInfoInner::Pointer_t pTextNodeInfoInner ) { // write the paragraph properties + the run, already in the correct order @@ -379,63 +439,7 @@ void DocxAttributeOutput::EndParagraph( ww8::WW8TableNodeInfoInner::Pointer_t pT for (size_t i = 0; i < aParentFrames.size(); ++i) { sw::Frame* pParentFrame = &aParentFrames[i]; - - const SwFrmFmt& rFrmFmt = pParentFrame->GetFrmFmt( ); - const SwNodeIndex* pNodeIndex = rFrmFmt.GetCntnt().GetCntntIdx(); - - sal_uLong nStt = pNodeIndex ? pNodeIndex->GetIndex()+1 : 0; - sal_uLong nEnd = pNodeIndex ? pNodeIndex->GetNode().EndOfSectionIndex() : 0; - - //Save data here and restore when out of scope - ExportDataSaveRestore aDataGuard(m_rExport, nStt, nEnd, pParentFrame); - - // When a frame has some low height, but automatically expanded due - // to lots of contents, this size contains the real size. - const Size aSize = pParentFrame->GetSize(); - m_pFlyFrameSize = &aSize; - - m_bTextFrameSyntax = true; - m_pFlyAttrList = m_pSerializer->createAttrList( ); - m_pTextboxAttrList = m_pSerializer->createAttrList(); - m_aTextFrameStyle = "position:absolute"; - m_rExport.OutputFormat( pParentFrame->GetFrmFmt(), false, false, true ); - m_pFlyAttrList->add(XML_style, m_aTextFrameStyle.makeStringAndClear()); - XFastAttributeListRef xFlyAttrList( m_pFlyAttrList ); - m_pFlyAttrList = NULL; - m_bFrameBtLr = lcl_checkFrameBtlr(m_rExport.pDoc->GetNodes()[nStt], m_pTextboxAttrList); - XFastAttributeListRef xTextboxAttrList(m_pTextboxAttrList); - m_pTextboxAttrList = NULL; - m_bTextFrameSyntax = false; - m_pFlyFrameSize = 0; - m_rExport.mpParentFrame = NULL; - - m_pSerializer->startElementNS( XML_w, XML_r, FSEND ); - m_pSerializer->startElementNS( XML_w, XML_pict, FSEND ); - m_pSerializer->startElementNS( XML_v, XML_rect, xFlyAttrList ); - lcl_TextFrameShadow(m_pSerializer, rFrmFmt); - if (m_pFlyFillAttrList) - { - XFastAttributeListRef xFlyFillAttrList(m_pFlyFillAttrList); - m_pFlyFillAttrList = NULL; - m_pSerializer->singleElementNS(XML_v, XML_fill, xFlyFillAttrList); - } - m_pSerializer->startElementNS( XML_v, XML_textbox, xTextboxAttrList ); - m_pSerializer->startElementNS( XML_w, XML_txbxContent, FSEND ); - m_rExport.WriteText( ); - m_pSerializer->endElementNS( XML_w, XML_txbxContent ); - m_pSerializer->endElementNS( XML_v, XML_textbox ); - - if (m_pFlyWrapAttrList) - { - XFastAttributeListRef xFlyWrapAttrList(m_pFlyWrapAttrList); - m_pFlyWrapAttrList = NULL; - m_pSerializer->singleElementNS(XML_w10, XML_wrap, xFlyWrapAttrList); - } - - m_pSerializer->endElementNS( XML_v, XML_rect ); - m_pSerializer->endElementNS( XML_w, XML_pict ); - m_pSerializer->endElementNS( XML_w, XML_r ); - m_bFrameBtLr = false; + WriteVMLTextFrame(pParentFrame); } m_pSerializer->endElementNS( XML_w, XML_p ); diff --git a/sw/source/filter/ww8/docxattributeoutput.hxx b/sw/source/filter/ww8/docxattributeoutput.hxx index 90c7701..f3bb789 100644 --- a/sw/source/filter/ww8/docxattributeoutput.hxx +++ b/sw/source/filter/ww8/docxattributeoutput.hxx @@ -379,6 +379,9 @@ private: /// Writes shape in both DML and VML format. void WriteDMLAndVMLDrawing( const SdrObject* sdrObj, const SwFrmFmt& rFrmFmt,const Point& rNdTopLeft ); + /// Writes text frame in VML format. + void WriteVMLTextFrame(sw::Frame* pParentFrame); + void InitTableHelper( ww8::WW8TableNodeInfoInner::Pointer_t pTableTextNodeInfoInner ); void StartTable( ww8::WW8TableNodeInfoInner::Pointer_t pTableTextNodeInfoInner ); void StartTableRow( ww8::WW8TableNodeInfoInner::Pointer_t pTableTextNodeInfoInner ); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits