summaryrefslogtreecommitdiff
path: root/sw
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@suse.cz>2012-08-13 17:37:46 +0200
committerMiklos Vajna <vmiklos@suse.cz>2012-08-13 17:42:54 +0200
commit9c374a17fd440865ecceb1867c4142adf3d7fbd3 (patch)
treea45cce294cd293f1d80424c2a834f63a4c467cb7 /sw
parent7fd28f4de77d12acb68a6b7f5fb578fedd8b76bb (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.cxx46
-rw-r--r--sw/source/filter/ww8/docxattributeoutput.hxx6
-rw-r--r--sw/source/filter/ww8/docxexport.cxx2
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()