sw: prefix members of SwWW8WrGrf, WW8Export, WW8PLCF and WW8PLCF_HdFt

See tdf#94879 for motivation.

Change-Id: I86c9fd2c634b2f5422b0820dd5423008b1c0360c
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/131884
Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
Tested-by: Jenkins
diff --git a/sw/source/filter/ww8/wrtw8esh.cxx b/sw/source/filter/ww8/wrtw8esh.cxx
index bf7be6f..d9a9043 100644
--- a/sw/source/filter/ww8/wrtw8esh.cxx
+++ b/sw/source/filter/ww8/wrtw8esh.cxx
@@ -429,7 +429,7 @@ void WW8Export::DoComboBox(const OUString &rName,
    OutputField(nullptr, ww::eFORMDROPDOWN, FieldString(ww::eFORMDROPDOWN),
             FieldFlags::Start | FieldFlags::CmdStart);
    // write the reference to the "picture" structure
    sal_uInt64 nDataStt = pDataStrm->Tell();
    sal_uInt64 nDataStt = m_pDataStrm->Tell();
    m_pChpPlc->AppendFkpEntry( Strm().Tell() );

    WriteChar( 0x01 );
@@ -465,7 +465,7 @@ void WW8Export::DoComboBox(const OUString &rName,
        aFFData.addListboxEntry(rListItems[i]);
    }

    aFFData.Write(pDataStrm);
    aFFData.Write(m_pDataStrm);
}

void WW8Export::DoFormText(const SwInputField * pField)
@@ -473,7 +473,7 @@ void WW8Export::DoFormText(const SwInputField * pField)
    OutputField(nullptr, ww::eFORMTEXT, FieldString(ww::eFORMTEXT),
        FieldFlags::Start | FieldFlags::CmdStart);
    // write the reference to the "picture" structure
    sal_uInt64 nDataStt = pDataStrm->Tell();
    sal_uInt64 nDataStt = m_pDataStrm->Tell();
    m_pChpPlc->AppendFkpEntry( Strm().Tell() );

    WriteChar( 0x01 );
@@ -496,7 +496,7 @@ void WW8Export::DoFormText(const SwInputField * pField)
    aFFData.setName(pField->GetPar2());
    aFFData.setHelp(pField->GetHelp());
    aFFData.setStatus(pField->GetToolTip());
    aFFData.Write(pDataStrm);
    aFFData.Write(m_pDataStrm);

    OutputField(nullptr, ww::eFORMTEXT, OUString(), FieldFlags::CmdEnd);

@@ -613,22 +613,22 @@ void WW8Export::MiserableRTLFrameFormatHack(SwTwips &rLeft, SwTwips &rRight,

void PlcDrawObj::WritePlc( WW8Export& rWrt ) const
{
    if (8 > rWrt.pFib->m_nVersion)    // Cannot export drawobject in vers 7-
    if (8 > rWrt.m_pFib->m_nVersion)    // Cannot export drawobject in vers 7-
        return;

    sal_uInt32 nFcStart = rWrt.pTableStrm->Tell();
    sal_uInt32 nFcStart = rWrt.m_pTableStrm->Tell();

    if (maDrawObjs.empty())
        return;

    // write CPs
    WW8Fib& rFib = *rWrt.pFib;
    WW8Fib& rFib = *rWrt.m_pFib;
    WW8_CP nCpOffs = GetCpOffset(rFib);

    for (const auto& rDrawObj : maDrawObjs)
        SwWW8Writer::WriteLong(*rWrt.pTableStrm, rDrawObj.mnCp - nCpOffs);
        SwWW8Writer::WriteLong(*rWrt.m_pTableStrm, rDrawObj.mnCp - nCpOffs);

    SwWW8Writer::WriteLong(*rWrt.pTableStrm, rFib.m_ccpText + rFib.m_ccpFootnote +
    SwWW8Writer::WriteLong(*rWrt.m_pTableStrm, rFib.m_ccpText + rFib.m_ccpFootnote +
        rFib.m_ccpHdr + rFib.m_ccpEdn + rFib.m_ccpTxbx + rFib.m_ccpHdrTxbx + 1);

    for (const auto& rDrawObj : maDrawObjs)
@@ -724,7 +724,7 @@ void PlcDrawObj::WritePlc( WW8Export& rWrt ) const
        }

        // spid
        SwWW8Writer::WriteLong(*rWrt.pTableStrm, rDrawObj.mnShapeId);
        SwWW8Writer::WriteLong(*rWrt.m_pTableStrm, rDrawObj.mnShapeId);

        SwTwips nLeft = aRect.Left() + nThick;
        SwTwips nRight = aRect.Right() - nThick;
@@ -776,10 +776,10 @@ void PlcDrawObj::WritePlc( WW8Export& rWrt ) const
        //xaLeft/yaTop/xaRight/yaBottom - rel. to anchor
        //(most of) the border is outside the graphic is word, so
        //change dimensions to fit
        SwWW8Writer::WriteLong(*rWrt.pTableStrm, nLeft);
        SwWW8Writer::WriteLong(*rWrt.pTableStrm, nTop);
        SwWW8Writer::WriteLong(*rWrt.pTableStrm, nRight);
        SwWW8Writer::WriteLong(*rWrt.pTableStrm, nBottom);
        SwWW8Writer::WriteLong(*rWrt.m_pTableStrm, nLeft);
        SwWW8Writer::WriteLong(*rWrt.m_pTableStrm, nTop);
        SwWW8Writer::WriteLong(*rWrt.m_pTableStrm, nRight);
        SwWW8Writer::WriteLong(*rWrt.m_pTableStrm, nBottom);

        //fHdr/bx/by/wr/wrk/fRcaSimple/fBelowText/fAnchorLock
        sal_uInt16 nFlags=0;
@@ -839,13 +839,13 @@ void PlcDrawObj::WritePlc( WW8Export& rWrt ) const
        if (rFrameFormat.IsInline())
            nFlags |= 0x8000;

        SwWW8Writer::WriteShort(*rWrt.pTableStrm, nFlags);
        SwWW8Writer::WriteShort(*rWrt.m_pTableStrm, nFlags);

        // cTxbx
        SwWW8Writer::WriteLong(*rWrt.pTableStrm, 0);
        SwWW8Writer::WriteLong(*rWrt.m_pTableStrm, 0);
    }

    RegisterWithFib(rFib, nFcStart, rWrt.pTableStrm->Tell() - nFcStart);
    RegisterWithFib(rFib, nFcStart, rWrt.m_pTableStrm->Tell() - nFcStart);
}

void MainTextPlcDrawObj::RegisterWithFib(WW8Fib &rFib, sal_uInt32 nStart,
@@ -907,12 +907,12 @@ void DrawObj::SetShapeDetails(sal_uInt32 nId, sal_Int32 nThick)
bool WW8_WrPlcTextBoxes::WriteText( WW8Export& rWrt )
{
    rWrt.m_bInWriteEscher = true;
    WW8_CP& rccp=TXT_TXTBOX == nTyp ? rWrt.pFib->m_ccpTxbx : rWrt.pFib->m_ccpHdrTxbx;
    WW8_CP& rccp=TXT_TXTBOX == nTyp ? rWrt.m_pFib->m_ccpTxbx : rWrt.m_pFib->m_ccpHdrTxbx;

    bool bRet = WriteGenericText( rWrt, nTyp, rccp );

    WW8_CP nCP = rWrt.Fc2Cp( rWrt.Strm().Tell() );
    WW8Fib& rFib = *rWrt.pFib;
    WW8Fib& rFib = *rWrt.m_pFib;
    WW8_CP nMyOffset = rFib.m_ccpText + rFib.m_ccpFootnote + rFib.m_ccpHdr + rFib.m_ccpAtn
                            + rFib.m_ccpEdn;
    if( TXT_TXTBOX == nTyp )
@@ -1347,7 +1347,7 @@ void WW8Export::WriteOutliner(const OutlinerParaObject& rParaObj, sal_uInt8 nTyp
        if( n )
            aAttrIter.NextPara( n );

        OSL_ENSURE( pO->empty(), " pO is not empty at start of line" );
        OSL_ENSURE( m_pO->empty(), " pO is not empty at start of line" );

        OUString aStr( rEditObj.GetText( n ));
        sal_Int32 nCurrentPos = 0;
@@ -1387,8 +1387,8 @@ void WW8Export::WriteOutliner(const OutlinerParaObject& rParaObj, sal_uInt8 nTyp
            }

            m_pChpPlc->AppendFkpEntry( Strm().Tell(),
                                            pO->size(), pO->data() );
            pO->clear();
                                            m_pO->size(), m_pO->data() );
            m_pO->clear();

            // exception: foot note at line end
            if( nNextAttr == nEnd && bTextAtr )
@@ -1398,17 +1398,17 @@ void WW8Export::WriteOutliner(const OutlinerParaObject& rParaObj, sal_uInt8 nTyp
        }
        while( nCurrentPos < nEnd );

        OSL_ENSURE( pO->empty(), " pO is not empty at start of line" );
        OSL_ENSURE( m_pO->empty(), " pO is not empty at start of line" );

        pO->push_back( bNul );        // Style # as short
        pO->push_back( bNul );
        m_pO->push_back( bNul );        // Style # as short
        m_pO->push_back( bNul );

        aAttrIter.OutParaAttr(false);

        sal_uInt64 nPos = Strm().Tell();
        m_pPapPlc->AppendFkpEntry( Strm().Tell(),
                                        pO->size(), pO->data() );
        pO->clear();
                                        m_pO->size(), m_pO->data() );
        m_pO->clear();
        m_pChpPlc->AppendFkpEntry( nPos );
    }

@@ -1467,13 +1467,13 @@ void WW8Export::WriteEscher()
{
    if (m_pEscher)
    {
        sal_uInt64 nStart = pTableStrm->Tell();
        sal_uInt64 nStart = m_pTableStrm->Tell();

        m_pEscher->WritePictures();
        m_pEscher->FinishEscher();

        pFib->m_fcDggInfo = nStart;
        pFib->m_lcbDggInfo = pTableStrm->Tell() - nStart;
        m_pFib->m_fcDggInfo = nStart;
        m_pFib->m_lcbDggInfo = m_pTableStrm->Tell() - nStart;
        delete m_pEscher;
        m_pEscher = nullptr;
    }
@@ -2314,7 +2314,7 @@ SwEscherEx::~SwEscherEx()
void SwEscherEx::FinishEscher()
{
    pEscherStrm->Seek(0);
    rWrt.pTableStrm->WriteStream( *pEscherStrm );
    rWrt.m_pTableStrm->WriteStream( *pEscherStrm );
    delete pEscherStrm;
    pEscherStrm = nullptr;
}
diff --git a/sw/source/filter/ww8/wrtw8nds.cxx b/sw/source/filter/ww8/wrtw8nds.cxx
index be8518e..5fd077a 100644
--- a/sw/source/filter/ww8/wrtw8nds.cxx
+++ b/sw/source/filter/ww8/wrtw8nds.cxx
@@ -880,7 +880,7 @@ const SfxPoolItem* SwWW8AttrIter::HasTextItem( sal_uInt16 nWhich ) const

void WW8Export::GetCurrentItems(ww::bytes &rItems) const
{
    rItems.insert(rItems.end(), pO->begin(), pO->end());
    rItems.insert(rItems.end(), m_pO->begin(), m_pO->end());
}

const SfxPoolItem& SwWW8AttrIter::GetItem(sal_uInt16 nWhich) const
@@ -904,7 +904,7 @@ void WW8AttributeOutput::StartRuby( const SwTextNode& rNode, sal_Int32 /*nPos*/,
    aStr += rRuby.GetText() + ")";

    // The parameter separator depends on the FIB.lid
    if ( m_rWW8Export.pFib->getNumDecimalSep() == '.' )
    if ( m_rWW8Export.m_pFib->getNumDecimalSep() == '.' )
        aStr += ",";
    else
        aStr += ";";
@@ -1052,7 +1052,7 @@ bool WW8AttributeOutput::StartURL( const OUString &rUrl, const OUString &rTarget
    m_rWW8Export.OutputField( nullptr, ww::eHYPERLINK, sURL, FieldFlags::Start | FieldFlags::CmdStart );

    // write the reference to the "picture" structure
    sal_uInt64 nDataStt = m_rWW8Export.pDataStrm->Tell();
    sal_uInt64 nDataStt = m_rWW8Export.m_pDataStrm->Tell();
    m_rWW8Export.m_pChpPlc->AppendFkpEntry( m_rWW8Export.Strm().Tell() );

    // WinWord 2000 doesn't write this - so it's a temp solution by W97 ?
@@ -1097,22 +1097,22 @@ bool WW8AttributeOutput::StartURL( const OUString &rUrl, const OUString &rTarget
        0x8C,0x82,0x00,0xAA,0x00,0x4B,0xA9,0x0B
    };

    m_rWW8Export.pDataStrm->WriteBytes(aURLData1, sizeof(aURLData1));
    m_rWW8Export.m_pDataStrm->WriteBytes(aURLData1, sizeof(aURLData1));
    /* Write HFD Structure */
    sal_uInt8 nAnchor = 0x00;
    if ( !sMark.isEmpty() )
        nAnchor = 0x08;
    m_rWW8Export.pDataStrm->WriteUChar(nAnchor); // HFDBits
    m_rWW8Export.pDataStrm->WriteBytes(MAGIC_A, sizeof(MAGIC_A)); //clsid
    m_rWW8Export.m_pDataStrm->WriteUChar(nAnchor); // HFDBits
    m_rWW8Export.m_pDataStrm->WriteBytes(MAGIC_A, sizeof(MAGIC_A)); //clsid

    /* Write Hyperlink Object see [MS-OSHARED] spec*/
    SwWW8Writer::WriteLong( *m_rWW8Export.pDataStrm, 0x00000002);
    SwWW8Writer::WriteLong( *m_rWW8Export.m_pDataStrm, 0x00000002);
    sal_uInt32 nFlag = bBookMarkOnly ? 0 : 0x01;
    if ( bAbsolute )
        nFlag |= 0x02;
    if ( !sMark.isEmpty() )
        nFlag |= 0x08;
    SwWW8Writer::WriteLong( *m_rWW8Export.pDataStrm, nFlag );
    SwWW8Writer::WriteLong( *m_rWW8Export.m_pDataStrm, nFlag );

    INetProtocol eProto = aURL.GetProtocol();
    if ( eProto == INetProtocol::File || eProto == INetProtocol::Smb )
@@ -1155,16 +1155,16 @@ bool WW8AttributeOutput::StartURL( const OUString &rUrl, const OUString &rTarget
            sURL = sURL.copy( sizeof(pSmb)-3 ).replaceAll( "/", "\\" );
        }

        m_rWW8Export.pDataStrm->WriteBytes(MAGIC_C, sizeof(MAGIC_C));
        SwWW8Writer::WriteLong( *m_rWW8Export.pDataStrm, sURL.getLength()+1 );
        SwWW8Writer::WriteString8( *m_rWW8Export.pDataStrm, sURL, true,
        m_rWW8Export.m_pDataStrm->WriteBytes(MAGIC_C, sizeof(MAGIC_C));
        SwWW8Writer::WriteLong( *m_rWW8Export.m_pDataStrm, sURL.getLength()+1 );
        SwWW8Writer::WriteString8( *m_rWW8Export.m_pDataStrm, sURL, true,
                                    RTL_TEXTENCODING_MS_1252 );
        m_rWW8Export.pDataStrm->WriteBytes(MAGIC_D, sizeof(MAGIC_D));
        m_rWW8Export.m_pDataStrm->WriteBytes(MAGIC_D, sizeof(MAGIC_D));

        SwWW8Writer::WriteLong( *m_rWW8Export.pDataStrm, 2*sURL.getLength() + 6 );
        SwWW8Writer::WriteLong( *m_rWW8Export.pDataStrm, 2*sURL.getLength() );
        SwWW8Writer::WriteShort( *m_rWW8Export.pDataStrm, 3 );
        SwWW8Writer::WriteString16( *m_rWW8Export.pDataStrm, sURL, false );
        SwWW8Writer::WriteLong( *m_rWW8Export.m_pDataStrm, 2*sURL.getLength() + 6 );
        SwWW8Writer::WriteLong( *m_rWW8Export.m_pDataStrm, 2*sURL.getLength() );
        SwWW8Writer::WriteShort( *m_rWW8Export.m_pDataStrm, 3 );
        SwWW8Writer::WriteString16( *m_rWW8Export.m_pDataStrm, sURL, false );
    }
    else if ( eProto != INetProtocol::NotValid )
    {
@@ -1177,18 +1177,18 @@ bool WW8AttributeOutput::StartURL( const OUString &rUrl, const OUString &rTarget
            0x8C,0x82,0x00,0xAA,0x00,0x4B,0xA9,0x0B
        };

        m_rWW8Export.pDataStrm->WriteBytes(MAGIC_B, sizeof(MAGIC_B));
        SwWW8Writer::WriteLong( *m_rWW8Export.pDataStrm, 2 * ( sURL.getLength() + 1 ) );
        SwWW8Writer::WriteString16( *m_rWW8Export.pDataStrm, sURL, true );
        m_rWW8Export.m_pDataStrm->WriteBytes(MAGIC_B, sizeof(MAGIC_B));
        SwWW8Writer::WriteLong( *m_rWW8Export.m_pDataStrm, 2 * ( sURL.getLength() + 1 ) );
        SwWW8Writer::WriteString16( *m_rWW8Export.m_pDataStrm, sURL, true );
    }

    if ( !sMark.isEmpty() )
    {
        SwWW8Writer::WriteLong( *m_rWW8Export.pDataStrm, sMark.getLength()+1 );
        SwWW8Writer::WriteString16( *m_rWW8Export.pDataStrm, sMark, true );
        SwWW8Writer::WriteLong( *m_rWW8Export.m_pDataStrm, sMark.getLength()+1 );
        SwWW8Writer::WriteString16( *m_rWW8Export.m_pDataStrm, sMark, true );
    }
    SwWW8Writer::WriteLong( *m_rWW8Export.pDataStrm, nDataStt,
        m_rWW8Export.pDataStrm->Tell() - nDataStt );
    SwWW8Writer::WriteLong( *m_rWW8Export.m_pDataStrm, nDataStt,
        m_rWW8Export.m_pDataStrm->Tell() - nDataStt );

    return true;
}
@@ -1847,13 +1847,13 @@ void WW8AttributeOutput::FormatDrop( const SwTextNode& rNode, const SwFormatDrop

    SVBT16 nSty;
    ShortToSVBT16( nStyle, nSty );
    m_rWW8Export.pO->insert( m_rWW8Export.pO->end(), nSty, nSty+2 );     // Style #
    m_rWW8Export.m_pO->insert( m_rWW8Export.m_pO->end(), nSty, nSty+2 );     // Style #

    m_rWW8Export.InsUInt16( NS_sprm::PPc::val );            // Alignment (sprmPPc)
    m_rWW8Export.pO->push_back( 0x20 );
    m_rWW8Export.m_pO->push_back( 0x20 );

    m_rWW8Export.InsUInt16( NS_sprm::PWr::val );            // Wrapping (sprmPWr)
    m_rWW8Export.pO->push_back( 0x02 );
    m_rWW8Export.m_pO->push_back( 0x02 );

    m_rWW8Export.InsUInt16( NS_sprm::PDcs::val );            // Dropcap (sprmPDcs)
    int nDCS = ( nDropLines << 3 ) | 0x01;
@@ -1879,8 +1879,8 @@ void WW8AttributeOutput::FormatDrop( const SwTextNode& rNode, const SwFormatDrop
        TableInfoCell( pTextNodeInfoInner );
    }

    m_rWW8Export.m_pPapPlc->AppendFkpEntry( m_rWW8Export.Strm().Tell(), m_rWW8Export.pO->size(), m_rWW8Export.pO->data() );
    m_rWW8Export.pO->clear();
    m_rWW8Export.m_pPapPlc->AppendFkpEntry( m_rWW8Export.Strm().Tell(), m_rWW8Export.m_pO->size(), m_rWW8Export.m_pO->data() );
    m_rWW8Export.m_pO->clear();

    if ( rNode.GetDropSize( rFontHeight, rDropHeight, rDropDescent ) )
    {
@@ -1898,8 +1898,8 @@ void WW8AttributeOutput::FormatDrop( const SwTextNode& rNode, const SwFormatDrop
        m_rWW8Export.InsUInt16( static_cast< sal_uInt16 >( rFontHeight / 10 ) );
    }

    m_rWW8Export.m_pChpPlc->AppendFkpEntry( m_rWW8Export.Strm().Tell(), m_rWW8Export.pO->size(), m_rWW8Export.pO->data() );
    m_rWW8Export.pO->clear();
    m_rWW8Export.m_pChpPlc->AppendFkpEntry( m_rWW8Export.Strm().Tell(), m_rWW8Export.m_pO->size(), m_rWW8Export.m_pO->data() );
    m_rWW8Export.m_pO->clear();
}

sal_Int32 MSWordExportBase::GetNextPos( SwWW8AttrIter const * aAttrIter, const SwTextNode& rNode, sal_Int32 nCurrentPos )
@@ -3375,7 +3375,7 @@ void MSWordExportBase::UpdateTocSectionNodeProperties(const SwSectionNode& rSect

void WW8Export::AppendSection( const SwPageDesc *pPageDesc, const SwSectionFormat* pFormat, sal_uLong nLnNum )
{
    pSepx->AppendSep(Fc2Cp(Strm().Tell()), pPageDesc, pFormat, nLnNum);
    m_pSepx->AppendSep(Fc2Cp(Strm().Tell()), pPageDesc, pFormat, nLnNum);
}

// Flys
@@ -3521,8 +3521,8 @@ void WW8AttributeOutput::Redline( const SwRedlineData* pRedline )

    case RedlineType::Format:
        m_rWW8Export.InsUInt16( NS_sprm::CPropRMark90::val );
        m_rWW8Export.pO->push_back( 7 );       // len
        m_rWW8Export.pO->push_back( 1 );
        m_rWW8Export.m_pO->push_back( 7 );       // len
        m_rWW8Export.m_pO->push_back( 1 );
        m_rWW8Export.InsUInt16( m_rWW8Export.AddRedlineAuthor( pRedline->GetAuthor() ) );
        m_rWW8Export.InsUInt32( sw::ms::DateTime2DTTM( pRedline->GetTimeStamp() ));
        break;
@@ -3534,7 +3534,7 @@ void WW8AttributeOutput::Redline( const SwRedlineData* pRedline )
    if ( pSprmIds )
    {
        m_rWW8Export.InsUInt16( pSprmIds[0] );
        m_rWW8Export.pO->push_back( 1 );
        m_rWW8Export.m_pO->push_back( 1 );

        m_rWW8Export.InsUInt16( pSprmIds[1] );
        m_rWW8Export.InsUInt16( m_rWW8Export.AddRedlineAuthor( pRedline->GetAuthor() ) );
diff --git a/sw/source/filter/ww8/wrtw8num.cxx b/sw/source/filter/ww8/wrtw8num.cxx
index e61ca56..b60d092 100644
--- a/sw/source/filter/ww8/wrtw8num.cxx
+++ b/sw/source/filter/ww8/wrtw8num.cxx
@@ -177,11 +177,11 @@ void WW8Export::WriteNumbering()
        return; // no numbering is used

    // list formats - LSTF
    pFib->m_fcPlcfLst = pTableStrm->Tell();
    pTableStrm->WriteUInt16( m_pUsedNumTable->size() );
    m_pFib->m_fcPlcfLst = m_pTableStrm->Tell();
    m_pTableStrm->WriteUInt16( m_pUsedNumTable->size() );
    NumberingDefinitions();
    // set len to FIB
    pFib->m_lcbPlcfLst = pTableStrm->Tell() - pFib->m_fcPlcfLst;
    m_pFib->m_lcbPlcfLst = m_pTableStrm->Tell() - m_pFib->m_fcPlcfLst;

    // list formats - LVLF
    AbstractNumberingDefinitions();
@@ -195,18 +195,18 @@ void WW8Export::WriteNumbering()

void WW8AttributeOutput::NumberingDefinition( sal_uInt16 nId, const SwNumRule &rRule )
{
    m_rWW8Export.pTableStrm->WriteUInt32( nId );
    m_rWW8Export.pTableStrm->WriteUInt32( nId );
    m_rWW8Export.m_pTableStrm->WriteUInt32( nId );
    m_rWW8Export.m_pTableStrm->WriteUInt32( nId );

    // not associated with a Style
    for ( int i = 0; i < WW8ListManager::nMaxLevel; ++i )
        m_rWW8Export.pTableStrm->WriteUInt16( 0xFFF );
        m_rWW8Export.m_pTableStrm->WriteUInt16( 0xFFF );

    sal_uInt8 nFlags = 0;
    if ( rRule.IsContinusNum() )
        nFlags |= 0x1;

    m_rWW8Export.pTableStrm->WriteUChar( nFlags ).WriteUChar( 0/*nDummy*/ );
    m_rWW8Export.m_pTableStrm->WriteUChar( nFlags ).WriteUChar( 0/*nDummy*/ );
}

void MSWordExportBase::NumberingDefinitions()
@@ -284,11 +284,11 @@ void WW8AttributeOutput::NumberingLevel( sal_uInt8 /*nLevel*/,
    )
{
    // Start value
    m_rWW8Export.pTableStrm->WriteUInt32( nStart );
    m_rWW8Export.m_pTableStrm->WriteUInt32( nStart );

    // Type
    sal_uInt8 nNumId = GetLevelNFC(nNumberingType, pOutSet, WW8Export::GetNumId(nNumberingType));
    m_rWW8Export.pTableStrm->WriteUChar(nNumId);
    m_rWW8Export.m_pTableStrm->WriteUChar(nNumId);

    // Justification
    sal_uInt8 nAlign;
@@ -304,25 +304,25 @@ void WW8AttributeOutput::NumberingLevel( sal_uInt8 /*nLevel*/,
        nAlign = 0;
        break;
    }
    m_rWW8Export.pTableStrm->WriteUChar( nAlign );
    m_rWW8Export.m_pTableStrm->WriteUChar( nAlign );

    // Write the rgbxchNums[9], positions of placeholders for paragraph
    // numbers in the text
    m_rWW8Export.pTableStrm->WriteBytes(pNumLvlPos, WW8ListManager::nMaxLevel);
    m_rWW8Export.m_pTableStrm->WriteBytes(pNumLvlPos, WW8ListManager::nMaxLevel);

    // Type of the character between the bullet and the text
    m_rWW8Export.pTableStrm->WriteUChar( nFollow );
    m_rWW8Export.m_pTableStrm->WriteUChar( nFollow );

    // dxaSoace/dxaIndent (Word 6 compatibility)
    m_rWW8Export.pTableStrm->WriteUInt32( 0 );
    m_rWW8Export.pTableStrm->WriteUInt32( 0 );
    m_rWW8Export.m_pTableStrm->WriteUInt32( 0 );
    m_rWW8Export.m_pTableStrm->WriteUInt32( 0 );

    // cbGrpprlChpx
    std::unique_ptr<ww::bytes> pCharAtrs;
    if ( pOutSet )
    {
        std::unique_ptr<ww::bytes> pOldpO = std::move(m_rWW8Export.pO);
        m_rWW8Export.pO.reset(new ww::bytes);
        std::unique_ptr<ww::bytes> pOldpO = std::move(m_rWW8Export.m_pO);
        m_rWW8Export.m_pO.reset(new ww::bytes);
        if ( pFont )
        {
            sal_uInt16 nFontID = m_rWW8Export.m_aFontHelper.GetId( *pFont );
@@ -347,10 +347,10 @@ void WW8AttributeOutput::NumberingLevel( sal_uInt8 /*nLevel*/,
            }
        }

        pCharAtrs = std::move(m_rWW8Export.pO);
        m_rWW8Export.pO = std::move(pOldpO);
        pCharAtrs = std::move(m_rWW8Export.m_pO);
        m_rWW8Export.m_pO = std::move(pOldpO);
    }
    m_rWW8Export.pTableStrm->WriteUChar(sal_uInt8(pCharAtrs ? pCharAtrs->size() : 0));
    m_rWW8Export.m_pTableStrm->WriteUChar(sal_uInt8(pCharAtrs ? pCharAtrs->size() : 0));

    // cbGrpprlPapx
    sal_uInt8 aPapSprms [] = {
@@ -358,10 +358,10 @@ void WW8AttributeOutput::NumberingLevel( sal_uInt8 /*nLevel*/,
        0x60, 0x84, 0, 0,               // sprmPDxaLeft1
        0x15, 0xc6, 0x05, 0x00, 0x01, 0, 0, 0x06
    };
    m_rWW8Export.pTableStrm->WriteUChar( sal_uInt8( sizeof( aPapSprms ) ) );
    m_rWW8Export.m_pTableStrm->WriteUChar( sal_uInt8( sizeof( aPapSprms ) ) );

    // reserved
    m_rWW8Export.pTableStrm->WriteUInt16( 0 );
    m_rWW8Export.m_pTableStrm->WriteUInt16( 0 );

    // pap sprms
    sal_uInt8* pData = aPapSprms + 2;
@@ -371,15 +371,15 @@ void WW8AttributeOutput::NumberingLevel( sal_uInt8 /*nLevel*/,
    pData += 5;
    Set_UInt16( pData, nListTabPos );

    m_rWW8Export.pTableStrm->WriteBytes(aPapSprms, sizeof(aPapSprms));
    m_rWW8Export.m_pTableStrm->WriteBytes(aPapSprms, sizeof(aPapSprms));

    // write Chpx
    if (pCharAtrs && !pCharAtrs->empty())
        m_rWW8Export.pTableStrm->WriteBytes(pCharAtrs->data(), pCharAtrs->size());
        m_rWW8Export.m_pTableStrm->WriteBytes(pCharAtrs->data(), pCharAtrs->size());

    // write the num string
    m_rWW8Export.pTableStrm->WriteUInt16( rNumberingString.getLength() );
    SwWW8Writer::WriteString16( *m_rWW8Export.pTableStrm, rNumberingString, false );
    m_rWW8Export.m_pTableStrm->WriteUInt16( rNumberingString.getLength() );
    SwWW8Writer::WriteString16( *m_rWW8Export.m_pTableStrm, rNumberingString, false );
}

void MSWordExportBase::AbstractNumberingDefinitions()
@@ -578,21 +578,21 @@ void WW8Export::OutOverrideListTab()
    sal_uInt16 nCount = m_pUsedNumTable->size();
    sal_uInt16 n;

    pFib->m_fcPlfLfo = pTableStrm->Tell();
    pTableStrm->WriteUInt32( nCount );
    m_pFib->m_fcPlfLfo = m_pTableStrm->Tell();
    m_pTableStrm->WriteUInt32( nCount );

    // LFO ([MS-DOC] 2.9.131)
    for( n = 0; n < nCount; ++n )
    {
        pTableStrm->WriteUInt32( n + 1 );
        SwWW8Writer::FillCount( *pTableStrm, 12 );
        m_pTableStrm->WriteUInt32( n + 1 );
        SwWW8Writer::FillCount( *m_pTableStrm, 12 );
    }
    // LFOData ([MS-DOC] 2.9.132)
    for( n = 0; n < nCount; ++n )
        pTableStrm->WriteInt32( -1 );  // no overwrite
        m_pTableStrm->WriteInt32( -1 );  // no overwrite

    // set len to FIB
    pFib->m_lcbPlfLfo = pTableStrm->Tell() - pFib->m_fcPlfLfo;
    m_pFib->m_lcbPlfLfo = m_pTableStrm->Tell() - m_pFib->m_fcPlfLfo;
}

void WW8Export::OutListNamesTab()
@@ -603,9 +603,9 @@ void WW8Export::OutListNamesTab()
    // write the "list format override" - LFO
    sal_uInt16 nNms = 0, nCount = m_pUsedNumTable->size();

    pFib->m_fcSttbListNames = pTableStrm->Tell();
    pTableStrm->WriteInt16( -1 );
    pTableStrm->WriteUInt32( nCount );
    m_pFib->m_fcSttbListNames = m_pTableStrm->Tell();
    m_pTableStrm->WriteInt16( -1 );
    m_pTableStrm->WriteUInt32( nCount );

    for( ; nNms < nCount; ++nNms )
    {
@@ -614,14 +614,14 @@ void WW8Export::OutListNamesTab()
        if( !rRule.IsAutoRule() )
            sNm = rRule.GetName();

        pTableStrm->WriteUInt16( sNm.getLength() );
        m_pTableStrm->WriteUInt16( sNm.getLength() );
        if (!sNm.isEmpty())
            SwWW8Writer::WriteString16(*pTableStrm, sNm, false);
            SwWW8Writer::WriteString16(*m_pTableStrm, sNm, false);
    }

    SwWW8Writer::WriteLong( *pTableStrm, pFib->m_fcSttbListNames + 2, nNms );
    SwWW8Writer::WriteLong( *m_pTableStrm, m_pFib->m_fcSttbListNames + 2, nNms );
    // set len to FIB
    pFib->m_lcbSttbListNames = pTableStrm->Tell() - pFib->m_fcSttbListNames;
    m_pFib->m_lcbSttbListNames = m_pTableStrm->Tell() - m_pFib->m_fcSttbListNames;
}

void MSWordExportBase::SubstituteBullet( OUString& rNumStr,
diff --git a/sw/source/filter/ww8/wrtw8sty.cxx b/sw/source/filter/ww8/wrtw8sty.cxx
index feaa657..6f16b9a 100644
--- a/sw/source/filter/ww8/wrtw8sty.cxx
+++ b/sw/source/filter/ww8/wrtw8sty.cxx
@@ -390,16 +390,16 @@ static void impl_SkipOdd(std::unique_ptr<ww::bytes> const& pO, std::size_t nTabl

void WW8AttributeOutput::EndStyle()
{
    impl_SkipOdd( m_rWW8Export.pO, m_rWW8Export.pTableStrm->Tell() );
    impl_SkipOdd( m_rWW8Export.m_pO, m_rWW8Export.m_pTableStrm->Tell() );

    short nLen = m_rWW8Export.pO->size() - 2;            // length of the style
    sal_uInt8* p = m_rWW8Export.pO->data() + nPOPosStdLen1;
    short nLen = m_rWW8Export.m_pO->size() - 2;            // length of the style
    sal_uInt8* p = m_rWW8Export.m_pO->data() + nPOPosStdLen1;
    ShortToSVBT16( nLen, p );               // add
    p = m_rWW8Export.pO->data() + nPOPosStdLen2;
    p = m_rWW8Export.m_pO->data() + nPOPosStdLen2;
    ShortToSVBT16( nLen, p );               // also

    m_rWW8Export.pTableStrm->WriteBytes(m_rWW8Export.pO->data(), m_rWW8Export.pO->size());
    m_rWW8Export.pO->clear();
    m_rWW8Export.m_pTableStrm->WriteBytes(m_rWW8Export.m_pO->data(), m_rWW8Export.m_pO->size());
    m_rWW8Export.m_pO->clear();
}

void WW8AttributeOutput::StartStyle( const OUString& rName, StyleType eType, sal_uInt16 nWwBase,
@@ -432,17 +432,17 @@ void WW8AttributeOutput::StartStyle( const OUString& rName, StyleType eType, sal
    sal_uInt16 nLen = static_cast< sal_uInt16 >( ( pData - aWW8_STD ) + 1 +
                (2 * (rName.getLength() + 1)) );  // temporary

    nPOPosStdLen1 = m_rWW8Export.pO->size();        // Adr1 for adding the length
    nPOPosStdLen1 = m_rWW8Export.m_pO->size();        // Adr1 for adding the length

    SwWW8Writer::InsUInt16( *m_rWW8Export.pO, nLen );
    m_rWW8Export.pO->insert( m_rWW8Export.pO->end(), aWW8_STD, pData );
    SwWW8Writer::InsUInt16( *m_rWW8Export.m_pO, nLen );
    m_rWW8Export.m_pO->insert( m_rWW8Export.m_pO->end(), aWW8_STD, pData );

    nPOPosStdLen2 = nPOPosStdLen1 + 8;  // Adr2 for adding of "end of upx"

    // write names
    SwWW8Writer::InsUInt16( *m_rWW8Export.pO, rName.getLength() ); // length
    SwWW8Writer::InsAsString16( *m_rWW8Export.pO, rName );
    m_rWW8Export.pO->push_back( sal_uInt8(0) );             // Despite P-String 0 at the end!
    SwWW8Writer::InsUInt16( *m_rWW8Export.m_pO, rName.getLength() ); // length
    SwWW8Writer::InsAsString16( *m_rWW8Export.m_pO, rName );
    m_rWW8Export.m_pO->push_back( sal_uInt8(0) );             // Despite P-String 0 at the end!
}

void MSWordStyles::SetStyleDefaults( const SwFormat& rFormat, bool bPap )
@@ -507,19 +507,19 @@ void MSWordStyles::SetStyleDefaults( const SwFormat& rFormat, bool bPap )

void WW8AttributeOutput::StartStyleProperties( bool bParProp, sal_uInt16 nStyle )
{
    impl_SkipOdd( m_rWW8Export.pO, m_rWW8Export.pTableStrm->Tell() );
    impl_SkipOdd( m_rWW8Export.m_pO, m_rWW8Export.m_pTableStrm->Tell() );

    sal_uInt16 nLen = bParProp ? 2 : 0;         // default length
    m_nStyleLenPos = m_rWW8Export.pO->size();   // adding length
    m_nStyleLenPos = m_rWW8Export.m_pO->size();   // adding length
                                                // Don't save pointer, because it
                                                // changes by _grow!

    SwWW8Writer::InsUInt16( *m_rWW8Export.pO, nLen );        // Style-Len
    SwWW8Writer::InsUInt16( *m_rWW8Export.m_pO, nLen );        // Style-Len

    m_nStyleStartSize = m_rWW8Export.pO->size();
    m_nStyleStartSize = m_rWW8Export.m_pO->size();

    if ( bParProp )
        SwWW8Writer::InsUInt16( *m_rWW8Export.pO, nStyle );     // Style-Number
        SwWW8Writer::InsUInt16( *m_rWW8Export.m_pO, nStyle );     // Style-Number
}

void MSWordStyles::WriteProperties( const SwFormat* pFormat, bool bParProp, sal_uInt16 nPos,
@@ -544,8 +544,8 @@ void MSWordStyles::WriteProperties( const SwFormat* pFormat, bool bParProp, sal_

void WW8AttributeOutput::EndStyleProperties( bool /*bParProp*/ )
{
    sal_uInt16 nLen = m_rWW8Export.pO->size() - m_nStyleStartSize;
    sal_uInt8* pUpxLen = m_rWW8Export.pO->data() + m_nStyleLenPos; // adding length
    sal_uInt16 nLen = m_rWW8Export.m_pO->size() - m_nStyleStartSize;
    sal_uInt8* pUpxLen = m_rWW8Export.m_pO->data() + m_nStyleLenPos; // adding length
    ShortToSVBT16( nLen, pUpxLen );                 // add default length
}

@@ -585,7 +585,7 @@ void MSWordStyles::GetStyleData( SwFormat* pFormat, bool& bFormatColl, sal_uInt1

void WW8AttributeOutput::DefaultStyle()
{
    m_rWW8Export.pTableStrm->WriteUInt16(0);   // empty Style
    m_rWW8Export.m_pTableStrm->WriteUInt16(0);   // empty Style
}

void MSWordStyles::OutputStyle(const SwNumRule* pNumRule, sal_uInt16 nPos)
@@ -670,12 +670,12 @@ void MSWordStyles::OutputStyle( SwFormat* pFormat, sal_uInt16 nPos )

void WW8AttributeOutput::StartStyles()
{
    WW8Fib& rFib = *m_rWW8Export.pFib;
    WW8Fib& rFib = *m_rWW8Export.m_pFib;

    sal_uInt64 nCurPos = m_rWW8Export.pTableStrm->Tell();
    sal_uInt64 nCurPos = m_rWW8Export.m_pTableStrm->Tell();
    if ( nCurPos & 1 )                   // start on even
    {
        m_rWW8Export.pTableStrm->WriteChar( char(0) );        // Address
        m_rWW8Export.m_pTableStrm->WriteChar( char(0) );        // Address
        ++nCurPos;
    }
    rFib.m_fcStshfOrig = rFib.m_fcStshf = nCurPos;
@@ -687,15 +687,15 @@ void WW8AttributeOutput::StartStyles()
        0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00 };

    m_rWW8Export.pTableStrm->WriteBytes(&aStShi, sizeof(aStShi));
    m_rWW8Export.m_pTableStrm->WriteBytes(&aStShi, sizeof(aStShi));
}

void WW8AttributeOutput::EndStyles( sal_uInt16 nNumberOfStyles )
{
    WW8Fib& rFib = *m_rWW8Export.pFib;
    WW8Fib& rFib = *m_rWW8Export.m_pFib;

    rFib.m_lcbStshfOrig = rFib.m_lcbStshf = m_rWW8Export.pTableStrm->Tell() - rFib.m_fcStshf;
    SwWW8Writer::WriteShort( *m_rWW8Export.pTableStrm, m_nStyleCountPos, nNumberOfStyles );
    rFib.m_lcbStshfOrig = rFib.m_lcbStshf = m_rWW8Export.m_pTableStrm->Tell() - rFib.m_fcStshf;
    SwWW8Writer::WriteShort( *m_rWW8Export.m_pTableStrm, m_nStyleCountPos, nNumberOfStyles );
}

void MSWordStyles::OutputStylesTable()
@@ -1190,7 +1190,7 @@ void WW8_WrPlcSepx::WriteFootnoteEndText( WW8Export& rWrt, sal_uLong nCpStt )
        pTextPos->Append( nCpStt );

    // set the flags at the Dop right away
    WW8Dop& rDop = *rWrt.pDop;
    WW8Dop& rDop = *rWrt.m_pDop;
    // Footnote Info
    switch( rInfo.m_eNum )
    {
@@ -1299,21 +1299,21 @@ void MSWordSections::CheckForFacinPg( const WW8Export& rWrt ) const
                 ( UseOnPage::Right == ( UseOnPage::All & pPd->ReadUseOn() ) &&
                   UseOnPage::Left == ( UseOnPage::All & pPd->GetFollow()->ReadUseOn() )) ))
            {
                rWrt.pDop->fFacingPages = rWrt.pDop->fMirrorMargins = true;
                rWrt.m_pDop->fFacingPages = rWrt.m_pDop->fMirrorMargins = true;
                nEnd |= 1;
            }

            if( !( 1 & nEnd ) &&
                ( !pPd->IsHeaderShared() || !pPd->IsFooterShared() ))
            {
                rWrt.pDop->fFacingPages = true;
                rWrt.m_pDop->fFacingPages = true;
                nEnd |= 1;
            }
            if( !( 2 & nEnd ) &&
                UseOnPage::Mirror == ( UseOnPage::Mirror & pPd->ReadUseOn() ))
            {
                rWrt.pDop->fSwapBordersFacingPgs =
                    rWrt.pDop->fMirrorMargins = true;
                rWrt.m_pDop->fSwapBordersFacingPgs =
                    rWrt.m_pDop->fMirrorMargins = true;
                nEnd |= 2;
            }

@@ -1335,7 +1335,7 @@ bool MSWordSections::HasBorderItem( const SwFormat& rFormat )

void WW8AttributeOutput::StartSection()
{
    m_rWW8Export.pO->clear();
    m_rWW8Export.m_pO->clear();
}

void WW8AttributeOutput::SectFootnoteEndnotePr()
@@ -1345,60 +1345,60 @@ void WW8AttributeOutput::SectFootnoteEndnotePr()
    m_rWW8Export.InsUInt16( NS_sprm::SRncFtn::val );
    switch( rInfo.m_eNum )
    {
    case FTNNUM_PAGE:     m_rWW8Export.pO->push_back( sal_uInt8/*rncRstPage*/ (2) ); break;
    case FTNNUM_CHAPTER:  m_rWW8Export.pO->push_back( sal_uInt8/*rncRstSect*/ (1) ); break;
    default:              m_rWW8Export.pO->push_back( sal_uInt8/*rncCont*/ (0) ); break;
    case FTNNUM_PAGE:     m_rWW8Export.m_pO->push_back( sal_uInt8/*rncRstPage*/ (2) ); break;
    case FTNNUM_CHAPTER:  m_rWW8Export.m_pO->push_back( sal_uInt8/*rncRstSect*/ (1) ); break;
    default:              m_rWW8Export.m_pO->push_back( sal_uInt8/*rncCont*/ (0) ); break;
    }

    m_rWW8Export.InsUInt16(NS_sprm::SNfcFtnRef::val);
    sal_uInt8 nId = WW8Export::GetNumId(rInfo.m_aFormat.GetNumberingType());
    SwWW8Writer::InsUInt16(*m_rWW8Export.pO, nId);
    SwWW8Writer::InsUInt16(*m_rWW8Export.m_pO, nId);
    m_rWW8Export.InsUInt16(NS_sprm::SNfcEdnRef::val);
    nId = WW8Export::GetNumId(rEndNoteInfo.m_aFormat.GetNumberingType());
    SwWW8Writer::InsUInt16(*m_rWW8Export.pO, nId);
    SwWW8Writer::InsUInt16(*m_rWW8Export.m_pO, nId);
}

void WW8AttributeOutput::SectionFormProtection( bool bProtected )
{
    //If the document is to be exported as protected, then if a segment
    //is not protected, set the unlocked flag
    if ( m_rWW8Export.pSepx->DocumentIsProtected() && !bProtected )
    if ( m_rWW8Export.m_pSepx->DocumentIsProtected() && !bProtected )
    {
        SwWW8Writer::InsUInt16( *m_rWW8Export.pO, NS_sprm::SFProtected::val );
        m_rWW8Export.pO->push_back( 1 );
        SwWW8Writer::InsUInt16( *m_rWW8Export.m_pO, NS_sprm::SFProtected::val );
        m_rWW8Export.m_pO->push_back( 1 );
    }
}

void WW8AttributeOutput::SectionLineNumbering( sal_uLong nRestartNo, const SwLineNumberInfo& rLnNumInfo )
{
    // sprmSNLnnMod - activate Line Numbering and define Modulo
    SwWW8Writer::InsUInt16( *m_rWW8Export.pO, NS_sprm::SNLnnMod::val );
    SwWW8Writer::InsUInt16( *m_rWW8Export.pO, rLnNumInfo.GetCountBy() );
    SwWW8Writer::InsUInt16( *m_rWW8Export.m_pO, NS_sprm::SNLnnMod::val );
    SwWW8Writer::InsUInt16( *m_rWW8Export.m_pO, rLnNumInfo.GetCountBy() );

    // sprmSDxaLnn - xPosition of Line Number
    SwWW8Writer::InsUInt16( *m_rWW8Export.pO, NS_sprm::SDxaLnn::val );
    SwWW8Writer::InsUInt16( *m_rWW8Export.pO, rLnNumInfo.GetPosFromLeft() );
    SwWW8Writer::InsUInt16( *m_rWW8Export.m_pO, NS_sprm::SDxaLnn::val );
    SwWW8Writer::InsUInt16( *m_rWW8Export.m_pO, rLnNumInfo.GetPosFromLeft() );

    // sprmSLnc - restart number: 0 per page, 1 per section, 2 never restart
    if ( nRestartNo || !rLnNumInfo.IsRestartEachPage() )
    {
        SwWW8Writer::InsUInt16( *m_rWW8Export.pO, NS_sprm::SLnc::val );
        m_rWW8Export.pO->push_back( nRestartNo ? 1 : 2 );
        SwWW8Writer::InsUInt16( *m_rWW8Export.m_pO, NS_sprm::SLnc::val );
        m_rWW8Export.m_pO->push_back( nRestartNo ? 1 : 2 );
    }

    // sprmSLnnMin - Restart the Line Number with given value
    if ( nRestartNo )
    {
        SwWW8Writer::InsUInt16( *m_rWW8Export.pO, NS_sprm::SLnnMin::val );
        SwWW8Writer::InsUInt16( *m_rWW8Export.pO, o3tl::narrowing<sal_uInt16>(nRestartNo) - 1 );
        SwWW8Writer::InsUInt16( *m_rWW8Export.m_pO, NS_sprm::SLnnMin::val );
        SwWW8Writer::InsUInt16( *m_rWW8Export.m_pO, o3tl::narrowing<sal_uInt16>(nRestartNo) - 1 );
    }
}

void WW8AttributeOutput::SectionTitlePage()
{
    // sprmSFTitlePage
    SwWW8Writer::InsUInt16( *m_rWW8Export.pO, NS_sprm::SFTitlePage::val );
    m_rWW8Export.pO->push_back( 1 );
    SwWW8Writer::InsUInt16( *m_rWW8Export.m_pO, NS_sprm::SFTitlePage::val );
    m_rWW8Export.m_pO->push_back( 1 );
}

void WW8AttributeOutput::SectionPageBorders( const SwFrameFormat* pPdFormat, const SwFrameFormat* pPdFirstPgFormat )
@@ -1428,33 +1428,33 @@ void WW8AttributeOutput::SectionPageBorders( const SwFrameFormat* pPdFormat, con
    if ( USHRT_MAX != nPgBorder )
    {
        // write the Flag and Border Attribute
        SwWW8Writer::InsUInt16( *m_rWW8Export.pO, NS_sprm::SPgbProp::val );
        SwWW8Writer::InsUInt16( *m_rWW8Export.pO, nPgBorder );
        SwWW8Writer::InsUInt16( *m_rWW8Export.m_pO, NS_sprm::SPgbProp::val );
        SwWW8Writer::InsUInt16( *m_rWW8Export.m_pO, nPgBorder );
    }
}

void WW8AttributeOutput::SectionBiDi( bool bBiDi )
{
    SwWW8Writer::InsUInt16( *m_rWW8Export.pO, NS_sprm::SFBiDi::val );
    m_rWW8Export.pO->push_back( bBiDi? 1: 0 );
    SwWW8Writer::InsUInt16( *m_rWW8Export.m_pO, NS_sprm::SFBiDi::val );
    m_rWW8Export.m_pO->push_back( bBiDi? 1: 0 );
}

void WW8AttributeOutput::SectionPageNumbering( sal_uInt16 nNumType, const ::std::optional<sal_uInt16>& oPageRestartNumber )
{
    // sprmSNfcPgn
    sal_uInt8 nb = WW8Export::GetNumId( nNumType );
    SwWW8Writer::InsUInt16( *m_rWW8Export.pO, NS_sprm::SNfcPgn::val );
    m_rWW8Export.pO->push_back( nb );
    SwWW8Writer::InsUInt16( *m_rWW8Export.m_pO, NS_sprm::SNfcPgn::val );
    m_rWW8Export.m_pO->push_back( nb );

    if ( oPageRestartNumber )
    {
        // sprmSFPgnRestart
        SwWW8Writer::InsUInt16( *m_rWW8Export.pO, NS_sprm::SFPgnRestart::val );
        m_rWW8Export.pO->push_back( 1 );
        SwWW8Writer::InsUInt16( *m_rWW8Export.m_pO, NS_sprm::SFPgnRestart::val );
        m_rWW8Export.m_pO->push_back( 1 );

        // sprmSPgnStart
        SwWW8Writer::InsUInt16( *m_rWW8Export.pO, NS_sprm::SPgnStart97::val );
        SwWW8Writer::InsUInt16( *m_rWW8Export.pO, *oPageRestartNumber );
        SwWW8Writer::InsUInt16( *m_rWW8Export.m_pO, NS_sprm::SPgnStart97::val );
        SwWW8Writer::InsUInt16( *m_rWW8Export.m_pO, *oPageRestartNumber );
    }
}

@@ -1462,8 +1462,8 @@ void WW8AttributeOutput::SectionType( sal_uInt8 nBreakCode )
{
    if ( 2 != nBreakCode ) // new page is the default
    {
        SwWW8Writer::InsUInt16( *m_rWW8Export.pO, NS_sprm::SBkc::val );
        m_rWW8Export.pO->push_back( nBreakCode );
        SwWW8Writer::InsUInt16( *m_rWW8Export.m_pO, NS_sprm::SBkc::val );
        m_rWW8Export.m_pO->push_back( nBreakCode );
    }
}

@@ -1472,13 +1472,13 @@ void WW8Export::SetupSectionPositions( WW8_PdAttrDesc* pA )
    if ( !pA )
        return;

    if ( !pO->empty() ) // are there attributes ?
    if ( !m_pO->empty() ) // are there attributes ?
    {
        pA->m_nLen = pO->size();
        pA->m_pData.reset(new sal_uInt8 [pO->size()]);
        pA->m_nLen = m_pO->size();
        pA->m_pData.reset(new sal_uInt8 [m_pO->size()]);
        // store for later
        memcpy( pA->m_pData.get(), pO->data(), pO->size() );
        pO->clear(); // clear HdFt-Text
        memcpy( pA->m_pData.get(), m_pO->data(), m_pO->size() );
        m_pO->clear(); // clear HdFt-Text
    }
    else // no attributes there
    {
@@ -1507,8 +1507,8 @@ void WW8AttributeOutput::TextVerticalAdjustment( const drawing::TextVerticalAdju
        default:
            break;
    }
    SwWW8Writer::InsUInt16( *m_rWW8Export.pO, NS_sprm::SVjc::val );
    m_rWW8Export.pO->push_back( nMSVA );
    SwWW8Writer::InsUInt16( *m_rWW8Export.m_pO, NS_sprm::SVjc::val );
    m_rWW8Export.m_pO->push_back( nMSVA );
}

void WW8Export::WriteHeadersFooters( sal_uInt8 nHeadFootFlags,
@@ -1517,26 +1517,26 @@ void WW8Export::WriteHeadersFooters( sal_uInt8 nHeadFootFlags,
    sal_uLong nCpPos = Fc2Cp( Strm().Tell() );

    IncrementHdFtIndex();
    if ( !(nHeadFootFlags & WW8_HEADER_EVEN) && pDop->fFacingPages )
        pSepx->OutHeaderFooter( *this, true, rFormat, nCpPos, nHeadFootFlags, WW8_HEADER_ODD, nBreakCode );
    if ( !(nHeadFootFlags & WW8_HEADER_EVEN) && m_pDop->fFacingPages )
        m_pSepx->OutHeaderFooter( *this, true, rFormat, nCpPos, nHeadFootFlags, WW8_HEADER_ODD, nBreakCode );
    else
        pSepx->OutHeaderFooter( *this, true, rLeftHeaderFormat, nCpPos, nHeadFootFlags, WW8_HEADER_EVEN, nBreakCode );
        m_pSepx->OutHeaderFooter( *this, true, rLeftHeaderFormat, nCpPos, nHeadFootFlags, WW8_HEADER_EVEN, nBreakCode );
    IncrementHdFtIndex();
    pSepx->OutHeaderFooter( *this, true, rFormat, nCpPos, nHeadFootFlags, WW8_HEADER_ODD, nBreakCode );
    m_pSepx->OutHeaderFooter( *this, true, rFormat, nCpPos, nHeadFootFlags, WW8_HEADER_ODD, nBreakCode );

    IncrementHdFtIndex();
    if ( !(nHeadFootFlags & WW8_FOOTER_EVEN) && pDop->fFacingPages )
        pSepx->OutHeaderFooter( *this, false, rFormat, nCpPos, nHeadFootFlags, WW8_FOOTER_ODD, nBreakCode );
    if ( !(nHeadFootFlags & WW8_FOOTER_EVEN) && m_pDop->fFacingPages )
        m_pSepx->OutHeaderFooter( *this, false, rFormat, nCpPos, nHeadFootFlags, WW8_FOOTER_ODD, nBreakCode );
    else
        pSepx->OutHeaderFooter( *this, false, rLeftFooterFormat, nCpPos, nHeadFootFlags, WW8_FOOTER_EVEN, nBreakCode );
        m_pSepx->OutHeaderFooter( *this, false, rLeftFooterFormat, nCpPos, nHeadFootFlags, WW8_FOOTER_EVEN, nBreakCode );
    IncrementHdFtIndex();
    pSepx->OutHeaderFooter( *this, false, rFormat, nCpPos, nHeadFootFlags, WW8_FOOTER_ODD, nBreakCode );
    m_pSepx->OutHeaderFooter( *this, false, rFormat, nCpPos, nHeadFootFlags, WW8_FOOTER_ODD, nBreakCode );

    //#i24344# Drawing objects cannot be directly shared between main hd/ft
    //and title hd/ft so we need to differentiate them
    IncrementHdFtIndex();
    pSepx->OutHeaderFooter( *this, true, rFirstPageFormat, nCpPos, nHeadFootFlags, WW8_HEADER_FIRST, nBreakCode );
    pSepx->OutHeaderFooter( *this, false, rFirstPageFormat, nCpPos, nHeadFootFlags, WW8_FOOTER_FIRST, nBreakCode );
    m_pSepx->OutHeaderFooter( *this, true, rFirstPageFormat, nCpPos, nHeadFootFlags, WW8_HEADER_FIRST, nBreakCode );
    m_pSepx->OutHeaderFooter( *this, false, rFirstPageFormat, nCpPos, nHeadFootFlags, WW8_FOOTER_FIRST, nBreakCode );
}

namespace
@@ -2008,15 +2008,15 @@ bool WW8_WrPlcSepx::WriteKFText( WW8Export& rWrt )

            rWrt.WriteStringAsPara( OUString() ); // CR to the end ( otherwise WW complains )
        }
        rWrt.m_pFieldHdFt->Finish( nCpEnd, rWrt.pFib->m_ccpText + rWrt.pFib->m_ccpFootnote );
        rWrt.pFib->m_ccpHdr = nCpEnd - nCpStart;
        rWrt.m_pFieldHdFt->Finish( nCpEnd, rWrt.m_pFib->m_ccpText + rWrt.m_pFib->m_ccpFootnote );
        rWrt.m_pFib->m_ccpHdr = nCpEnd - nCpStart;
    }
    else
    {
        pTextPos.reset();
    }

    return rWrt.pFib->m_ccpHdr != 0;
    return rWrt.m_pFib->m_ccpHdr != 0;
}

void WW8_WrPlcSepx::WriteSepx( SvStream& rStrm ) const
@@ -2040,12 +2040,12 @@ void WW8_WrPlcSepx::WritePlcSed( WW8Export& rWrt ) const
    OSL_ENSURE(m_SectionAttributes.size() == static_cast<size_t>(m_aSects.size())
        , "WritePlcSed(): arrays out of sync!");
    OSL_ENSURE( aCps.size() == m_aSects.size() + 1, "WrPlcSepx: DeSync" );
    sal_uInt64 nFcStart = rWrt.pTableStrm->Tell();
    sal_uInt64 nFcStart = rWrt.m_pTableStrm->Tell();

    for( decltype(m_aSects)::size_type i = 0; i <= m_aSects.size(); i++ )
    {
        sal_uInt32 nP = aCps[i];
        rWrt.pTableStrm->WriteUInt32(nP);
        rWrt.m_pTableStrm->WriteUInt32(nP);
    }

    static WW8_SED aSed = {{4, 0},{0, 0, 0, 0},{0, 0},{0xff, 0xff, 0xff, 0xff}};
@@ -2054,21 +2054,21 @@ void WW8_WrPlcSepx::WritePlcSed( WW8Export& rWrt ) const
    {
        // Sepx-Pos
        UInt32ToSVBT32( rSectionAttribute->m_nSepxFcPos, aSed.fcSepx );
        rWrt.pTableStrm->WriteBytes(&aSed, sizeof(aSed));
        rWrt.m_pTableStrm->WriteBytes(&aSed, sizeof(aSed));
    }
    rWrt.pFib->m_fcPlcfsed = nFcStart;
    rWrt.pFib->m_lcbPlcfsed = rWrt.pTableStrm->Tell() - nFcStart;
    rWrt.m_pFib->m_fcPlcfsed = nFcStart;
    rWrt.m_pFib->m_lcbPlcfsed = rWrt.m_pTableStrm->Tell() - nFcStart;
}

void WW8_WrPlcSepx::WritePlcHdd( WW8Export& rWrt ) const
{
    // Don't write out the PlcfHdd if ccpHdd is 0: it's a validation failure case.
    if( rWrt.pFib->m_ccpHdr != 0 && pTextPos && pTextPos->Count() )
    if( rWrt.m_pFib->m_ccpHdr != 0 && pTextPos && pTextPos->Count() )
    {
        rWrt.pFib->m_fcPlcfhdd = rWrt.pTableStrm->Tell();
        pTextPos->Write( *rWrt.pTableStrm );             // Plc0
        rWrt.pFib->m_lcbPlcfhdd = rWrt.pTableStrm->Tell() -
                                rWrt.pFib->m_fcPlcfhdd;
        rWrt.m_pFib->m_fcPlcfhdd = rWrt.m_pTableStrm->Tell();
        pTextPos->Write( *rWrt.m_pTableStrm );             // Plc0
        rWrt.m_pFib->m_lcbPlcfhdd = rWrt.m_pTableStrm->Tell() -
                                rWrt.m_pFib->m_fcPlcfhdd;
    }
}

@@ -2364,7 +2364,7 @@ void WW8_WrPlcSubDoc::WriteGenericPlc( WW8Export& rWrt, sal_uInt8 nTTyp,
    WW8_FC& rTextStart, sal_Int32& rTextCount, WW8_FC& rRefStart, sal_Int32& rRefCount ) const
{

    sal_uInt64 nFcStart = rWrt.pTableStrm->Tell();
    sal_uInt64 nFcStart = rWrt.m_pTableStrm->Tell();
    sal_uInt16 nLen = aCps.size();
    if ( !nLen )
        return;
@@ -2372,7 +2372,7 @@ void WW8_WrPlcSubDoc::WriteGenericPlc( WW8Export& rWrt, sal_uInt8 nTTyp,
    OSL_ENSURE( aCps.size() + 2 == pTextPos->Count(), "WritePlc: DeSync" );

    std::vector<std::pair<OUString,OUString> > aStrArr;
    WW8Fib& rFib = *rWrt.pFib;              // n+1-th CP-Pos according to the manual
    WW8Fib& rFib = *rWrt.m_pFib;              // n+1-th CP-Pos according to the manual
    bool bWriteCP = true;

    switch ( nTTyp )
@@ -2421,13 +2421,13 @@ void WW8_WrPlcSubDoc::WriteGenericPlc( WW8Export& rWrt, sal_uInt8 nTTyp,
                for ( decltype(aStrArr)::size_type i = 0; i < aStrArr.size(); ++i )
                {
                    const OUString& sAuthor = aStrArr[i].first;
                    SwWW8Writer::WriteShort(*rWrt.pTableStrm, sAuthor.getLength());
                    SwWW8Writer::WriteString16(*rWrt.pTableStrm, sAuthor,
                    SwWW8Writer::WriteShort(*rWrt.m_pTableStrm, sAuthor.getLength());
                    SwWW8Writer::WriteString16(*rWrt.m_pTableStrm, sAuthor,
                            false);
                }

                rFib.m_fcGrpStAtnOwners = nFcStart;
                nFcStart = rWrt.pTableStrm->Tell();
                nFcStart = rWrt.m_pTableStrm->Tell();
                rFib.m_lcbGrpStAtnOwners = nFcStart - rFib.m_fcGrpStAtnOwners;

                // Commented text ranges
@@ -2437,47 +2437,47 @@ void WW8_WrPlcSubDoc::WriteGenericPlc( WW8Export& rWrt, sal_uInt8 nTTyp,
                    rFib.m_fcPlcfAtnbkf = nFcStart;
                    for ( decltype(aRangeStartPos)::size_type i = 0; i < aRangeStartPos.size(); ++i )
                    {
                        SwWW8Writer::WriteLong( *rWrt.pTableStrm, aRangeStartPos[i].first );
                        SwWW8Writer::WriteLong( *rWrt.m_pTableStrm, aRangeStartPos[i].first );
                    }
                    SwWW8Writer::WriteLong( *rWrt.pTableStrm, rFib.m_ccpText + 1);
                    SwWW8Writer::WriteLong( *rWrt.m_pTableStrm, rFib.m_ccpText + 1);

                    // Commented text ranges additional information (Plcfbkf.aFBKF)
                    for ( decltype(aRangeStartPos)::size_type i = 0; i < aRangeStartPos.size(); ++i )
                    {
                        SwWW8Writer::WriteShort( *rWrt.pTableStrm, aStartEndMap[i] ); // FBKF.ibkl
                        SwWW8Writer::WriteShort( *rWrt.pTableStrm, 0 ); // FBKF.bkc
                        SwWW8Writer::WriteShort( *rWrt.m_pTableStrm, aStartEndMap[i] ); // FBKF.ibkl
                        SwWW8Writer::WriteShort( *rWrt.m_pTableStrm, 0 ); // FBKF.bkc
                    }

                    nFcStart = rWrt.pTableStrm->Tell();
                    nFcStart = rWrt.m_pTableStrm->Tell();
                    rFib.m_lcbPlcfAtnbkf = nFcStart - rFib.m_fcPlcfAtnbkf;

                    // Commented text ranges ending positions (PlcfBkl.aCP)
                    rFib.m_fcPlcfAtnbkl = nFcStart;
                    for ( decltype(aRangeEndPos)::size_type i = 0; i < aRangeEndPos.size(); ++i )
                    {
                        SwWW8Writer::WriteLong( *rWrt.pTableStrm, aRangeEndPos[i].first );
                        SwWW8Writer::WriteLong( *rWrt.m_pTableStrm, aRangeEndPos[i].first );
                    }
                    SwWW8Writer::WriteLong( *rWrt.pTableStrm, rFib.m_ccpText + 1);
                    SwWW8Writer::WriteLong( *rWrt.m_pTableStrm, rFib.m_ccpText + 1);

                    nFcStart = rWrt.pTableStrm->Tell();
                    nFcStart = rWrt.m_pTableStrm->Tell();
                    rFib.m_lcbPlcfAtnbkl = nFcStart - rFib.m_fcPlcfAtnbkl;

                    // Commented text ranges as bookmarks (SttbfAtnBkmk)
                    rFib.m_fcSttbfAtnbkmk = nFcStart;
                    SwWW8Writer::WriteShort( *rWrt.pTableStrm, sal_Int16(sal_uInt16(0xFFFF)) ); // SttbfAtnBkmk.fExtend
                    SwWW8Writer::WriteShort( *rWrt.pTableStrm, aRangeStartPos.size() ); // SttbfAtnBkmk.cData
                    SwWW8Writer::WriteShort( *rWrt.pTableStrm, 0xA );                   // SttbfAtnBkmk.cbExtra
                    SwWW8Writer::WriteShort( *rWrt.m_pTableStrm, sal_Int16(sal_uInt16(0xFFFF)) ); // SttbfAtnBkmk.fExtend
                    SwWW8Writer::WriteShort( *rWrt.m_pTableStrm, aRangeStartPos.size() ); // SttbfAtnBkmk.cData
                    SwWW8Writer::WriteShort( *rWrt.m_pTableStrm, 0xA );                   // SttbfAtnBkmk.cbExtra

                    for ( decltype(aRangeStartPos)::size_type i = 0; i < aRangeStartPos.size(); ++i )
                    {
                        SwWW8Writer::WriteShort( *rWrt.pTableStrm, 0 );         // SttbfAtnBkmk.cchData
                        SwWW8Writer::WriteShort( *rWrt.m_pTableStrm, 0 );         // SttbfAtnBkmk.cchData
                        // One ATNBE structure for all text ranges
                        SwWW8Writer::WriteShort( *rWrt.pTableStrm, 0x0100 );    // ATNBE.bmc
                        SwWW8Writer::WriteLong( *rWrt.pTableStrm, aStartAtnMap[i] );          // ATNBE.lTag
                        SwWW8Writer::WriteLong( *rWrt.pTableStrm, -1 );         // ATNBE.lTagOld
                        SwWW8Writer::WriteShort( *rWrt.m_pTableStrm, 0x0100 );    // ATNBE.bmc
                        SwWW8Writer::WriteLong( *rWrt.m_pTableStrm, aStartAtnMap[i] );          // ATNBE.lTag
                        SwWW8Writer::WriteLong( *rWrt.m_pTableStrm, -1 );         // ATNBE.lTagOld
                    }

                    nFcStart = rWrt.pTableStrm->Tell();
                    nFcStart = rWrt.m_pTableStrm->Tell();
                    rFib.m_lcbSttbfAtnbkmk = nFcStart - rFib.m_fcSttbfAtnbkmk;
                }

@@ -2488,15 +2488,15 @@ void WW8_WrPlcSubDoc::WriteGenericPlc( WW8Export& rWrt, sal_uInt8 nTTyp,

                    sal_uInt32 nDTTM = sw::ms::DateTime2DTTM(rAtn.maDateTime);

                    SwWW8Writer::WriteLong( *rWrt.pTableStrm, nDTTM );
                    SwWW8Writer::WriteShort( *rWrt.pTableStrm, 0 );
                    SwWW8Writer::WriteLong( *rWrt.pTableStrm, 0 );
                    SwWW8Writer::WriteLong( *rWrt.pTableStrm, 0 );
                    SwWW8Writer::WriteLong( *rWrt.pTableStrm, 0 );
                    SwWW8Writer::WriteLong( *rWrt.m_pTableStrm, nDTTM );
                    SwWW8Writer::WriteShort( *rWrt.m_pTableStrm, 0 );
                    SwWW8Writer::WriteLong( *rWrt.m_pTableStrm, 0 );
                    SwWW8Writer::WriteLong( *rWrt.m_pTableStrm, 0 );
                    SwWW8Writer::WriteLong( *rWrt.m_pTableStrm, 0 );
                }

                rFib.m_fcAtrdExtra = nFcStart;
                nFcStart = rWrt.pTableStrm->Tell();
                nFcStart = rWrt.m_pTableStrm->Tell();
                rFib.m_lcbAtrdExtra = nFcStart - rFib.m_fcAtrdExtra;
                rFib.m_fcHplxsdr = 0x01010002;  //WTF, but apparently necessary
                rFib.m_lcbHplxsdr = 0;
@@ -2505,7 +2505,7 @@ void WW8_WrPlcSubDoc::WriteGenericPlc( WW8Export& rWrt, sal_uInt8 nTTyp,
        case TXT_TXTBOX:
        case TXT_HFTXTBOX:
            {
                pTextPos->Write( *rWrt.pTableStrm );
                pTextPos->Write( *rWrt.m_pTableStrm );
                const std::vector<sal_uInt32>* pShapeIds = GetShapeIdArr();
                OSL_ENSURE( pShapeIds, "Where are the ShapeIds?" );

@@ -2546,20 +2546,20 @@ void WW8_WrPlcSubDoc::WriteGenericPlc( WW8Export& rWrt, sal_uInt8 nTTyp,
                        }
                    }
                    // long cTxbx / iNextReuse
                    SwWW8Writer::WriteLong( *rWrt.pTableStrm, nCnt );
                    SwWW8Writer::WriteLong( *rWrt.m_pTableStrm, nCnt );
                    // long cReusable
                    SwWW8Writer::WriteLong( *rWrt.pTableStrm, 0 );
                    SwWW8Writer::WriteLong( *rWrt.m_pTableStrm, 0 );
                    // short fReusable
                    SwWW8Writer::WriteShort( *rWrt.pTableStrm, 0 );
                    SwWW8Writer::WriteShort( *rWrt.m_pTableStrm, 0 );
                    // long reserved
                    SwWW8Writer::WriteLong( *rWrt.pTableStrm, -1 );
                    SwWW8Writer::WriteLong( *rWrt.m_pTableStrm, -1 );
                    // long lid
                    SwWW8Writer::WriteLong( *rWrt.pTableStrm,
                    SwWW8Writer::WriteLong( *rWrt.m_pTableStrm,
                            (*pShapeIds)[i]);
                    // long txidUndo
                    SwWW8Writer::WriteLong( *rWrt.pTableStrm, 0 );
                    SwWW8Writer::WriteLong( *rWrt.m_pTableStrm, 0 );
                }
                SwWW8Writer::FillCount( *rWrt.pTableStrm, 22 );
                SwWW8Writer::FillCount( *rWrt.m_pTableStrm, 22 );
                bWriteCP = false;
            }
            break;
@@ -2569,10 +2569,10 @@ void WW8_WrPlcSubDoc::WriteGenericPlc( WW8Export& rWrt, sal_uInt8 nTTyp,
    {
        // write CP Positions
        for ( sal_uInt16 i = 0; i < nLen; i++ )
            SwWW8Writer::WriteLong( *rWrt.pTableStrm, aCps[ i ] );
            SwWW8Writer::WriteLong( *rWrt.m_pTableStrm, aCps[ i ] );

        // n+1-th CP-Pos according to the manual
        SwWW8Writer::WriteLong( *rWrt.pTableStrm,
        SwWW8Writer::WriteLong( *rWrt.m_pTableStrm,
                rFib.m_ccpText + rFib.m_ccpFootnote + rFib.m_ccpHdr + rFib.m_ccpEdn +
                rFib.m_ccpTxbx + rFib.m_ccpHdrTxbx + 1 );

@@ -2600,10 +2600,10 @@ void WW8_WrPlcSubDoc::WriteGenericPlc( WW8Export& rWrt, sal_uInt8 nTTyp,

                // xstUsrInitl[ 10 ] pascal-style String holding initials
                // of annotation author
                SwWW8Writer::WriteShort(*rWrt.pTableStrm, nInitialsLen);
                SwWW8Writer::WriteString16(*rWrt.pTableStrm, sInitials,
                SwWW8Writer::WriteShort(*rWrt.m_pTableStrm, nInitialsLen);
                SwWW8Writer::WriteString16(*rWrt.m_pTableStrm, sInitials,
                        false);
                SwWW8Writer::FillCount( *rWrt.pTableStrm,
                SwWW8Writer::FillCount( *rWrt.m_pTableStrm,
                        (9 - nInitialsLen) * 2 );

                // documents layout of WriteShort's below:
@@ -2613,16 +2613,16 @@ void WW8_WrPlcSubDoc::WriteGenericPlc( WW8Export& rWrt, sal_uInt8 nTTyp,
                // SVBT16 grfbmc;    // not used
                // SVBT32 ITagBkmk;  // when not -1, this tag identifies the ATNBE

                SwWW8Writer::WriteShort( *rWrt.pTableStrm, nFndPos );
                SwWW8Writer::WriteShort( *rWrt.pTableStrm, 0 );
                SwWW8Writer::WriteShort( *rWrt.pTableStrm, 0 );
                SwWW8Writer::WriteShort( *rWrt.m_pTableStrm, nFndPos );
                SwWW8Writer::WriteShort( *rWrt.m_pTableStrm, 0 );
                SwWW8Writer::WriteShort( *rWrt.m_pTableStrm, 0 );
                if (rAtn.HasRange())
                {
                    SwWW8Writer::WriteLong( *rWrt.pTableStrm, nlTag );
                    SwWW8Writer::WriteLong( *rWrt.m_pTableStrm, nlTag );
                    ++nlTag;
                }
                else
                    SwWW8Writer::WriteLong( *rWrt.pTableStrm, -1 );
                    SwWW8Writer::WriteLong( *rWrt.m_pTableStrm, -1 );
            }
        }
        else
@@ -2631,16 +2631,16 @@ void WW8_WrPlcSubDoc::WriteGenericPlc( WW8Export& rWrt, sal_uInt8 nTTyp,
            for ( sal_uInt16 i = 0; i < nLen; ++i )             // write Flags
            {
                const SwFormatFootnote* pFootnote = static_cast<SwFormatFootnote const *>(aContent[ i ]);
                SwWW8Writer::WriteShort( *rWrt.pTableStrm,
                SwWW8Writer::WriteShort( *rWrt.m_pTableStrm,
                        !pFootnote->GetNumStr().isEmpty() ? 0 : ++nNo );
            }
        }
    }
    rRefStart = nFcStart;
    nFcStart = rWrt.pTableStrm->Tell();
    nFcStart = rWrt.m_pTableStrm->Tell();
    rRefCount = nFcStart - rRefStart;

    pTextPos->Write( *rWrt.pTableStrm );
    pTextPos->Write( *rWrt.m_pTableStrm );

    switch ( nTTyp )
    {
@@ -2650,19 +2650,19 @@ void WW8_WrPlcSubDoc::WriteGenericPlc( WW8Export& rWrt, sal_uInt8 nTTyp,
            {
                // write break descriptor (BKD)
                // short itxbxs
                SwWW8Writer::WriteShort( *rWrt.pTableStrm, i );
                SwWW8Writer::WriteShort( *rWrt.m_pTableStrm, i );
                // short dcpDepend
                SwWW8Writer::WriteShort( *rWrt.pTableStrm, 0 );
                SwWW8Writer::WriteShort( *rWrt.m_pTableStrm, 0 );
                // short flags : icol/fTableBreak/fColumnBreak/fMarked/
                //               fUnk/fTextOverflow
                SwWW8Writer::WriteShort( *rWrt.pTableStrm, 0x800 );
                SwWW8Writer::WriteShort( *rWrt.m_pTableStrm, 0x800 );
            }
            SwWW8Writer::FillCount( *rWrt.pTableStrm, 6 );
            SwWW8Writer::FillCount( *rWrt.m_pTableStrm, 6 );
            break;
    }

    rTextStart = nFcStart;
    rTextCount = rWrt.pTableStrm->Tell() - nFcStart;
    rTextCount = rWrt.m_pTableStrm->Tell() - nFcStart;
}

const std::vector<sal_uInt32>* WW8_WrPlcSubDoc::GetShapeIdArr() const
diff --git a/sw/source/filter/ww8/wrtww8.cxx b/sw/source/filter/ww8/wrtww8.cxx
index 0dafd6a..4550a88 100644
--- a/sw/source/filter/ww8/wrtww8.cxx
+++ b/sw/source/filter/ww8/wrtww8.cxx
@@ -280,11 +280,11 @@ 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);
    SwWW8Writer::WriteLong(rStrm, rWrt.m_pFib->m_ccpText + rWrt.m_pFib->m_ccpTxbx);
    for (const auto& rEntry : aSttCps)
    {
        if (rEntry.second)
@@ -292,11 +292,11 @@ void WW8_WrtBookmarks::Write( WW8Export& rWrt)
            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)
@@ -355,11 +355,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 +374,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 +389,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 +402,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,7 +439,7 @@ 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
@@ -450,7 +450,7 @@ 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());
@@ -505,7 +505,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 +556,7 @@ 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 );
    rDop.Write( *rWrt.m_pTableStrm, *rWrt.m_pFib );
}

static int lcl_CmpBeginEndChars( const OUString& rSWStr,
@@ -856,37 +856,37 @@ void WW8_WrPlcField::Write( WW8Export& rWrt )
    switch (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 +896,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 +907,10 @@ void WW8_WrMagicTable::Write( WW8Export& rWrt )
{
    if( WW8_WrPlc1::Count() <= 1 )
        return;
    sal_uInt64 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)
@@ -990,9 +990,9 @@ void WW8_WrPlcPn::AppendFkpEntry(WW8_FC nEndFc,short nVarLen,const sal_uInt8* pS
        *p++ = *pSprms++;
        nVarLen -= 2;

        sal_uInt64 nDataPos = rWrt.pDataStrm->Tell();
        SwWW8Writer::WriteShort( *rWrt.pDataStrm, nVarLen );
        rWrt.pDataStrm->WriteBytes(pSprms, nVarLen);
        sal_uInt64 nDataPos = rWrt.m_pDataStrm->Tell();
        SwWW8Writer::WriteShort( *rWrt.m_pDataStrm, nVarLen );
        rWrt.m_pDataStrm->WriteBytes(pSprms, nVarLen);

        Set_UInt16( p, 0x6646 );    // set SprmCode
        Set_UInt32( p, nDataPos );  // set startpos (FC) in the datastream
@@ -1038,45 +1038,45 @@ void WW8_WrPlcPn::WriteFkps()

    if( CHP == ePlc )
    {
        rWrt.pFib->m_pnChpFirst = nFkpStartPage;
        rWrt.pFib->m_cpnBteChp = m_Fkps.size();
        rWrt.m_pFib->m_pnChpFirst = nFkpStartPage;
        rWrt.m_pFib->m_cpnBteChp = m_Fkps.size();
    }
    else
    {
        rWrt.pFib->m_pnPapFirst = nFkpStartPage;
        rWrt.pFib->m_cpnBtePap = m_Fkps.size();
        rWrt.m_pFib->m_pnPapFirst = nFkpStartPage;
        rWrt.m_pFib->m_cpnBtePap = m_Fkps.size();
    }
}

void WW8_WrPlcPn::WritePlc()
{
    sal_uInt64 nFcStart = rWrt.pTableStrm->Tell();
    sal_uInt64 nFcStart = rWrt.m_pTableStrm->Tell();
    decltype(m_Fkps)::size_type i;

    for (i = 0; i < m_Fkps.size(); ++i)
    {
        SwWW8Writer::WriteLong( *rWrt.pTableStrm,
        SwWW8Writer::WriteLong( *rWrt.m_pTableStrm,
                                m_Fkps[ i ]->GetStartFc() );
    }

    SwWW8Writer::WriteLong( *rWrt.pTableStrm,
    SwWW8Writer::WriteLong( *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( *rWrt.m_pTableStrm, i + nFkpStartPage );
    }

    if( CHP == ePlc )
    {
        rWrt.pFib->m_fcPlcfbteChpx = nFcStart;
        rWrt.pFib->m_lcbPlcfbteChpx = rWrt.pTableStrm->Tell() - nFcStart;
        rWrt.m_pFib->m_fcPlcfbteChpx = nFcStart;
        rWrt.m_pFib->m_lcbPlcfbteChpx = rWrt.m_pTableStrm->Tell() - nFcStart;
    }
    else
    {
        rWrt.pFib->m_fcPlcfbtePapx = nFcStart;
        rWrt.pFib->m_lcbPlcfbtePapx = rWrt.pTableStrm->Tell() - nFcStart;
        rWrt.m_pFib->m_fcPlcfbtePapx = nFcStart;
        rWrt.m_pFib->m_lcbPlcfbtePapx = rWrt.m_pTableStrm->Tell() - nFcStart;
    }
}

@@ -1364,37 +1364,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 - 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 );

}
@@ -1598,12 +1598,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) );

@@ -1650,8 +1650,8 @@ 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 )
@@ -1673,7 +1673,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 );
@@ -1951,10 +1951,10 @@ void WW8Export::SaveData( SwNodeOffset nStt, SwNodeOffset 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
@@ -1969,10 +1969,10 @@ 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();
@@ -1987,14 +1987,14 @@ 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) );
    }
}

@@ -2010,12 +2010,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 );
@@ -2024,9 +2024,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.
@@ -2125,8 +2125,8 @@ 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);
        }
    }
@@ -2147,9 +2147,9 @@ 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 )
@@ -2281,7 +2281,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());
@@ -2304,7 +2304,7 @@ void WW8AttributeOutput::TableDefinition( ww8::WW8TableNodeInfoInner::Pointer_t 
    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 =
@@ -2319,7 +2319,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 */
    /*
@@ -2387,7 +2387,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)
@@ -2399,17 +2399,17 @@ 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;
    }

@@ -2423,7 +2423,7 @@ void WW8AttributeOutput::TableDefinition( ww8::WW8TableNodeInfoInner::Pointer_t 
    if ( nWidthPercent > 0 && nWidthPercent <= 600 )
    {
        m_rWW8Export.InsUInt16( NS_sprm::TTableWidth::val );
        m_rWW8Export.pO->push_back( sal_uInt8/*ftsPercent*/ (2) );
        m_rWW8Export.m_pO->push_back( sal_uInt8/*ftsPercent*/ (2) );
        m_rWW8Export.InsUInt16( o3tl::narrowing<sal_uInt16>(nWidthPercent) * 50 );
    }
}
@@ -2533,14 +2533,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] ) );
    }
}
@@ -2614,13 +2614,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] );
                }
            }

@@ -2639,7 +2639,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);
@@ -2705,7 +2705,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++ )
        {
@@ -2932,17 +2932,17 @@ 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();

    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
@@ -2988,18 +2988,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
@@ -3033,7 +3033,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
@@ -3055,10 +3055,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

@@ -3069,8 +3069,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 );
@@ -3081,29 +3081,29 @@ void WW8Export::WriteFkpPlcUsw()

    if ( pFibData )
    {
        pFib->m_fReadOnlyRecommended =
        m_pFib->m_fReadOnlyRecommended =
            pFibData->getReadOnlyRecommended();
        pFib->m_fWriteReservation =
        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();
@@ -3118,10 +3118,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, ...
}
@@ -3456,13 +3456,13 @@ 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 );
    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);

@@ -3473,8 +3473,8 @@ 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 );

@@ -3492,19 +3492,19 @@ 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_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.reset(new WW8_WrPlcTextBoxes( TXT_TXTBOX ));
@@ -3516,9 +3516,9 @@ ErrCode WW8Export::ExportDocument_Impl()
    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 ));
@@ -3531,13 +3531,13 @@ ErrCode WW8Export::ExportDocument_Impl()
    m_pMagicTable.reset(new WW8_WrMagicTable);

    m_pGrf.reset(new SwWW8WrGrf( *this ));
    m_pPiece.reset(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 SvxHyphenZoneItem* pItem;
@@ -3546,7 +3546,7 @@ ErrCode WW8Export::ExportDocument_Impl()
    if (pStdTextFormatColl && (pItem = pStdTextFormatColl->GetItemIfSet(
        RES_PARATR_HYPHENZONE, false)))
    {
        pDop->fAutoHyphen = pItem->IsHyphen();
        m_pDop->fAutoHyphen = pItem->IsHyphen();
    }

    StoreDoc1();
@@ -3560,13 +3560,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;
        }
@@ -3593,13 +3593,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:;
    }

@@ -3613,10 +3613,10 @@ 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();
    m_pSepx.reset();

    m_pRedlAuthors.reset();
    m_pSdrObjs.reset();
@@ -3624,21 +3624,21 @@ ErrCode WW8Export::ExportDocument_Impl()
    m_pTextBxs.reset();
    m_pHFTextBxs.reset();
    m_pAtn.reset();
    pEdn.reset();
    pFootnote.reset();
    m_pEdn.reset();
    m_pFootnote.reset();
    m_pBkmks.reset();
    m_pPiece.reset();
    pDop.reset();
    pFib.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);
    }

@@ -3920,8 +3920,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))
@@ -3939,7 +3939,7 @@ AttributeOutputBase& WW8Export::AttrOutput() const

MSWordSections& WW8Export::Sections() const
{
    return *pSepx;
    return *m_pSepx;
}

SwWW8Writer::SwWW8Writer(const OUString& rFltName, const OUString& rBaseURL)
@@ -3976,16 +3976,16 @@ bool WW8_WrPlcFootnoteEdn::WriteText( WW8Export& rWrt )
    bool bRet = false;
    if (TXT_FTN == 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;
}
@@ -3994,53 +3994,53 @@ void WW8_WrPlcFootnoteEdn::WritePlc( WW8Export& rWrt ) const
{
    if( TXT_FTN == 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 )
    {
        WriteGenericPlc( rWrt, nTyp, rWrt.pFib->m_fcPlcftxbxBkd,
            rWrt.pFib->m_lcbPlcftxbxBkd, rWrt.pFib->m_fcPlcftxbxText,
            rWrt.pFib->m_lcbPlcftxbxText );
        WriteGenericPlc( rWrt, 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, 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
@@ -4051,13 +4051,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& )
@@ -4065,7 +4065,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 )
@@ -4104,7 +4104,7 @@ void WW8Export::WriteFormData( const ::sw::mark::IFieldmark& rFieldmark )
        ffname = aName.copy(0, nLen);
    }

    sal_uInt64 nDataStt = pDataStrm->Tell();
    sal_uInt64 nDataStt = m_pDataStrm->Tell();
    m_pChpPlc->AppendFkpEntry(Strm().Tell());

    WriteChar(0x01);
@@ -4290,33 +4290,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 );
        }
    }
}
@@ -4335,7 +4335,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)
@@ -4350,12 +4350,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();
        }
    }

@@ -4365,11 +4365,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();
@@ -4385,11 +4385,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();
        }
    }

@@ -4400,11 +4400,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>" );
}
diff --git a/sw/source/filter/ww8/wrtww8.hxx b/sw/source/filter/ww8/wrtww8.hxx
index 6cf8c86..497e06c 100644
--- a/sw/source/filter/ww8/wrtww8.hxx
+++ b/sw/source/filter/ww8/wrtww8.hxx
@@ -989,15 +989,15 @@ private:
class WW8Export : public MSWordExportBase
{
public:
    std::unique_ptr<ww::bytes> pO;      ///< Buffer
    std::unique_ptr<ww::bytes> m_pO;      ///< Buffer

    SvStream *pTableStrm, *pDataStrm;   ///< Streams for WW97 Export
    SvStream *m_pTableStrm, *m_pDataStrm;   ///< Streams for WW97 Export

    std::unique_ptr<WW8Fib> pFib;                       ///< File Information Block
    std::unique_ptr<WW8Dop> pDop;                       ///< Document Properties
    std::unique_ptr<WW8_WrPlcFootnoteEdn> pFootnote;    ///< Footnotes - structure to remember them, and output
    std::unique_ptr<WW8_WrPlcFootnoteEdn> pEdn;         ///< Endnotes - structure to remember them, and output
    std::unique_ptr<WW8_WrPlcSepx> pSepx;               ///< Sections/headers/footers
    std::unique_ptr<WW8Fib> m_pFib;                       ///< File Information Block
    std::unique_ptr<WW8Dop> m_pDop;                       ///< Document Properties
    std::unique_ptr<WW8_WrPlcFootnoteEdn> m_pFootnote;    ///< Footnotes - structure to remember them, and output
    std::unique_ptr<WW8_WrPlcFootnoteEdn> m_pEdn;         ///< Endnotes - structure to remember them, and output
    std::unique_ptr<WW8_WrPlcSepx> m_pSepx;               ///< Sections/headers/footers

    bool m_bDot; ///< Template or document.

@@ -1006,7 +1006,7 @@ protected:
    std::unique_ptr<WW8AttributeOutput> m_pAttrOutput;  ///< Converting attributes to stream data

private:
    tools::SvRef<SotStorage>       xEscherStg;      /// memory leak #i120098#, to hold the reference to unnamed SotStorage obj
    tools::SvRef<SotStorage>       m_xEscherStg;      /// memory leak #i120098#, to hold the reference to unnamed SotStorage obj

public:
    /// Access to the attribute output class.
@@ -1103,7 +1103,7 @@ public:
            // some partly static semi-internal function declarations

    void OutSprmBytes( sal_uInt8* pBytes, sal_uInt16 nSiz )
                                { pO->insert( pO->end(), pBytes, pBytes+nSiz ); }
                                { m_pO->insert( m_pO->end(), pBytes, pBytes+nSiz ); }

    virtual void SectionBreaksAndFrames( const SwTextNode& rNode ) override;

@@ -1150,9 +1150,9 @@ public:
    void MiserableRTLFrameFormatHack(SwTwips &rLeft, SwTwips &rRight,
        const ww8::Frame &rFrameFormat);

    void InsUInt16( sal_uInt16 n )      { SwWW8Writer::InsUInt16( *pO, n ); }
    void InsUInt16( sal_uInt16 n )      { SwWW8Writer::InsUInt16( *m_pO, n ); }
    void InsInt16(sal_Int16 n) { InsUInt16(sal_uInt16(n)); }
    void InsUInt32( sal_uInt32 n )      { SwWW8Writer::InsUInt32( *pO, n ); }
    void InsUInt32( sal_uInt32 n )      { SwWW8Writer::InsUInt32( *m_pO, n ); }
    void WriteStringAsPara( const OUString& rText );

    /// Setup the exporter.
@@ -1405,7 +1405,7 @@ class SwWW8WrGrf
{
private:
    /// for access to the variables
    WW8Export& rWrt;
    WW8Export& m_rWrt;

    std::vector<GraphicDetails> maDetails;
    sal_uInt16 mnIdx;       // index in file positions
@@ -1423,7 +1423,7 @@ private:
    SwWW8WrGrf(const SwWW8WrGrf&) = delete;
    SwWW8WrGrf& operator=(const SwWW8WrGrf&) = delete;
public:
    explicit SwWW8WrGrf( WW8Export& rW ) : rWrt( rW ), mnIdx( 0 ) {}
    explicit SwWW8WrGrf( WW8Export& rW ) : m_rWrt( rW ), mnIdx( 0 ) {}
    void Insert(const ww8::Frame &rFly);
    void Write();
    sal_uLong GetFPos()
diff --git a/sw/source/filter/ww8/wrtww8gr.cxx b/sw/source/filter/ww8/wrtww8gr.cxx
index d038be9..78cecb72 100644
--- a/sw/source/filter/ww8/wrtww8gr.cxx
+++ b/sw/source/filter/ww8/wrtww8gr.cxx
@@ -78,7 +78,7 @@ void WW8Export::OutputGrfNode( const SwGrfNode& /*rNode*/ )
    if ( m_pParentFrame )
    {
        OutGrf( *m_pParentFrame );
        pFib->m_fHasPic = true;
        m_pFib->m_fHasPic = true;
    }
}

@@ -368,8 +368,8 @@ void WW8Export::OutGrf(const ww8::Frame &rFrame)
    // Store the graphic settings in GrfNode so they may be written-out later
    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();

    // #i29408#
    // linked, as-character anchored graphics have to be exported as fields.
@@ -444,15 +444,15 @@ void WW8Export::OutGrf(const ww8::Frame &rFrame)
        WriteChar( char(0x0d) ); // close the surrounding frame with CR

        static sal_uInt8 nSty[2] = { 0, 0 };
        pO->insert( pO->end(), nSty, nSty+2 );     // Style #0
        m_pO->insert( m_pO->end(), nSty, nSty+2 );     // Style #0
        bool bOldGrf = m_bOutGrf;
        m_bOutGrf = true;

        OutputFormat( rFrame.GetFrameFormat(), false, false, true ); // Fly-Attrs

        m_bOutGrf = bOldGrf;
        m_pPapPlc->AppendFkpEntry( Strm().Tell(), pO->size(), pO->data() );
        pO->clear();
        m_pPapPlc->AppendFkpEntry( Strm().Tell(), m_pO->size(), m_pO->data() );
        m_pO->clear();
    }
    // #i29408#
    // linked, as-character anchored graphics have to be exported as fields.
@@ -644,7 +644,7 @@ void SwWW8WrGrf::WriteGrfFromGrfNode(SvStream& rStrm, const SwGrfNode &rGrfNd,
    {
        WritePICFHeader(rStrm, rFly, 0x64, nWidth, nHeight,
            rGrfNd.GetpSwAttrSet());
        SwBasicEscherEx aInlineEscher(&rStrm, rWrt);
        SwBasicEscherEx aInlineEscher(&rStrm, m_rWrt);
        aInlineEscher.WriteGrfFlyFrame(rFly.GetFrameFormat(), 0x401);
        aInlineEscher.WritePictures();
    }
@@ -739,7 +739,7 @@ void SwWW8WrGrf::WritePICBulletFHeader(SvStream& rStrm, const Graphic &rGrf,
void SwWW8WrGrf::WriteGrfForBullet(SvStream& rStrm, const Graphic &rGrf, sal_uInt16 nWidth, sal_uInt16 nHeight)
{
    WritePICBulletFHeader(rStrm,rGrf, 0x64,nWidth,nHeight);
    SwBasicEscherEx aInlineEscher(&rStrm, rWrt);
    SwBasicEscherEx aInlineEscher(&rStrm, m_rWrt);
    aInlineEscher.WriteGrfBullet(rGrf);
    aInlineEscher.WritePictures();
}
@@ -787,7 +787,7 @@ void SwWW8WrGrf::WriteGraphicNode(SvStream& rStrm, const GraphicDetails &rItem)
                //documents.
                WritePICFHeader(rStrm, rFly, 0x64, nWidth, nHeight,
                    pNd->GetpSwAttrSet());
                SwBasicEscherEx aInlineEscher(&rStrm, rWrt);
                SwBasicEscherEx aInlineEscher(&rStrm, m_rWrt);
                aInlineEscher.WriteOLEFlyFrame(rFly.GetFrameFormat(), 0x401);
                aInlineEscher.WritePictures();
#else
@@ -828,7 +828,7 @@ void SwWW8WrGrf::WriteGraphicNode(SvStream& rStrm, const GraphicDetails &rItem)
            */
            {
                WritePICFHeader(rStrm, rFly, 0x64, nWidth, nHeight);
                SwBasicEscherEx aInlineEscher(&rStrm, rWrt);
                SwBasicEscherEx aInlineEscher(&rStrm, m_rWrt);
                aInlineEscher.WriteEmptyFlyFrame(rFly.GetFrameFormat(), 0x401);
            }
            break;
@@ -851,7 +851,7 @@ void SwWW8WrGrf::WriteGraphicNode(SvStream& rStrm, const GraphicDetails &rItem)
// GetFPos() sequentially the positions
void SwWW8WrGrf::Write()
{
    SvStream& rStrm = *rWrt.pDataStrm;
    SvStream& rStrm = *m_rWrt.m_pDataStrm;
    auto aEnd = maDetails.end();
    for (auto aIter = maDetails.begin(); aIter != aEnd; ++aIter)
    {
diff --git a/sw/source/filter/ww8/ww8atr.cxx b/sw/source/filter/ww8/ww8atr.cxx
index 409b00f1..72a16dd 100644
--- a/sw/source/filter/ww8/ww8atr.cxx
+++ b/sw/source/filter/ww8/ww8atr.cxx
@@ -688,11 +688,11 @@ void WW8Export::PrepareNewPageDesc( const SfxItemSet*pSet,

    if ( pNewPgDescFormat )
    {
        pSepx->AppendSep( Fc2Cp( nFcPos ), *pNewPgDescFormat, rNd, pFormat, nLnNm );
        m_pSepx->AppendSep( Fc2Cp( nFcPos ), *pNewPgDescFormat, rNd, pFormat, nLnNm );
    }
    else if ( pNewPgDesc )
    {
        pSepx->AppendSep( Fc2Cp( nFcPos ), pNewPgDesc, rNd, pFormat, nLnNm );
        m_pSepx->AppendSep( Fc2Cp( nFcPos ), pNewPgDesc, rNd, pFormat, nLnNm );
    }
}

@@ -802,10 +802,10 @@ bool WW8Export::DisallowInheritingOutlineNumbering(const SwFormat &rFormat)
        {
            if (static_cast<const SwTextFormatColl*>(pParent)->IsAssignedToListLevelOfOutlineStyle())
            {
                SwWW8Writer::InsUInt16(*pO, NS_sprm::POutLvl::val);
                pO->push_back(sal_uInt8(9));
                SwWW8Writer::InsUInt16(*pO, NS_sprm::PIlfo::val);
                SwWW8Writer::InsUInt16(*pO, 0);
                SwWW8Writer::InsUInt16(*m_pO, NS_sprm::POutLvl::val);
                m_pO->push_back(sal_uInt8(9));
                SwWW8Writer::InsUInt16(*m_pO, NS_sprm::PIlfo::val);
                SwWW8Writer::InsUInt16(*m_pO, 0);

                bRet = true;
            }
@@ -1007,7 +1007,7 @@ void WW8AttributeOutput::RTLAndCJKState( bool bIsRTL, sal_uInt16 nScript )
        if( m_rWW8Export.m_rDoc.GetDocumentType() != SwDoc::DOCTYPE_MSWORD )
        {
            m_rWW8Export.InsUInt16( NS_sprm::CFBiDi::val );
            m_rWW8Export.pO->push_back( sal_uInt8(1) );
            m_rWW8Export.m_pO->push_back( sal_uInt8(1) );
        }
    }

@@ -1015,16 +1015,16 @@ void WW8AttributeOutput::RTLAndCJKState( bool bIsRTL, sal_uInt16 nScript )
    if (nScript == i18n::ScriptType::COMPLEX && !bIsRTL)
    {
        m_rWW8Export.InsUInt16( NS_sprm::CFComplexScripts::val );
        m_rWW8Export.pO->push_back( sal_uInt8(0x81) );
        m_rWW8Export.pDop->bUseThaiLineBreakingRules = true;
        m_rWW8Export.m_pO->push_back( sal_uInt8(0x81) );
        m_rWW8Export.m_pDop->bUseThaiLineBreakingRules = true;
    }
}

void WW8AttributeOutput::EndParagraph( ww8::WW8TableNodeInfoInner::Pointer_t pTextNodeInfoInner )
{
    m_rWW8Export.m_pPapPlc->AppendFkpEntry( m_rWW8Export.Strm().Tell() - (mbOnTOXEnding?2:0), m_rWW8Export.pO->size(), m_rWW8Export.pO->data() );
    m_rWW8Export.m_pPapPlc->AppendFkpEntry( m_rWW8Export.Strm().Tell() - (mbOnTOXEnding?2:0), m_rWW8Export.m_pO->size(), m_rWW8Export.m_pO->data() );
    mbOnTOXEnding = false;
    m_rWW8Export.pO->clear();
    m_rWW8Export.m_pO->clear();

    if ( pTextNodeInfoInner )
    {
@@ -1034,10 +1034,10 @@ void WW8AttributeOutput::EndParagraph( ww8::WW8TableNodeInfoInner::Pointer_t pTe

            SVBT16 nSty;
            ShortToSVBT16( 0, nSty );
            m_rWW8Export.pO->insert( m_rWW8Export.pO->end(), nSty, nSty+2 );     // Style #
            m_rWW8Export.m_pO->insert( m_rWW8Export.m_pO->end(), nSty, nSty+2 );     // Style #
            TableInfoRow( pTextNodeInfoInner );
            m_rWW8Export.m_pPapPlc->AppendFkpEntry( m_rWW8Export.Strm().Tell(), m_rWW8Export.pO->size(), m_rWW8Export.pO->data());
            m_rWW8Export.pO->clear();
            m_rWW8Export.m_pPapPlc->AppendFkpEntry( m_rWW8Export.Strm().Tell(), m_rWW8Export.m_pO->size(), m_rWW8Export.m_pO->data());
            m_rWW8Export.m_pO->clear();
        }
    }

@@ -1063,7 +1063,7 @@ void WW8AttributeOutput::StartRun( const SwRedlineData* pRedlineData, sal_Int32 
            if (m_rWW8Export.m_pAtn->IsNewRedlineComment(pRedlineData))
            {
                m_rWW8Export.m_pAtn->Append( m_rWW8Export.Fc2Cp( m_rWW8Export.Strm().Tell() ), pRedlineData );
                m_rWW8Export.WritePostItBegin( m_rWW8Export.pO.get() );
                m_rWW8Export.WritePostItBegin( m_rWW8Export.m_pO.get() );
            }
        }
    }
@@ -1110,9 +1110,9 @@ void WW8AttributeOutput::EndRunProperties( const SwRedlineData* pRedlineData )
    if ( !bExportedFieldResult )
    {
        m_rWW8Export.m_pChpPlc->AppendFkpEntry( m_rWW8Export.Strm().Tell(),
                m_rWW8Export.pO->size(), m_rWW8Export.pO->data() );
                m_rWW8Export.m_pO->size(), m_rWW8Export.m_pO->data() );
    }
    m_rWW8Export.pO->clear();
    m_rWW8Export.m_pO->clear();
}

void WW8AttributeOutput::RunText( const OUString& rText, rtl_TextEncoding eCharSet )
@@ -1127,28 +1127,28 @@ void WW8AttributeOutput::RawText(const OUString& rText, rtl_TextEncoding)

void WW8AttributeOutput::OutputFKP(bool bForce)
{
    if (!m_rWW8Export.pO->empty() || bForce)
    if (!m_rWW8Export.m_pO->empty() || bForce)
    {
        m_rWW8Export.m_pChpPlc->AppendFkpEntry( m_rWW8Export.Strm().Tell(),
                m_rWW8Export.pO->size(), m_rWW8Export.pO->data() );
        m_rWW8Export.pO->clear();
                m_rWW8Export.m_pO->size(), m_rWW8Export.m_pO->data() );
        m_rWW8Export.m_pO->clear();
    }
}

void WW8AttributeOutput::ParagraphStyle( sal_uInt16 nStyle )
{
    OSL_ENSURE( m_rWW8Export.pO->empty(), " pO is not empty at line end" );
    OSL_ENSURE( m_rWW8Export.m_pO->empty(), " pO is not empty at line end" );

    SVBT16 nSty;
    ShortToSVBT16( nStyle, nSty );
    m_rWW8Export.pO->insert( m_rWW8Export.pO->end(), nSty, nSty+2 );     // style #
    m_rWW8Export.m_pO->insert( m_rWW8Export.m_pO->end(), nSty, nSty+2 );     // style #
}

void WW8AttributeOutput::OutputWW8Attribute( sal_uInt8 nId, bool bVal )
{
    m_rWW8Export.InsUInt16( 8 == nId ? NS_sprm::CFDStrike::val : NS_sprm::CFBold::val + nId );

    m_rWW8Export.pO->push_back( bVal ? 1 : 0 );
    m_rWW8Export.m_pO->push_back( bVal ? 1 : 0 );
}

void WW8AttributeOutput::OutputWW8AttributeCTL( sal_uInt8 nId, bool bVal )
@@ -1158,7 +1158,7 @@ void WW8AttributeOutput::OutputWW8AttributeCTL( sal_uInt8 nId, bool bVal )
        return;

    m_rWW8Export.InsUInt16( NS_sprm::CFBoldBi::val + nId );
    m_rWW8Export.pO->push_back( bVal ? 1 : 0 );
    m_rWW8Export.m_pO->push_back( bVal ? 1 : 0 );
}

void WW8AttributeOutput::CharFont( const SvxFontItem& rFont )
@@ -1235,7 +1235,7 @@ void WW8AttributeOutput::CharAnimatedText( const SvxBlinkItem& rBlink )
{
    m_rWW8Export.InsUInt16( NS_sprm::CSfxText::val );
    // At the moment the only animated text effect we support is blinking
    m_rWW8Export.pO->push_back( rBlink.GetValue() ? 2 : 0 );
    m_rWW8Export.m_pO->push_back( rBlink.GetValue() ? 2 : 0 );
}

void WW8AttributeOutput::CharCrossedOut( const SvxCrossedOutItem& rCrossed )
@@ -1286,14 +1286,14 @@ void WW8AttributeOutput::CharHidden( const SvxCharHiddenItem& rHidden )

void WW8AttributeOutput::CharBorder( const SvxBorderLine* pAllBorder, const sal_uInt16 /*nDist*/, const bool bShadow )
{
    WW8Export::Out_BorderLine( *m_rWW8Export.pO, pAllBorder, 0, NS_sprm::CBrc80::val, NS_sprm::CBrc::val, bShadow );
    WW8Export::Out_BorderLine( *m_rWW8Export.m_pO, pAllBorder, 0, NS_sprm::CBrc80::val, NS_sprm::CBrc::val, bShadow );
}

void WW8AttributeOutput::CharHighlight( const SvxBrushItem& rBrush )
{
    sal_uInt8 nColor = msfilter::util::TransColToIco( rBrush.GetColor() );
    m_rWW8Export.InsUInt16( NS_sprm::CHighlight::val );
    m_rWW8Export.pO->push_back( nColor );
    m_rWW8Export.m_pO->push_back( nColor );
}

void WW8AttributeOutput::CharUnderline( const SvxUnderlineItem& rUnderline )
@@ -1377,7 +1377,7 @@ void WW8AttributeOutput::CharUnderline( const SvxUnderlineItem& rUnderline )
            break;
    }

    m_rWW8Export.pO->push_back( b );
    m_rWW8Export.m_pO->push_back( b );
    Color aColor = rUnderline.GetColor();
    if( aColor != COL_TRANSPARENT )
    {
@@ -1460,7 +1460,7 @@ void WW8AttributeOutput::CharEscapement( const SvxEscapementItem& rEscapement )
    {
        m_rWW8Export.InsUInt16( NS_sprm::CIss::val );

        m_rWW8Export.pO->push_back( b );
        m_rWW8Export.m_pO->push_back( b );
    }

    if ( 0 != b && 0xFF != b )
@@ -1519,15 +1519,15 @@ void WW8AttributeOutput::CharRelief( const SvxCharReliefItem& rRelief )
    if( nId )
    {
        m_rWW8Export.InsUInt16( nId );
        m_rWW8Export.pO->push_back( sal_uInt8(0x81) );
        m_rWW8Export.m_pO->push_back( sal_uInt8(0x81) );
    }
    else
    {
        // switch both flags off
        m_rWW8Export.InsUInt16( NS_sprm::CFEmboss::val );
        m_rWW8Export.pO->push_back( sal_uInt8(0x0) );
        m_rWW8Export.m_pO->push_back( sal_uInt8(0x0) );
        m_rWW8Export.InsUInt16( NS_sprm::CFImprint::val );
        m_rWW8Export.pO->push_back( sal_uInt8(0x0) );
        m_rWW8Export.m_pO->push_back( sal_uInt8(0x0) );
    }
}

@@ -1537,7 +1537,7 @@ void WW8AttributeOutput::CharBidiRTL( const SfxPoolItem& rHt )
    if( rAttr.GetValue() == 1 )
    {
        m_rWW8Export.InsUInt16(0x85a);
        m_rWW8Export.pO->push_back(sal_uInt8(1));
        m_rWW8Export.m_pO->push_back(sal_uInt8(1));
    }
}

@@ -1545,7 +1545,7 @@ void WW8AttributeOutput::CharIdctHint( const SfxPoolItem& rHt )
{
    const SfxInt16Item& rAttr = static_cast<const SfxInt16Item&>(rHt);
    m_rWW8Export.InsUInt16(0x286F);
    m_rWW8Export.pO->push_back(static_cast<sal_uInt8>(rAttr.GetValue()));
    m_rWW8Export.m_pO->push_back(static_cast<sal_uInt8>(rAttr.GetValue()));
}

void WW8AttributeOutput::CharRotate( const SvxCharRotateItem& rRotate )
@@ -1562,12 +1562,12 @@ void WW8AttributeOutput::CharRotate( const SvxCharRotateItem& rRotate )
    // here corrupts the table, hence !m_rWW8Export.bIsInTable

    m_rWW8Export.InsUInt16( NS_sprm::CFELayout::val );
    m_rWW8Export.pO->push_back( sal_uInt8(0x06) ); //len 6
    m_rWW8Export.pO->push_back( sal_uInt8(0x01) );
    m_rWW8Export.m_pO->push_back( sal_uInt8(0x06) ); //len 6
    m_rWW8Export.m_pO->push_back( sal_uInt8(0x01) );

    m_rWW8Export.InsUInt16( rRotate.IsFitToLine() ? 1 : 0 );
    static const sal_uInt8 aZeroArr[ 3 ] = { 0, 0, 0 };
    m_rWW8Export.pO->insert( m_rWW8Export.pO->end(), aZeroArr, aZeroArr+3);
    m_rWW8Export.m_pO->insert( m_rWW8Export.m_pO->end(), aZeroArr, aZeroArr+3);
}

void WW8AttributeOutput::CharEmphasisMark( const SvxEmphasisMarkItem& rEmphasisMark )
@@ -1587,7 +1587,7 @@ void WW8AttributeOutput::CharEmphasisMark( const SvxEmphasisMarkItem& rEmphasisM
        nVal = 1;

    m_rWW8Export.InsUInt16( NS_sprm::CKcd::val );
    m_rWW8Export.pO->push_back( nVal );
    m_rWW8Export.m_pO->push_back( nVal );
}

/**
@@ -1623,7 +1623,7 @@ void WW8AttributeOutput::CharColor( const SvxColorItem& rColor )
    m_rWW8Export.InsUInt16( NS_sprm::CIco::val );

    sal_uInt8 nColor = msfilter::util::TransColToIco( rColor.GetValue() );
    m_rWW8Export.pO->push_back( nColor );
    m_rWW8Export.m_pO->push_back( nColor );

    if (nColor)
    {
@@ -1644,7 +1644,7 @@ void WW8AttributeOutput::CharBackground( const SvxBrushItem& rBrush )
    //Quite a few unknowns, some might be transparency or something
    //of that nature...
    m_rWW8Export.InsUInt16( NS_sprm::CShd::val );
    m_rWW8Export.pO->push_back( 10 );
    m_rWW8Export.m_pO->push_back( 10 );
    m_rWW8Export.InsUInt32( 0xFF000000 );
    m_rWW8Export.InsUInt32( SuitableBGColor( rBrush.GetColor() ) );
    m_rWW8Export.InsUInt16( 0x0000);
@@ -1713,7 +1713,7 @@ static void InsertSpecialChar( WW8Export& rWrt, sal_uInt8 c,
    if ( c == 0x01 && pLinkStr)
    {
        // write hyperlink data to data stream
        SvStream& rStrm = *rWrt.pDataStrm;
        SvStream& rStrm = *rWrt.m_pDataStrm;
        // position of hyperlink data
        const sal_uInt32 nLinkPosInDataStrm = rStrm.Tell();
        // write empty header
@@ -2727,7 +2727,7 @@ void WW8AttributeOutput::PostitField( const SwField* pField )
{
    const SwPostItField *pPField = static_cast<const SwPostItField*>(pField);
    m_rWW8Export.m_pAtn->Append( m_rWW8Export.Fc2Cp( m_rWW8Export.Strm().Tell() ), pPField );
    m_rWW8Export.WritePostItBegin( m_rWW8Export.pO.get() );
    m_rWW8Export.WritePostItBegin( m_rWW8Export.m_pO.get() );
}

bool WW8AttributeOutput::DropdownField( const SwField* pField )
@@ -3363,25 +3363,25 @@ void WW8AttributeOutput::ParaHyphenZone( const SvxHyphenZoneItem& rHyphenZone )
    // sprmPFNoAutoHyph
    m_rWW8Export.InsUInt16( NS_sprm::PFNoAutoHyph::val );

    m_rWW8Export.pO->push_back( rHyphenZone.IsHyphen() ? 0 : 1 );
    m_rWW8Export.m_pO->push_back( rHyphenZone.IsHyphen() ? 0 : 1 );
}

void WW8AttributeOutput::ParaScriptSpace( const SfxBoolItem& rScriptSpace )
{
    m_rWW8Export.InsUInt16( NS_sprm::PFAutoSpaceDE::val );
    m_rWW8Export.pO->push_back( rScriptSpace.GetValue() ? 1 : 0 );
    m_rWW8Export.m_pO->push_back( rScriptSpace.GetValue() ? 1 : 0 );
}

void WW8AttributeOutput::ParaHangingPunctuation( const SfxBoolItem& rItem )
{
    m_rWW8Export.InsUInt16( NS_sprm::PFOverflowPunct::val );
    m_rWW8Export.pO->push_back( rItem.GetValue() ? 1 : 0 );
    m_rWW8Export.m_pO->push_back( rItem.GetValue() ? 1 : 0 );
}

void WW8AttributeOutput::ParaForbiddenRules( const SfxBoolItem& rItem )
{
    m_rWW8Export.InsUInt16( NS_sprm::PFKinsoku::val );
    m_rWW8Export.pO->push_back( rItem.GetValue() ? 1 : 0 );
    m_rWW8Export.m_pO->push_back( rItem.GetValue() ? 1 : 0 );
}

void WW8AttributeOutput::ParaSnapToGrid( const SvxParaGridItem& rGrid )
@@ -3389,7 +3389,7 @@ void WW8AttributeOutput::ParaSnapToGrid( const SvxParaGridItem& rGrid )
    // sprmPFUsePgsuSettings

    m_rWW8Export.InsUInt16( NS_sprm::PFUsePgsuSettings::val );
    m_rWW8Export.pO->push_back( rGrid.GetValue() ? 1 : 0 );
    m_rWW8Export.m_pO->push_back( rGrid.GetValue() ? 1 : 0 );
}

void WW8AttributeOutput::ParaVerticalAlign( const SvxParaVertAlignItem& rAlign )
@@ -3484,8 +3484,8 @@ void WW8Export::WriteFootnoteBegin( const SwFormatFootnote& rFootnote, ww::bytes
        const SwTextFootnote* pTextFootnote = rFootnote.GetTextFootnote();
        if( pTextFootnote )
        {
            std::unique_ptr<ww::bytes> pOld = std::move(pO);
            pO = std::move(pOwnOutArr);
            std::unique_ptr<ww::bytes> pOld = std::move(m_pO);
            m_pO = std::move(pOwnOutArr);
            SfxItemSetFixed<RES_CHRATR_FONT, RES_CHRATR_FONT> aSet( m_rDoc.GetAttrPool() );

            pCFormat = pInfo->GetCharFormat( m_rDoc );
@@ -3500,8 +3500,8 @@ void WW8Export::WriteFootnoteBegin( const SwFormatFootnote& rFootnote, ww::bytes
            {
                m_pAttrOutput->OutputItem( pCFormat->GetAttrSet().Get(RES_CHRATR_FONT) );
            }
            pOwnOutArr = std::move(pO);
            pO = std::move(pOld);
            pOwnOutArr = std::move(m_pO);
            m_pO = std::move(pOld);
        }
        m_pChpPlc->AppendFkpEntry( Strm().Tell(), pOwnOutArr->size(),
                                                pOwnOutArr->data() );
@@ -3564,12 +3564,12 @@ void WW8AttributeOutput::TextFootnote_Impl( const SwFormatFootnote& rFootnote )
{
    WW8_WrPlcFootnoteEdn* pFootnoteEnd;
    if ( rFootnote.IsEndNote() || GetExport().m_rDoc.GetFootnoteInfo().m_ePos == FTNPOS_CHAPTER )
        pFootnoteEnd = m_rWW8Export.pEdn.get();
        pFootnoteEnd = m_rWW8Export.m_pEdn.get();
    else
        pFootnoteEnd = m_rWW8Export.pFootnote.get();
        pFootnoteEnd = m_rWW8Export.m_pFootnote.get();

    pFootnoteEnd->Append( m_rWW8Export.Fc2Cp( m_rWW8Export.Strm().Tell() ), rFootnote );
    m_rWW8Export.WriteFootnoteBegin( rFootnote, m_rWW8Export.pO.get() );
    m_rWW8Export.WriteFootnoteBegin( rFootnote, m_rWW8Export.m_pO.get() );
}

void WW8AttributeOutput::TextCharFormat( const SwFormatCharFormat& rCharFormat )
@@ -3592,8 +3592,8 @@ void WW8AttributeOutput::CharTwoLines( const SvxTwoLinesItem& rTwoLines )
        return;

    m_rWW8Export.InsUInt16( NS_sprm::CFELayout::val );
    m_rWW8Export.pO->push_back( sal_uInt8(0x06) ); //len 6
    m_rWW8Export.pO->push_back( sal_uInt8(0x02) );
    m_rWW8Export.m_pO->push_back( sal_uInt8(0x06) ); //len 6
    m_rWW8Export.m_pO->push_back( sal_uInt8(0x02) );

    sal_Unicode cStart = rTwoLines.GetStartBracket();
    sal_Unicode cEnd = rTwoLines.GetEndBracket();
@@ -3625,7 +3625,7 @@ void WW8AttributeOutput::CharTwoLines( const SvxTwoLinesItem& rTwoLines )
        nType = 1;
    m_rWW8Export.InsUInt16( nType );
    static const sal_uInt8 aZeroArr[ 3 ] = { 0, 0, 0 };
    m_rWW8Export.pO->insert( m_rWW8Export.pO->end(), aZeroArr, aZeroArr+3);
    m_rWW8Export.m_pO->insert( m_rWW8Export.m_pO->end(), aZeroArr, aZeroArr+3);
}

void AttributeOutputBase::ParaOutlineLevelBase( const SfxUInt16Item& rItem )
@@ -3765,10 +3765,10 @@ void WW8AttributeOutput::ParaNumRule_Impl(const SwTextNode* /*pTextNd*/,
        return;

    // write sprmPIlvl and sprmPIlfo
    SwWW8Writer::InsUInt16( *m_rWW8Export.pO, NS_sprm::PIlvl::val );
    m_rWW8Export.pO->push_back( ::sal::static_int_cast<sal_uInt8>(nLvl) );
    SwWW8Writer::InsUInt16( *m_rWW8Export.pO, NS_sprm::PIlfo::val );
    SwWW8Writer::InsUInt16( *m_rWW8Export.pO, ::sal::static_int_cast<sal_uInt16>(nNumId) );
    SwWW8Writer::InsUInt16( *m_rWW8Export.m_pO, NS_sprm::PIlvl::val );
    m_rWW8Export.m_pO->push_back( ::sal::static_int_cast<sal_uInt8>(nLvl) );
    SwWW8Writer::InsUInt16( *m_rWW8Export.m_pO, NS_sprm::PIlfo::val );
    SwWW8Writer::InsUInt16( *m_rWW8Export.m_pO, ::sal::static_int_cast<sal_uInt16>(nNumId) );
}

/* File FRMATR.HXX */
@@ -3809,7 +3809,7 @@ void WW8AttributeOutput::FormatFrameSize( const SwFormatFrameSize& rSize )
        {
            /*sprmSBOrientation*/
            m_rWW8Export.InsUInt16( NS_sprm::SBOrientation::val );
            m_rWW8Export.pO->push_back( 2 );
            m_rWW8Export.m_pO->push_back( 2 );
        }

        /*sprmSXaPage*/
@@ -3841,7 +3841,7 @@ sal_uInt64 WW8Export::ReplaceCr( sal_uInt8 nChar )
    SvStream& rStrm = Strm();
    sal_uInt64 nRetPos = 0, nPos = rStrm.Tell();
    //If there is at least two characters already output
    if (nPos - 2 >= o3tl::make_unsigned(pFib->m_fcMin))
    if (nPos - 2 >= o3tl::make_unsigned(m_pFib->m_fcMin))
    {
        sal_uInt16 nUCode=0;

@@ -3851,7 +3851,7 @@ sal_uInt64 WW8Export::ReplaceCr( sal_uInt8 nChar )
        if (nUCode == 0x0d)             // CR ?
        {
            if ((nChar == 0x0c) &&
                (nPos - 4 >= o3tl::make_unsigned(pFib->m_fcMin)))
                (nPos - 4 >= o3tl::make_unsigned(m_pFib->m_fcMin)))
            {
                rStrm.SeekRel(-4);
                rStrm.ReadUInt16( nUCode );
@@ -3922,7 +3922,7 @@ void WW8AttributeOutput::PageBreakBefore( bool bBreak )
    // sprmPPageBreakBefore/sprmPFPageBreakBefore
    m_rWW8Export.InsUInt16( NS_sprm::PFPageBreakBefore::val );

    m_rWW8Export.pO->push_back( bBreak ? 1 : 0 );
    m_rWW8Export.m_pO->push_back( bBreak ? 1 : 0 );
}

/**
@@ -4180,7 +4180,7 @@ void WW8AttributeOutput::SectionRtlGutter(const SfxBoolItem& rRtlGutter)

    // sprmSFRTLGutter
    m_rWW8Export.InsUInt16(NS_sprm::SFRTLGutter::val);
    m_rWW8Export.pO->push_back(1);
    m_rWW8Export.m_pO->push_back(1);
}

void WW8AttributeOutput::TextLineBreak(const SwFormatLineBreak& rLineBreak)
@@ -4190,7 +4190,7 @@ void WW8AttributeOutput::TextLineBreak(const SwFormatLineBreak& rLineBreak)

    // sprmCLbcCRJ
    m_rWW8Export.InsUInt16(NS_sprm::CLbcCRJ::val);
    m_rWW8Export.pO->push_back(rLineBreak.GetEnumValue());
    m_rWW8Export.m_pO->push_back(rLineBreak.GetEnumValue());
}

void WW8AttributeOutput::FormatULSpace( const SvxULSpaceItem& rUL )
@@ -4258,7 +4258,7 @@ void WW8AttributeOutput::FormatULSpace( const SvxULSpaceItem& rUL )
        if (rUL.GetContext() || (pInherited && pInherited->GetContext()))
        {
            m_rWW8Export.InsUInt16(NS_sprm::PFContextualSpacing::val);
            m_rWW8Export.pO->push_back( static_cast<sal_uInt8>(rUL.GetContext()) );
            m_rWW8Export.m_pO->push_back( static_cast<sal_uInt8>(rUL.GetContext()) );
        }
    }
}
@@ -4271,7 +4271,7 @@ void WW8AttributeOutput::FormatSurround( const SwFormatSurround& rSurround )
    {
        m_rWW8Export.InsUInt16( NS_sprm::PWr::val );

        m_rWW8Export.pO->push_back(
        m_rWW8Export.m_pO->push_back(
                ( css::text::WrapTextMode_NONE != rSurround.GetSurround() ) ? 2 : 1 );
    }
}
@@ -4375,7 +4375,7 @@ void WW8AttributeOutput::FormatAnchor( const SwFormatAnchor& rAnchor )

    // sprmPPc
    m_rWW8Export.InsUInt16( NS_sprm::PPc::val );
    m_rWW8Export.pO->push_back( nP );
    m_rWW8Export.m_pO->push_back( nP );
}

void WW8AttributeOutput::FormatBackground( const SvxBrushItem& rBrush )
@@ -4391,7 +4391,7 @@ void WW8AttributeOutput::FormatBackground( const SvxBrushItem& rBrush )
    m_rWW8Export.InsUInt16( aSHD.GetValue() );

    m_rWW8Export.InsUInt16( NS_sprm::PShd::val );
    m_rWW8Export.pO->push_back( 10 ); //size of operand: MUST be 10
    m_rWW8Export.m_pO->push_back( 10 ); //size of operand: MUST be 10
    m_rWW8Export.InsUInt32( 0xFF000000 ); //cvFore: Foreground BGR = cvAuto
    m_rWW8Export.InsUInt32( SuitableBGColor( rBrush.GetColor() ) ); //cvBack
    m_rWW8Export.InsUInt16( 0x0000 ); //iPat: specifies the pattern used for shading = clear/100% background
@@ -4413,7 +4413,7 @@ void WW8AttributeOutput::FormatFillStyle( const XFillStyleItem& rFillStyle )

    //cvAuto
    m_rWW8Export.InsUInt16( NS_sprm::PShd::val );
    m_rWW8Export.pO->push_back( 10 );
    m_rWW8Export.m_pO->push_back( 10 );
    m_rWW8Export.InsUInt32( 0xFF000000 );
    m_rWW8Export.InsUInt32( 0xFF000000 );
    m_rWW8Export.InsUInt16( 0x0000 );
@@ -4611,7 +4611,7 @@ void WW8Export::Out_SwFormatBox(const SvxBoxItem& rBox, bool bShadow)
            nSprmNoVer9 = aPBrc[i+4];
        }

        Out_BorderLine( *pO, pLn, rBox.GetDistance( *pBrd ), nSprmNo,
        Out_BorderLine( *m_pO, pLn, rBox.GetDistance( *pBrd ), nSprmNo,
            nSprmNoVer9, bShadow );
    }
}
@@ -4663,12 +4663,12 @@ void WW8Export::Out_CellRangeBorders( const SvxBoxItem * pBox, sal_uInt8 nStart,
            continue;

        InsUInt16( NS_sprm::TSetBrc::val );
        pO->push_back( 11 );
        pO->push_back( nStart );
        pO->push_back( nLimit );
        pO->push_back( 1<<i );
        m_pO->push_back( 11 );
        m_pO->push_back( nStart );
        m_pO->push_back( nLimit );
        m_pO->push_back( 1<<i );
        WW8_BRCVer9 aBrcVer9 = TranslateBorderLine( *pLn, 0, false );
        pO->insert( pO->end(), aBrcVer9.aBits1, aBrcVer9.aBits2+4 );
        m_pO->insert( m_pO->end(), aBrcVer9.aBits1, aBrcVer9.aBits2+4 );
    }
}

@@ -4729,13 +4729,13 @@ void WW8AttributeOutput::FormatColumns_Impl( sal_uInt16 nCols, const SwFormatCol

    // LBetween
    m_rWW8Export.InsUInt16( NS_sprm::SLBetween::val );
    m_rWW8Export.pO->push_back( COLADJ_NONE == rCol.GetLineAdj(  )? 0 : 1 );
    m_rWW8Export.m_pO->push_back( COLADJ_NONE == rCol.GetLineAdj(  )? 0 : 1 );

    const SwColumns & rColumns = rCol.GetColumns(  );

    // FEvenlySpaced
    m_rWW8Export.InsUInt16( NS_sprm::SFEvenlySpaced::val );
    m_rWW8Export.pO->push_back( bEven ? 1 : 0 );
    m_rWW8Export.m_pO->push_back( bEven ? 1 : 0 );

    if ( bEven )
        return;
@@ -4744,7 +4744,7 @@ void WW8AttributeOutput::FormatColumns_Impl( sal_uInt16 nCols, const SwFormatCol
    {
        //sprmSDxaColWidth
        m_rWW8Export.InsUInt16( NS_sprm::SDxaColWidth::val );
        m_rWW8Export.pO->push_back( static_cast<sal_uInt8>(n) );
        m_rWW8Export.m_pO->push_back( static_cast<sal_uInt8>(n) );
        m_rWW8Export.InsUInt16( rCol.
                                CalcPrtColWidth( n,
                                                 o3tl::narrowing<sal_uInt16>(nPageSize) ) );
@@ -4753,7 +4753,7 @@ void WW8AttributeOutput::FormatColumns_Impl( sal_uInt16 nCols, const SwFormatCol
        {
            //sprmSDxaColSpacing
            m_rWW8Export.InsUInt16( NS_sprm::SDxaColSpacing::val );
            m_rWW8Export.pO->push_back( static_cast<sal_uInt8>(n) );
            m_rWW8Export.m_pO->push_back( static_cast<sal_uInt8>(n) );
            m_rWW8Export.InsUInt16( rColumns[n].GetRight(  ) +
                                    rColumns[n + 1].GetLeft(  ) );
        }
@@ -4837,7 +4837,7 @@ void WW8AttributeOutput::FormatKeep( const SvxFormatKeepItem& rKeep )
    // sprmFKeepFollow
    m_rWW8Export.InsUInt16( NS_sprm::PFKeepFollow::val );

    m_rWW8Export.pO->push_back( rKeep.GetValue() ? 1 : 0 );
    m_rWW8Export.m_pO->push_back( rKeep.GetValue() ? 1 : 0 );
}

// exclude a paragraph from Line Numbering
@@ -4846,7 +4846,7 @@ void WW8AttributeOutput::FormatLineNumbering( const SwFormatLineNumber& rNumberi
    // sprmPFNoLineNumb
    m_rWW8Export.InsUInt16( NS_sprm::PFNoLineNumb::val );

    m_rWW8Export.pO->push_back( rNumbering.IsCount() ? 0 : 1 );
    m_rWW8Export.m_pO->push_back( rNumbering.IsCount() ? 0 : 1 );
}

/* File PARATR.HXX  */
@@ -4941,7 +4941,7 @@ void WW8AttributeOutput::ParaAdjust( const SvxAdjustItem& rAdjust )
    }

    m_rWW8Export.InsUInt16(NS_sprm::PJc80::val);
    m_rWW8Export.pO->push_back(nAdj);
    m_rWW8Export.m_pO->push_back(nAdj);

    /*
    Sadly for left to right paragraphs both these values are the same,
@@ -4971,9 +4971,9 @@ void WW8AttributeOutput::ParaAdjust( const SvxAdjustItem& rAdjust )
    }

    if (bBiDiSwap)
        m_rWW8Export.pO->push_back(nAdjBiDi);
        m_rWW8Export.m_pO->push_back(nAdjBiDi);
    else
        m_rWW8Export.pO->push_back(nAdj);
        m_rWW8Export.m_pO->push_back(nAdj);
}

void WW8AttributeOutput::FormatFrameDirection( const SvxFrameDirectionItem& rDirection )
@@ -5010,12 +5010,12 @@ void WW8AttributeOutput::FormatFrameDirection( const SvxFrameDirectionItem& rDir
        m_rWW8Export.InsUInt16( NS_sprm::STextFlow::val );
        m_rWW8Export.InsUInt16( nTextFlow );
        m_rWW8Export.InsUInt16( NS_sprm::SFBiDi::val );
        m_rWW8Export.pO->push_back( bBiDi ? 1 : 0 );
        m_rWW8Export.m_pO->push_back( bBiDi ? 1 : 0 );
    }
    else if ( !m_rWW8Export.m_bOutFlyFrameAttrs )  //paragraph/style
    {
        m_rWW8Export.InsUInt16( NS_sprm::PFBiDi::val );
        m_rWW8Export.pO->push_back( bBiDi ? 1 : 0 );
        m_rWW8Export.m_pO->push_back( bBiDi ? 1 : 0 );
    }
}

@@ -5033,7 +5033,7 @@ void WW8AttributeOutput::ParaOutlineLevel(const SfxUInt16Item& rItem)
    // Outline Level: in LO Body Text = 0, in MS Body Text = 9
    nOutLvl = nOutLvl ? nOutLvl - 1 : 9;
    m_rWW8Export.InsUInt16( NS_sprm::POutLvl::val );
    m_rWW8Export.pO->push_back( nOutLvl );
    m_rWW8Export.m_pO->push_back( nOutLvl );
}

// "Separate paragraphs"
@@ -5041,7 +5041,7 @@ void WW8AttributeOutput::ParaSplit( const SvxFormatSplitItem& rSplit )
{
    // sprmPFKeep
    m_rWW8Export.InsUInt16( NS_sprm::PFKeep::val );
    m_rWW8Export.pO->push_back( rSplit.GetValue() ? 0 : 1 );
    m_rWW8Export.m_pO->push_back( rSplit.GetValue() ? 0 : 1 );
}

/**
@@ -5053,7 +5053,7 @@ void WW8AttributeOutput::ParaWidows( const SvxWidowsItem& rWidows )
{
    // sprmPFWidowControl
    m_rWW8Export.InsUInt16( NS_sprm::PFWidowControl::val );
    m_rWW8Export.pO->push_back( rWidows.GetValue() ? 1 : 0 );
    m_rWW8Export.m_pO->push_back( rWidows.GetValue() ? 1 : 0 );
}

namespace {
@@ -5171,12 +5171,12 @@ void SwWW8WrTabu::PutAll(WW8Export& rWrt)

    rWrt.InsUInt16(NS_sprm::PChgTabsPapx::val);
    // insert cch
    rWrt.pO->push_back(msword_cast<sal_uInt8>(nSiz));
    rWrt.m_pO->push_back(msword_cast<sal_uInt8>(nSiz));
    // write DelArr
    rWrt.pO->push_back(msword_cast<sal_uInt8>(nDel));
    rWrt.m_pO->push_back(msword_cast<sal_uInt8>(nDel));
    rWrt.OutSprmBytes(pDel.get(), nDel * 2);
    // write InsArr
    rWrt.pO->push_back(msword_cast<sal_uInt8>(nAdd));
    rWrt.m_pO->push_back(msword_cast<sal_uInt8>(nAdd));
    rWrt.OutSprmBytes(pAddPos.get(), 2 * nAdd);         // AddPosArray
    rWrt.OutSprmBytes(pAddTyp.get(), nAdd);             // AddTypArray
}
diff --git a/sw/source/filter/ww8/ww8scan.cxx b/sw/source/filter/ww8/ww8scan.cxx
index 56c86ea..cab9481 100644
--- a/sw/source/filter/ww8/ww8scan.cxx
+++ b/sw/source/filter/ww8/ww8scan.cxx
@@ -2262,7 +2262,7 @@ bool WW8PLCFspecial::GetData(tools::Long nInIdx, WW8_CP& rPos, void*& rpValue) c
// Ctor for *others* than Fkps
// With nStartPos < 0, the first element of PLCFs will be taken
WW8PLCF::WW8PLCF(SvStream& rSt, WW8_FC nFilePos, sal_Int32 nPLCF, int nStruct,
    WW8_CP nStartPos) : nIdx(0), nStru(nStruct)
    WW8_CP nStartPos) : m_nIdx(0), m_nStru(nStruct)
{
    if (nPLCF < 0)
    {
@@ -2270,7 +2270,7 @@ WW8PLCF::WW8PLCF(SvStream& rSt, WW8_FC nFilePos, sal_Int32 nPLCF, int nStruct,
        nPLCF = 0;
    }
    else
        nIMax = (nPLCF - 4) / (4 + nStruct);
        m_nIMax = (nPLCF - 4) / (4 + nStruct);

    ReadPLCF(rSt, nFilePos, nPLCF);

@@ -2284,18 +2284,18 @@ WW8PLCF::WW8PLCF(SvStream& rSt, WW8_FC nFilePos, sal_Int32 nPLCF, int nStruct,
// lack of resources and for WordPad (W95).
// With nStartPos < 0, the first element of the PLCFs is taken.
WW8PLCF::WW8PLCF(SvStream& rSt, WW8_FC nFilePos, sal_Int32 nPLCF, int nStruct,
    WW8_CP nStartPos, sal_Int32 nPN, sal_Int32 ncpN): nIdx(0),
    nStru(nStruct)
    WW8_CP nStartPos, sal_Int32 nPN, sal_Int32 ncpN): m_nIdx(0),
    m_nStru(nStruct)
{
    if (nPLCF < 0)
    {
        SAL_WARN("sw.ww8", "broken WW8PLCF, ignoring");
        nIMax = SAL_MAX_INT32;
        m_nIMax = SAL_MAX_INT32;
    }
    else
        nIMax = (nPLCF - 4) / (4 + nStruct);
        m_nIMax = (nPLCF - 4) / (4 + nStruct);

    if( nIMax >= ncpN )
    if( m_nIMax >= ncpN )
        ReadPLCF(rSt, nFilePos, nPLCF);
    else
        GeneratePLCF(rSt, nPN, ncpN);
@@ -2314,12 +2314,12 @@ void WW8PLCF::ReadPLCF(SvStream& rSt, WW8_FC nFilePos, sal_uInt32 nPLCF)
    {
        // Pointer to Pos-array
        const size_t nEntries = (nPLCF + 3) / 4;
        pPLCF_PosArray.reset(new WW8_CP[nEntries]);
        bValid = checkRead(rSt, pPLCF_PosArray.get(), nPLCF);
        m_pPLCF_PosArray.reset(new WW8_CP[nEntries]);
        bValid = checkRead(rSt, m_pPLCF_PosArray.get(), nPLCF);
        size_t nBytesAllocated = nEntries * sizeof(WW8_CP);
        if (bValid && nPLCF != nBytesAllocated)
        {
            sal_uInt8* pStartBlock = reinterpret_cast<sal_uInt8*>(pPLCF_PosArray.get());
            sal_uInt8* pStartBlock = reinterpret_cast<sal_uInt8*>(m_pPLCF_PosArray.get());
            memset(pStartBlock + nPLCF, 0, nBytesAllocated - nPLCF);
        }
    }
@@ -2332,7 +2332,7 @@ void WW8PLCF::ReadPLCF(SvStream& rSt, WW8_FC nFilePos, sal_uInt32 nPLCF)
        nIdx = 0;
#endif // OSL_BIGENDIAN
        // Pointer to content array
        pPLCF_Contents = reinterpret_cast<sal_uInt8*>(&pPLCF_PosArray[nIMax + 1]);
        m_pPLCF_Contents = reinterpret_cast<sal_uInt8*>(&m_pPLCF_PosArray[m_nIMax + 1]);

        TruncToSortedRange();
    }
@@ -2347,10 +2347,10 @@ void WW8PLCF::ReadPLCF(SvStream& rSt, WW8_FC nFilePos, sal_uInt32 nPLCF)

void WW8PLCF::MakeFailedPLCF()
{
    nIMax = 0;
    pPLCF_PosArray.reset( new WW8_CP[2] );
    pPLCF_PosArray[0] = pPLCF_PosArray[1] = WW8_CP_MAX;
    pPLCF_Contents = reinterpret_cast<sal_uInt8*>(&pPLCF_PosArray[nIMax + 1]);
    m_nIMax = 0;
    m_pPLCF_PosArray.reset( new WW8_CP[2] );
    m_pPLCF_PosArray[0] = m_pPLCF_PosArray[1] = WW8_CP_MAX;
    m_pPLCF_Contents = reinterpret_cast<sal_uInt8*>(&m_pPLCF_PosArray[m_nIMax + 1]);
}

namespace
@@ -2379,17 +2379,17 @@ void WW8PLCFpcd::TruncToSortedRange()

void WW8PLCF::TruncToSortedRange()
{
    nIMax = ::TruncToSortedRange(pPLCF_PosArray.get(), nIMax);
    m_nIMax = ::TruncToSortedRange(m_pPLCF_PosArray.get(), m_nIMax);
}

void WW8PLCF::GeneratePLCF(SvStream& rSt, sal_Int32 nPN, sal_Int32 ncpN)
{
    OSL_ENSURE( nIMax < ncpN, "Pcl.Fkp: Why is PLCF too big?" );
    OSL_ENSURE( m_nIMax < ncpN, "Pcl.Fkp: Why is PLCF too big?" );

    bool failure = false;
    nIMax = ncpN;
    m_nIMax = ncpN;

    if ((nIMax < 1) || (nIMax > (WW8_CP_MAX - 4) / (4 + nStru)) || nPN < 0)
    if ((m_nIMax < 1) || (m_nIMax > (WW8_CP_MAX - 4) / (4 + m_nStru)) || nPN < 0)
        failure = true;

    if (!failure)
@@ -2401,9 +2401,9 @@ void WW8PLCF::GeneratePLCF(SvStream& rSt, sal_Int32 nPN, sal_Int32 ncpN)

    if (!failure)
    {
        size_t nSiz = (4 + nStru) * nIMax + 4;
        size_t nSiz = (4 + m_nStru) * m_nIMax + 4;
        size_t nElems = ( nSiz + 3 ) / 4;
        pPLCF_PosArray.reset( new WW8_CP[ nElems ] ); // Pointer to Pos-array
        m_pPLCF_PosArray.reset( new WW8_CP[ nElems ] ); // Pointer to Pos-array

        for (sal_Int32 i = 0; i < ncpN && !failure; ++i)
        {
@@ -2415,7 +2415,7 @@ void WW8PLCF::GeneratePLCF(SvStream& rSt, sal_Int32 nPN, sal_Int32 ncpN)

            WW8_CP nFc(0);
            rSt.ReadInt32( nFc );
            pPLCF_PosArray[i] = nFc;
            m_pPLCF_PosArray[i] = nFc;

            failure = bool(rSt.GetError());
        }
@@ -2427,7 +2427,7 @@ void WW8PLCF::GeneratePLCF(SvStream& rSt, sal_Int32 nPN, sal_Int32 ncpN)
        {
            failure = true;

            std::size_t nLastFkpPos = nPN + nIMax - 1;
            std::size_t nLastFkpPos = nPN + m_nIMax - 1;
            nLastFkpPos = nLastFkpPos << 9;
            // number of FC entries of last Fkp
            if (!checkSeek(rSt, nLastFkpPos + 511))
@@ -2441,7 +2441,7 @@ void WW8PLCF::GeneratePLCF(SvStream& rSt, sal_Int32 nPN, sal_Int32 ncpN)

            WW8_CP nFc(0);
            rSt.ReadInt32( nFc );
            pPLCF_PosArray[nIMax] = nFc;        // end of the last Fkp
            m_pPLCF_PosArray[m_nIMax] = nFc;        // end of the last Fkp

            failure = bool(rSt.GetError());
        } while(false);
@@ -2450,13 +2450,13 @@ void WW8PLCF::GeneratePLCF(SvStream& rSt, sal_Int32 nPN, sal_Int32 ncpN)
    if (!failure)
    {
        // Pointer to content array
        pPLCF_Contents = reinterpret_cast<sal_uInt8*>(&pPLCF_PosArray[nIMax + 1]);
        sal_uInt8* p = pPLCF_Contents;
        m_pPLCF_Contents = reinterpret_cast<sal_uInt8*>(&m_pPLCF_PosArray[m_nIMax + 1]);
        sal_uInt8* p = m_pPLCF_Contents;

        for (sal_Int32 i = 0; i < ncpN; ++i)         // construct PNs
        {
            ShortToSVBT16(o3tl::narrowing<sal_uInt16>(nPN + i), p);
            p += nStru;
            p += m_nStru;
        }
    }

@@ -2470,57 +2470,57 @@ bool WW8PLCF::SeekPos(WW8_CP nPos)
{
    WW8_CP nP = nPos;

    if( nP < pPLCF_PosArray[0] )
    if( nP < m_pPLCF_PosArray[0] )
    {
        nIdx = 0;
        m_nIdx = 0;
        // not found: nPos less than smallest entry
        return false;
    }

    // Search from beginning?
    if ((nIdx < 1) || (nP < pPLCF_PosArray[nIdx - 1]))
        nIdx = 1;
    if ((m_nIdx < 1) || (nP < m_pPLCF_PosArray[m_nIdx - 1]))
        m_nIdx = 1;

    sal_Int32 nI   = nIdx;
    sal_Int32 nEnd = nIMax;
    sal_Int32 nI   = m_nIdx;
    sal_Int32 nEnd = m_nIMax;

    for(int n = (1==nIdx ? 1 : 2); n; --n )
    for(int n = (1==m_nIdx ? 1 : 2); n; --n )
    {
        for( ; nI <=nEnd; ++nI)             // search with an index that is incremented by 1
        {
            if( nP < pPLCF_PosArray[nI] )   // found position
            if( nP < m_pPLCF_PosArray[nI] )   // found position
            {
                nIdx = nI - 1;              // nI - 1 is the correct index
                m_nIdx = nI - 1;              // nI - 1 is the correct index
                return true;                // done
            }
        }
        nI   = 1;
        nEnd = nIdx-1;
        nEnd = m_nIdx-1;
    }

    nIdx = nIMax;               // not found, greater than all entries
    m_nIdx = m_nIMax;               // not found, greater than all entries
    return false;
}

bool WW8PLCF::Get(WW8_CP& rStart, WW8_CP& rEnd, void*& rpValue) const
{
    if ( nIdx >= nIMax )
    if ( m_nIdx >= m_nIMax )
    {
        rStart = rEnd = WW8_CP_MAX;
        return false;
    }
    rStart = pPLCF_PosArray[ nIdx ];
    rEnd   = pPLCF_PosArray[ nIdx + 1 ];
    rpValue = static_cast<void*>(&pPLCF_Contents[nIdx * nStru]);
    rStart = m_pPLCF_PosArray[ m_nIdx ];
    rEnd   = m_pPLCF_PosArray[ m_nIdx + 1 ];
    rpValue = static_cast<void*>(&m_pPLCF_Contents[m_nIdx * m_nStru]);
    return true;
}

WW8_CP WW8PLCF::Where() const
{
    if ( nIdx >= nIMax )
    if ( m_nIdx >= m_nIMax )
        return WW8_CP_MAX;

    return pPLCF_PosArray[nIdx];
    return m_pPLCF_PosArray[m_nIdx];
}

WW8PLCFpcd::WW8PLCFpcd(SvStream* pSt, sal_uInt32 nFilePos,
@@ -6733,7 +6733,7 @@ void MSOFactoidType::Read(SvStream& rStream)

void MSOFactoidType::Write(WW8Export& rExport)
{
    SvStream& rStream = *rExport.pTableStrm;
    SvStream& rStream = *rExport.m_pTableStrm;

    SvMemoryStream aStream;
    aStream.WriteUInt32(m_nId); // id
@@ -6782,7 +6782,7 @@ void MSOPropertyBagStore::Read(SvStream& rStream)

void MSOPropertyBagStore::Write(WW8Export& rExport)
{
    SvStream& rStream = *rExport.pTableStrm;
    SvStream& rStream = *rExport.m_pTableStrm;
    rStream.WriteUInt32(m_aFactoidTypes.size()); // cFactoidType
    for (MSOFactoidType& rType : m_aFactoidTypes)
        rType.Write(rExport);
@@ -6843,7 +6843,7 @@ bool MSOPropertyBag::Read(SvStream& rStream)

void MSOPropertyBag::Write(WW8Export& rExport)
{
    SvStream& rStream = *rExport.pTableStrm;
    SvStream& rStream = *rExport.m_pTableStrm;
    rStream.WriteUInt16(m_nId);
    rStream.WriteUInt16(m_aProperties.size());
    rStream.WriteUInt16(0); // cbUnknown
@@ -7512,9 +7512,9 @@ const WW8_FFN* WW8Fonts::GetFont( sal_uInt16 nNum ) const
//  -> maybe we can get a right result then

WW8PLCF_HdFt::WW8PLCF_HdFt( SvStream* pSt, WW8Fib const & rFib, WW8Dop const & rDop )
    : aPLCF(*pSt, rFib.m_fcPlcfhdd , rFib.m_lcbPlcfhdd , 0)
    : m_aPLCF(*pSt, rFib.m_fcPlcfhdd , rFib.m_lcbPlcfhdd , 0)
{
    nIdxOffset = 0;
    m_nIdxOffset = 0;

     /*
      This dop.grpfIhdt has a bit set for each special
@@ -7530,14 +7530,14 @@ WW8PLCF_HdFt::WW8PLCF_HdFt( SvStream* pSt, WW8Fib const & rFib, WW8Dop const & r
      */
    for( sal_uInt8 nI = 0x1; nI <= 0x20; nI <<= 1 )
        if( nI & rDop.grpfIhdt )                // bit set?
            nIdxOffset++;
            m_nIdxOffset++;
}

bool WW8PLCF_HdFt::GetTextPos(sal_uInt8 grpfIhdt, sal_uInt8 nWhich, WW8_CP& rStart,
    WW8_CP& rLen)
{
    sal_uInt8 nI = 0x01;
    short nIdx = nIdxOffset;
    short nIdx = m_nIdxOffset;
    while (true)
    {
        if( nI & nWhich )
@@ -7552,8 +7552,8 @@ bool WW8PLCF_HdFt::GetTextPos(sal_uInt8 grpfIhdt, sal_uInt8 nWhich, WW8_CP& rSta
    WW8_CP nEnd;
    void* pData;

    aPLCF.SetIdx( nIdx );               // Lookup suitable CP
    aPLCF.Get( rStart, nEnd, pData );
    m_aPLCF.SetIdx( nIdx );               // Lookup suitable CP
    m_aPLCF.Get( rStart, nEnd, pData );
    if (nEnd < rStart)
    {
        SAL_WARN("sw.ww8", "End " << nEnd << " before Start " << rStart);
@@ -7567,7 +7567,7 @@ bool WW8PLCF_HdFt::GetTextPos(sal_uInt8 grpfIhdt, sal_uInt8 nWhich, WW8_CP& rSta
        return false;
    }

    aPLCF.advance();
    m_aPLCF.advance();

    return true;
}
@@ -7577,8 +7577,8 @@ void WW8PLCF_HdFt::GetTextPosExact(short nIdx, WW8_CP& rStart, WW8_CP& rLen)
    WW8_CP nEnd;
    void* pData;

    aPLCF.SetIdx( nIdx );               // Lookup suitable CP
    aPLCF.Get( rStart, nEnd, pData );
    m_aPLCF.SetIdx( nIdx );               // Lookup suitable CP
    m_aPLCF.Get( rStart, nEnd, pData );
    if (nEnd < rStart)
    {
        SAL_WARN("sw.ww8", "End " << nEnd << " before Start " << rStart);
@@ -7597,7 +7597,7 @@ void WW8PLCF_HdFt::UpdateIndex( sal_uInt8 grpfIhdt )
    // Caution: Description is not correct
    for( sal_uInt8 nI = 0x01; nI <= 0x20; nI <<= 1 )
        if( nI & grpfIhdt )
            nIdxOffset++;
            m_nIdxOffset++;
}

WW8Dop::WW8Dop(SvStream& rSt, sal_Int16 nFib, sal_Int32 nPos, sal_uInt32 nSize):
diff --git a/sw/source/filter/ww8/ww8scan.hxx b/sw/source/filter/ww8/ww8scan.hxx
index 750b282..4e80e88 100644
--- a/sw/source/filter/ww8/ww8scan.hxx
+++ b/sw/source/filter/ww8/ww8scan.hxx
@@ -294,11 +294,11 @@ private:
class WW8PLCF                       // Iterator for PLCFs
{
private:
    std::unique_ptr<WW8_CP[]> pPLCF_PosArray; // pointer to Pos-array and the whole structure
    sal_uInt8* pPLCF_Contents;   // pointer to content-array-part of Pos-array
    sal_Int32 nIMax;            // number of elements
    sal_Int32 nIdx;
    int nStru;
    std::unique_ptr<WW8_CP[]> m_pPLCF_PosArray; // pointer to Pos-array and the whole structure
    sal_uInt8* m_pPLCF_Contents;   // pointer to content-array-part of Pos-array
    sal_Int32 m_nIMax;            // number of elements
    sal_Int32 m_nIdx;
    int m_nStru;

    void ReadPLCF(SvStream& rSt, WW8_FC nFilePos, sal_uInt32 nPLCF);

@@ -321,18 +321,18 @@ public:
    WW8PLCF(SvStream& rSt, WW8_FC nFilePos, sal_Int32 nPLCF, int nStruct,
        WW8_CP nStartPos, sal_Int32 nPN, sal_Int32 ncpN);

    sal_Int32 GetIdx() const { return nIdx; }
    void SetIdx( sal_Int32 nI ) { nIdx = nI; }
    sal_Int32 GetIMax() const { return nIMax; }
    sal_Int32 GetIdx() const { return m_nIdx; }
    void SetIdx( sal_Int32 nI ) { m_nIdx = nI; }
    sal_Int32 GetIMax() const { return m_nIMax; }
    bool SeekPos(WW8_CP nPos);
    WW8_CP Where() const;
    bool Get(WW8_CP& rStart, WW8_CP& rEnd, void*& rpValue) const;
    void advance() { if( nIdx < nIMax ) ++nIdx; }
    void advance() { if( m_nIdx < m_nIMax ) ++m_nIdx; }

    const void* GetData( sal_Int32 nInIdx ) const
    {
        return ( nInIdx >= nIMax ) ? nullptr :
            static_cast<const void*>(&pPLCF_Contents[nInIdx * nStru]);
        return ( nInIdx >= m_nIMax ) ? nullptr :
            static_cast<const void*>(&m_pPLCF_Contents[nInIdx * m_nStru]);
    }
};

@@ -1850,8 +1850,8 @@ public:
class WW8PLCF_HdFt
{
private:
    WW8PLCF aPLCF;
    short nIdxOffset;
    WW8PLCF m_aPLCF;
    short m_nIdxOffset;

public:
    WW8PLCF_HdFt( SvStream* pSt, WW8Fib const & rFib, WW8Dop const & rDop );