summaryrefslogtreecommitdiff
path: root/sw/source/filter/ww8/wrtww8.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sw/source/filter/ww8/wrtww8.cxx')
-rw-r--r--sw/source/filter/ww8/wrtww8.cxx1338
1 files changed, 741 insertions, 597 deletions
diff --git a/sw/source/filter/ww8/wrtww8.cxx b/sw/source/filter/ww8/wrtww8.cxx
index d8e4241422c8..f56a04de65a4 100644
--- a/sw/source/filter/ww8/wrtww8.cxx
+++ b/sw/source/filter/ww8/wrtww8.cxx
@@ -37,7 +37,6 @@
#include <docsh.hxx>
#include <drawdoc.hxx>
-#include <unotools/fltrcfg.hxx>
#include <sot/storage.hxx>
#include <sfx2/docinf.hxx>
#include <editeng/tstpitem.hxx>
@@ -87,6 +86,7 @@
#include <strings.hrc>
#include <fmtline.hxx>
#include <fmtfsize.hxx>
+#include <formatflysplit.hxx>
#include "sprmids.hxx"
#include <comphelper/sequenceashashmap.hxx>
@@ -116,6 +116,9 @@
#include <rdfhelper.hxx>
#include <fmtclbl.hxx>
#include <iodetect.hxx>
+#include <fmtwrapinfluenceonobjpos.hxx>
+#include <officecfg/Office/Common.hxx>
+#include <fmtanchr.hxx>
using namespace css;
using namespace sw::util;
@@ -125,15 +128,15 @@ using namespace sw::types;
*/
class WW8_WrFkp
{
- sal_uInt8* pFkp; // Fkp total ( first and only FCs and Sprms )
- sal_uInt8* pOfs; // pointer to the offset area, later copied to pFkp
- ePLCFT ePlc;
- short nStartGrp; // from here on grpprls
- short nOldStartGrp;
- sal_uInt8 nItemSize;
- sal_uInt8 nIMax; // number of entry pairs
- sal_uInt8 nOldVarLen;
- bool bCombined; // true : paste not allowed
+ sal_uInt8* m_pFkp; // Fkp total ( first and only FCs and Sprms )
+ sal_uInt8* m_pOfs; // pointer to the offset area, later copied to pFkp
+ ePLCFT m_ePlc;
+ short m_nStartGrp; // from here on grpprls
+ short m_nOldStartGrp;
+ sal_uInt8 m_nItemSize;
+ sal_uInt8 m_nIMax; // number of entry pairs
+ sal_uInt8 m_nOldVarLen;
+ bool m_bCombined; // true : paste not allowed
sal_uInt8 SearchSameSprm( sal_uInt16 nVarLen, const sal_uInt8* pSprms );
@@ -148,12 +151,12 @@ public:
void Write( SvStream& rStrm, SwWW8WrGrf& rGrf );
bool IsEqualPos(WW8_FC nEndFc) const
- { return !bCombined && nIMax && nEndFc == reinterpret_cast<sal_Int32*>(pFkp)[nIMax]; }
+ { return !m_bCombined && m_nIMax && nEndFc == reinterpret_cast<sal_Int32*>(m_pFkp)[m_nIMax]; }
void MergeToNew( short& rVarLen, sal_uInt8 *& pNewSprms );
bool IsEmptySprm() const
- { return !bCombined && nIMax && !nOldVarLen; }
+ { return !m_bCombined && m_nIMax && !m_nOldVarLen; }
void SetNewEnd( WW8_FC nEnd )
- { reinterpret_cast<sal_Int32*>(pFkp)[nIMax] = nEnd; }
+ { reinterpret_cast<sal_Int32*>(m_pFkp)[m_nIMax] = nEnd; }
WW8_FC GetStartFc() const;
WW8_FC GetEndFc() const;
@@ -164,19 +167,19 @@ public:
// class WW8_WrPc collects all piece entries for one piece
class WW8_WrPc
{
- WW8_CP nStartCp; // Starting character position of the text
- WW8_FC nStartFc; // Starting file position of the text
- sal_uInt16 nStatus; // End of paragraph inside the piece?
+ WW8_CP m_nStartCp; // Starting character position of the text
+ WW8_FC m_nStartFc; // Starting file position of the text
+ sal_uInt16 m_nStatus; // End of paragraph inside the piece?
public:
WW8_WrPc(WW8_FC nSFc, WW8_CP nSCp )
- : nStartCp( nSCp ), nStartFc( nSFc ), nStatus( 0x0040 )
+ : m_nStartCp( nSCp ), m_nStartFc( nSFc ), m_nStatus( 0x0040 )
{}
- void SetStatus() { nStatus = 0x0050; }
- sal_uInt16 GetStatus() const { return nStatus; }
- WW8_CP GetStartCp() const { return nStartCp; }
- WW8_FC GetStartFc() const { return nStartFc; }
+ void SetStatus() { m_nStatus = 0x0050; }
+ sal_uInt16 GetStatus() const { return m_nStatus; }
+ WW8_CP GetStartCp() const { return m_nStartCp; }
+ WW8_FC GetStartFc() const { return m_nStartFc; }
};
typedef std::map<OUString,tools::Long> BKMKNames;
@@ -189,7 +192,7 @@ class WW8_WrtBookmarks
{
private:
/// Structure of one item inside this map: (startPos, (endPos, (a bool value?, bookmarkName)))
- BKMKCPs aSttCps;
+ BKMKCPs maSttCps;
BKMKNames maSwBkmkNms;
WW8_WrtBookmarks(WW8_WrtBookmarks const&) = delete;
@@ -211,7 +214,7 @@ WW8_WrtBookmarks::WW8_WrtBookmarks()
WW8_WrtBookmarks::~WW8_WrtBookmarks()
{
- for (auto& rEntry : aSttCps)
+ for (auto& rEntry : maSttCps)
{
if (rEntry.second)
{
@@ -228,12 +231,12 @@ void WW8_WrtBookmarks::Append( WW8_CP nStartCp, const OUString& rNm)
{
BKMK aBK(false,rNm);
BKMKCP* pBKCP = new BKMKCP(static_cast<tools::Long>(nStartCp),aBK);
- aSttCps.insert(std::pair<tools::Long,BKMKCP*>(nStartCp,pBKCP));
+ maSttCps.insert(std::pair<tools::Long,BKMKCP*>(nStartCp,pBKCP));
aResult.first->second = static_cast<tools::Long>(nStartCp);
}
else
{
- std::pair<CPItr,CPItr> aRange = aSttCps.equal_range(aResult.first->second);
+ std::pair<CPItr,CPItr> aRange = maSttCps.equal_range(aResult.first->second);
for (CPItr aItr = aRange.first;aItr != aRange.second;++aItr)
{
if (aItr->second && aItr->second->second.second == rNm)
@@ -249,7 +252,7 @@ void WW8_WrtBookmarks::Append( WW8_CP nStartCp, const OUString& rNm)
void WW8_WrtBookmarks::Write( WW8Export& rWrt)
{
- if (aSttCps.empty())
+ if (maSttCps.empty())
return;
tools::Long n;
std::vector<OUString> aNames;
@@ -257,7 +260,7 @@ void WW8_WrtBookmarks::Write( WW8Export& rWrt)
SvMemoryStream aTempStrm2(65535,65535);
BKMKCPs aEndCps;
- for (const auto& rEntry : aSttCps)
+ for (const auto& rEntry : maSttCps)
{
if (rEntry.second)
{
@@ -280,28 +283,28 @@ void WW8_WrtBookmarks::Write( WW8Export& rWrt)
}
aTempStrm2.Seek(0);
- rWrt.WriteAsStringTable(aNames, rWrt.pFib->m_fcSttbfbkmk,rWrt.pFib->m_lcbSttbfbkmk);
- SvStream& rStrm = *rWrt.pTableStrm;
- rWrt.pFib->m_fcPlcfbkf = rStrm.Tell();
+ rWrt.WriteAsStringTable(aNames, rWrt.m_pFib->m_fcSttbfbkmk,rWrt.m_pFib->m_lcbSttbfbkmk);
+ SvStream& rStrm = *rWrt.m_pTableStrm;
+ rWrt.m_pFib->m_fcPlcfbkf = rStrm.Tell();
rStrm.WriteStream( aTempStrm1 );
- SwWW8Writer::WriteLong(rStrm, rWrt.pFib->m_ccpText + rWrt.pFib->m_ccpTxbx);
- for (const auto& rEntry : aSttCps)
+ SwWW8Writer::WriteLong(rStrm, rWrt.m_pFib->m_ccpText + rWrt.m_pFib->m_ccpTxbx);
+ for (const auto& rEntry : maSttCps)
{
if (rEntry.second)
{
SwWW8Writer::WriteLong(rStrm, rEntry.second->first);
}
}
- rWrt.pFib->m_lcbPlcfbkf = rStrm.Tell() - rWrt.pFib->m_fcPlcfbkf;
- rWrt.pFib->m_fcPlcfbkl = rStrm.Tell();
+ rWrt.m_pFib->m_lcbPlcfbkf = rStrm.Tell() - rWrt.m_pFib->m_fcPlcfbkf;
+ rWrt.m_pFib->m_fcPlcfbkl = rStrm.Tell();
rStrm.WriteStream( aTempStrm2 );
- SwWW8Writer::WriteLong(rStrm, rWrt.pFib->m_ccpText + rWrt.pFib->m_ccpTxbx);
- rWrt.pFib->m_lcbPlcfbkl = rStrm.Tell() - rWrt.pFib->m_fcPlcfbkl;
+ SwWW8Writer::WriteLong(rStrm, rWrt.m_pFib->m_ccpText + rWrt.m_pFib->m_ccpTxbx);
+ rWrt.m_pFib->m_lcbPlcfbkl = rStrm.Tell() - rWrt.m_pFib->m_fcPlcfbkl;
}
void WW8_WrtBookmarks::MoveFieldMarks(WW8_CP nFrom, WW8_CP nTo)
{
- std::pair<CPItr,CPItr> aRange = aSttCps.equal_range(nFrom);
+ std::pair<CPItr,CPItr> aRange = maSttCps.equal_range(nFrom);
CPItr aItr = aRange.first;
while (aItr != aRange.second)
{
@@ -312,9 +315,9 @@ void WW8_WrtBookmarks::MoveFieldMarks(WW8_CP nFrom, WW8_CP nTo)
aItr->second->second.first = true;
aItr->second->first = nTo;
}
- aSttCps.insert(std::pair<tools::Long,BKMKCP*>(nTo,aItr->second));
+ maSttCps.insert(std::pair<tools::Long,BKMKCP*>(nTo,aItr->second));
aItr->second = nullptr;
- aRange = aSttCps.equal_range(nFrom);
+ aRange = maSttCps.equal_range(nFrom);
aItr = aRange.first;
continue;
}
@@ -355,11 +358,11 @@ void WW8_WrtFactoids::Write(WW8Export& rExport)
return;
// Smart tags are otherwise removed by Word on saving.
- rExport.pDop->fEmbedFactoids = true;
+ rExport.m_pDop->fEmbedFactoids = true;
- SvStream& rStream = *rExport.pTableStrm;
+ SvStream& rStream = *rExport.m_pTableStrm;
- rExport.pFib->m_fcSttbfBkmkFactoid = rStream.Tell();
+ rExport.m_pFib->m_fcSttbfBkmkFactoid = rStream.Tell();
// Write SttbfBkmkFactoid.
rStream.WriteUInt16(0xffff); // fExtend
rStream.WriteUInt16(m_aStartCPs.size()); // cData
@@ -374,12 +377,12 @@ void WW8_WrtFactoids::Write(WW8Export& rExport)
rStream.WriteUInt16(0); // fto
rStream.WriteUInt32(0); // pfpb
}
- rExport.pFib->m_lcbSttbfBkmkFactoid = rStream.Tell() - rExport.pFib->m_fcSttbfBkmkFactoid;
+ rExport.m_pFib->m_lcbSttbfBkmkFactoid = rStream.Tell() - rExport.m_pFib->m_fcSttbfBkmkFactoid;
- rExport.pFib->m_fcPlcfBkfFactoid = rStream.Tell();
+ rExport.m_pFib->m_fcPlcfBkfFactoid = rStream.Tell();
for (const WW8_CP& rCP : m_aStartCPs)
rStream.WriteInt32(rCP);
- rStream.WriteInt32(rExport.pFib->m_ccpText + rExport.pFib->m_ccpTxbx);
+ rStream.WriteInt32(rExport.m_pFib->m_ccpText + rExport.m_pFib->m_ccpTxbx);
// Write FBKFD.
for (size_t i = 0; i < m_aStartCPs.size(); ++i)
@@ -389,12 +392,12 @@ void WW8_WrtFactoids::Write(WW8Export& rExport)
rStream.WriteInt16(1); // cDepth, 1 as start and end is the same.
}
- rExport.pFib->m_lcbPlcfBkfFactoid = rStream.Tell() - rExport.pFib->m_fcPlcfBkfFactoid;
+ rExport.m_pFib->m_lcbPlcfBkfFactoid = rStream.Tell() - rExport.m_pFib->m_fcPlcfBkfFactoid;
- rExport.pFib->m_fcPlcfBklFactoid = rStream.Tell();
+ rExport.m_pFib->m_fcPlcfBklFactoid = rStream.Tell();
for (const WW8_CP& rCP : m_aEndCPs)
rStream.WriteInt32(rCP);
- rStream.WriteInt32(rExport.pFib->m_ccpText + rExport.pFib->m_ccpTxbx);
+ rStream.WriteInt32(rExport.m_pFib->m_ccpText + rExport.m_pFib->m_ccpTxbx);
// Write FBKLD.
for (size_t i = 0; i < m_aEndCPs.size(); ++i)
@@ -402,9 +405,9 @@ void WW8_WrtFactoids::Write(WW8Export& rExport)
rStream.WriteInt16(i); // ibkf
rStream.WriteInt16(0); // cDepth, 0 as does not overlap with any other smart tag.
}
- rExport.pFib->m_lcbPlcfBklFactoid = rStream.Tell() - rExport.pFib->m_fcPlcfBklFactoid;
+ rExport.m_pFib->m_lcbPlcfBklFactoid = rStream.Tell() - rExport.m_pFib->m_fcPlcfBklFactoid;
- rExport.pFib->m_fcFactoidData = rStream.Tell();
+ rExport.m_pFib->m_fcFactoidData = rStream.Tell();
// Write SmartTagData.
MSOFactoidType aFactoidType;
aFactoidType.m_nId = 1;
@@ -439,18 +442,18 @@ void WW8_WrtFactoids::Write(WW8Export& rExport)
}
aSmartTagData.Write(rExport);
- rExport.pFib->m_lcbFactoidData = rStream.Tell() - rExport.pFib->m_fcFactoidData;
+ rExport.m_pFib->m_lcbFactoidData = rStream.Tell() - rExport.m_pFib->m_fcFactoidData;
}
#define DEFAULT_STYLES_COUNT 16
// Names of the storage streams
constexpr OUStringLiteral sMainStream = u"WordDocument";
-#define sCompObj "\1CompObj"
+constexpr OUStringLiteral sCompObj = u"\1CompObj";
static void WriteDop( WW8Export& rWrt )
{
- WW8Dop& rDop = *rWrt.pDop;
+ WW8Dop& rDop = *rWrt.m_pDop;
// i#78951#, store the value of unknown compatibility options
rDop.SetCompatibilityOptions( rWrt.m_rDoc.getIDocumentSettingAccess().Getn32DummyCompatibilityOptions1());
@@ -461,8 +464,8 @@ static void WriteDop( WW8Export& rWrt )
// write default TabStop
const SvxTabStopItem& rTabStop =
- DefaultItemGet<SvxTabStopItem>(rWrt.m_rDoc, RES_PARATR_TABSTOP);
- rDop.dxaTab = static_cast<sal_uInt16>(rTabStop[0].GetTabPos());
+ rWrt.m_rDoc.GetAttrPool().GetUserOrPoolDefaultItem(RES_PARATR_TABSTOP);
+ rDop.dxaTab = o3tl::narrowing<sal_uInt16>(rTabStop[0].GetTabPos());
// Zoom factor and type
SwViewShell *pViewShell(rWrt.m_rDoc.getIDocumentLayoutAccess().GetCurrentViewShell());
@@ -505,7 +508,7 @@ static void WriteDop( WW8Export& rWrt )
rDop.lKeyProtDoc = pDocShell->GetModifyPasswordHash();
}
- if ((rWrt.pSepx && rWrt.pSepx->DocumentIsProtected()) ||
+ if ((rWrt.m_pSepx && rWrt.m_pSepx->DocumentIsProtected()) ||
rWrt.m_rDoc.getIDocumentSettingAccess().get(DocumentSettingId::PROTECT_FORM ) ||
rDop.lKeyProtDoc != 0)
{
@@ -556,7 +559,10 @@ static void WriteDop( WW8Export& rWrt )
rDop.fExpShRtn = !rWrt.m_rDoc.getIDocumentSettingAccess().get(DocumentSettingId::DO_NOT_JUSTIFY_LINES_WITH_MANUAL_BREAK); // #i56856#
- rDop.Write( *rWrt.pTableStrm, *rWrt.pFib );
+ IDocumentSettingAccess& rIDSA = rWrt.m_rDoc.getIDocumentSettingAccess();
+ rDop.fDontBreakWrappedTables = rIDSA.get(DocumentSettingId::DO_NOT_BREAK_WRAPPED_TABLES);
+
+ rDop.Write( *rWrt.m_pTableStrm, *rWrt.m_pFib );
}
static int lcl_CmpBeginEndChars( const OUString& rSWStr,
@@ -698,14 +704,14 @@ void WW8Export::ExportDopTypography(WW8DopTypography &rTypo)
!lcl_CmpBeginEndChars
(
pForbidden->endLine,
- OUString(WW8DopTypography::JapanNotEndLevel1).getStr(),
+ WW8DopTypography::JapanNotEndLevel1.getStr(),
WW8DopTypography::nMaxLeading * sizeof(sal_Unicode)
)
&&
!lcl_CmpBeginEndChars
(
pForbidden->beginLine,
- OUString(WW8DopTypography::JapanNotBeginLevel1).getStr(),
+ WW8DopTypography::JapanNotBeginLevel1.getStr(),
WW8DopTypography::nMaxFollowing * sizeof(sal_Unicode)
)
)
@@ -793,9 +799,9 @@ const SfxPoolItem& MSWordExportBase::GetItem(sal_uInt16 nWhich) const
}
WW8_WrPlc1::WW8_WrPlc1( sal_uInt16 nStructSz )
- : pData( new sal_uInt8[ 16 * nStructSz ] ),
- nDataLen(16 * nStructSz),
- nStructSiz( nStructSz )
+ : m_pData( new sal_uInt8[ 16 * nStructSz ] ),
+ m_nDataLen(16 * nStructSz),
+ m_nStructSiz( nStructSz )
{
}
@@ -805,43 +811,43 @@ WW8_WrPlc1::~WW8_WrPlc1()
WW8_CP WW8_WrPlc1::Prev() const
{
- bool b = !aPos.empty();
+ bool b = !m_aPos.empty();
OSL_ENSURE(b,"Prev called on empty list");
- return b ? aPos.back() : 0;
+ return b ? m_aPos.back() : 0;
}
void WW8_WrPlc1::Append( WW8_CP nCp, const void* pNewData )
{
- sal_uLong nInsPos = aPos.size() * nStructSiz;
- aPos.push_back( nCp );
- if( nDataLen < nInsPos + nStructSiz )
+ sal_uLong nInsPos = m_aPos.size() * m_nStructSiz;
+ m_aPos.push_back( nCp );
+ if( m_nDataLen < nInsPos + m_nStructSiz )
{
- sal_uInt8* pNew = new sal_uInt8[ 2 * nDataLen ];
- memcpy( pNew, pData.get(), nDataLen );
- pData.reset(pNew);
- nDataLen *= 2;
+ sal_uInt8* pNew = new sal_uInt8[ 2 * m_nDataLen ];
+ memcpy( pNew, m_pData.get(), m_nDataLen );
+ m_pData.reset(pNew);
+ m_nDataLen *= 2;
}
- memcpy( pData.get() + nInsPos, pNewData, nStructSiz );
+ memcpy( m_pData.get() + nInsPos, pNewData, m_nStructSiz );
}
void WW8_WrPlc1::Finish( sal_uLong nLastCp, sal_uLong nSttCp )
{
- if( !aPos.empty() )
+ if( !m_aPos.empty() )
{
- aPos.push_back( nLastCp );
+ m_aPos.push_back( nLastCp );
if( nSttCp )
- for(WW8_CP & rCp : aPos)
+ for(WW8_CP & rCp : m_aPos)
rCp -= nSttCp;
}
}
void WW8_WrPlc1::Write( SvStream& rStrm )
{
- decltype(aPos)::size_type i;
- for( i = 0; i < aPos.size(); ++i )
- SwWW8Writer::WriteLong( rStrm, aPos[i] );
+ decltype(m_aPos)::size_type i;
+ for( i = 0; i < m_aPos.size(); ++i )
+ SwWW8Writer::WriteLong( rStrm, m_aPos[i] );
if( i )
- rStrm.WriteBytes(pData.get(), (i-1) * nStructSiz);
+ rStrm.WriteBytes(m_pData.get(), (i-1) * m_nStructSiz);
}
// Class WW8_WrPlcField for fields
@@ -853,40 +859,40 @@ void WW8_WrPlcField::Write( WW8Export& rWrt )
WW8_FC *pfc;
sal_Int32 *plc;
- switch (nTextTyp)
+ switch (m_nTextTyp)
{
case TXT_MAINTEXT:
- pfc = &rWrt.pFib->m_fcPlcffldMom;
- plc = &rWrt.pFib->m_lcbPlcffldMom;
+ pfc = &rWrt.m_pFib->m_fcPlcffldMom;
+ plc = &rWrt.m_pFib->m_lcbPlcffldMom;
break;
case TXT_HDFT:
- pfc = &rWrt.pFib->m_fcPlcffldHdr;
- plc = &rWrt.pFib->m_lcbPlcffldHdr;
+ pfc = &rWrt.m_pFib->m_fcPlcffldHdr;
+ plc = &rWrt.m_pFib->m_lcbPlcffldHdr;
break;
case TXT_FTN:
- pfc = &rWrt.pFib->m_fcPlcffldFootnote;
- plc = &rWrt.pFib->m_lcbPlcffldFootnote;
+ pfc = &rWrt.m_pFib->m_fcPlcffldFootnote;
+ plc = &rWrt.m_pFib->m_lcbPlcffldFootnote;
break;
case TXT_EDN:
- pfc = &rWrt.pFib->m_fcPlcffldEdn;
- plc = &rWrt.pFib->m_lcbPlcffldEdn;
+ pfc = &rWrt.m_pFib->m_fcPlcffldEdn;
+ plc = &rWrt.m_pFib->m_lcbPlcffldEdn;
break;
case TXT_ATN:
- pfc = &rWrt.pFib->m_fcPlcffldAtn;
- plc = &rWrt.pFib->m_lcbPlcffldAtn;
+ pfc = &rWrt.m_pFib->m_fcPlcffldAtn;
+ plc = &rWrt.m_pFib->m_lcbPlcffldAtn;
break;
case TXT_TXTBOX:
- pfc = &rWrt.pFib->m_fcPlcffldTxbx;
- plc = &rWrt.pFib->m_lcbPlcffldTxbx;
+ pfc = &rWrt.m_pFib->m_fcPlcffldTxbx;
+ plc = &rWrt.m_pFib->m_lcbPlcffldTxbx;
break;
case TXT_HFTXTBOX:
- pfc = &rWrt.pFib->m_fcPlcffldHdrTxbx;
- plc = &rWrt.pFib->m_lcbPlcffldHdrTxbx;
+ pfc = &rWrt.m_pFib->m_fcPlcffldHdrTxbx;
+ plc = &rWrt.m_pFib->m_lcbPlcffldHdrTxbx;
break;
default:
@@ -896,10 +902,10 @@ void WW8_WrPlcField::Write( WW8Export& rWrt )
if( pfc && plc )
{
- sal_uInt64 nFcStart = rWrt.pTableStrm->Tell();
- WW8_WrPlc1::Write( *rWrt.pTableStrm );
+ sal_uInt64 nFcStart = rWrt.m_pTableStrm->Tell();
+ WW8_WrPlc1::Write( *rWrt.m_pTableStrm );
*pfc = nFcStart;
- *plc = rWrt.pTableStrm->Tell() - nFcStart;
+ *plc = rWrt.m_pTableStrm->Tell() - nFcStart;
}
}
@@ -907,10 +913,10 @@ void WW8_WrMagicTable::Write( WW8Export& rWrt )
{
if( WW8_WrPlc1::Count() <= 1 )
return;
- sal_uLong nFcStart = rWrt.pTableStrm->Tell();
- WW8_WrPlc1::Write( *rWrt.pTableStrm );
- rWrt.pFib->m_fcPlcfTch = nFcStart;
- rWrt.pFib->m_lcbPlcfTch = rWrt.pTableStrm->Tell() - nFcStart;
+ sal_uInt64 nFcStart = rWrt.m_pTableStrm->Tell();
+ WW8_WrPlc1::Write( *rWrt.m_pTableStrm );
+ rWrt.m_pFib->m_fcPlcfTch = nFcStart;
+ rWrt.m_pFib->m_lcbPlcfTch = rWrt.m_pTableStrm->Tell() - nFcStart;
}
void WW8_WrMagicTable::Append( WW8_CP nCp, sal_uLong nData)
@@ -959,11 +965,11 @@ sal_uLong SwWW8Writer::FillUntil( SvStream& rStrm, sal_uLong nEndPos )
}
WW8_WrPlcPn::WW8_WrPlcPn(WW8Export& rWr, ePLCFT ePl, WW8_FC nStartFc)
- : rWrt(rWr)
- , nFkpStartPage(0)
- , ePlc(ePl)
+ : m_rWrt(rWr)
+ , m_nFkpStartPage(0)
+ , m_ePlc(ePl)
{
- m_Fkps.push_back(std::make_unique<WW8_WrFkp>(ePlc, nStartFc));
+ m_Fkps.push_back(std::make_unique<WW8_WrFkp>(m_ePlc, nStartFc));
}
WW8_WrPlcPn::~WW8_WrPlcPn()
@@ -983,16 +989,16 @@ void WW8_WrPlcPn::AppendFkpEntry(WW8_FC nEndFc,short nVarLen,const sal_uInt8* pS
// big sprm? build the sprmPHugePapx
sal_uInt8* pNewSprms = const_cast<sal_uInt8*>(pSprms);
sal_uInt8 aHugePapx[ 8 ];
- if (PAP == ePlc && 488 <= nVarLen)
+ if (PAP == m_ePlc && 488 <= nVarLen)
{
sal_uInt8* p = aHugePapx;
*p++ = *pSprms++; // set style Id
*p++ = *pSprms++;
nVarLen -= 2;
- tools::Long nDataPos = rWrt.pDataStrm->Tell();
- SwWW8Writer::WriteShort( *rWrt.pDataStrm, nVarLen );
- rWrt.pDataStrm->WriteBytes(pSprms, nVarLen);
+ sal_uInt64 nDataPos = m_rWrt.m_pDataStrm->Tell();
+ SwWW8Writer::WriteShort( *m_rWrt.m_pDataStrm, nVarLen );
+ m_rWrt.m_pDataStrm->WriteBytes(pSprms, nVarLen);
Set_UInt16( p, 0x6646 ); // set SprmCode
Set_UInt32( p, nDataPos ); // set startpos (FC) in the datastream
@@ -1015,7 +1021,7 @@ void WW8_WrPlcPn::AppendFkpEntry(WW8_FC nEndFc,short nVarLen,const sal_uInt8* pS
if( !bOk )
{
pF->Combine();
- pF = new WW8_WrFkp(ePlc, pF->GetEndFc()); // Start new Fkp == end of old Fkp
+ pF = new WW8_WrFkp(m_ePlc, pF->GetEndFc()); // Start new Fkp == end of old Fkp
m_Fkps.push_back(std::unique_ptr<WW8_WrFkp>(pF));
if( !pF->Append( nEndFc, nVarLen, pNewSprms ) )
@@ -1029,73 +1035,73 @@ void WW8_WrPlcPn::AppendFkpEntry(WW8_FC nEndFc,short nVarLen,const sal_uInt8* pS
void WW8_WrPlcPn::WriteFkps()
{
- nFkpStartPage = static_cast<sal_uInt16>( SwWW8Writer::FillUntil( rWrt.Strm() ) >> 9 );
+ m_nFkpStartPage = o3tl::narrowing<sal_uInt16>( SwWW8Writer::FillUntil( m_rWrt.Strm() ) >> 9 );
for(const std::unique_ptr<WW8_WrFkp> & rp : m_Fkps)
{
- rp->Write( rWrt.Strm(), *rWrt.m_pGrf );
+ rp->Write( m_rWrt.Strm(), *m_rWrt.m_pGrf );
}
- if( CHP == ePlc )
+ if( CHP == m_ePlc )
{
- rWrt.pFib->m_pnChpFirst = nFkpStartPage;
- rWrt.pFib->m_cpnBteChp = m_Fkps.size();
+ m_rWrt.m_pFib->m_pnChpFirst = m_nFkpStartPage;
+ m_rWrt.m_pFib->m_cpnBteChp = m_Fkps.size();
}
else
{
- rWrt.pFib->m_pnPapFirst = nFkpStartPage;
- rWrt.pFib->m_cpnBtePap = m_Fkps.size();
+ m_rWrt.m_pFib->m_pnPapFirst = m_nFkpStartPage;
+ m_rWrt.m_pFib->m_cpnBtePap = m_Fkps.size();
}
}
void WW8_WrPlcPn::WritePlc()
{
- sal_uInt64 nFcStart = rWrt.pTableStrm->Tell();
+ sal_uInt64 nFcStart = m_rWrt.m_pTableStrm->Tell();
decltype(m_Fkps)::size_type i;
for (i = 0; i < m_Fkps.size(); ++i)
{
- SwWW8Writer::WriteLong( *rWrt.pTableStrm,
+ SwWW8Writer::WriteLong( *m_rWrt.m_pTableStrm,
m_Fkps[ i ]->GetStartFc() );
}
- SwWW8Writer::WriteLong( *rWrt.pTableStrm,
+ SwWW8Writer::WriteLong( *m_rWrt.m_pTableStrm,
m_Fkps[ i - 1 ]->GetEndFc() );
// for every FKP output the page
for (i = 0; i < m_Fkps.size(); ++i)
{
- SwWW8Writer::WriteLong( *rWrt.pTableStrm, i + nFkpStartPage );
+ SwWW8Writer::WriteLong( *m_rWrt.m_pTableStrm, i + m_nFkpStartPage );
}
- if( CHP == ePlc )
+ if( CHP == m_ePlc )
{
- rWrt.pFib->m_fcPlcfbteChpx = nFcStart;
- rWrt.pFib->m_lcbPlcfbteChpx = rWrt.pTableStrm->Tell() - nFcStart;
+ m_rWrt.m_pFib->m_fcPlcfbteChpx = nFcStart;
+ m_rWrt.m_pFib->m_lcbPlcfbteChpx = m_rWrt.m_pTableStrm->Tell() - nFcStart;
}
else
{
- rWrt.pFib->m_fcPlcfbtePapx = nFcStart;
- rWrt.pFib->m_lcbPlcfbtePapx = rWrt.pTableStrm->Tell() - nFcStart;
+ m_rWrt.m_pFib->m_fcPlcfbtePapx = nFcStart;
+ m_rWrt.m_pFib->m_lcbPlcfbtePapx = m_rWrt.m_pTableStrm->Tell() - nFcStart;
}
}
WW8_WrFkp::WW8_WrFkp(ePLCFT ePl, WW8_FC nStartFc)
- : ePlc(ePl), nStartGrp(511), nOldStartGrp(511),
- nItemSize( ( CHP == ePl ) ? 1 : 13 ),
- nIMax(0), nOldVarLen(0), bCombined(false)
+ : m_ePlc(ePl), m_nStartGrp(511), m_nOldStartGrp(511),
+ m_nItemSize( ( CHP == ePl ) ? 1 : 13 ),
+ m_nIMax(0), m_nOldVarLen(0), m_bCombined(false)
{
- pFkp = reinterpret_cast<sal_uInt8*>(new sal_Int32[128]); // 512 Byte
- pOfs = reinterpret_cast<sal_uInt8*>(new sal_Int32[128]); // 512 Byte
- memset( pFkp, 0, 4 * 128 );
- memset( pOfs, 0, 4 * 128 );
- reinterpret_cast<sal_Int32*>(pFkp)[0] = nStartFc; // 0th entry FC at nStartFc
+ m_pFkp = reinterpret_cast<sal_uInt8*>(new sal_Int32[128]); // 512 Byte
+ m_pOfs = reinterpret_cast<sal_uInt8*>(new sal_Int32[128]); // 512 Byte
+ memset( m_pFkp, 0, 4 * 128 );
+ memset( m_pOfs, 0, 4 * 128 );
+ reinterpret_cast<sal_Int32*>(m_pFkp)[0] = nStartFc; // 0th entry FC at nStartFc
}
WW8_WrFkp::~WW8_WrFkp()
{
- delete[] reinterpret_cast<sal_Int32 *>(pFkp);
- delete[] reinterpret_cast<sal_Int32 *>(pOfs);
+ delete[] reinterpret_cast<sal_Int32 *>(m_pFkp);
+ delete[] reinterpret_cast<sal_Int32 *>(m_pOfs);
}
sal_uInt8 WW8_WrFkp::SearchSameSprm( sal_uInt16 nVarLen, const sal_uInt8* pSprms )
@@ -1111,15 +1117,15 @@ sal_uInt8 WW8_WrFkp::SearchSameSprm( sal_uInt16 nVarLen, const sal_uInt8* pSprms
}
short i;
- for( i = 0; i < nIMax; i++ )
+ for( i = 0; i < m_nIMax; i++ )
{
- sal_uInt8 nStart = pOfs[i * nItemSize];
+ sal_uInt8 nStart = m_pOfs[i * m_nItemSize];
if( nStart )
{ // has Sprms
- const sal_uInt8* p = pFkp + ( static_cast<sal_uInt16>(nStart) << 1 );
- if( ( CHP == ePlc
+ const sal_uInt8* p = m_pFkp + ( o3tl::narrowing<sal_uInt16>(nStart) << 1 );
+ if( ( CHP == m_ePlc
? (*p++ == nVarLen)
- : ((static_cast<sal_uInt16>(*p++) << 1 ) == (( nVarLen+1) & 0xfffe)) )
+ : ((o3tl::narrowing<sal_uInt16>(*p++) << 1 ) == (( nVarLen+1) & 0xfffe)) )
&& !memcmp( p, pSprms, nVarLen ) )
return nStart; // found it
}
@@ -1132,14 +1138,14 @@ sal_uInt8 *WW8_WrFkp::CopyLastSprms(sal_uInt8 &rLen)
rLen=0;
sal_uInt8 *pStart=nullptr,*pRet=nullptr;
- if (!bCombined)
- pStart = pOfs;
+ if (!m_bCombined)
+ pStart = m_pOfs;
else
- pStart = pFkp + ( nIMax + 1 ) * 4;
+ pStart = m_pFkp + ( m_nIMax + 1 ) * 4;
- sal_uInt8 nStart = *(pStart + (nIMax-1) * nItemSize);
+ sal_uInt8 nStart = *(pStart + (m_nIMax-1) * m_nItemSize);
- const sal_uInt8* p = pFkp + ( static_cast<sal_uInt16>(nStart) << 1 );
+ const sal_uInt8* p = m_pFkp + ( o3tl::narrowing<sal_uInt16>(nStart) << 1 );
if (!*p)
p++;
@@ -1147,7 +1153,7 @@ sal_uInt8 *WW8_WrFkp::CopyLastSprms(sal_uInt8 &rLen)
if (*p)
{
rLen = *p++;
- if (PAP == ePlc)
+ if (PAP == m_ePlc)
rLen *= 2;
pRet = new sal_uInt8[rLen];
memcpy(pRet,p,rLen);
@@ -1159,14 +1165,14 @@ bool WW8_WrFkp::Append( WW8_FC nEndFc, sal_uInt16 nVarLen, const sal_uInt8* pSpr
{
assert((!nVarLen || pSprms) && "Item pointer missing");
- OSL_ENSURE( nVarLen < ( ( ePlc == PAP ) ? 497U : 502U ), "Sprms too long !" );
+ OSL_ENSURE( nVarLen < ( ( m_ePlc == PAP ) ? 497U : 502U ), "Sprms too long !" );
- if( bCombined )
+ if( m_bCombined )
{
OSL_ENSURE( false, "Fkp::Append: Fkp is already combined" );
return false;
}
- sal_Int32 n = reinterpret_cast<sal_Int32*>(pFkp)[nIMax]; // last entry
+ sal_Int32 n = reinterpret_cast<sal_Int32*>(m_pFkp)[m_nIMax]; // last entry
if( nEndFc <= n )
{
OSL_ENSURE( nEndFc >= n, "+Fkp: FC backwards" );
@@ -1179,67 +1185,67 @@ bool WW8_WrFkp::Append( WW8_FC nEndFc, sal_uInt16 nVarLen, const sal_uInt8* pSpr
sal_uInt8 nOldP = nVarLen ? SearchSameSprm( nVarLen, pSprms ) : 0;
// Combine equal entries
- short nOffset=0, nPos = nStartGrp;
+ short nOffset=0, nPos = m_nStartGrp;
if (nVarLen && !nOldP)
{
- nPos = PAP == ePlc
- ? ( 13 == nItemSize // HACK: PAP and bWrtWW8 !!
- ? (nStartGrp & 0xFFFE ) - nVarLen - 1
- : (nStartGrp - (((nVarLen + 1) & 0xFFFE)+1)) & 0xFFFE )
- : ((nStartGrp - nVarLen - 1) & 0xFFFE);
+ nPos = PAP == m_ePlc
+ ? ( 13 == m_nItemSize // HACK: PAP and bWrtWW8 !!
+ ? (m_nStartGrp & 0xFFFE ) - nVarLen - 1
+ : (m_nStartGrp - (((nVarLen + 1) & 0xFFFE)+1)) & 0xFFFE )
+ : ((m_nStartGrp - nVarLen - 1) & 0xFFFE);
if( nPos < 0 )
return false; // doesn't fit at all
nOffset = nPos; // save offset (can also be uneven!)
nPos &= 0xFFFE; // Pos for Sprms ( gerade Pos )
}
- if( o3tl::make_unsigned(nPos) <= ( nIMax + 2U ) * 4U + ( nIMax + 1U ) * nItemSize )
+ if( o3tl::make_unsigned(nPos) <= ( m_nIMax + 2U ) * 4U + ( m_nIMax + 1U ) * m_nItemSize )
// does it fits after the CPs and offsets?
return false; // no
- reinterpret_cast<sal_Int32*>(pFkp)[nIMax + 1] = nEndFc; // insert FC
+ reinterpret_cast<sal_Int32*>(m_pFkp)[m_nIMax + 1] = nEndFc; // insert FC
- nOldVarLen = static_cast<sal_uInt8>(nVarLen);
+ m_nOldVarLen = static_cast<sal_uInt8>(nVarLen);
if( nVarLen && !nOldP )
{ // insert it for real
- nOldStartGrp = nStartGrp;
+ m_nOldStartGrp = m_nStartGrp;
- nStartGrp = nPos;
- pOfs[nIMax * nItemSize] = static_cast<sal_uInt8>( nStartGrp >> 1 );
+ m_nStartGrp = nPos;
+ m_pOfs[m_nIMax * m_nItemSize] = static_cast<sal_uInt8>( m_nStartGrp >> 1 );
// insert (start-of-data >> 1)
- sal_uInt8 nCnt = static_cast< sal_uInt8 >(CHP == ePlc
+ sal_uInt8 nCnt = static_cast< sal_uInt8 >(CHP == m_ePlc
? ( nVarLen < 256 ) ? static_cast<sal_uInt8>(nVarLen) : 255
: ( ( nVarLen + 1 ) >> 1 ));
- pFkp[ nOffset ] = nCnt; // Enter data length
- memcpy( pFkp + nOffset + 1, pSprms, nVarLen ); // store Sprms
+ m_pFkp[ nOffset ] = nCnt; // Enter data length
+ memcpy( m_pFkp + nOffset + 1, pSprms, nVarLen ); // store Sprms
}
else
{
// do not enter for real ( no Sprms or recurrence )
// start-of-data 0 ( no data ) or recurrence
- pOfs[nIMax * nItemSize] = nOldP;
+ m_pOfs[m_nIMax * m_nItemSize] = nOldP;
}
- nIMax++;
+ m_nIMax++;
return true;
}
void WW8_WrFkp::Combine()
{
- if( bCombined )
+ if( m_bCombined )
return;
- if( nIMax )
- memcpy( pFkp + ( nIMax + 1 ) * 4, pOfs, nIMax * nItemSize );
- delete[] pOfs;
- pOfs = nullptr;
- pFkp[511] = nIMax;
- bCombined = true;
+ if( m_nIMax )
+ memcpy( m_pFkp + ( m_nIMax + 1 ) * 4, m_pOfs, m_nIMax * m_nItemSize );
+ delete[] m_pOfs;
+ m_pOfs = nullptr;
+ m_pFkp[511] = m_nIMax;
+ m_bCombined = true;
#if defined OSL_BIGENDIAN // only the FCs will be rotated here
sal_uInt16 i; // the Sprms must be rotated elsewhere
sal_uInt32* p;
- for( i = 0, p = (sal_uInt32*)pFkp; i <= nIMax; i++, p++ )
+ for( i = 0, p = (sal_uInt32*)m_pFkp; i <= m_nIMax; i++, p++ )
*p = OSL_SWAPDWORD( *p );
#endif // ifdef OSL_BIGENDIAN
}
@@ -1249,8 +1255,8 @@ void WW8_WrFkp::Write( SvStream& rStrm, SwWW8WrGrf& rGrf )
Combine(); // If not already combined
sal_uInt8* p; // search magic for nPicLocFc
- sal_uInt8* pEnd = pFkp + nStartGrp;
- for( p = pFkp + 511 - 4; p >= pEnd; p-- )
+ sal_uInt8* pEnd = m_pFkp + m_nStartGrp;
+ for( p = m_pFkp + 511 - 4; p >= pEnd; p-- )
{
if( *p != GRF_MAGIC_1 ) // search for signature 0x12 0x34 0x56 0xXX
continue;
@@ -1263,40 +1269,40 @@ void WW8_WrFkp::Write( SvStream& rStrm, SwWW8WrGrf& rGrf )
UInt32ToSVBT32( rGrf.GetFPos(), nPos ); // FilePos the graphics
memcpy( p, nPos, 4 ); // patch FilePos over the signature
}
- rStrm.WriteBytes(pFkp, 512);
+ rStrm.WriteBytes(m_pFkp, 512);
}
void WW8_WrFkp::MergeToNew( short& rVarLen, sal_uInt8 *& rpNewSprms )
{
- sal_uInt8 nStart = pOfs[ (nIMax-1) * nItemSize ];
+ sal_uInt8 nStart = m_pOfs[ (m_nIMax-1) * m_nItemSize ];
if( !nStart )
return;
// has Sprms
- sal_uInt8* p = pFkp + ( static_cast<sal_uInt16>(nStart) << 1 );
+ sal_uInt8* p = m_pFkp + ( o3tl::narrowing<sal_uInt16>(nStart) << 1 );
// old and new equal? Then copy only one into the new sprms
- if( nOldVarLen == rVarLen && !memcmp( p+1, rpNewSprms, nOldVarLen ))
+ if( m_nOldVarLen == rVarLen && !memcmp( p+1, rpNewSprms, m_nOldVarLen ))
{
- sal_uInt8* pNew = new sal_uInt8[ nOldVarLen ];
- memcpy( pNew, p+1, nOldVarLen );
+ sal_uInt8* pNew = new sal_uInt8[ m_nOldVarLen ];
+ memcpy( pNew, p+1, m_nOldVarLen );
rpNewSprms = pNew;
}
else
{
- sal_uInt8* pNew = new sal_uInt8[ nOldVarLen + rVarLen ];
- memcpy( pNew, p+1, nOldVarLen );
- memcpy( pNew + nOldVarLen, rpNewSprms, rVarLen );
+ sal_uInt8* pNew = new sal_uInt8[ m_nOldVarLen + rVarLen ];
+ memcpy( pNew, p+1, m_nOldVarLen );
+ memcpy( pNew + m_nOldVarLen, rpNewSprms, rVarLen );
rpNewSprms = pNew;
- rVarLen = rVarLen + nOldVarLen;
+ rVarLen = rVarLen + m_nOldVarLen;
}
- --nIMax;
+ --m_nIMax;
// if this Sprms don't used from others, remove it
bool bFnd = false;
- for (sal_uInt16 n = 0; n < nIMax; ++n)
+ for (sal_uInt16 n = 0; n < m_nIMax; ++n)
{
- if (nStart == pOfs[n * nItemSize])
+ if (nStart == m_pOfs[n * m_nItemSize])
{
bFnd = true;
break;
@@ -1304,8 +1310,8 @@ void WW8_WrFkp::MergeToNew( short& rVarLen, sal_uInt8 *& rpNewSprms )
}
if (!bFnd)
{
- nStartGrp = nOldStartGrp;
- memset( p, 0, nOldVarLen+1 );
+ m_nStartGrp = m_nOldStartGrp;
+ memset( p, 0, m_nOldVarLen+1 );
}
}
@@ -1314,23 +1320,23 @@ WW8_FC WW8_WrFkp::GetStartFc() const
// when bCombined, then the array beginning with pFkp is already byte-swapped
// to LittleEndian, so to extract the start and end positions they must
// be swapped back.
- if( bCombined )
- return SVBT32ToUInt32( pFkp ); // 0. Element
- return reinterpret_cast<sal_Int32*>(pFkp)[0];
+ if( m_bCombined )
+ return SVBT32ToUInt32( m_pFkp ); // 0. Element
+ return reinterpret_cast<sal_Int32*>(m_pFkp)[0];
}
WW8_FC WW8_WrFkp::GetEndFc() const
{
- if( bCombined )
- return SVBT32ToUInt32( &(pFkp[nIMax*4]) ); // nIMax-th SVBT32-Element
- return reinterpret_cast<sal_Int32*>(pFkp)[nIMax];
+ if( m_bCombined )
+ return SVBT32ToUInt32( &(m_pFkp[m_nIMax*4]) ); // nIMax-th SVBT32-Element
+ return reinterpret_cast<sal_Int32*>(m_pFkp)[m_nIMax];
}
// Method for managing the piece table
WW8_WrPct::WW8_WrPct(WW8_FC nfcMin)
- : nOldFc(nfcMin)
+ : m_nOldFc(nfcMin)
{
- AppendPc(nOldFc);
+ AppendPc(m_nOldFc);
}
WW8_WrPct::~WW8_WrPct()
@@ -1340,14 +1346,14 @@ WW8_WrPct::~WW8_WrPct()
// Fill the piece and create a new one
void WW8_WrPct::AppendPc(WW8_FC nStartFc)
{
- WW8_CP nStartCp = nStartFc - nOldFc; // subtract the beginning of the text
+ WW8_CP nStartCp = nStartFc - m_nOldFc; // subtract the beginning of the text
if ( !nStartCp && !m_Pcts.empty())
{
OSL_ENSURE(1 == m_Pcts.size(), "empty Piece!");
m_Pcts.pop_back();
}
- nOldFc = nStartFc; // remember StartFc as old
+ m_nOldFc = nStartFc; // remember StartFc as old
nStartCp >>= 1; // for Unicode: number of characters / 2
@@ -1364,37 +1370,37 @@ void WW8_WrPct::WritePc( WW8Export& rWrt )
sal_uInt64 nPctStart;
sal_uLong nOldPos, nEndPos;
- nPctStart = rWrt.pTableStrm->Tell(); // Start piece table
- rWrt.pTableStrm->WriteChar( char(0x02) ); // Status byte PCT
+ nPctStart = rWrt.m_pTableStrm->Tell(); // Start piece table
+ rWrt.m_pTableStrm->WriteChar( char(0x02) ); // Status byte PCT
nOldPos = nPctStart + 1; // remember Position
- SwWW8Writer::WriteLong( *rWrt.pTableStrm, 0 ); // then the length
+ SwWW8Writer::WriteLong( *rWrt.m_pTableStrm, 0 ); // then the length
for (auto const& it : m_Pcts) // ranges
{
- SwWW8Writer::WriteLong( *rWrt.pTableStrm, it->GetStartCp() );
+ SwWW8Writer::WriteLong( *rWrt.m_pTableStrm, it->GetStartCp() );
}
// calculate the last Pos
- sal_uLong nStartCp = rWrt.pFib->m_fcMac - nOldFc;
+ sal_uLong nStartCp = rWrt.m_pFib->m_fcMac - m_nOldFc;
nStartCp >>= 1; // For Unicode: number of characters / 2
nStartCp += m_Pcts.back()->GetStartCp();
- SwWW8Writer::WriteLong( *rWrt.pTableStrm, nStartCp );
+ SwWW8Writer::WriteLong( *rWrt.m_pTableStrm, nStartCp );
// piece references
for (auto const& it : m_Pcts)
{
- SwWW8Writer::WriteShort(*rWrt.pTableStrm, it->GetStatus());
- SwWW8Writer::WriteLong(*rWrt.pTableStrm, it->GetStartFc());
- SwWW8Writer::WriteShort( *rWrt.pTableStrm, 0); // PRM=0
+ SwWW8Writer::WriteShort(*rWrt.m_pTableStrm, it->GetStatus());
+ SwWW8Writer::WriteLong(*rWrt.m_pTableStrm, it->GetStartFc());
+ SwWW8Writer::WriteShort( *rWrt.m_pTableStrm, 0); // PRM=0
}
// entries in the FIB
- rWrt.pFib->m_fcClx = nPctStart;
- nEndPos = rWrt.pTableStrm->Tell();
- rWrt.pFib->m_lcbClx = nEndPos - nPctStart;
+ rWrt.m_pFib->m_fcClx = nPctStart;
+ nEndPos = rWrt.m_pTableStrm->Tell();
+ rWrt.m_pFib->m_lcbClx = nEndPos - nPctStart;
// and register the length as well
- SwWW8Writer::WriteLong( *rWrt.pTableStrm, nOldPos,
+ SwWW8Writer::WriteLong( *rWrt.m_pTableStrm, nOldPos,
nEndPos - nPctStart-5 );
}
@@ -1407,23 +1413,24 @@ void WW8_WrPct::SetParaBreak()
WW8_CP WW8_WrPct::Fc2Cp( sal_uLong nFc ) const
{
- OSL_ENSURE( nFc >= o3tl::make_unsigned(nOldFc), "FilePos lies in front of last piece" );
+ OSL_ENSURE( nFc >= o3tl::make_unsigned(m_nOldFc), "FilePos lies in front of last piece" );
OSL_ENSURE( ! m_Pcts.empty(), "Fc2Cp no piece available" );
- nFc -= nOldFc;
+ nFc -= m_nOldFc;
nFc /= 2; // Unicode
return nFc + m_Pcts.back()->GetStartCp();
}
-void WW8Export::AppendBookmarks( const SwTextNode& rNd, sal_Int32 nCurrentPos, sal_Int32 nLen )
+void WW8Export::AppendBookmarks( const SwTextNode& rNd, sal_Int32 nCurrentPos, sal_Int32 nLen, const SwRedlineData* /*pRedlineData*/ )
{
std::vector< const ::sw::mark::IMark* > aArr;
- sal_uInt16 nContent;
+ sal_Int32 nContent;
const sal_Int32 nCurrentEnd = nCurrentPos + nLen;
if( !GetWriter().GetBookmarks( rNd, nCurrentPos, nCurrentEnd, aArr ))
return;
- sal_uLong nNd = rNd.GetIndex(), nSttCP = Fc2Cp( Strm().Tell() );
+ SwNodeOffset nNd = rNd.GetIndex();
+ sal_uLong nSttCP = Fc2Cp( Strm().Tell() );
for(const ::sw::mark::IMark* p : aArr)
{
const ::sw::mark::IMark& rBkmk = *p;
@@ -1434,25 +1441,25 @@ void WW8Export::AppendBookmarks( const SwTextNode& rNd, sal_Int32 nCurrentPos, s
const SwPosition* pOPos = nullptr;
if(rBkmk.IsExpanded())
pOPos = &rBkmk.GetOtherMarkPos();
- if( pOPos && pOPos->nNode == pPos->nNode &&
- pOPos->nContent < pPos->nContent )
+ if( pOPos && pOPos->GetNode() == pPos->GetNode() &&
+ pOPos->GetContentIndex() < pPos->GetContentIndex() )
{
pPos = pOPos;
pOPos = &rBkmk.GetMarkPos();
}
- if( !pOPos || ( nNd == pPos->nNode.GetIndex() &&
- ( nContent = pPos->nContent.GetIndex() ) >= nCurrentPos &&
+ if( !pOPos || ( nNd == pPos->GetNodeIndex() &&
+ ( nContent = pPos->GetContentIndex() ) >= nCurrentPos &&
nContent < nCurrentEnd ) )
{
- sal_uLong nCp = nSttCP + pPos->nContent.GetIndex() - nCurrentPos;
+ sal_uLong nCp = nSttCP + pPos->GetContentIndex() - nCurrentPos;
m_pBkmks->Append(nCp, BookmarkToWord(rBkmk.GetName()));
}
- if( pOPos && nNd == pOPos->nNode.GetIndex() &&
- ( nContent = pOPos->nContent.GetIndex() ) >= nCurrentPos &&
+ if( pOPos && nNd == pOPos->GetNodeIndex() &&
+ ( nContent = pOPos->GetContentIndex() ) >= nCurrentPos &&
nContent < nCurrentEnd )
{
- sal_uLong nCp = nSttCP + pOPos->nContent.GetIndex() - nCurrentPos;
+ sal_uLong nCp = nSttCP + pOPos->GetContentIndex() - nCurrentPos;
m_pBkmks->Append(nCp, BookmarkToWord(rBkmk.GetName()));
}
}
@@ -1465,7 +1472,7 @@ void WW8Export::AppendAnnotationMarks(const SwWW8AttrIter& rAttrs, sal_Int32 nCu
{
for (const sw::mark::IMark* pMark : aMarks)
{
- const sal_Int32 nStart = pMark->GetMarkStart().nContent.GetIndex();
+ const sal_Int32 nStart = pMark->GetMarkStart().GetContentIndex();
if (nStart == nCurrentPos)
{
m_pAtn->AddRangeStartPosition(pMark->GetName(), Fc2Cp(Strm().Tell()),
@@ -1492,13 +1499,13 @@ void WW8Export::MoveFieldMarks(WW8_CP nFrom, WW8_CP nTo)
void WW8Export::AppendBookmark( const OUString& rName )
{
- sal_uLong nSttCP = Fc2Cp( Strm().Tell() );
+ sal_uInt64 nSttCP = Fc2Cp( Strm().Tell() );
m_pBkmks->Append( nSttCP, rName );
}
void WW8Export::AppendBookmarkEndWithCorrection( const OUString& rName )
{
- sal_uLong nEndCP = Fc2Cp( Strm().Tell() );
+ sal_uInt64 nEndCP = Fc2Cp( Strm().Tell() );
m_pBkmks->Append( nEndCP - 1, rName );
}
@@ -1511,7 +1518,7 @@ std::unique_ptr<SvxBrushItem> MSWordExportBase::getBackground()
if (SfxItemState::SET == eState)
{
// The 'color' is set for the first page style - take it and use it as the background color of the entire DOCX
- if (aBrush->GetColor() != COL_AUTO)
+ if (aBrush->GetColor() != COL_AUTO || aBrush->GetGraphicObject())
return aBrush;
}
return nullptr;
@@ -1597,12 +1604,12 @@ void WW8Export::ExportGrfBullet(const SwTextNode& rNd)
static sal_uInt8 nAttrMagicIdx = 0;
void WW8Export::OutGrfBullets(const ww8::Frame & rFrame)
{
- if ( !m_pGrf || !m_pChpPlc || !pO )
+ if ( !m_pGrf || !m_pChpPlc || !m_pO )
return;
m_pGrf->Insert(rFrame);
- m_pChpPlc->AppendFkpEntry( Strm().Tell(), pO->size(), pO->data() );
- pO->clear();
+ m_pChpPlc->AppendFkpEntry( Strm().Tell(), m_pO->size(), m_pO->data() );
+ m_pO->clear();
// if links...
WriteChar( char(1) );
@@ -1649,15 +1656,15 @@ int MSWordExportBase::GetGrfIndex(const SvxBrushItem& rBrush)
void WW8_WrtRedlineAuthor::Write( Writer& rWrt )
{
WW8Export & rWW8Wrt = *(static_cast<SwWW8Writer&>(rWrt).m_pExport);
- rWW8Wrt.WriteAsStringTable(maAuthors, rWW8Wrt.pFib->m_fcSttbfRMark,
- rWW8Wrt.pFib->m_lcbSttbfRMark);
+ rWW8Wrt.WriteAsStringTable(maAuthors, rWW8Wrt.m_pFib->m_fcSttbfRMark,
+ rWW8Wrt.m_pFib->m_lcbSttbfRMark);
}
sal_uInt16 WW8Export::AddRedlineAuthor( std::size_t nId )
{
if( !m_pRedlAuthors )
{
- m_pRedlAuthors = new WW8_WrtRedlineAuthor;
+ m_pRedlAuthors.reset(new WW8_WrtRedlineAuthor);
m_pRedlAuthors->AddName("Unknown");
}
return m_pRedlAuthors->AddName( SW_MOD()->GetRedlineAuthor( nId ) );
@@ -1672,7 +1679,7 @@ void WW8Export::WriteAsStringTable(const std::vector<OUString>& rStrings,
// we have some Redlines found in the document -> the
// Author Name Stringtable
- SvStream& rStrm = *pTableStrm;
+ SvStream& rStrm = *m_pTableStrm;
rfcSttbf = rStrm.Tell();
SwWW8Writer::WriteShort( rStrm, -1 );
SwWW8Writer::WriteLong( rStrm, nCount );
@@ -1794,13 +1801,13 @@ void WW8Export::WriteStringAsPara( const OUString& rText )
m_pChpPlc->AppendFkpEntry( nPos );
}
-void MSWordExportBase::WriteSpecialText( sal_uLong nStart, sal_uLong nEnd, sal_uInt8 nTTyp )
+void MSWordExportBase::WriteSpecialText( SwNodeOffset nStart, SwNodeOffset nEnd, sal_uInt8 nTTyp )
{
sal_uInt8 nOldTyp = m_nTextTyp;
m_nTextTyp = nTTyp;
auto const pOldPam = m_pCurPam; //!! Simply shifting the PaM without restoring should do the job too
- sal_uLong nOldStart = m_nCurStart;
- sal_uLong nOldEnd = m_nCurEnd;
+ SwNodeOffset nOldStart = m_nCurStart;
+ SwNodeOffset nOldEnd = m_nCurEnd;
SwPaM* pOldEnd = m_pOrigPam;
bool bOldPageDescs = m_bOutPageDescs;
m_bOutPageDescs = false;
@@ -1815,12 +1822,12 @@ void MSWordExportBase::WriteSpecialText( sal_uLong nStart, sal_uLong nEnd, sal_u
// tdf#106261 Reset table infos, otherwise the depth of the cells will be
// incorrect, in case the header/footer had table(s) and we try to export
// the same table second time.
- ww8::WW8TableInfo::Pointer_t pOldTableInfo = m_pTableInfo;
+ ww8::WW8TableInfo::Pointer_t xOldTableInfo(m_pTableInfo);
m_pTableInfo = std::make_shared<ww8::WW8TableInfo>();
WriteText();
- m_pTableInfo = pOldTableInfo;
+ m_pTableInfo = std::move(xOldTableInfo);
m_bOutPageDescs = bOldPageDescs;
m_pCurPam = pOldPam; // delete Pam
@@ -1872,24 +1879,24 @@ void WW8Export::WriteChar( sal_Unicode c )
Strm().WriteUInt16( c );
}
-void MSWordExportBase::SetCurPam(sal_uLong nStt, sal_uLong nEnd)
+void MSWordExportBase::SetCurPam(SwNodeOffset nStt, SwNodeOffset nEnd)
{
m_nCurStart = nStt;
m_nCurEnd = nEnd;
m_pCurPam = Writer::NewUnoCursor( m_rDoc, nStt, nEnd );
// Recognize tables in special cases
- if ( nStt != m_pCurPam->GetMark()->nNode.GetIndex() &&
+ if ( nStt != m_pCurPam->GetMark()->GetNodeIndex() &&
m_rDoc.GetNodes()[ nStt ]->IsTableNode() )
{
- m_pCurPam->GetMark()->nNode = nStt;
+ m_pCurPam->GetMark()->Assign(nStt);
}
m_pOrigPam = m_pCurPam.get(); // ???
m_pCurPam->Exchange();
}
-void MSWordExportBase::SaveData( sal_uLong nStt, sal_uLong nEnd )
+void MSWordExportBase::SaveData( SwNodeOffset nStt, SwNodeOffset nEnd )
{
MSWordSaveData aData;
@@ -1905,6 +1912,7 @@ void MSWordExportBase::SaveData( sal_uLong nStt, sal_uLong nEnd )
aData.pOldFlyOffset = m_pFlyOffset;
aData.eOldAnchorType = m_eNewAnchorType;
+ aData.bOldWriteAll = false;
aData.bOldOutTable = m_bOutTable;
aData.bOldFlyFrameAttrs = m_bOutFlyFrameAttrs;
aData.bOldStartTOX = m_bStartTOX;
@@ -1944,16 +1952,16 @@ void MSWordExportBase::RestoreData()
m_aSaveData.pop();
}
-void WW8Export::SaveData( sal_uLong nStt, sal_uLong nEnd )
+void WW8Export::SaveData( SwNodeOffset nStt, SwNodeOffset nEnd )
{
MSWordExportBase::SaveData( nStt, nEnd );
MSWordSaveData &rData = m_aSaveData.top();
- if ( !pO->empty() )
+ if ( !m_pO->empty() )
{
- rData.pOOld = std::move(pO);
- pO.reset(new ww::bytes);
+ rData.pOOld = std::move(m_pO);
+ m_pO.reset(new ww::bytes);
}
else
rData.pOOld = nullptr; // reuse pO
@@ -1968,16 +1976,16 @@ void WW8Export::RestoreData()
GetWriter().m_bWriteAll = rData.bOldWriteAll;
- OSL_ENSURE( pO->empty(), "pO is not empty in WW8Export::RestoreData()" );
+ OSL_ENSURE( m_pO->empty(), "pO is not empty in WW8Export::RestoreData()" );
if ( rData.pOOld )
{
- pO = std::move(rData.pOOld);
+ m_pO = std::move(rData.pOOld);
}
MSWordExportBase::RestoreData();
}
-void WW8AttributeOutput::TableInfoCell( ww8::WW8TableNodeInfoInner::Pointer_t pTableTextNodeInfoInner )
+void WW8AttributeOutput::TableInfoCell(const ww8::WW8TableNodeInfoInner::Pointer_t& pTableTextNodeInfoInner)
{
sal_uInt32 nDepth = pTableTextNodeInfoInner->getDepth();
@@ -1986,18 +1994,18 @@ void WW8AttributeOutput::TableInfoCell( ww8::WW8TableNodeInfoInner::Pointer_t pT
/* Cell */
m_rWW8Export.InsUInt16( NS_sprm::PFInTable::val );
- m_rWW8Export.pO->push_back( sal_uInt8(0x1) );
+ m_rWW8Export.m_pO->push_back( sal_uInt8(0x1) );
m_rWW8Export.InsUInt16( NS_sprm::PItap::val );
m_rWW8Export.InsUInt32( nDepth );
if ( nDepth > 1 && pTableTextNodeInfoInner->isEndOfCell() )
{
m_rWW8Export.InsUInt16( NS_sprm::PFInnerTableCell::val );
- m_rWW8Export.pO->push_back( sal_uInt8(0x1) );
+ m_rWW8Export.m_pO->push_back( sal_uInt8(0x1) );
}
}
-void WW8AttributeOutput::TableInfoRow( ww8::WW8TableNodeInfoInner::Pointer_t pTableTextNodeInfoInner )
+void WW8AttributeOutput::TableInfoRow(const ww8::WW8TableNodeInfoInner::Pointer_t& pTableTextNodeInfoInner)
{
sal_uInt32 nDepth = pTableTextNodeInfoInner->getDepth();
@@ -2009,12 +2017,12 @@ void WW8AttributeOutput::TableInfoRow( ww8::WW8TableNodeInfoInner::Pointer_t pTa
return;
m_rWW8Export.InsUInt16( NS_sprm::PFInTable::val );
- m_rWW8Export.pO->push_back( sal_uInt8(0x1) );
+ m_rWW8Export.m_pO->push_back( sal_uInt8(0x1) );
if ( nDepth == 1 )
{
m_rWW8Export.InsUInt16( NS_sprm::PFTtp::val );
- m_rWW8Export.pO->push_back( sal_uInt8(0x1) );
+ m_rWW8Export.m_pO->push_back( sal_uInt8(0x1) );
}
m_rWW8Export.InsUInt16( NS_sprm::PItap::val );
@@ -2023,9 +2031,9 @@ void WW8AttributeOutput::TableInfoRow( ww8::WW8TableNodeInfoInner::Pointer_t pTa
if ( nDepth > 1 )
{
m_rWW8Export.InsUInt16( NS_sprm::PFInnerTableCell::val );
- m_rWW8Export.pO->push_back( sal_uInt8(0x1) );
+ m_rWW8Export.m_pO->push_back( sal_uInt8(0x1) );
m_rWW8Export.InsUInt16( NS_sprm::PFInnerTtp::val );
- m_rWW8Export.pO->push_back( sal_uInt8(0x1) );
+ m_rWW8Export.m_pO->push_back( sal_uInt8(0x1) );
}
// Most of these are per-row definitions, not per-table.
@@ -2071,16 +2079,14 @@ static sal_uInt16 lcl_TCFlags(SwDoc &rDoc, const SwTableBox * pBox, sal_Int32 nR
if(pSttNd)
{
SwNodeIndex aIdx( *pSttNd );
- const SwContentNode * pCNd = pSttNd->GetNodes().GoNext( &aIdx );
+ const SwContentNode* pCNd = SwNodes::GoNext(&aIdx);
if( pCNd && pCNd->IsTextNode())
{
- SfxItemSet aCoreSet(rDoc.GetAttrPool(), svl::Items<RES_CHRATR_ROTATE, RES_CHRATR_ROTATE>{});
+ SfxItemSetFixed<RES_CHRATR_ROTATE, RES_CHRATR_ROTATE> aCoreSet(rDoc.GetAttrPool());
static_cast<const SwTextNode*>(pCNd)->GetParaAttr(aCoreSet,
0, static_cast<const SwTextNode*>(pCNd)->GetText().getLength());
- const SfxPoolItem * pRotItem;
- if ( SfxItemState::SET == aCoreSet.GetItemState(RES_CHRATR_ROTATE, true, &pRotItem))
+ if ( const SvxCharRotateItem * pRotate = aCoreSet.GetItemIfSet(RES_CHRATR_ROTATE))
{
- const SvxCharRotateItem * pRotate = static_cast<const SvxCharRotateItem*>(pRotItem);
if(pRotate && pRotate->GetValue() == 900_deg10)
{
nFlags = nFlags | 0x0004 | 0x0008;
@@ -2097,7 +2103,7 @@ static sal_uInt16 lcl_TCFlags(SwDoc &rDoc, const SwTableBox * pBox, sal_Int32 nR
return nFlags;
}
-void WW8AttributeOutput::TableVerticalCell( ww8::WW8TableNodeInfoInner::Pointer_t pTableTextNodeInfoInner )
+void WW8AttributeOutput::TableVerticalCell(const ww8::WW8TableNodeInfoInner::Pointer_t& pTableTextNodeInfoInner)
{
const SwTableBox * pTabBox = pTableTextNodeInfoInner->getTableBox();
const SwTableLine * pTabLine = pTabBox->GetUpper();
@@ -2126,14 +2132,14 @@ void WW8AttributeOutput::TableVerticalCell( ww8::WW8TableNodeInfoInner::Pointer_
if (nTextFlow != 0)
{
m_rWW8Export.InsUInt16( NS_sprm::TTextFlow::val );
- m_rWW8Export.pO->push_back( n ); //start range
- m_rWW8Export.pO->push_back( sal_uInt8(n + 1) ); //end range
+ m_rWW8Export.m_pO->push_back( n ); //start range
+ m_rWW8Export.m_pO->push_back( sal_uInt8(n + 1) ); //end range
m_rWW8Export.InsUInt16(nTextFlow);
}
}
}
-void WW8AttributeOutput::TableCanSplit( ww8::WW8TableNodeInfoInner::Pointer_t pTableTextNodeInfoInner )
+void WW8AttributeOutput::TableCanSplit(const ww8::WW8TableNodeInfoInner::Pointer_t& pTableTextNodeInfoInner )
{
const SwTableBox * pTabBox = pTableTextNodeInfoInner->getTableBox();
const SwTableLine * pTabLine = pTabBox->GetUpper();
@@ -2148,12 +2154,12 @@ void WW8AttributeOutput::TableCanSplit( ww8::WW8TableNodeInfoInner::Pointer_t pT
const SwFormatRowSplit& rSplittable = pLineFormat->GetRowSplit();
sal_uInt8 nCantSplit = (!rSplittable.GetValue()) ? 1 : 0;
m_rWW8Export.InsUInt16( NS_sprm::TFCantSplit::val );
- m_rWW8Export.pO->push_back( nCantSplit );
+ m_rWW8Export.m_pO->push_back( nCantSplit );
m_rWW8Export.InsUInt16( NS_sprm::TFCantSplit90::val ); // also write fCantSplit90
- m_rWW8Export.pO->push_back( nCantSplit );
+ m_rWW8Export.m_pO->push_back( nCantSplit );
}
-void WW8AttributeOutput::TableBidi( ww8::WW8TableNodeInfoInner::Pointer_t pTableTextNodeInfoInner )
+void WW8AttributeOutput::TableBidi(const ww8::WW8TableNodeInfoInner::Pointer_t& pTableTextNodeInfoInner)
{
const SwTable * pTable = pTableTextNodeInfoInner->getTable();
const SwFrameFormat * pFrameFormat = pTable->GetFrameFormat();
@@ -2165,15 +2171,15 @@ void WW8AttributeOutput::TableBidi( ww8::WW8TableNodeInfoInner::Pointer_t pTable
}
}
-void WW8AttributeOutput::TableRowRedline( ww8::WW8TableNodeInfoInner::Pointer_t /*pTableTextNodeInfoInner*/ )
+void WW8AttributeOutput::TableRowRedline(const ww8::WW8TableNodeInfoInner::Pointer_t& /*pTableTextNodeInfoInner*/)
{
}
-void WW8AttributeOutput::TableCellRedline( ww8::WW8TableNodeInfoInner::Pointer_t /*pTableTextNodeInfoInner*/ )
+void WW8AttributeOutput::TableCellRedline(const ww8::WW8TableNodeInfoInner::Pointer_t& /*pTableTextNodeInfoInner*/)
{
}
-void WW8AttributeOutput::TableHeight( ww8::WW8TableNodeInfoInner::Pointer_t pTableTextNodeInfoInner )
+void WW8AttributeOutput::TableHeight(const ww8::WW8TableNodeInfoInner::Pointer_t& pTableTextNodeInfoInner)
{
const SwTableBox * pTabBox = pTableTextNodeInfoInner->getTableBox();
const SwTableLine * pTabLine = pTabBox->GetUpper();
@@ -2193,12 +2199,12 @@ void WW8AttributeOutput::TableHeight( ww8::WW8TableNodeInfoInner::Pointer_t pTab
if ( nHeight )
{
m_rWW8Export.InsUInt16( NS_sprm::TDyaRowHeight::val );
- m_rWW8Export.InsUInt16( static_cast<sal_uInt16>(nHeight) );
+ m_rWW8Export.InsUInt16( o3tl::narrowing<sal_uInt16>(nHeight) );
}
}
-void WW8AttributeOutput::TableOrientation( ww8::WW8TableNodeInfoInner::Pointer_t pTableTextNodeInfoInner )
+void WW8AttributeOutput::TableOrientation(const ww8::WW8TableNodeInfoInner::Pointer_t& pTableTextNodeInfoInner)
{
const SwTable * pTable = pTableTextNodeInfoInner->getTable();
@@ -2260,7 +2266,7 @@ void WW8AttributeOutput::TableOrientation( ww8::WW8TableNodeInfoInner::Pointer_t
}
}
-void WW8AttributeOutput::TableSpacing(ww8::WW8TableNodeInfoInner::Pointer_t pTableTextNodeInfoInner)
+void WW8AttributeOutput::TableSpacing(const ww8::WW8TableNodeInfoInner::Pointer_t& pTableTextNodeInfoInner)
{
const SwTable * pTable = pTableTextNodeInfoInner->getTable();
const SwTableFormat* pTableFormat = pTable->GetFrameFormat();
@@ -2282,7 +2288,7 @@ void WW8AttributeOutput::TableSpacing(ww8::WW8TableNodeInfoInner::Pointer_t pTab
sal_uInt8 const nTPc = (nPadding << 4) | (nPcVert << 2) | nPcHorz;
m_rWW8Export.InsUInt16(NS_sprm::TPc::val);
- m_rWW8Export.pO->push_back( nTPc );
+ m_rWW8Export.m_pO->push_back( nTPc );
m_rWW8Export.InsUInt16(NS_sprm::TDyaAbs::val);
m_rWW8Export.InsUInt16(rUL.GetUpper());
@@ -2298,14 +2304,129 @@ void WW8AttributeOutput::TableSpacing(ww8::WW8TableNodeInfoInner::Pointer_t pTab
}
}
-void WW8AttributeOutput::TableDefinition( ww8::WW8TableNodeInfoInner::Pointer_t pTableTextNodeInfoInner )
+void WW8AttributeOutput::TablePositioning(SwFrameFormat* pFlyFormat)
+{
+ if (!pFlyFormat || !pFlyFormat->GetFlySplit().GetValue())
+ {
+ return;
+ }
+
+ sal_uInt8 nPcVert = 0;
+ switch (pFlyFormat->GetVertOrient().GetRelationOrient())
+ {
+ case text::RelOrientation::PAGE_PRINT_AREA:
+ // relative to margin
+ nPcVert = 0;
+ break;
+ case text::RelOrientation::PAGE_FRAME:
+ // relative to page
+ nPcVert = 1;
+ break;
+ default:
+ // text::RelOrientation::FRAME
+ // relative to text
+ nPcVert = 2;
+ break;
+ }
+ sal_uInt8 nPcHorz = 0;
+ switch (pFlyFormat->GetHoriOrient().GetRelationOrient())
+ {
+ case text::RelOrientation::FRAME:
+ // relative to column
+ nPcHorz = 0;
+ break;
+ case text::RelOrientation::PAGE_PRINT_AREA:
+ // relative to margin
+ nPcHorz = 1;
+ break;
+ default:
+ // text::RelOrientation::PAGE_FRAME
+ // relative to page
+ nPcHorz = 2;
+ break;
+ }
+ sal_uInt8 nTPc = (nPcVert << 4) | (nPcHorz << 6);
+ m_rWW8Export.InsUInt16(NS_sprm::TPc::val);
+ m_rWW8Export.m_pO->push_back(nTPc);
+
+ // Similar to WW8AttributeOutput::FormatHorizOrientation(), but for tables.
+ sal_Int16 nTDxaAbs = 0;
+ switch (pFlyFormat->GetHoriOrient().GetHoriOrient())
+ {
+ case text::HoriOrientation::LEFT:
+ // left
+ nTDxaAbs = 0;
+ break;
+ case text::HoriOrientation::CENTER:
+ // centered
+ nTDxaAbs = -4;
+ break;
+ case text::HoriOrientation::RIGHT:
+ // right
+ nTDxaAbs = -8;
+ break;
+ default:
+ nTDxaAbs = pFlyFormat->GetHoriOrient().GetPos();
+ break;
+ }
+ m_rWW8Export.InsUInt16(NS_sprm::TDxaAbs::val);
+ m_rWW8Export.InsInt16(nTDxaAbs);
+
+ // Similar to WW8AttributeOutput::FormatVertOrientation(), but for tables.
+ sal_Int16 nTDyaAbs = 0;
+ switch (pFlyFormat->GetVertOrient().GetVertOrient())
+ {
+ case text::VertOrientation::TOP:
+ // up
+ nTDyaAbs = -4;
+ break;
+ case text::VertOrientation::CENTER:
+ // centered
+ nTDyaAbs = -8;
+ break;
+ case text::VertOrientation::BOTTOM:
+ // down
+ nTDyaAbs = -12;
+ break;
+ default:
+ nTDyaAbs = pFlyFormat->GetVertOrient().GetPos();
+ break;
+ }
+ m_rWW8Export.InsUInt16(NS_sprm::TDyaAbs::val);
+ m_rWW8Export.InsInt16(nTDyaAbs);
+
+ // Similar to WW8AttributeOutput::FormatULSpace(), but for tables.
+ sal_uInt16 nDyaFromText = pFlyFormat->GetULSpace().GetUpper();
+ m_rWW8Export.InsUInt16(NS_sprm::TDyaFromText::val);
+ m_rWW8Export.InsUInt16(nDyaFromText);
+ sal_uInt16 nDyaFromTextBottom = pFlyFormat->GetULSpace().GetLower();
+ m_rWW8Export.InsUInt16(NS_sprm::TDyaFromTextBottom::val);
+ m_rWW8Export.InsUInt16(nDyaFromTextBottom);
+
+ // Similar to WW8AttributeOutput::FormatLRSpace(), but for tables.
+ sal_uInt16 nDxaFromText = pFlyFormat->GetLRSpace().GetLeft();
+ m_rWW8Export.InsUInt16(NS_sprm::TDxaFromText::val);
+ m_rWW8Export.InsUInt16(nDxaFromText);
+ sal_uInt16 nDxaFromTextRight = pFlyFormat->GetLRSpace().GetRight();
+ m_rWW8Export.InsUInt16(NS_sprm::TDxaFromTextRight::val);
+ m_rWW8Export.InsUInt16(nDxaFromTextRight);
+
+ if (!pFlyFormat->GetWrapInfluenceOnObjPos().GetAllowOverlap())
+ {
+ // Allowing overlap is the default in both Writer and in WW8.
+ m_rWW8Export.InsUInt16(NS_sprm::TFNoAllowOverlap::val);
+ m_rWW8Export.m_pO->push_back(1);
+ }
+}
+
+void WW8AttributeOutput::TableDefinition(const ww8::WW8TableNodeInfoInner::Pointer_t& pTableTextNodeInfoInner)
{
const SwTable * pTable = pTableTextNodeInfoInner->getTable();
if ( pTable->GetRowsToRepeat() > pTableTextNodeInfoInner->getRow() )
{
m_rWW8Export.InsUInt16( NS_sprm::TTableHeader::val );
- m_rWW8Export.pO->push_back( 1 );
+ m_rWW8Export.m_pO->push_back( 1 );
}
ww8::TableBoxVectorPtr pTableBoxes =
@@ -2320,7 +2441,7 @@ void WW8AttributeOutput::TableDefinition( ww8::WW8TableNodeInfoInner::Pointer_t
m_rWW8Export.InsUInt16( nSprmSize ); // length
// number of boxes
- m_rWW8Export.pO->push_back( static_cast<sal_uInt8>(nBoxes) );
+ m_rWW8Export.m_pO->push_back( static_cast<sal_uInt8>(nBoxes) );
/* cells */
/*
@@ -2378,9 +2499,9 @@ void WW8AttributeOutput::TableDefinition( ww8::WW8TableNodeInfoInner::Pointer_t
ww8::GridColsPtr pGridCols = GetGridCols( pTableTextNodeInfoInner );
for ( const auto nCol : *pGridCols )
- {
- m_rWW8Export.InsUInt16( static_cast<sal_uInt16>(nCol) + nTableOffset );
- }
+ {
+ m_rWW8Export.InsUInt16( o3tl::narrowing<sal_uInt16>(nCol) + nTableOffset );
+ }
/* TCs */
ww8::RowSpansPtr pRowSpans = pTableTextNodeInfoInner->getRowSpansOfRow();
@@ -2388,7 +2509,7 @@ void WW8AttributeOutput::TableDefinition( ww8::WW8TableNodeInfoInner::Pointer_t
for (const SwTableBox * pTabBox1 : *pTableBoxes)
{
- sal_uInt16 npOCount = m_rWW8Export.pO->size();
+ sal_uInt16 npOCount = m_rWW8Export.m_pO->size();
const SwFrameFormat * pBoxFormat = nullptr;
if (pTabBox1 != nullptr)
@@ -2400,28 +2521,36 @@ void WW8AttributeOutput::TableDefinition( ww8::WW8TableNodeInfoInner::Pointer_t
static sal_uInt8 aNullBytes[] = { 0x0, 0x0 };
- m_rWW8Export.pO->insert( m_rWW8Export.pO->end(), aNullBytes, aNullBytes+2 ); // dummy
+ m_rWW8Export.m_pO->insert( m_rWW8Export.m_pO->end(), aNullBytes, aNullBytes+2 ); // dummy
if (pBoxFormat != nullptr)
{
const SvxBoxItem & rBoxItem = pBoxFormat->GetBox();
- WW8Export::Out_SwFormatTableBox( *m_rWW8Export.pO, &rBoxItem ); // 8/16 Byte
+ WW8Export::Out_SwFormatTableBox( *m_rWW8Export.m_pO, &rBoxItem ); // 8/16 Byte
}
else
- WW8Export::Out_SwFormatTableBox( *m_rWW8Export.pO, nullptr); // 8/16 Byte
+ WW8Export::Out_SwFormatTableBox( *m_rWW8Export.m_pO, nullptr); // 8/16 Byte
- SAL_INFO( "sw.ww8.level2", "<tclength>" << ( m_rWW8Export.pO->size() - npOCount ) << "</tclength>" );
+ SAL_INFO( "sw.ww8.level2", "<tclength>" << ( m_rWW8Export.m_pO->size() - npOCount ) << "</tclength>" );
++aItRowSpans;
}
int nWidthPercent = pFormat->GetFrameSize().GetWidthPercent();
+
+ // The best fit for "automatic" table placement is relative 100%
+ if (!nWidthPercent && rHori.GetHoriOrient() == text::HoriOrientation::FULL)
+ nWidthPercent = 100;
+
// Width is in fiftieths of a percent. For sprmTTableWidth, must be non-negative and 600% max
if ( nWidthPercent > 0 && nWidthPercent <= 600 )
{
m_rWW8Export.InsUInt16( NS_sprm::TTableWidth::val );
- m_rWW8Export.pO->push_back( sal_uInt8/*ftsPercent*/ (2) );
- m_rWW8Export.InsUInt16( static_cast<sal_uInt16>(nWidthPercent) * 50 );
+ m_rWW8Export.m_pO->push_back( sal_uInt8/*ftsPercent*/ (2) );
+ m_rWW8Export.InsUInt16( o3tl::narrowing<sal_uInt16>(nWidthPercent) * 50 );
}
+
+ // Write table positioning properties in case this is a floating table.
+ TablePositioning(pTable->GetTableNode()->GetFlyFormat());
}
ww8::GridColsPtr AttributeOutputBase::GetGridCols( ww8::WW8TableNodeInfoInner::Pointer_t const & pTableTextNodeInfoInner )
@@ -2512,7 +2641,7 @@ void AttributeOutputBase::GetTablePageSize( ww8::WW8TableNodeInfoInner const * p
rRelBoxSize = bRelBoxSize;
}
-void WW8AttributeOutput::TableDefaultBorders( ww8::WW8TableNodeInfoInner::Pointer_t pTableTextNodeInfoInner )
+void WW8AttributeOutput::TableDefaultBorders( const ww8::WW8TableNodeInfoInner::Pointer_t& pTableTextNodeInfoInner )
{
// This function name is misleading because it is not a table default, but a row default,
// and it also only sets default cell margins (aka border padding).
@@ -2529,14 +2658,14 @@ void WW8AttributeOutput::TableDefaultBorders( ww8::WW8TableNodeInfoInner::Pointe
// Set row default cell margins using this last cell in the row
for ( int i = 0; i < 4; ++i )
{
- SwWW8Writer::InsUInt16( *m_rWW8Export.pO, NS_sprm::TCellPaddingDefault::val );
- m_rWW8Export.pO->push_back( sal_uInt8(6) );
- m_rWW8Export.pO->push_back( sal_uInt8(0) );
- m_rWW8Export.pO->push_back( sal_uInt8(1) );
- m_rWW8Export.pO->push_back( sal_uInt8(1 << i) );
- m_rWW8Export.pO->push_back( sal_uInt8(3) );
+ SwWW8Writer::InsUInt16( *m_rWW8Export.m_pO, NS_sprm::TCellPaddingDefault::val );
+ m_rWW8Export.m_pO->push_back( sal_uInt8(6) );
+ m_rWW8Export.m_pO->push_back( sal_uInt8(0) );
+ m_rWW8Export.m_pO->push_back( sal_uInt8(1) );
+ m_rWW8Export.m_pO->push_back( sal_uInt8(1 << i) );
+ m_rWW8Export.m_pO->push_back( sal_uInt8(3) );
- SwWW8Writer::InsUInt16( *m_rWW8Export.pO,
+ SwWW8Writer::InsUInt16( *m_rWW8Export.m_pO,
pFrameFormat->GetBox().GetDistance( aBorders[i] ) );
}
}
@@ -2590,7 +2719,7 @@ void WW8AttributeOutput::TableCellBorders(
sal_uInt8 nSideBits[4] = {0, 0, 0, 0}; // 0001:top, 0010:left, 0100:bottom, 1000:right
for ( int i = 0; i < 4; ++i ) // sides: top, left, bottom, right
{
- nMargin[i] = std::min(sal_uInt16(31680), pLastBox->GetDistance( aBorders[i] ));
+ nMargin[i] = std::min(sal_Int16(31680), pLastBox->GetDistance( aBorders[i] ));
if ( nMargin[i] == nDefaultMargin[i] )
continue;
@@ -2610,13 +2739,13 @@ void WW8AttributeOutput::TableCellBorders(
{
if ( nSideBits[i] )
{
- SwWW8Writer::InsUInt16( *m_rWW8Export.pO, NS_sprm::TCellPadding::val );
- m_rWW8Export.pO->push_back( sal_uInt8(6) ); // 6 bytes
- m_rWW8Export.pO->push_back( sal_uInt8(nSeqStart) ); // first cell: apply margin
- m_rWW8Export.pO->push_back( sal_uInt8(n) ); // end cell: do not apply margin
- m_rWW8Export.pO->push_back( sal_uInt8(nSideBits[i]) );
- m_rWW8Export.pO->push_back( sal_uInt8(3) ); // FtsDxa: size in twips
- SwWW8Writer::InsUInt16( *m_rWW8Export.pO, nMargin[i] );
+ SwWW8Writer::InsUInt16( *m_rWW8Export.m_pO, NS_sprm::TCellPadding::val );
+ m_rWW8Export.m_pO->push_back( sal_uInt8(6) ); // 6 bytes
+ m_rWW8Export.m_pO->push_back( sal_uInt8(nSeqStart) ); // first cell: apply margin
+ m_rWW8Export.m_pO->push_back( sal_uInt8(n) ); // end cell: do not apply margin
+ m_rWW8Export.m_pO->push_back( sal_uInt8(nSideBits[i]) );
+ m_rWW8Export.m_pO->push_back( sal_uInt8(3) ); // FtsDxa: size in twips
+ SwWW8Writer::InsUInt16( *m_rWW8Export.m_pO, nMargin[i] );
}
}
@@ -2626,7 +2755,7 @@ void WW8AttributeOutput::TableCellBorders(
}
}
-void WW8AttributeOutput::TableBackgrounds( ww8::WW8TableNodeInfoInner::Pointer_t pTableTextNodeInfoInner )
+void WW8AttributeOutput::TableBackgrounds(const ww8::WW8TableNodeInfoInner::Pointer_t& pTableTextNodeInfoInner)
{
const SwTable * pTab = pTableTextNodeInfoInner->getTable();
const SwTableBox * pTabBox = pTableTextNodeInfoInner->getTableBox();
@@ -2635,7 +2764,7 @@ void WW8AttributeOutput::TableBackgrounds( ww8::WW8TableNodeInfoInner::Pointer_t
sal_uInt8 nBoxes = rTabBoxes.size();
m_rWW8Export.InsUInt16( NS_sprm::TDefTableShd80::val );
- m_rWW8Export.pO->push_back( static_cast<sal_uInt8>(nBoxes * 2) ); // Len
+ m_rWW8Export.m_pO->push_back( static_cast<sal_uInt8>(nBoxes * 2) ); // Len
Color aRowColor = COL_AUTO;
const SvxBrushItem *pTableColorProp = pTab->GetFrameFormat()->GetAttrSet().GetItem<SvxBrushItem>(RES_BACKGROUND);
@@ -2701,7 +2830,7 @@ void WW8AttributeOutput::TableBackgrounds( ww8::WW8TableNodeInfoInner::Pointer_t
break;
m_rWW8Export.InsUInt16( m );
- m_rWW8Export.pO->push_back( static_cast<sal_uInt8>((nStop-nStart) * 10) );
+ m_rWW8Export.m_pO->push_back( static_cast<sal_uInt8>((nStop-nStart) * 10) );
for ( sal_uInt8 n = nStart; n < nStop; n++ )
{
@@ -2738,9 +2867,9 @@ class TrackContentToExport
{
private:
SwPaM *m_pCurPam;
- sal_uLong m_nStart, m_nEnd;
+ SwNodeOffset m_nStart, m_nEnd;
public:
- TrackContentToExport(SwPaM *pCurPam, sal_uLong nCurStart, sal_uLong nCurEnd)
+ TrackContentToExport(SwPaM *pCurPam, SwNodeOffset nCurStart, SwNodeOffset nCurEnd)
: m_pCurPam(pCurPam)
, m_nStart(nCurStart)
, m_nEnd(nCurEnd)
@@ -2749,9 +2878,9 @@ public:
bool contentRemainsToExport(ww8::WW8TableInfo *pTableInfo)
{
- bool bSimpleContentRemains = m_pCurPam->GetPoint()->nNode < m_pCurPam->GetMark()->nNode ||
- (m_pCurPam->GetPoint()->nNode == m_pCurPam->GetMark()->nNode &&
- m_pCurPam->GetPoint()->nContent.GetIndex() <= m_pCurPam->GetMark()->nContent.GetIndex());
+ bool bSimpleContentRemains = m_pCurPam->GetPoint()->GetNode() < m_pCurPam->GetMark()->GetNode() ||
+ (m_pCurPam->GetPoint()->GetNode() == m_pCurPam->GetMark()->GetNode() &&
+ m_pCurPam->GetPoint()->GetContentIndex() <= m_pCurPam->GetMark()->GetContentIndex());
if (bSimpleContentRemains)
return true;
@@ -2763,7 +2892,7 @@ public:
//skipped cell to output it in a sane sequence. See ooo47778-3.sxw for one of these
//horrors. So if we are at the end of the selection, but this end point is a table
//cell whose next cell is in the selection allow jumping back to it
- const SwNode* pCurrentNode = &m_pCurPam->GetPoint()->nNode.GetNode();
+ const SwNode* pCurrentNode = &m_pCurPam->GetPoint()->GetNode();
const SwNode* pNextNode = pTableInfo->getNextNode(pCurrentNode);
if (pNextNode && pCurrentNode != pNextNode)
@@ -2783,7 +2912,7 @@ void MSWordExportBase::WriteText()
TrackContentToExport aContentTracking(m_pCurPam.get(), m_nCurStart, m_nCurEnd);
while (aContentTracking.contentRemainsToExport(m_pTableInfo.get()))
{
- SwNode& rNd = m_pCurPam->GetNode();
+ SwNode& rNd = m_pCurPam->GetPointNode();
// no section breaks exported for Endnotes
if ( rNd.IsTextNode() && m_nTextTyp != TXT_EDN && m_nTextTyp != TXT_FTN )
@@ -2805,7 +2934,7 @@ void MSWordExportBase::WriteText()
if ( pTemp )
m_pCurrentPageDesc = pTemp;
- m_pCurPam->GetPoint()->nContent.Assign( pCNd, 0 );
+ m_pCurPam->GetPoint()->SetContent( 0 );
OutputContentNode( *pCNd );
}
else if ( rNd.IsTableNode() )
@@ -2838,9 +2967,10 @@ void MSWordExportBase::WriteText()
SwTextNode *pTempNext = aIdx.GetNode().GetTextNode();
if ( pTempNext )
{
- const SfxPoolItem * pTempItem = nullptr;
- if (pTempNext->GetpSwAttrSet() && SfxItemState::SET == pTempNext->GetpSwAttrSet()->GetItemState(RES_PAGEDESC, false, &pTempItem)
- && pTempItem && static_cast<const SwFormatPageDesc*>(pTempItem)->GetRegisteredIn())
+ const SwFormatPageDesc * pTempItem = nullptr;
+ if (pTempNext->GetpSwAttrSet()
+ && (pTempItem = pTempNext->GetpSwAttrSet()->GetItemIfSet(RES_PAGEDESC, false))
+ && pTempItem->GetRegisteredIn())
{
//Next node has a new page style which means this node is a section end. Do not insert another page/section break here
bNeedExportBreakHere = false;
@@ -2902,7 +3032,7 @@ void MSWordExportBase::WriteText()
if ( &rNd == &rNd.GetNodes().GetEndOfContent() )
break;
- const SwNode * pCurrentNode = &m_pCurPam->GetPoint()->nNode.GetNode();
+ const SwNode * pCurrentNode = &m_pCurPam->GetPoint()->GetNode();
const SwNode * pNextNode = m_pTableInfo->getNextNode(pCurrentNode);
if (pCurrentNode == pNextNode)
@@ -2912,12 +3042,12 @@ void MSWordExportBase::WriteText()
}
if (pNextNode != nullptr)
- m_pCurPam->GetPoint()->nNode.Assign(*pNextNode);
+ m_pCurPam->GetPoint()->Assign(*pNextNode);
else
- ++m_pCurPam->GetPoint()->nNode;
+ m_pCurPam->GetPoint()->Adjust(SwNodeOffset(1));
- sal_uLong nPos = m_pCurPam->GetPoint()->nNode.GetIndex();
- ::SetProgressState( nPos, m_pCurPam->GetDoc().GetDocShell() );
+ SwNodeOffset nPos = m_pCurPam->GetPoint()->GetNodeIndex();
+ ::SetProgressState( sal_Int32(nPos), m_pCurPam->GetDoc().GetDocShell() );
}
SAL_INFO( "sw.ww8.level2", "</WriteText>" );
@@ -2927,24 +3057,24 @@ void WW8Export::WriteMainText()
{
SAL_INFO( "sw.ww8.level2", "<WriteMainText>" );
- pFib->m_fcMin = Strm().Tell();
+ m_pFib->m_fcMin = Strm().Tell();
- m_pCurPam->GetPoint()->nNode = m_rDoc.GetNodes().GetEndOfContent().StartOfSectionNode()->GetIndex();
+ m_pCurPam->GetPoint()->Assign(*m_rDoc.GetNodes().GetEndOfContent().StartOfSectionNode());
WriteText();
- if( 0 == Strm().Tell() - pFib->m_fcMin ) // no text ?
+ if( 0 == Strm().Tell() - m_pFib->m_fcMin ) // no text ?
WriteCR(); // then CR at the end ( otherwise WW will complain )
- pFib->m_ccpText = Fc2Cp( Strm().Tell() );
- m_pFieldMain->Finish( pFib->m_ccpText, 0 );
+ m_pFib->m_ccpText = Fc2Cp( Strm().Tell() );
+ m_pFieldMain->Finish( m_pFib->m_ccpText, 0 );
// ccpText includes Footnote and KF-text
// therefore pFib->ccpText may get updated as well
// save the StyleId of the last paragraph. Because WW97 take the style
// from the last CR, that will be written after footer/Header/footnotes/
// annotation etc.
- const SwTextNode* pLastNd = m_pCurPam->GetMark()->nNode.GetNode().GetTextNode();
+ const SwTextNode* pLastNd = m_pCurPam->GetMark()->GetNode().GetTextNode();
if( pLastNd )
m_nLastFormatId = GetId( static_cast<SwTextFormatColl&>(pLastNd->GetAnyFormatColl()) );
@@ -2957,7 +3087,7 @@ bool MSWordExportBase::IsInTable() const
if (m_pCurPam != nullptr)
{
- SwNode& rNode = m_pCurPam->GetNode();
+ SwNode& rNode = m_pCurPam->GetPointNode();
if (m_pTableInfo)
{
@@ -2983,18 +3113,18 @@ void WW8Export::WriteFkpPlcUsw()
// output into WordDocument stream
m_pChpPlc->WriteFkps(); // Fkp.Chpx
m_pPapPlc->WriteFkps(); // Fkp.Papx
- pSepx->WriteSepx( Strm() ); // Sepx
+ m_pSepx->WriteSepx( Strm() ); // Sepx
// output into Table stream
m_pStyles->OutputStylesTable(); // for WW8 StyleTab
- pFootnote->WritePlc( *this ); // Footnote-Ref & Text Plc
- pEdn->WritePlc( *this ); // Endnote-Ref & Text Plc
+ m_pFootnote->WritePlc( *this ); // Footnote-Ref & Text Plc
+ m_pEdn->WritePlc( *this ); // Endnote-Ref & Text Plc
m_pTextBxs->WritePlc( *this ); // Textbox Text Plc
m_pHFTextBxs->WritePlc( *this ); // Head/Foot-Textbox Text Plc
m_pAtn->WritePlc( *this ); // Annotation-Ref & Text Plc
- pSepx->WritePlcSed( *this ); // Slcx.PlcSed
- pSepx->WritePlcHdd( *this ); // Slcx.PlcHdd
+ m_pSepx->WritePlcSed( *this ); // Slcx.PlcSed
+ m_pSepx->WritePlcHdd( *this ); // Slcx.PlcHdd
m_pChpPlc->WritePlc(); // Plcx.Chpx
m_pPapPlc->WritePlc(); // Plcx.Papx
@@ -3028,7 +3158,7 @@ void WW8Export::WriteFkpPlcUsw()
some magic.
*/
// avoid memory leak #i120098#, the unnamed obj will be released in destructor.
- xEscherStg = GetWriter().GetStorage().OpenSotStorage(SL::aObjectPool);
+ m_xEscherStg = GetWriter().GetStorage().OpenSotStorage(SL::aObjectPool);
}
// dggInfo - escher stream
@@ -3050,10 +3180,10 @@ void WW8Export::WriteFkpPlcUsw()
m_pMagicTable->Write( *this );
m_pPiece->WritePc( *this ); // Piece-Table
- m_aFontHelper.WriteFontTable(pTableStrm, *pFib); // FFNs
+ m_aFontHelper.WriteFontTable(m_pTableStrm, *m_pFib); // FFNs
//Convert OOo asian typography into MS typography structure
- ExportDopTypography(pDop->doptypography);
+ ExportDopTypography(m_pDop->doptypography);
WriteDop( *this ); // Document-Properties
@@ -3064,8 +3194,8 @@ void WW8Export::WriteFkpPlcUsw()
if ( pSttbfAssoc ) // #i106057#
{
std::vector<OUString> aStrings(pSttbfAssoc->getStrings());
- WriteAsStringTable(aStrings, pFib->m_fcSttbfAssoc,
- pFib->m_lcbSttbfAssoc);
+ WriteAsStringTable(aStrings, m_pFib->m_fcSttbfAssoc,
+ m_pFib->m_lcbSttbfAssoc);
}
Strm().Seek( 0 );
@@ -3076,29 +3206,29 @@ void WW8Export::WriteFkpPlcUsw()
if ( pFibData )
{
- pFib->m_fReadOnlyRecommended =
- pFibData->getReadOnlyRecommended();
- pFib->m_fWriteReservation =
- pFibData->getWriteReservation();
+ m_pFib->m_fReadOnlyRecommended =
+ pFibData->getReadOnlyRecommended();
+ m_pFib->m_fWriteReservation =
+ pFibData->getWriteReservation();
}
- pFib->Write( Strm() ); // FIB
+ m_pFib->Write( Strm() ); // FIB
}
void WW8Export::StoreDoc1()
{
bool bNeedsFinalPara = false;
// Start of Text ( overwrite )
- SwWW8Writer::FillUntil( Strm(), pFib->m_fcMin );
+ SwWW8Writer::FillUntil( Strm(), m_pFib->m_fcMin );
WriteMainText(); // main text
sal_uInt8 nSprmsLen;
sal_uInt8 *pLastSprms = m_pPapPlc->CopyLastSprms(nSprmsLen);
- bNeedsFinalPara |= pFootnote->WriteText( *this ); // Footnote-Text
- bNeedsFinalPara |= pSepx->WriteKFText( *this ); // K/F-Text
+ bNeedsFinalPara |= m_pFootnote->WriteText( *this ); // Footnote-Text
+ bNeedsFinalPara |= m_pSepx->WriteKFText( *this ); // K/F-Text
bNeedsFinalPara |= m_pAtn->WriteText( *this ); // Annotation-Text
- bNeedsFinalPara |= pEdn->WriteText( *this ); // EndNote-Text
+ bNeedsFinalPara |= m_pEdn->WriteText( *this ); // EndNote-Text
// create the escher streams
CreateEscher();
@@ -3113,10 +3243,10 @@ void WW8Export::StoreDoc1()
}
delete[] pLastSprms;
- pSepx->Finish( Fc2Cp( Strm().Tell() ));// Text + Footnote + HdFt as section end
+ m_pSepx->Finish( Fc2Cp( Strm().Tell() ));// Text + Footnote + HdFt as section end
m_pMagicTable->Finish( Fc2Cp( Strm().Tell() ),0);
- pFib->m_fcMac = Strm().Tell(); // End of all texts
+ m_pFib->m_fcMac = Strm().Tell(); // End of all texts
WriteFkpPlcUsw(); // FKP, PLC, ...
}
@@ -3137,9 +3267,6 @@ void MSWordExportBase::AddLinkTarget(std::u16string_view rURL)
return;
sCmp = sCmp.toAsciiLowerCase();
- sal_uLong nIdx = 0;
- bool noBookmark = false;
-
if( sCmp == "outline" )
{
SwPosition aPos(*m_pCurPam->GetPoint());
@@ -3148,106 +3275,83 @@ void MSWordExportBase::AddLinkTarget(std::u16string_view rURL)
// save the name of the bookmark and the
// node index number of where it points to
if( m_rDoc.GotoOutline( aPos, aName ) )
- {
- nIdx = aPos.nNode.GetIndex();
- noBookmark = true;
- }
+ m_aImplicitBookmarks.emplace_back(aURL, aPos.GetNodeIndex());
}
else if( sCmp == "graphic" )
{
- SwNodeIndex* pIdx;
OUString aName(BookmarkToWriter(aURL.subView(0, nPos)));
- const SwFlyFrameFormat* pFormat = m_rDoc.FindFlyByName(aName, SwNodeType::Grf);
- if (pFormat && nullptr != (pIdx = const_cast<SwNodeIndex*>(pFormat->GetContent().GetContentIdx())))
+ if (const SwFlyFrameFormat* pFormat = m_rDoc.FindFlyByName(aName, SwNodeType::Grf))
{
- nIdx = pIdx->GetNext()->GetIndex();
- noBookmark = true;
+ const SwFormatAnchor& rFormatAnchor = pFormat->GetAnchor();
+ if (SwNode* pAnchorNode = rFormatAnchor.GetAnchorNode())
+ m_aImplicitBookmarks.emplace_back(aURL, pAnchorNode->GetIndex());
}
}
else if( sCmp == "frame" )
{
- SwNodeIndex* pIdx;
OUString aName(BookmarkToWriter(aURL.subView(0, nPos)));
- const SwFlyFrameFormat* pFormat = m_rDoc.FindFlyByName(aName, SwNodeType::Text);
- if (pFormat && nullptr != (pIdx = const_cast<SwNodeIndex*>(pFormat->GetContent().GetContentIdx())))
- {
- nIdx = pIdx->GetIndex() + 1;
- noBookmark = true;
- }
+ if (const SwFlyFrameFormat* pFormat = m_rDoc.FindFlyByName(aName, SwNodeType::Text))
+ if (const SwNodeIndex* pIdx = pFormat->GetContent().GetContentIdx())
+ m_aImplicitBookmarks.emplace_back(aURL, pIdx->GetIndex() + 1);
}
else if( sCmp == "ole" )
{
- SwNodeIndex* pIdx;
OUString aName(BookmarkToWriter(aURL.subView(0, nPos)));
- const SwFlyFrameFormat* pFormat = m_rDoc.FindFlyByName(aName, SwNodeType::Ole);
- if (pFormat && nullptr != (pIdx = const_cast<SwNodeIndex*>(pFormat->GetContent().GetContentIdx())))
+ if (const SwFlyFrameFormat* pFormat = m_rDoc.FindFlyByName(aName, SwNodeType::Ole))
{
- nIdx = pIdx->GetNext()->GetIndex();
- noBookmark = true;
+ const SwFormatAnchor& rFormatAnchor = pFormat->GetAnchor();
+ if (SwNode* pAnchorNode = rFormatAnchor.GetAnchorNode())
+ m_aImplicitBookmarks.emplace_back(aURL, pAnchorNode->GetIndex());
}
}
else if( sCmp == "region" )
{
- SwNodeIndex* pIdx;
OUString aName(BookmarkToWriter(aURL.subView(0, nPos)));
for (const SwSectionFormat* pFormat : m_rDoc.GetSections())
{
- if (aName == pFormat->GetSection()->GetSectionName()
- && nullptr != (pIdx = const_cast<SwNodeIndex*>(pFormat->GetContent().GetContentIdx())))
+ if (aName == pFormat->GetSection()->GetSectionName())
{
- nIdx = pIdx->GetIndex() + 1;
- noBookmark = true;
- break;
+ if (const SwNodeIndex* pIdx = pFormat->GetContent().GetContentIdx())
+ {
+ m_aImplicitBookmarks.emplace_back(aURL, pIdx->GetIndex() + 1);
+ break;
+ }
}
}
}
else if( sCmp == "table" )
{
OUString aName(BookmarkToWriter(aURL.subView(0, nPos)));
- const SwTable* pTable = SwTable::FindTable(m_rDoc.FindTableFormatByName(aName));
- if (pTable)
- {
- SwTableNode* pTableNode = const_cast<SwTableNode*>(pTable->GetTabSortBoxes()[1]->GetSttNd()->FindTableNode());
- if (pTableNode)
- {
- nIdx = pTableNode->GetIndex() + 2;
- noBookmark = true;
- }
- }
+ if (const SwTable* pTable = SwTable::FindTable(m_rDoc.FindTableFormatByName(aName)))
+ if (const SwTableNode* pTableNode = pTable->GetTabSortBoxes()[1]->GetSttNd()->FindTableNode())
+ m_aImplicitBookmarks.emplace_back(aURL, pTableNode->GetIndex() + 2);
}
else if (sCmp == "toxmark")
{
OUString const name(aURL.copy(0, nPos));
OUString const nameDecoded(INetURLObject::decode(name,
INetURLObject::DecodeMechanism::WithCharset));
- std::optional<std::pair<SwTOXMark, sal_Int32>> const tmp(
- sw::PrepareJumpToTOXMark(m_rDoc, nameDecoded));
- if (tmp)
+ if (const auto tmp = sw::PrepareJumpToTOXMark(m_rDoc, nameDecoded))
{
SwTOXMark const* pMark(&tmp->first);
for (sal_Int32 i = 0; i < tmp->second; ++i)
{
pMark = &m_rDoc.GotoTOXMark(*pMark, TOX_SAME_NXT, true);
}
- if (pMark != &tmp->first)
+ if (!SfxPoolItem::areSame(pMark, &tmp->first))
{
m_TOXMarkBookmarksByURL.emplace(aURL, name);
m_TOXMarkBookmarksByTOXMark.emplace(pMark, nameDecoded);
}
}
}
- if (noBookmark)
- {
- aBookmarkPair aImplicitBookmark;
- aImplicitBookmark.first = aURL;
- aImplicitBookmark.second = nIdx;
- m_aImplicitBookmarks.push_back(aImplicitBookmark);
- }
}
void MSWordExportBase::CollectOutlineBookmarks(const SwDoc &rDoc)
{
- for (const SfxPoolItem* pItem : rDoc.GetAttrPool().GetItemSurrogates(RES_TXTATR_INETFMT))
+ ItemSurrogates aSurrogates;
+ rDoc.GetAttrPool().GetItemSurrogates(aSurrogates, RES_TXTATR_INETFMT);
+ for (const SfxPoolItem* pItem : aSurrogates)
{
auto pINetFormat = dynamic_cast<const SwFormatINetFormat*>(pItem);
if (!pINetFormat)
@@ -3267,7 +3371,8 @@ void MSWordExportBase::CollectOutlineBookmarks(const SwDoc &rDoc)
AddLinkTarget( pINetFormat->GetValue() );
}
- for (const SfxPoolItem* pItem : rDoc.GetAttrPool().GetItemSurrogates(RES_URL))
+ rDoc.GetAttrPool().GetItemSurrogates(aSurrogates, RES_URL);
+ for (const SfxPoolItem* pItem : aSurrogates)
{
auto pURL = dynamic_cast<const SwFormatURL*>(pItem);
if (!pURL)
@@ -3290,11 +3395,11 @@ void MSWordExportBase::CollectOutlineBookmarks(const SwDoc &rDoc)
namespace
{
- const sal_uLong WW_BLOCKSIZE = 0x200;
+ const sal_uInt64 WW_BLOCKSIZE = 0x200;
ErrCode EncryptRC4(msfilter::MSCodec_Std97& rCtx, SvStream &rIn, SvStream &rOut)
{
- sal_uLong nLen = rIn.TellEnd();
+ sal_uInt64 nLen = rIn.TellEnd();
rIn.Seek(0);
sal_uInt8 in[WW_BLOCKSIZE];
@@ -3336,20 +3441,19 @@ ErrCode MSWordExportBase::ExportDocument( bool bWriteAll )
m_pRedlAuthors = nullptr;
m_aTOXArr.clear();
- if ( !m_pOLEExp )
+ if ( !m_oOLEExp )
{
sal_uInt32 nSvxMSDffOLEConvFlags = 0;
- const SvtFilterOptions& rOpt = SvtFilterOptions::Get();
- if ( rOpt.IsMath2MathType() )
+ if (officecfg::Office::Common::Filter::Microsoft::Export::MathToMathType::get())
nSvxMSDffOLEConvFlags |= OLE_STARMATH_2_MATHTYPE;
- if ( rOpt.IsWriter2WinWord() )
+ if (officecfg::Office::Common::Filter::Microsoft::Export::WriterToWinWord::get())
nSvxMSDffOLEConvFlags |= OLE_STARWRITER_2_WINWORD;
- if ( rOpt.IsCalc2Excel() )
+ if (officecfg::Office::Common::Filter::Microsoft::Export::CalcToExcel::get())
nSvxMSDffOLEConvFlags |= OLE_STARCALC_2_EXCEL;
- if ( rOpt.IsImpress2PowerPoint() )
+ if (officecfg::Office::Common::Filter::Microsoft::Export::ImpressToPowerPoint::get())
nSvxMSDffOLEConvFlags |= OLE_STARIMPRESS_2_POWERPOINT;
- m_pOLEExp.reset(new SvxMSExportOLEObjects( nSvxMSDffOLEConvFlags ));
+ m_oOLEExp.emplace( nSvxMSDffOLEConvFlags );
}
if ( !m_pOCXExp && m_rDoc.GetDocShell() )
@@ -3388,11 +3492,11 @@ ErrCode MSWordExportBase::ExportDocument( bool bWriteAll )
m_aFrames.clear();
// park m_pCurPam in a "safe place" now that document is fully exported
- // before toggling redline mode to avoid ~SwIndexReg assert e.g. export
+ // before toggling redline mode to avoid ~SwContentIndexReg assert e.g. export
// ooo103014-1.odt to .doc
// park m_pOrigPam as well, as needed for exporting abi9915-1.odt to doc
m_pOrigPam->DeleteMark();
- *m_pOrigPam->GetPoint() = SwPosition(m_rDoc.GetNodes().GetEndOfContent());
+ m_pOrigPam->GetPoint()->Assign(m_rDoc.GetNodes().GetEndOfContent());
static_cast<SwPaM&>(*m_pCurPam) = *m_pOrigPam;
m_rDoc.getIDocumentRedlineAccess().SetRedlineFlags(m_nOrigRedlineFlags);
@@ -3406,7 +3510,7 @@ bool SwWW8Writer::InitStd97CodecUpdateMedium( ::msfilter::MSCodec_Std97& rCodec
if ( mpMedium )
{
- const SfxUnoAnyItem* pEncryptionDataItem = SfxItemSet::GetItem<SfxUnoAnyItem>(mpMedium->GetItemSet(), SID_ENCRYPTIONDATA, false);
+ const SfxUnoAnyItem* pEncryptionDataItem = mpMedium->GetItemSet().GetItem(SID_ENCRYPTIONDATA, false);
if ( pEncryptionDataItem && ( pEncryptionDataItem->GetValue() >>= aEncryptionData ) && !rCodec.InitCodec( aEncryptionData ) )
{
OSL_ENSURE( false, "Unexpected EncryptionData!" );
@@ -3416,15 +3520,15 @@ bool SwWW8Writer::InitStd97CodecUpdateMedium( ::msfilter::MSCodec_Std97& rCodec
if ( !aEncryptionData.hasElements() )
{
// try to generate the encryption data based on password
- const SfxStringItem* pPasswordItem = SfxItemSet::GetItem<SfxStringItem>(mpMedium->GetItemSet(), SID_PASSWORD, false);
+ const SfxStringItem* pPasswordItem = mpMedium->GetItemSet().GetItem(SID_PASSWORD, false);
if ( pPasswordItem && !pPasswordItem->GetValue().isEmpty() && pPasswordItem->GetValue().getLength() <= 15 )
{
// Generate random number with a seed of time as salt.
- rtlRandomPool aRandomPool = rtl_random_createPool ();
sal_uInt8 pDocId[ 16 ];
- rtl_random_getBytes( aRandomPool, pDocId, 16 );
-
- rtl_random_destroyPool( aRandomPool );
+ if (rtl_random_getBytes(nullptr, pDocId, 16) != rtl_Random_E_None)
+ {
+ throw uno::RuntimeException("rtl_random_getBytes failed");
+ }
sal_uInt16 aPassword[16] = {};
@@ -3435,12 +3539,12 @@ bool SwWW8Writer::InitStd97CodecUpdateMedium( ::msfilter::MSCodec_Std97& rCodec
rCodec.InitKey( aPassword, pDocId );
aEncryptionData = rCodec.GetEncryptionData();
- mpMedium->GetItemSet()->Put( SfxUnoAnyItem( SID_ENCRYPTIONDATA, uno::makeAny( aEncryptionData ) ) );
+ mpMedium->GetItemSet().Put( SfxUnoAnyItem( SID_ENCRYPTIONDATA, uno::Any( aEncryptionData ) ) );
}
}
if ( aEncryptionData.hasElements() )
- mpMedium->GetItemSet()->ClearItem( SID_PASSWORD );
+ mpMedium->GetItemSet().ClearItem( SID_PASSWORD );
}
// nonempty encryption data means here that the codec was successfully initialized
@@ -3451,13 +3555,16 @@ ErrCode WW8Export::ExportDocument_Impl()
{
PrepareStorage();
- pFib.reset(new WW8Fib(8, m_bDot));
+ m_pFib.reset(new WW8Fib(8, m_bDot));
- tools::SvRef<SotStorageStream> xWwStrm( GetWriter().GetStorage().OpenSotStream( m_aMainStg ) );
- tools::SvRef<SotStorageStream> xTableStrm( xWwStrm ), xDataStrm( xWwStrm );
+ rtl::Reference<SotStorageStream> xWwStrm(GetWriter().GetStorage().OpenSotStream(m_aMainStg));
+ if (!xWwStrm->IsWritable())
+ return ERRCODE_IO_ACCESSDENIED;
+
+ rtl::Reference<SotStorageStream> xTableStrm(xWwStrm), xDataStrm(xWwStrm);
xWwStrm->SetBufferSize( 32768 );
- pFib->m_fWhichTableStm = true;
+ m_pFib->m_fWhichTableStm = true;
xTableStrm = GetWriter().GetStorage().OpenSotStream(SL::a1Table, StreamMode::STD_WRITE);
xDataStrm = GetWriter().GetStorage().OpenSotStream(SL::aData, StreamMode::STD_WRITE);
@@ -3468,17 +3575,14 @@ ErrCode WW8Export::ExportDocument_Impl()
xDataStrm->SetEndian( SvStreamEndian::LITTLE );
GetWriter().SetStream( xWwStrm.get() );
- pTableStrm = xTableStrm.get();
- pDataStrm = xDataStrm.get();
+ m_pTableStrm = xTableStrm.get();
+ m_pDataStrm = xDataStrm.get();
Strm().SetEndian( SvStreamEndian::LITTLE );
- utl::TempFile aTempMain;
- aTempMain.EnableKillingFile();
- utl::TempFile aTempTable;
- aTempTable.EnableKillingFile();
- utl::TempFile aTempData;
- aTempData.EnableKillingFile();
+ utl::TempFileFast aTempMain;
+ utl::TempFileFast aTempTable;
+ utl::TempFileFast aTempData;
msfilter::MSCodec_Std97 aCtx;
bool bEncrypt = GetWriter().InitStd97CodecUpdateMedium(aCtx);
@@ -3487,33 +3591,33 @@ ErrCode WW8Export::ExportDocument_Impl()
GetWriter().SetStream(
aTempMain.GetStream( StreamMode::READWRITE | StreamMode::SHARE_DENYWRITE ) );
- pTableStrm = aTempTable.GetStream( StreamMode::READWRITE | StreamMode::SHARE_DENYWRITE );
+ m_pTableStrm = aTempTable.GetStream( StreamMode::READWRITE | StreamMode::SHARE_DENYWRITE );
- pDataStrm = aTempData.GetStream( StreamMode::READWRITE | StreamMode::SHARE_DENYWRITE );
+ m_pDataStrm = aTempData.GetStream( StreamMode::READWRITE | StreamMode::SHARE_DENYWRITE );
sal_uInt8 const aRC4EncryptionHeader[ 52 ] = {0};
- pTableStrm->WriteBytes(aRC4EncryptionHeader, 52);
+ m_pTableStrm->WriteBytes(aRC4EncryptionHeader, 52);
}
// Default: "Standard"
- pSepx.reset(new WW8_WrPlcSepx( *this )); // Sections/headers/footers
+ m_pSepx.reset(new WW8_WrPlcSepx( *this )); // Sections/headers/footers
- pFootnote.reset(new WW8_WrPlcFootnoteEdn( TXT_FTN )); // Footnotes
- pEdn.reset(new WW8_WrPlcFootnoteEdn( TXT_EDN )); // Endnotes
- m_pAtn = new WW8_WrPlcAnnotations; // PostIts
+ m_pFootnote.reset(new WW8_WrPlcFootnoteEdn( TXT_FTN )); // Footnotes
+ m_pEdn.reset(new WW8_WrPlcFootnoteEdn( TXT_EDN )); // Endnotes
+ m_pAtn.reset(new WW8_WrPlcAnnotations); // PostIts
m_pFactoids.reset(new WW8_WrtFactoids); // Smart tags.
- m_pTextBxs = new WW8_WrPlcTextBoxes( TXT_TXTBOX );
- m_pHFTextBxs = new WW8_WrPlcTextBoxes( TXT_HFTXTBOX );
+ m_pTextBxs.reset(new WW8_WrPlcTextBoxes( TXT_TXTBOX ));
+ m_pHFTextBxs.reset(new WW8_WrPlcTextBoxes( TXT_HFTXTBOX ));
- m_pSdrObjs = new MainTextPlcDrawObj; // Draw-/Fly-Objects for main text
- m_pHFSdrObjs = new HdFtPlcDrawObj; // Draw-/Fly-Objects for header/footer
+ m_pSdrObjs.reset(new MainTextPlcDrawObj); // Draw-/Fly-Objects for main text
+ m_pHFSdrObjs.reset(new HdFtPlcDrawObj); // Draw-/Fly-Objects for header/footer
- m_pBkmks = new WW8_WrtBookmarks; // Bookmarks
+ m_pBkmks.reset(new WW8_WrtBookmarks); // Bookmarks
GetWriter().CreateBookmarkTable();
- m_pPapPlc.reset(new WW8_WrPlcPn( *this, PAP, pFib->m_fcMin ));
- m_pChpPlc.reset(new WW8_WrPlcPn( *this, CHP, pFib->m_fcMin ));
- pO.reset(new ww::bytes);
+ m_pPapPlc.reset(new WW8_WrPlcPn( *this, PAP, m_pFib->m_fcMin ));
+ m_pChpPlc.reset(new WW8_WrPlcPn( *this, CHP, m_pFib->m_fcMin ));
+ m_pO.reset(new ww::bytes);
m_pStyles.reset(new MSWordStyles( *this ));
m_pFieldMain.reset(new WW8_WrPlcField( 2, TXT_MAINTEXT ));
m_pFieldHdFt.reset(new WW8_WrPlcField( 2, TXT_HDFT ));
@@ -3526,22 +3630,22 @@ ErrCode WW8Export::ExportDocument_Impl()
m_pMagicTable.reset(new WW8_WrMagicTable);
m_pGrf.reset(new SwWW8WrGrf( *this ));
- m_pPiece = new WW8_WrPct( pFib->m_fcMin );
- pDop.reset(new WW8Dop);
+ m_pPiece.reset(new WW8_WrPct( m_pFib->m_fcMin ));
+ m_pDop.reset(new WW8Dop);
- pDop->fRevMarking = bool( RedlineFlags::On & m_nOrigRedlineFlags );
+ m_pDop->fRevMarking = bool( RedlineFlags::On & m_nOrigRedlineFlags );
SwRootFrame const*const pLayout(m_rDoc.getIDocumentLayoutAccess().GetCurrentLayout());
- pDop->fRMView = pLayout == nullptr || !pLayout->IsHideRedlines();
- pDop->fRMPrint = pDop->fRMView;
+ m_pDop->fRMView = pLayout == nullptr || !pLayout->IsHideRedlines();
+ m_pDop->fRMPrint = m_pDop->fRMView;
// set AutoHyphenation flag if found in default para style
- const SfxPoolItem* pItem;
+ const SvxHyphenZoneItem* pItem;
SwTextFormatColl* pStdTextFormatColl =
m_rDoc.getIDocumentStylePoolAccess().GetTextCollFromPool(RES_POOLCOLL_STANDARD, false);
- if (pStdTextFormatColl && SfxItemState::SET == pStdTextFormatColl->GetItemState(
- RES_PARATR_HYPHENZONE, false, &pItem))
+ if (pStdTextFormatColl && (pItem = pStdTextFormatColl->GetItemIfSet(
+ RES_PARATR_HYPHENZONE, false)))
{
- pDop->fAutoHyphen = static_cast<const SvxHyphenZoneItem*>(pItem)->IsHyphen();
+ m_pDop->fAutoHyphen = pItem->IsHyphen();
}
StoreDoc1();
@@ -3555,13 +3659,13 @@ ErrCode WW8Export::ExportDocument_Impl()
pDataStrmTemp = xDataStrm.get();
if ( pDataStrmTemp && pDataStrmTemp != pStrmTemp) {
- err = EncryptRC4(aCtx, *pDataStrm, *pDataStrmTemp);
+ err = EncryptRC4(aCtx, *m_pDataStrm, *pDataStrmTemp);
if (err != ERRCODE_NONE) {
goto done;
}
}
- err = EncryptRC4(aCtx, *pTableStrm, *pTableStrmTemp);
+ err = EncryptRC4(aCtx, *m_pTableStrm, *pTableStrmTemp);
if (err != ERRCODE_NONE) {
goto done;
}
@@ -3588,13 +3692,13 @@ ErrCode WW8Export::ExportDocument_Impl()
}
// Write Unencrypted Fib 68 bytes to the start of the workdocument stream
- pFib->m_fEncrypted = true; // fEncrypted indicates the document is encrypted.
- pFib->m_fObfuscated = false; // Must be 0 for RC4.
- pFib->m_nHash = 0x34; // encrypt header bytes count of table stream.
- pFib->m_nKey = 0; // lkey2 must be 0 for RC4.
+ m_pFib->m_fEncrypted = true; // fEncrypted indicates the document is encrypted.
+ m_pFib->m_fObfuscated = false; // Must be 0 for RC4.
+ m_pFib->m_nHash = 0x34; // encrypt header bytes count of table stream.
+ m_pFib->m_nKey = 0; // lkey2 must be 0 for RC4.
pStrmTemp->Seek( 0 );
- pFib->WriteHeader( *pStrmTemp );
+ m_pFib->WriteHeader( *pStrmTemp );
done:;
}
@@ -3608,32 +3712,32 @@ ErrCode WW8Export::ExportDocument_Impl()
m_pFieldHdFt.reset();
m_pFieldMain.reset();
m_pStyles.reset();
- pO.reset();
+ m_pO.reset();
m_pChpPlc.reset();
m_pPapPlc.reset();
- pSepx.reset();
-
- delete m_pRedlAuthors;
- delete m_pSdrObjs;
- delete m_pHFSdrObjs;
- delete m_pTextBxs;
- delete m_pHFTextBxs;
- delete m_pAtn;
- pEdn.reset();
- pFootnote.reset();
- delete m_pBkmks;
- delete m_pPiece;
- pDop.reset();
- pFib.reset();
+ m_pSepx.reset();
+
+ m_pRedlAuthors.reset();
+ m_pSdrObjs.reset();
+ m_pHFSdrObjs.reset();
+ m_pTextBxs.reset();
+ m_pHFTextBxs.reset();
+ m_pAtn.reset();
+ m_pEdn.reset();
+ m_pFootnote.reset();
+ m_pBkmks.reset();
+ m_pPiece.reset();
+ m_pDop.reset();
+ m_pFib.reset();
GetWriter().SetStream( nullptr );
xWwStrm->SetBufferSize( 0 );
xTableStrm->SetBufferSize( 0 );
xDataStrm->SetBufferSize( 0 );
- if( 0 == pDataStrm->Seek( STREAM_SEEK_TO_END ))
+ if( 0 == m_pDataStrm->Seek( STREAM_SEEK_TO_END ))
{
xDataStrm.clear();
- pDataStrm = nullptr;
+ m_pDataStrm = nullptr;
GetWriter().GetStorage().Remove(SL::aData);
}
@@ -3669,7 +3773,7 @@ void WW8Export::PrepareStorage()
SvGlobalName aGName(MSO_WW8_CLASSID);
GetWriter().GetStorage().SetClass(
aGName, SotClipboardFormatId::NONE, "Microsoft Word-Document");
- tools::SvRef<SotStorageStream> xStor( GetWriter().GetStorage().OpenSotStream(sCompObj) );
+ rtl::Reference<SotStorageStream> xStor(GetWriter().GetStorage().OpenSotStream(sCompObj));
xStor->WriteBytes(pData, sizeof(pData));
SwDocShell* pDocShell = m_rDoc.GetDocShell ();
@@ -3686,7 +3790,7 @@ void WW8Export::PrepareStorage()
if (!xDocProps.is())
return;
- if ( SvtFilterOptions::Get().IsEnableWordPreview() )
+ if (officecfg::Office::Common::Filter::Microsoft::Export::EnableWordPreview::get())
{
std::shared_ptr<GDIMetaFile> xMetaFile =
pDocShell->GetPreviewMetaFile();
@@ -3698,16 +3802,16 @@ void WW8Export::PrepareStorage()
sfx2::SaveOlePropertySet( xDocProps, &GetWriter().GetStorage() );
}
-ErrCode SwWW8Writer::WriteStorage()
+ErrCodeMsg SwWW8Writer::WriteStorage()
{
- tools::SvRef<SotStorage> pOrigStg;
+ rtl::Reference<SotStorage> pOrigStg;
uno::Reference< packages::XPackageEncryption > xPackageEncryption;
std::shared_ptr<SvStream> pSotStorageStream;
uno::Sequence< beans::NamedValue > aEncryptionData;
if (mpMedium)
{
// Check for specific encryption requests
- const SfxUnoAnyItem* pEncryptionDataItem = SfxItemSet::GetItem<SfxUnoAnyItem>(mpMedium->GetItemSet(), SID_ENCRYPTIONDATA, false);
+ const SfxUnoAnyItem* pEncryptionDataItem = mpMedium->GetItemSet().GetItem(SID_ENCRYPTIONDATA, false);
if (pEncryptionDataItem && (pEncryptionDataItem->GetValue() >>= aEncryptionData))
{
::comphelper::SequenceAsHashMap aHashData(aEncryptionData);
@@ -3717,12 +3821,12 @@ ErrCode SwWW8Writer::WriteStorage()
{
uno::Reference<uno::XComponentContext> xComponentContext(comphelper::getProcessComponentContext());
uno::Sequence<uno::Any> aArguments{
- uno::makeAny(beans::NamedValue("Binary", uno::makeAny(true))) };
+ uno::Any(beans::NamedValue("Binary", uno::Any(true))) };
xPackageEncryption.set(
xComponentContext->getServiceManager()->createInstanceWithArgumentsAndContext(
"com.sun.star.comp.oox.crypto." + sCryptoType, aArguments, xComponentContext), uno::UNO_QUERY);
- if (xPackageEncryption.is())
+ if (xPackageEncryption)
{
// We have an encryptor
// Create new temporary storage for content
@@ -3736,8 +3840,10 @@ ErrCode SwWW8Writer::WriteStorage()
ErrCode nErrorCode = WriteStorageImpl();
- if (xPackageEncryption.is())
+ if (xPackageEncryption)
{
+ assert(pSotStorageStream && m_pStg && "because always set if xPackageEncryption was set");
+
m_pStg->Commit();
pSotStorageStream->Seek(0);
@@ -3748,11 +3854,11 @@ ErrCode SwWW8Writer::WriteStorage()
uno::Sequence<beans::NamedValue> aStreams = xPackageEncryption->encrypt(xInputStream);
m_pStg = pOrigStg;
- for (const beans::NamedValue & aStreamData : std::as_const(aStreams))
+ for (const beans::NamedValue& aStreamData : aStreams)
{
// To avoid long paths split and open substorages recursively
// Splitting paths manually, since comphelper::string::split is trimming special characters like \0x01, \0x09
- tools::SvRef<SotStorage> pStorage = m_pStg.get();
+ rtl::Reference<SotStorage> pStorage = m_pStg;
OUString sFileName;
sal_Int32 idx = 0;
while (pStorage && idx >= 0)
@@ -3779,7 +3885,7 @@ ErrCode SwWW8Writer::WriteStorage()
break;
}
- tools::SvRef<SotStorageStream> pStream = pStorage->OpenSotStream(sFileName);
+ rtl::Reference<SotStorageStream> pStream = pStorage->OpenSotStream(sFileName);
if (!pStream)
{
nErrorCode = ERRCODE_IO_GENERAL;
@@ -3805,15 +3911,15 @@ ErrCode SwWW8Writer::WriteStorageImpl()
if( pViewShell != nullptr )
pViewShell->CalcLayout();
- tools::Long nMaxNode = m_pDoc->GetNodes().Count();
- ::StartProgress( STR_STATSTR_W4WWRITE, 0, nMaxNode, m_pDoc->GetDocShell() );
+ SwNodeOffset nMaxNode = m_pDoc->GetNodes().Count();
+ ::StartProgress( STR_STATSTR_W4WWRITE, 0, sal_Int32(nMaxNode), m_pDoc->GetDocShell() );
// Respect table at the beginning of the document
{
- SwTableNode* pTNd = m_pCurrentPam->GetNode().FindTableNode();
+ SwTableNode* pTNd = m_pCurrentPam->GetPointNode().FindTableNode();
if( pTNd && m_bWriteAll )
// start with the table node !!
- m_pCurrentPam->GetPoint()->nNode = *pTNd;
+ m_pCurrentPam->GetPoint()->Assign(*pTNd);
}
// Do the actual export
@@ -3830,16 +3936,16 @@ ErrCode SwWW8Writer::WriteStorageImpl()
return err;
}
-ErrCode SwWW8Writer::WriteMedium( SfxMedium& )
+ErrCodeMsg SwWW8Writer::WriteMedium( SfxMedium& )
{
return WriteStorage();
}
-ErrCode SwWW8Writer::Write( SwPaM& rPaM, SfxMedium& rMed,
+ErrCodeMsg SwWW8Writer::Write( SwPaM& rPaM, SfxMedium& rMed,
const OUString* pFileName )
{
mpMedium = &rMed;
- ErrCode nRet = StgWriter::Write( rPaM, rMed, pFileName );
+ ErrCodeMsg nRet = StgWriter::Write( rPaM, rMed, pFileName );
mpMedium = nullptr;
return nRet;
}
@@ -3847,10 +3953,7 @@ ErrCode SwWW8Writer::Write( SwPaM& rPaM, SfxMedium& rMed,
MSWordExportBase::MSWordExportBase( SwDoc& rDocument, std::shared_ptr<SwUnoCursor> & pCurrentPam, SwPaM* pOriginalPam )
: m_aMainStg(sMainStream)
, m_pISet(nullptr)
- , m_pPiece(nullptr)
, m_pTopNodeOfHdFtPage(nullptr)
- , m_pBkmks(nullptr)
- , m_pRedlAuthors(nullptr)
, m_pTableInfo(std::make_shared<ww8::WW8TableInfo>())
, m_nCharFormatStart(0)
, m_nFormatCollStart(0)
@@ -3861,19 +3964,15 @@ MSWordExportBase::MSWordExportBase( SwDoc& rDocument, std::shared_ptr<SwUnoCurso
, m_nOrigRedlineFlags(RedlineFlags::NONE)
, m_bOrigShowChanges(true)
, m_pCurrentPageDesc(nullptr)
+ , m_pPreviousSectionPageDesc(nullptr)
, m_bFirstTOCNodeWithSection(false)
, m_pChpIter(nullptr)
- , m_pAtn(nullptr)
- , m_pTextBxs(nullptr)
- , m_pHFTextBxs(nullptr)
, m_pParentFrame(nullptr)
, m_pFlyOffset(nullptr)
, m_eNewAnchorType(RndStdIds::FLY_AS_CHAR)
, m_pStyAttr(nullptr)
, m_pOutFormatNode(nullptr)
, m_pCurrentStyle(nullptr)
- , m_pSdrObjs(nullptr)
- , m_pHFSdrObjs(nullptr)
, m_pEscher(nullptr)
, m_nTextTyp(0)
, m_bStyDef(false)
@@ -3898,8 +3997,8 @@ MSWordExportBase::MSWordExportBase( SwDoc& rDocument, std::shared_ptr<SwUnoCurso
, m_bFontSizeWritten(false)
, m_bAddFootnoteTab(false)
, m_rDoc(rDocument)
- , m_nCurStart(pCurrentPam->GetPoint()->nNode.GetIndex())
- , m_nCurEnd(pCurrentPam->GetMark()->nNode.GetIndex())
+ , m_nCurStart(pCurrentPam->GetPoint()->GetNodeIndex())
+ , m_nCurEnd(pCurrentPam->GetMark()->GetNodeIndex())
, m_pCurPam(pCurrentPam)
, m_pOrigPam(pOriginalPam)
{
@@ -3915,7 +4014,7 @@ MSWordExportBase::~MSWordExportBase()
m_pUsedNumTable->erase(m_pUsedNumTable->begin(), m_pUsedNumTable->begin() + m_pUsedNumTable->size() - m_nUniqueList);
m_pUsedNumTable.reset();
}
- m_pOLEExp.reset();
+ m_oOLEExp.reset();
m_pOCXExp.reset();
}
@@ -3923,8 +4022,8 @@ WW8Export::WW8Export( SwWW8Writer *pWriter,
SwDoc& rDocument, std::shared_ptr<SwUnoCursor> & pCurrentPam, SwPaM* pOriginalPam,
bool bDot )
: MSWordExportBase( rDocument, pCurrentPam, pOriginalPam )
- , pTableStrm(nullptr)
- , pDataStrm(nullptr)
+ , m_pTableStrm(nullptr)
+ , m_pDataStrm(nullptr)
, m_bDot(bDot)
, m_pWriter(pWriter)
, m_pAttrOutput(new WW8AttributeOutput(*this))
@@ -3942,12 +4041,11 @@ AttributeOutputBase& WW8Export::AttrOutput() const
MSWordSections& WW8Export::Sections() const
{
- return *pSepx;
+ return *m_pSepx;
}
-SwWW8Writer::SwWW8Writer(const OUString& rFltName, const OUString& rBaseURL)
- : StgWriter(),
- m_pExport( nullptr ),
+SwWW8Writer::SwWW8Writer(std::u16string_view rFltName, const OUString& rBaseURL)
+ : m_pExport( nullptr ),
mpMedium( nullptr )
{
assert(rFltName == FILTER_WW8); // WW6/7 export was removed
@@ -3965,7 +4063,7 @@ extern "C" SAL_DLLPUBLIC_EXPORT sal_uInt32 SaveOrDelMSVBAStorage_ww8( SfxObjectS
return sal_uInt32(aTmp.SaveOrDelMSVBAStorage( bSaveInto, rStorageName ));
}
-extern "C" SAL_DLLPUBLIC_EXPORT void ExportDOC( const OUString& rFltName, const OUString& rBaseURL, WriterRef& xRet )
+extern "C" SAL_DLLPUBLIC_EXPORT void ExportDOC( std::u16string_view rFltName, const OUString& rBaseURL, WriterRef& xRet )
{
xRet = new SwWW8Writer( rFltName, rBaseURL );
}
@@ -3978,73 +4076,73 @@ extern "C" SAL_DLLPUBLIC_EXPORT sal_uInt32 GetSaveWarningOfMSVBAStorage_ww8( Sf
bool WW8_WrPlcFootnoteEdn::WriteText( WW8Export& rWrt )
{
bool bRet = false;
- if (TXT_FTN == nTyp)
+ if (TXT_FTN == m_nTyp)
{
- bRet = WriteGenericText( rWrt, TXT_FTN, rWrt.pFib->m_ccpFootnote );
+ bRet = WriteGenericText( rWrt, TXT_FTN, rWrt.m_pFib->m_ccpFootnote );
rWrt.m_pFieldFootnote->Finish( rWrt.Fc2Cp( rWrt.Strm().Tell() ),
- rWrt.pFib->m_ccpText );
+ rWrt.m_pFib->m_ccpText );
}
else
{
- bRet = WriteGenericText( rWrt, TXT_EDN, rWrt.pFib->m_ccpEdn );
+ bRet = WriteGenericText( rWrt, TXT_EDN, rWrt.m_pFib->m_ccpEdn );
rWrt.m_pFieldEdn->Finish( rWrt.Fc2Cp( rWrt.Strm().Tell() ),
- rWrt.pFib->m_ccpText + rWrt.pFib->m_ccpFootnote
- + rWrt.pFib->m_ccpHdr + rWrt.pFib->m_ccpAtn );
+ rWrt.m_pFib->m_ccpText + rWrt.m_pFib->m_ccpFootnote
+ + rWrt.m_pFib->m_ccpHdr + rWrt.m_pFib->m_ccpAtn );
}
return bRet;
}
void WW8_WrPlcFootnoteEdn::WritePlc( WW8Export& rWrt ) const
{
- if( TXT_FTN == nTyp )
+ if( TXT_FTN == m_nTyp )
{
- WriteGenericPlc( rWrt, TXT_FTN, rWrt.pFib->m_fcPlcffndText,
- rWrt.pFib->m_lcbPlcffndText, rWrt.pFib->m_fcPlcffndRef,
- rWrt.pFib->m_lcbPlcffndRef );
+ WriteGenericPlc( rWrt, TXT_FTN, rWrt.m_pFib->m_fcPlcffndText,
+ rWrt.m_pFib->m_lcbPlcffndText, rWrt.m_pFib->m_fcPlcffndRef,
+ rWrt.m_pFib->m_lcbPlcffndRef );
}
else
{
- WriteGenericPlc( rWrt, TXT_EDN, rWrt.pFib->m_fcPlcfendText,
- rWrt.pFib->m_lcbPlcfendText, rWrt.pFib->m_fcPlcfendRef,
- rWrt.pFib->m_lcbPlcfendRef );
+ WriteGenericPlc( rWrt, TXT_EDN, rWrt.m_pFib->m_fcPlcfendText,
+ rWrt.m_pFib->m_lcbPlcfendText, rWrt.m_pFib->m_fcPlcfendRef,
+ rWrt.m_pFib->m_lcbPlcfendRef );
}
}
bool WW8_WrPlcAnnotations::WriteText( WW8Export& rWrt )
{
- bool bRet = WriteGenericText( rWrt, TXT_ATN, rWrt.pFib->m_ccpAtn );
+ bool bRet = WriteGenericText( rWrt, TXT_ATN, rWrt.m_pFib->m_ccpAtn );
rWrt.m_pFieldAtn->Finish( rWrt.Fc2Cp( rWrt.Strm().Tell() ),
- rWrt.pFib->m_ccpText + rWrt.pFib->m_ccpFootnote
- + rWrt.pFib->m_ccpHdr );
+ rWrt.m_pFib->m_ccpText + rWrt.m_pFib->m_ccpFootnote
+ + rWrt.m_pFib->m_ccpHdr );
return bRet;
}
void WW8_WrPlcAnnotations::WritePlc( WW8Export& rWrt ) const
{
- WriteGenericPlc( rWrt, TXT_ATN, rWrt.pFib->m_fcPlcfandText,
- rWrt.pFib->m_lcbPlcfandText, rWrt.pFib->m_fcPlcfandRef,
- rWrt.pFib->m_lcbPlcfandRef );
+ WriteGenericPlc( rWrt, TXT_ATN, rWrt.m_pFib->m_fcPlcfandText,
+ rWrt.m_pFib->m_lcbPlcfandText, rWrt.m_pFib->m_fcPlcfandRef,
+ rWrt.m_pFib->m_lcbPlcfandRef );
}
void WW8_WrPlcTextBoxes::WritePlc( WW8Export& rWrt ) const
{
- if( TXT_TXTBOX == nTyp )
+ if( TXT_TXTBOX == m_nTyp )
{
- WriteGenericPlc( rWrt, nTyp, rWrt.pFib->m_fcPlcftxbxBkd,
- rWrt.pFib->m_lcbPlcftxbxBkd, rWrt.pFib->m_fcPlcftxbxText,
- rWrt.pFib->m_lcbPlcftxbxText );
+ WriteGenericPlc( rWrt, m_nTyp, rWrt.m_pFib->m_fcPlcftxbxBkd,
+ rWrt.m_pFib->m_lcbPlcftxbxBkd, rWrt.m_pFib->m_fcPlcftxbxText,
+ rWrt.m_pFib->m_lcbPlcftxbxText );
}
else
{
- WriteGenericPlc( rWrt, nTyp, rWrt.pFib->m_fcPlcfHdrtxbxBkd,
- rWrt.pFib->m_lcbPlcfHdrtxbxBkd, rWrt.pFib->m_fcPlcfHdrtxbxText,
- rWrt.pFib->m_lcbPlcfHdrtxbxText );
+ WriteGenericPlc( rWrt, m_nTyp, rWrt.m_pFib->m_fcPlcfHdrtxbxBkd,
+ rWrt.m_pFib->m_lcbPlcfHdrtxbxBkd, rWrt.m_pFib->m_fcPlcfHdrtxbxText,
+ rWrt.m_pFib->m_lcbPlcfHdrtxbxText );
}
}
void WW8Export::RestoreMacroCmds()
{
- pFib->m_fcCmds = pTableStrm->Tell();
+ m_pFib->m_fcCmds = m_pTableStrm->Tell();
uno::Reference < embed::XStorage > xSrcRoot(m_rDoc.GetDocShell()->GetStorage());
try
@@ -4055,13 +4153,13 @@ void WW8Export::RestoreMacroCmds()
if ( pStream && ERRCODE_NONE == pStream->GetError())
{
- pFib->m_lcbCmds = pStream->TellEnd();
+ m_pFib->m_lcbCmds = pStream->TellEnd();
pStream->Seek(0);
- std::unique_ptr<sal_uInt8[]> pBuffer( new sal_uInt8[pFib->m_lcbCmds] );
- bool bReadOk = checkRead(*pStream, pBuffer.get(), pFib->m_lcbCmds);
+ std::unique_ptr<sal_uInt8[]> pBuffer( new sal_uInt8[m_pFib->m_lcbCmds] );
+ bool bReadOk = checkRead(*pStream, pBuffer.get(), m_pFib->m_lcbCmds);
if (bReadOk)
- pTableStrm->WriteBytes(pBuffer.get(), pFib->m_lcbCmds);
+ m_pTableStrm->WriteBytes(pBuffer.get(), m_pFib->m_lcbCmds);
}
}
catch ( const uno::Exception& )
@@ -4069,7 +4167,7 @@ void WW8Export::RestoreMacroCmds()
}
// set len to FIB
- pFib->m_lcbCmds = pTableStrm->Tell() - pFib->m_fcCmds;
+ m_pFib->m_lcbCmds = m_pTableStrm->Tell() - m_pFib->m_fcCmds;
}
void WW8SHDLong::Write( WW8Export& rExport )
@@ -4098,17 +4196,11 @@ void WW8Export::WriteFormData( const ::sw::mark::IFieldmark& rFieldmark )
if ( rFieldmark.GetFieldname() == ODF_FORMDROPDOWN )
type=2;
- ::sw::mark::IFieldmark::parameter_map_t::const_iterator pParameter = rFieldmark.GetParameters()->find("name");
- OUString ffname;
- if ( pParameter != rFieldmark.GetParameters()->end() )
- {
- OUString aName;
- pParameter->second >>= aName;
- const sal_Int32 nLen = std::min( sal_Int32(20), aName.getLength() );
- ffname = aName.copy(0, nLen);
- }
+ OUString ffname = rFieldmark.GetName();
+ if (ffname.getLength() > 20)
+ ffname = ffname.copy(0, 20);
- sal_uInt64 nDataStt = pDataStrm->Tell();
+ sal_uInt64 nDataStt = m_pDataStrm->Tell();
m_pChpPlc->AppendFkpEntry(Strm().Tell());
WriteChar(0x01);
@@ -4158,10 +4250,12 @@ void WW8Export::WriteFormData( const ::sw::mark::IFieldmark& rFieldmark )
OUString ffstattext;
OUString ffentrymcr;
OUString ffexitmcr;
+
+ ::sw::mark::IFieldmark::parameter_map_t::const_iterator pParameter
+ = rFieldmark.GetParameters()->find("Type");
if (type == 0) // iTypeText
{
sal_uInt16 nType = 0;
- pParameter = rFieldmark.GetParameters()->find("Type");
if ( pParameter != rFieldmark.GetParameters()->end() )
{
OUString aType;
@@ -4257,7 +4351,8 @@ void WW8Export::WriteFormData( const ::sw::mark::IFieldmark& rFieldmark )
{
uno::Sequence< OUString > vListEntries;
pListEntries->second >>= vListEntries;
- copy(vListEntries.begin(), vListEntries.end(), back_inserter(aListItems));
+ aListItems.reserve(vListEntries.getLength());
+ copy(std::cbegin(vListEntries), std::cend(vListEntries), back_inserter(aListItems));
}
}
@@ -4293,33 +4388,33 @@ void WW8Export::WriteFormData( const ::sw::mark::IFieldmark& rFieldmark )
}
}
- pDataStrm->WriteUInt32( slen );
+ m_pDataStrm->WriteUInt32( slen );
int len = sizeof( aFieldData );
OSL_ENSURE( len == 0x44-sizeof(sal_uInt32), "SwWW8Writer::WriteFormData(..) - wrong aFieldData length" );
- pDataStrm->WriteBytes( aFieldData, len );
+ m_pDataStrm->WriteBytes( aFieldData, len );
- pDataStrm->WriteUInt32( aFieldHeader.version ).WriteUInt16( aFieldHeader.bits ).WriteUInt16( aFieldHeader.cch ).WriteUInt16( aFieldHeader.hps );
+ m_pDataStrm->WriteUInt32( aFieldHeader.version ).WriteUInt16( aFieldHeader.bits ).WriteUInt16( aFieldHeader.cch ).WriteUInt16( aFieldHeader.hps );
- SwWW8Writer::WriteString_xstz( *pDataStrm, ffname, true ); // Form field name
+ SwWW8Writer::WriteString_xstz( *m_pDataStrm, ffname, true ); // Form field name
if ( !type )
- SwWW8Writer::WriteString_xstz( *pDataStrm, ffdeftext, true );
+ SwWW8Writer::WriteString_xstz( *m_pDataStrm, ffdeftext, true );
if ( type )
- pDataStrm->WriteUInt16( 0 );
+ m_pDataStrm->WriteUInt16( 0 );
- SwWW8Writer::WriteString_xstz( *pDataStrm, ffformat, true );
- SwWW8Writer::WriteString_xstz( *pDataStrm, ffhelptext, true );
- SwWW8Writer::WriteString_xstz( *pDataStrm, ffstattext, true );
- SwWW8Writer::WriteString_xstz( *pDataStrm, ffentrymcr, true );
- SwWW8Writer::WriteString_xstz( *pDataStrm, ffexitmcr, true );
+ SwWW8Writer::WriteString_xstz( *m_pDataStrm, ffformat, true );
+ SwWW8Writer::WriteString_xstz( *m_pDataStrm, ffhelptext, true );
+ SwWW8Writer::WriteString_xstz( *m_pDataStrm, ffstattext, true );
+ SwWW8Writer::WriteString_xstz( *m_pDataStrm, ffentrymcr, true );
+ SwWW8Writer::WriteString_xstz( *m_pDataStrm, ffexitmcr, true );
if (type==2) {
- pDataStrm->WriteUInt16( 0xFFFF );
+ m_pDataStrm->WriteUInt16( 0xFFFF );
const int items=aListItems.size();
- pDataStrm->WriteUInt32( items );
+ m_pDataStrm->WriteUInt32( items );
for(int i=0;i<items;i++) {
OUString item=aListItems[i];
- SwWW8Writer::WriteString_xstz( *pDataStrm, item, false );
+ SwWW8Writer::WriteString_xstz( *m_pDataStrm, item, false );
}
}
}
@@ -4329,7 +4424,7 @@ void WW8Export::WriteHyperlinkData( const sw::mark::IFieldmark& /*rFieldmark*/ )
//@TODO implement me !!!
}
-void WW8AttributeOutput::TableNodeInfoInner( ww8::WW8TableNodeInfoInner::Pointer_t pNodeInfoInner )
+void WW8AttributeOutput::TableNodeInfoInner(const ww8::WW8TableNodeInfoInner::Pointer_t& pNodeInfoInner)
{
SVBT16 nStyle;
ShortToSVBT16( m_rWW8Export.m_nStyleBeforeFly, nStyle );
@@ -4338,7 +4433,7 @@ void WW8AttributeOutput::TableNodeInfoInner( ww8::WW8TableNodeInfoInner::Pointer
SAL_INFO( "sw.ww8", "<OutWW8_TableNodeInfoInner>" << pNodeInfoInner->toString());
#endif
- m_rWW8Export.pO->clear();
+ m_rWW8Export.m_pO->clear();
sal_uInt32 nShadowsBefore = pNodeInfoInner->getShadowsBefore();
if (nShadowsBefore > 0)
@@ -4353,12 +4448,12 @@ void WW8AttributeOutput::TableNodeInfoInner( ww8::WW8TableNodeInfoInner::Pointer
{
m_rWW8Export.WriteCR(pTmpNodeInfoInner);
- m_rWW8Export.pO->insert( m_rWW8Export.pO->end(), nStyle, nStyle+2 ); // Style #
+ m_rWW8Export.m_pO->insert( m_rWW8Export.m_pO->end(), nStyle, nStyle+2 ); // Style #
TableInfoCell(pTmpNodeInfoInner);
m_rWW8Export.m_pPapPlc->AppendFkpEntry
- ( m_rWW8Export.Strm().Tell(), m_rWW8Export.pO->size(), m_rWW8Export.pO->data() );
+ ( m_rWW8Export.Strm().Tell(), m_rWW8Export.m_pO->size(), m_rWW8Export.m_pO->data() );
- m_rWW8Export.pO->clear();
+ m_rWW8Export.m_pO->clear();
}
}
@@ -4368,11 +4463,11 @@ void WW8AttributeOutput::TableNodeInfoInner( ww8::WW8TableNodeInfoInner::Pointer
m_rWW8Export.WriteCR(pNodeInfoInner);
- m_rWW8Export.pO->insert( m_rWW8Export.pO->end(), nStyle, nStyle+2 ); // Style #
+ m_rWW8Export.m_pO->insert( m_rWW8Export.m_pO->end(), nStyle, nStyle+2 ); // Style #
TableInfoCell(pNodeInfoInner);
- m_rWW8Export.m_pPapPlc->AppendFkpEntry( m_rWW8Export.Strm().Tell(), m_rWW8Export.pO->size(), m_rWW8Export.pO->data() );
+ m_rWW8Export.m_pPapPlc->AppendFkpEntry( m_rWW8Export.Strm().Tell(), m_rWW8Export.m_pO->size(), m_rWW8Export.m_pO->data() );
- m_rWW8Export.pO->clear();
+ m_rWW8Export.m_pO->clear();
}
sal_uInt32 nShadowsAfter = pNodeInfoInner->getShadowsAfter();
@@ -4388,11 +4483,11 @@ void WW8AttributeOutput::TableNodeInfoInner( ww8::WW8TableNodeInfoInner::Pointer
{
m_rWW8Export.WriteCR(pTmpNodeInfoInner);
- m_rWW8Export.pO->insert( m_rWW8Export.pO->end(), nStyle, nStyle+2 ); // Style #
+ m_rWW8Export.m_pO->insert( m_rWW8Export.m_pO->end(), nStyle, nStyle+2 ); // Style #
TableInfoCell(pTmpNodeInfoInner);
- m_rWW8Export.m_pPapPlc->AppendFkpEntry( m_rWW8Export.Strm().Tell(), m_rWW8Export.pO->size(), m_rWW8Export.pO->data() );
+ m_rWW8Export.m_pPapPlc->AppendFkpEntry( m_rWW8Export.Strm().Tell(), m_rWW8Export.m_pO->size(), m_rWW8Export.m_pO->data() );
- m_rWW8Export.pO->clear();
+ m_rWW8Export.m_pO->clear();
}
}
@@ -4403,11 +4498,11 @@ void WW8AttributeOutput::TableNodeInfoInner( ww8::WW8TableNodeInfoInner::Pointer
TableRowEnd(pNodeInfoInner->getDepth());
ShortToSVBT16(0, nStyle);
- m_rWW8Export.pO->insert( m_rWW8Export.pO->end(), nStyle, nStyle+2 ); // Style #
+ m_rWW8Export.m_pO->insert( m_rWW8Export.m_pO->end(), nStyle, nStyle+2 ); // Style #
TableInfoRow(pNodeInfoInner);
- m_rWW8Export.m_pPapPlc->AppendFkpEntry( m_rWW8Export.Strm().Tell(), m_rWW8Export.pO->size(), m_rWW8Export.pO->data() );
+ m_rWW8Export.m_pPapPlc->AppendFkpEntry( m_rWW8Export.Strm().Tell(), m_rWW8Export.m_pO->size(), m_rWW8Export.m_pO->data() );
- m_rWW8Export.pO->clear();
+ m_rWW8Export.m_pO->clear();
}
SAL_INFO( "sw.ww8", "</OutWW8_TableNodeInfoInner>" );
}
@@ -4491,4 +4586,53 @@ const NfKeywordTable & MSWordExportBase::GetNfKeywordTable()
return *m_pKeyMap;
}
+OUString MSWordExportBase::BookmarkToWord(const OUString& rBookmark, bool* pIsMove, bool* pIsFrom)
+{
+ OUString sLookup = rBookmark;
+ if (pIsMove)
+ {
+ static constexpr OUStringLiteral MoveFrom_Bookmark_NamePrefix = u"__RefMoveFrom__";
+ static constexpr OUStringLiteral MoveTo_Bookmark_NamePrefix = u"__RefMoveTo__";
+ if (rBookmark.startsWith(MoveFrom_Bookmark_NamePrefix, &sLookup))
+ {
+ *pIsMove = true;
+ *pIsFrom = true;
+ }
+ else if (rBookmark.startsWith(MoveTo_Bookmark_NamePrefix, &sLookup))
+ {
+ *pIsMove = true;
+ *pIsFrom = false;
+ }
+ }
+ if (auto it = m_aBookmarkToWord.find(sLookup); it != m_aBookmarkToWord.end())
+ return it->second;
+
+ OUString sRet
+ = INetURLObject::encode(sLookup.replace(' ', '_'), // Spaces are prohibited in bookmark name
+ INetURLObject::PART_REL_SEGMENT_EXTRA,
+ INetURLObject::EncodeMechanism::All, RTL_TEXTENCODING_ASCII_US);
+ // Unicode letters are allowed
+ sRet = INetURLObject::decode(sRet, INetURLObject::DecodeMechanism::Unambiguous,
+ RTL_TEXTENCODING_UTF8);
+
+ /*#i15387#*/
+ // Word has 40 character limit for bookmarks: [MS-OE376] Part 4 Sect. 2.13.6.2, bookmarkStart
+ if (sRet.getLength() > 40)
+ {
+ // Generate a unique bookmark name
+ sRet = sRet.copy(0, 40);
+ for (sal_uInt32 n = 1; n; ++n)
+ {
+ if (m_aWordBookmarks.find(sRet) == m_aWordBookmarks.end())
+ break;
+ auto num = OUString::number(n, 36);
+ sRet = sRet.subView(0, 40 - num.length) + num;
+ }
+ }
+
+ m_aBookmarkToWord[sLookup] = sRet;
+ m_aWordBookmarks.insert(sRet);
+ return sRet;
+}
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */