diff options
author | Miklos Vajna <vmiklos@suse.cz> | 2012-08-13 17:37:46 +0200 |
---|---|---|
committer | Miklos Vajna <vmiklos@suse.cz> | 2012-08-13 17:42:54 +0200 |
commit | 9c374a17fd440865ecceb1867c4142adf3d7fbd3 (patch) | |
tree | a45cce294cd293f1d80424c2a834f63a4c467cb7 /sw | |
parent | 7fd28f4de77d12acb68a6b7f5fb578fedd8b76bb (diff) |
fdo#53113 docx export: initial shape text support
Text is written, but paragraph and character properties are not yet
handled.
Change-Id: I828f8b6096bde000347066b23925376f6f945dbc
Diffstat (limited to 'sw')
-rw-r--r-- | sw/source/filter/ww8/docxattributeoutput.cxx | 46 | ||||
-rw-r--r-- | sw/source/filter/ww8/docxattributeoutput.hxx | 6 | ||||
-rw-r--r-- | sw/source/filter/ww8/docxexport.cxx | 2 |
3 files changed, 51 insertions, 3 deletions
diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx index 8a93e1d0b6ee..da3c926f9ade 100644 --- a/sw/source/filter/ww8/docxattributeoutput.cxx +++ b/sw/source/filter/ww8/docxattributeoutput.cxx @@ -36,7 +36,6 @@ #include <oox/token/tokens.hxx> #include <oox/export/drawingml.hxx> #include <oox/export/utils.hxx> -#include <oox/export/vmlexport.hxx> #include <oox/mathml/export.hxx> #include <i18npool/mslangid.hxx> @@ -85,6 +84,7 @@ #include <editeng/blnkitem.hxx> #include <editeng/charhiddenitem.hxx> #include <editeng/opaqitem.hxx> +#include <editeng/editobj.hxx> #include <svx/svdmodel.hxx> #include <svx/svdobj.hxx> @@ -2368,6 +2368,50 @@ void DocxAttributeOutput::OutputFlyFrame_Impl( const sw::Frame &rFrame, const Po m_pSerializer->mergeTopMarks( sax_fastparser::MERGE_MARKS_POSTPONE ); } +void DocxAttributeOutput::WriteOutliner(const OutlinerParaObject& rParaObj) +{ + const EditTextObject& rEditObj = rParaObj.GetTextObject(); + MSWord_SdrAttrIter aAttrIter( m_rExport, rEditObj, TXT_HFTXTBOX ); + + sal_uInt16 nPara = rEditObj.GetParagraphCount(); + + m_pSerializer->startElementNS( XML_w, XML_textbox, FSEND ); + m_pSerializer->startElementNS( XML_w, XML_txbxContent, FSEND ); + for (sal_uInt16 n = 0; n < nPara; ++n) + { + if( n ) + aAttrIter.NextPara( n ); + + String aStr( rEditObj.GetText( n )); + xub_StrLen nAktPos = 0; + xub_StrLen nEnd = aStr.Len(); + + m_pSerializer->startElementNS( XML_w, XML_p, FSEND ); + do { + xub_StrLen nNextAttr = aAttrIter.WhereNext(); + if( nNextAttr > nEnd ) + nNextAttr = nEnd; + + m_pSerializer->startElementNS( XML_w, XML_r, FSEND ); + bool bTxtAtr = aAttrIter.IsTxtAttr( nAktPos ); + if( !bTxtAtr ) + { + String aOut( aStr.Copy( nAktPos, nNextAttr - nAktPos ) ); + RunText(aOut); + } + + m_pSerializer->endElementNS( XML_w, XML_r ); + + nAktPos = nNextAttr; + aAttrIter.NextPos(); + } + while( nAktPos < nEnd ); + m_pSerializer->endElementNS( XML_w, XML_p ); + } + m_pSerializer->endElementNS( XML_w, XML_txbxContent ); + m_pSerializer->endElementNS( XML_w, XML_textbox ); +} + void DocxAttributeOutput::StartStyle( const String& rName, bool bPapFmt, sal_uInt16 nBase, sal_uInt16 nNext, sal_uInt16 /*nWwId*/, sal_uInt16 nId, bool bAutoUpdate ) { diff --git a/sw/source/filter/ww8/docxattributeoutput.hxx b/sw/source/filter/ww8/docxattributeoutput.hxx index 176100953fa7..f549784e7ae4 100644 --- a/sw/source/filter/ww8/docxattributeoutput.hxx +++ b/sw/source/filter/ww8/docxattributeoutput.hxx @@ -33,6 +33,7 @@ #include <vector> #include <boost/scoped_ptr.hpp> +#include <oox/export/vmlexport.hxx> class SwGrfNode; class SdrObject; @@ -59,7 +60,7 @@ enum DocxColBreakStatus }; /// The class that has handlers for various resource types when exporting as DOCX. -class DocxAttributeOutput : public AttributeOutputBase +class DocxAttributeOutput : public AttributeOutputBase, public oox::vml::VMLTextExport { public: /// Export the state of RTL/CJK. @@ -633,6 +634,9 @@ public: bool HasPostitFields() const; void WritePostitFields(); + + /// VMLTextExport + virtual void WriteOutliner(const OutlinerParaObject& rParaObj); }; #endif // _DOCXATTRIBUTEOUTPUT_HXX_ diff --git a/sw/source/filter/ww8/docxexport.cxx b/sw/source/filter/ww8/docxexport.cxx index 79ab70e16f7d..b19b47b7aef3 100644 --- a/sw/source/filter/ww8/docxexport.cxx +++ b/sw/source/filter/ww8/docxexport.cxx @@ -813,7 +813,7 @@ DocxExport::DocxExport( DocxExportFilter *pFilter, SwDoc *pDocument, SwPaM *pCur m_pAttrOutput = new DocxAttributeOutput( *this, m_pDocumentFS, m_pDrawingML ); // the related VMLExport - m_pVMLExport = new VMLExport( m_pDocumentFS ); + m_pVMLExport = new VMLExport( m_pDocumentFS, m_pAttrOutput ); } DocxExport::~DocxExport() |