sw/source/core/crsr/callnk.cxx | 5 + sw/source/core/crsr/swcrsr.cxx | 7 +- sw/source/core/crsr/trvlfnfl.cxx | 9 +-- sw/source/core/doc/doc.cxx | 3 - sw/source/core/doc/doctxm.cxx | 5 + sw/source/core/docnode/ndtbl.cxx | 4 + sw/source/core/layout/dbg_lay.cxx | 2 sw/source/core/text/EnhancedPDFExportHelper.cxx | 4 - sw/source/core/text/frmcrsr.cxx | 52 ++++++++--------- sw/source/core/text/frmform.cxx | 12 +++- sw/source/core/text/frmpaint.cxx | 21 ++++--- sw/source/core/text/inftxt.cxx | 10 +-- sw/source/core/text/inftxt.hxx | 3 - sw/source/core/text/itrcrsr.cxx | 13 ++-- sw/source/core/text/itrform2.cxx | 16 ++--- sw/source/core/text/itrform2.hxx | 2 sw/source/core/text/itrpaint.cxx | 2 sw/source/core/text/itrpaint.hxx | 2 sw/source/core/text/itrtxt.cxx | 6 +- sw/source/core/text/porfld.cxx | 10 +-- sw/source/core/text/porrst.cxx | 17 +++-- sw/source/core/text/portxt.cxx | 72 +++++++++++------------- sw/source/core/text/txtfld.cxx | 67 ++++++++++++---------- sw/source/core/text/txtfly.cxx | 6 +- sw/source/core/text/txtftn.cxx | 2 sw/source/core/text/txttab.cxx | 18 +++--- sw/source/core/text/widorp.cxx | 10 +-- sw/source/core/text/xmldump.cxx | 22 +++++++ 28 files changed, 224 insertions(+), 178 deletions(-)
New commits: commit 971775337e826709b6872de6da395e3b431a8e19 Author: Michael Stahl <[email protected]> Date: Fri May 18 18:45:54 2018 +0200 sw_redlinehide: odd conversion in SwNodes::TextToTable() Change-Id: I0afe1bed882b8256b58aeaeaa0f3331fe5c1c680 diff --git a/sw/source/core/docnode/ndtbl.cxx b/sw/source/core/docnode/ndtbl.cxx index 890e9b3952f8..0ee58e56b96e 100644 --- a/sw/source/core/docnode/ndtbl.cxx +++ b/sw/source/core/docnode/ndtbl.cxx @@ -1036,8 +1036,10 @@ SwTableNode* SwNodes::TextToTable( const SwNodeRange& rRange, sal_Unicode cCh, { if (rText[nChPos] == cCh) { + // sw_redlinehide: no idea if this makes any sense... + TextFrameIndex const nPos(aFInfo.GetFrame()->MapModelToView(pTextNd, nChPos)); aPosArr.push_back( static_cast<sal_uInt16>( - aFInfo.GetCharPos( nChPos+1, false )) ); + aFInfo.GetCharPos(nPos+TextFrameIndex(1), false)) ); } } commit b318a323a9b991be9bfc63e15cda011f2d2c9677 Author: Michael Stahl <[email protected]> Date: Fri May 18 18:45:04 2018 +0200 sw_redlinehide: trivial conversions in doc.cxx,doctxm.cxx Change-Id: Ic8737c8d06ca7d43241b39f4ad60d78eedcb42bb diff --git a/sw/source/core/doc/doc.cxx b/sw/source/core/doc/doc.cxx index 9f4a08b7bd42..5d57fb70d4fd 100644 --- a/sw/source/core/doc/doc.cxx +++ b/sw/source/core/doc/doc.cxx @@ -519,10 +519,11 @@ sal_uInt16 PostItField_::GetPageNo( //Probably only once. For the page number we don't select a random one, //but the PostIt's first occurrence in the selected area. rVirtPgNo = 0; - const sal_Int32 nPos = GetContent(); SwIterator<SwTextFrame,SwTextNode> aIter( GetTextField()->GetTextNode() ); for( SwTextFrame* pFrame = aIter.First(); pFrame; pFrame = aIter.Next() ) { + TextFrameIndex const nPos = pFrame->MapModelToView( + &GetTextField()->GetTextNode(), GetContent()); if( pFrame->GetOfst() > nPos || (pFrame->HasFollow() && pFrame->GetFollow()->GetOfst() <= nPos) ) continue; diff --git a/sw/source/core/doc/doctxm.cxx b/sw/source/core/doc/doctxm.cxx index 34cdce1fee6c..46871bcf2a7d 100644 --- a/sw/source/core/doc/doctxm.cxx +++ b/sw/source/core/doc/doctxm.cxx @@ -1589,8 +1589,11 @@ void SwTOXBaseSection::UpdatePageNum() { // find the right one SwTextFrame* pNext; + TextFrameIndex const nPos(static_cast<SwTextFrame*>(pFrame) + ->MapModelToView(static_cast<SwTextNode const*>(rTOXSource.pNd), + rTOXSource.nPos)); while( nullptr != ( pNext = static_cast<SwTextFrame*>(pFrame->GetFollow()) ) - && rTOXSource.nPos >= pNext->GetOfst() ) + && nPos >= pNext->GetOfst()) pFrame = pNext; } commit 3c982083875fe662b4fca00c284c951d65502512 Author: Michael Stahl <[email protected]> Date: Fri May 18 18:27:40 2018 +0200 sw_redlinehide: trivial conversions callnk.cxx,swcrsr.cxx,trvlfnfl.cxx Change-Id: Ice8d5b3356ac8fa84439eaf0b785ae56c2de9274 diff --git a/sw/source/core/crsr/callnk.cxx b/sw/source/core/crsr/callnk.cxx index 0fb524de83fe..205f65394de6 100644 --- a/sw/source/core/crsr/callnk.cxx +++ b/sw/source/core/crsr/callnk.cxx @@ -227,9 +227,12 @@ long SwCallLink::getLayoutFrame( const SwRootFrame* pRoot, SwTextNode const & rN if ( pFrame && !pFrame->IsHiddenNow() ) { if( pFrame->HasFollow() ) + { + TextFrameIndex const nPos(pFrame->MapModelToView(&rNd, nCntPos)); while( nullptr != ( pNext = pFrame->GetFollow() ) && - nCntPos >= pNext->GetOfst() ) + nPos >= pNext->GetOfst()) pFrame = pNext; + } return pFrame->getFrameArea().Left(); } diff --git a/sw/source/core/crsr/swcrsr.cxx b/sw/source/core/crsr/swcrsr.cxx index 8c426cdf7de4..e84731cd9795 100644 --- a/sw/source/core/crsr/swcrsr.cxx +++ b/sw/source/core/crsr/swcrsr.cxx @@ -1581,9 +1581,12 @@ SwCursor::DoSetBidiLevelLeftRight( { sal_uInt8 nCursorLevel = GetCursorBidiLevel(); bool bForward = ! io_rbLeft; - const_cast<SwTextFrame*>(static_cast<const SwTextFrame*>(pSttFrame))->PrepareVisualMove( nPos, nCursorLevel, + SwTextFrame *const pTF(const_cast<SwTextFrame*>( + static_cast<const SwTextFrame*>(pSttFrame))); + TextFrameIndex nTFIndex(pTF->MapModelToViewPos(*GetPoint())); + pTF->PrepareVisualMove( nTFIndex, nCursorLevel, bForward, bInsertCursor ); - rIdx = nPos; + *GetPoint() = pTF->MapViewToModelPos(nTFIndex); SetCursorBidiLevel( nCursorLevel ); io_rbLeft = ! bForward; } diff --git a/sw/source/core/crsr/trvlfnfl.cxx b/sw/source/core/crsr/trvlfnfl.cxx index a46eb7c367b5..8b03a46069c8 100644 --- a/sw/source/core/crsr/trvlfnfl.cxx +++ b/sw/source/core/crsr/trvlfnfl.cxx @@ -99,11 +99,10 @@ bool SwCursorShell::GotoFootnoteText() (pFrame)->ContainsContent(); if( pCnt ) { - const SwContentNode* pNode = pCnt->GetNode(); - GetCursor_()->GetPoint()->nNode = *pNode; - GetCursor_()->GetPoint()->nContent.Assign( - const_cast<SwContentNode*>(pNode), - static_cast<const SwTextFrame*>(pCnt)->GetOfst() ); + SwTextFrame const*const pTF( + static_cast<const SwTextFrame*>(pCnt)); + *GetCursor_()->GetPoint() = + pTF->MapViewToModelPos(pTF->GetOfst()); UpdateCursor( SwCursorShell::SCROLLWIN | SwCursorShell::CHKRANGE | SwCursorShell::READONLY ); bRet = true; commit a445ffd2755c1dfeb025f736bf9ba9f009ae9236 Author: Michael Stahl <[email protected]> Date: Fri May 18 18:25:40 2018 +0200 sw_redlinehide: trivial conversions in EnhancedPDFExportHelper.cxx Change-Id: I1365c06d4ff50c9dd537f43dd47d119e0dbf0e78 diff --git a/sw/source/core/text/EnhancedPDFExportHelper.cxx b/sw/source/core/text/EnhancedPDFExportHelper.cxx index a8d460ad3f9e..f116dd6cfa9e 100644 --- a/sw/source/core/text/EnhancedPDFExportHelper.cxx +++ b/sw/source/core/text/EnhancedPDFExportHelper.cxx @@ -615,7 +615,7 @@ void SwTaggedPDFHelper::SetAttributes( vcl::PDFWriter::StructElement eType ) { OSL_ENSURE( pFrame->IsTextFrame(), "Frame type <-> tag attribute mismatch" ); const SvxLRSpaceItem &rSpace = - static_cast<const SwTextFrame*>(pFrame)->GetTextNode()->GetSwAttrSet().GetLRSpace(); + static_cast<const SwTextFrame*>(pFrame)->GetTextNodeForParaProps()->GetSwAttrSet().GetLRSpace(); nVal = rSpace.GetTextFirstLineOfst(); if ( 0 != nVal ) mpPDFExtOutDevData->SetStructureAttributeNumerical( vcl::PDFWriter::TextIndent, nVal ); @@ -624,7 +624,7 @@ void SwTaggedPDFHelper::SetAttributes( vcl::PDFWriter::StructElement eType ) if ( bTextAlign ) { OSL_ENSURE( pFrame->IsTextFrame(), "Frame type <-> tag attribute mismatch" ); - const SwAttrSet& aSet = static_cast<const SwTextFrame*>(pFrame)->GetTextNode()->GetSwAttrSet(); + const SwAttrSet& aSet = static_cast<const SwTextFrame*>(pFrame)->GetTextNodeForParaProps()->GetSwAttrSet(); const SvxAdjust nAdjust = aSet.GetAdjust().GetAdjust(); if ( SvxAdjust::Block == nAdjust || SvxAdjust::Center == nAdjust || ( (pFrame->IsRightToLeft() && SvxAdjust::Left == nAdjust) || diff --git a/sw/source/core/text/txtftn.cxx b/sw/source/core/text/txtftn.cxx index 1ccfd5fbecc0..6dba5849218b 100644 --- a/sw/source/core/text/txtftn.cxx +++ b/sw/source/core/text/txtftn.cxx @@ -928,7 +928,7 @@ SwNumberPortion *SwTextFormatter::NewFootnoteNumPortion( SwTextFormatInfo const const SwAttrSet& rSet = pInfo->GetCharFormat(*pDoc)->GetAttrSet(); const SwAttrSet* pParSet = &rInf.GetCharAttr(); - const IDocumentSettingAccess* pIDSA = m_pFrame->GetTextNode()->getIDocumentSettingAccess(); + const IDocumentSettingAccess* pIDSA = &pDoc->getIDocumentSettingAccess(); SwFont *pNumFnt = new SwFont( pParSet, pIDSA ); // #i37142# commit 1019013440f0b3eb12b9e2b4f41e753577d5c70c Author: Michael Stahl <[email protected]> Date: Fri May 18 18:00:17 2018 +0200 sw_redlinehide: SwTextFrame::LeftMargin()/RightMargin(): The callers apparently pass in only pams that point to the node already, so just assert the precondition instead of this nonsense of assigning nNode but not nContent. Change-Id: I78f6d425ebe156a9ac89ffa134d71c0bec7fc9cb diff --git a/sw/source/core/text/frmcrsr.cxx b/sw/source/core/text/frmcrsr.cxx index a97ec384ef32..fe0ef8f78f63 100644 --- a/sw/source/core/text/frmcrsr.cxx +++ b/sw/source/core/text/frmcrsr.cxx @@ -670,8 +670,7 @@ bool SwTextFrame::GetCursorOfst(SwPosition* pPos, Point& rPoint, bool SwTextFrame::LeftMargin(SwPaM *pPam) const { - if( &pPam->GetNode() != GetNode() ) - pPam->GetPoint()->nNode = *const_cast<SwTextFrame*>(this)->GetTextNode(); + assert(&pPam->GetNode() == GetNode() || GetMergedPara()); SwTextFrame *pFrame = GetAdjFrameAtPos( const_cast<SwTextFrame*>(this), *pPam->GetPoint(), SwTextCursor::IsRightMargin() ); @@ -705,8 +704,7 @@ bool SwTextFrame::LeftMargin(SwPaM *pPam) const bool SwTextFrame::RightMargin(SwPaM *pPam, bool bAPI) const { - if( &pPam->GetNode() != GetNode() ) - pPam->GetPoint()->nNode = *const_cast<SwTextFrame*>(this)->GetTextNode(); + assert(&pPam->GetNode() == GetNode() || GetMergedPara()); SwTextFrame *pFrame = GetAdjFrameAtPos( const_cast<SwTextFrame*>(this), *pPam->GetPoint(), SwTextCursor::IsRightMargin() ); commit 06629e62e9e65b45a3f5ff2ff4067d8cc5387a20 Author: Michael Stahl <[email protected]> Date: Fri May 18 18:00:00 2018 +0200 sw_redlinehide: trivial conversions in frmcrsr.cxx Change-Id: I15e6fc1eecebab0c497eda66c74633651fa446a6 diff --git a/sw/source/core/text/frmcrsr.cxx b/sw/source/core/text/frmcrsr.cxx index 882595ac4a2c..a97ec384ef32 100644 --- a/sw/source/core/text/frmcrsr.cxx +++ b/sw/source/core/text/frmcrsr.cxx @@ -65,15 +65,16 @@ SwTextFrame *GetAdjFrameAtPos( SwTextFrame *pFrame, const SwPosition &rPos, const bool bRightMargin, const bool bNoScroll = true ) { // RightMargin in the last master line - const sal_Int32 nOffset = rPos.nContent.GetIndex(); + TextFrameIndex const nOffset = pFrame->MapModelToViewPos(rPos); SwTextFrame *pFrameAtPos = pFrame; if( !bNoScroll || pFrame->GetFollow() ) { pFrameAtPos = pFrame->GetFrameAtPos( rPos ); - if (rPos < pFrameAtPos->MapViewToModelPos(pFrameAtPos->GetOfst()) && + if (nOffset < pFrameAtPos->GetOfst() && !pFrameAtPos->IsFollow() ) { - TextFrameIndex nNew = pFrameAtPos->MapModelToViewPos(rPos); + assert(pFrameAtPos->MapModelToViewPos(rPos) == nOffset); + TextFrameIndex nNew(nOffset); if (nNew < TextFrameIndex(MIN_OFFSET_STEP)) nNew = TextFrameIndex(0); else @@ -213,7 +214,7 @@ bool SwTextFrame::GetCharRect( SwRect& rOrig, const SwPosition &rPos, if ( pFrame->IsEmpty() || ! aRectFnSet.GetHeight(pFrame->getFramePrintArea()) ) { Point aPnt1 = pFrame->getFrameArea().Pos() + pFrame->getFramePrintArea().Pos(); - SwTextNode* pTextNd = const_cast<SwTextFrame*>(this)->GetTextNode(); + SwTextNode const*const pTextNd(GetTextNodeForParaProps()); short nFirstOffset; pTextNd->GetFirstLineOfsWithNum( nFirstOffset ); @@ -290,7 +291,7 @@ bool SwTextFrame::GetCharRect( SwRect& rOrig, const SwPosition &rPos, aRectFnSet.GetBottom(rOrig) == nUpperMaxY && pFrame->GetOfst() < nOffset && !pFrame->IsFollow() && !bNoScroll && - pFrame->GetTextNode()->GetText().getLength() != nNextOfst) + TextFrameIndex(pFrame->GetText().getLength()) != nNextOfst) { bGoOn = sw_ChangeOffset( pFrame, nNextOfst ); } @@ -571,9 +572,7 @@ bool SwTextFrame::GetCursorOfst_(SwPosition* pPos, const Point& rPoint, if ( IsEmpty() ) { - SwTextNode* pTextNd = const_cast<SwTextFrame*>(this)->GetTextNode(); - pPos->nNode = *pTextNd; - pPos->nContent.Assign( pTextNd, 0 ); + *pPos = MapViewToModelPos(TextFrameIndex(0)); if( pCMS && pCMS->m_bFieldInfo ) { SwTwips nDiff = rPoint.X() - getFrameArea().Left() - getFramePrintArea().Left(); @@ -612,15 +611,14 @@ bool SwTextFrame::GetCursorOfst_(SwPosition* pPos, const Point& rPoint, // In such cases, pPos must not be calculated. if (TextFrameIndex(COMPLETE_STRING) != nOffset) { - SwTextNode* pTextNd = const_cast<SwTextFrame*>(this)->GetTextNode(); *pPos = MapViewToModelPos(nOffset); if( pFillData ) { - if (pTextNd->GetText().getLength() > nOffset || + if (TextFrameIndex(GetText().getLength()) > nOffset || rPoint.Y() < getFrameArea().Top() ) pFillData->bInner = true; pFillData->bFirstLine = aLine.GetLineNr() < 2; - if (pTextNd->GetText().getLength()) + if (GetText().getLength()) { pFillData->bEmpty = false; pFillData->nLineWidth = aLine.GetCurr()->Width(); @@ -1336,10 +1334,9 @@ void SwTextFrame::FillCursorPos( SwFillData& rFill ) const rFill.bColumn = true; if( rFill.pPos ) { - SwTextNode* pTextNd = const_cast<SwTextFrame*>(static_cast<const SwTextFrame*>(pFrame))->GetTextNode(); - rFill.pPos->nNode = *pTextNd; - rFill.pPos->nContent.Assign( - pTextNd, pTextNd->GetText().getLength()); + SwTextFrame const*const pTextFrame(static_cast<const SwTextFrame*>(pFrame)); + *rFill.pPos = pTextFrame->MapViewToModelPos( + TextFrameIndex(pTextFrame->GetText().getLength())); } if( nNextCol ) { @@ -1354,19 +1351,22 @@ void SwTextFrame::FillCursorPos( SwFillData& rFill ) const } } SwFont *pFnt; - SwTextFormatColl* pColl = GetTextNode()->GetTextColl(); - SwTwips nFirst = GetTextNode()->GetSwAttrSet().GetULSpace().GetLower(); + SwTextFormatColl* pColl = GetTextNodeForParaProps()->GetTextColl(); + SwTwips nFirst = GetTextNodeForParaProps()->GetSwAttrSet().GetULSpace().GetLower(); SwTwips nDiff = rFill.Y() - getFrameArea().Bottom(); if( nDiff < nFirst ) nDiff = -1; else pColl = &pColl->GetNextTextFormatColl(); - SwAttrSet aSet( const_cast<SwDoc*>(GetTextNode()->GetDoc())->GetAttrPool(), aTextFormatCollSetRange ); + SwAttrSet aSet(const_cast<SwDoc&>(GetDoc()).GetAttrPool(), aTextFormatCollSetRange ); const SwAttrSet* pSet = &pColl->GetAttrSet(); SwViewShell *pSh = getRootFrame()->GetCurrShell(); - if( GetTextNode()->HasSwAttrSet() ) + if (GetTextNodeForParaProps()->HasSwAttrSet()) { - aSet.Put( *GetTextNode()->GetpSwAttrSet() ); + // sw_redlinehide: pSet is mostly used for para props, but there are + // accesses to char props via pFnt - why does it use only the node's + // props for this, and not hints? + aSet.Put( *GetTextNodeForParaProps()->GetpSwAttrSet() ); aSet.SetParent( pSet ); pSet = &aSet; pFnt = new SwFont( pSet, GetNode()->getIDocumentSettingAccess() ); @@ -1379,7 +1379,7 @@ void SwTextFrame::FillCursorPos( SwFillData& rFill ) const } OutputDevice* pOut = pSh->GetOut(); if( !pSh->GetViewOptions()->getBrowseMode() || pSh->GetViewOptions()->IsPrtFormat() ) - pOut = GetTextNode()->getIDocumentDeviceAccess().getReferenceDevice( true ); + pOut = GetDoc().getIDocumentDeviceAccess().getReferenceDevice( true ); pFnt->SetFntChg( true ); pFnt->ChgPhysFnt( pSh, *pOut ); @@ -1430,7 +1430,7 @@ void SwTextFrame::FillCursorPos( SwFillData& rFill ) const rRect.Top( rRect.Top() + nFirst ); rRect.Height( nLineHeight ); SwTwips nLeft = rFill.Left() + rLRSpace.GetLeft() + - GetTextNode()->GetLeftMarginWithNum(); + GetTextNodeForParaProps()->GetLeftMarginWithNum(); SwTwips nRight = rFill.Right() - rLRSpace.GetRight(); SwTwips nCenter = ( nLeft + nRight ) / 2; rRect.Left( nLeft ); @@ -1503,7 +1503,7 @@ void SwTextFrame::FillCursorPos( SwFillData& rFill ) const else if( rFill.X() > nLeft ) { SwTwips nTextLeft = rFill.Left() + rLRSpace.GetTextLeft() + - GetTextNode()->GetLeftMarginWithNum( true ); + GetTextNodeForParaProps()->GetLeftMarginWithNum(true); rFill.nLineWidth += rFill.bFirstLine ? nLeft : nTextLeft; SwTwips nLeftTab; SwTwips nRightTab = nLeft; commit 58a75546d17405ccc62e29d2313fb029b87291a1 Author: Michael Stahl <[email protected]> Date: Fri May 18 16:18:42 2018 +0200 sw_redlinehide: trivial conversions in porfld.cxx Change-Id: Ic124bc328482f4c28a92cb0a83bd1f5c5cd9d3a2 diff --git a/sw/source/core/text/porfld.cxx b/sw/source/core/text/porfld.cxx index bd1ebe840ef5..da26149b1725 100644 --- a/sw/source/core/text/porfld.cxx +++ b/sw/source/core/text/porfld.cxx @@ -366,13 +366,13 @@ bool SwFieldPortion::Format( SwTextFormatInfo &rInf ) { // aExpand has not yet been shortened; the new Ofst is a // result of nRest - sal_Int32 nNextOfst = m_aExpand.getLength() - nRest; + TextFrameIndex nNextOfst = TextFrameIndex(m_aExpand.getLength()) - nRest; if ( IsQuoVadisPortion() ) - nNextOfst = nNextOfst + static_cast<SwQuoVadisPortion*>(this)->GetContText().getLength(); + nNextOfst = nNextOfst + TextFrameIndex(static_cast<SwQuoVadisPortion*>(this)->GetContText().getLength()); - OUString aNew( m_aExpand.copy( nNextOfst ) ); - m_aExpand = m_aExpand.copy( 0, nNextOfst ); + OUString aNew( m_aExpand.copy(sal_Int32(nNextOfst)) ); + m_aExpand = m_aExpand.copy(0, sal_Int32(nNextOfst)); // These characters should not be contained in the follow // field portion. They are handled via the HookChar mechanism. @@ -551,7 +551,7 @@ bool SwNumberPortion::Format( SwTextFormatInfo &rInf ) if ( !mbLabelAlignmentPosAndSpaceModeActive ) { - if ( !rInf.GetTextFrame()->GetTextNode()->getIDocumentSettingAccess()->get(DocumentSettingId::IGNORE_FIRST_LINE_INDENT_IN_NUMBERING) && + if (!rInf.GetTextFrame()->GetDoc().getIDocumentSettingAccess().get(DocumentSettingId::IGNORE_FIRST_LINE_INDENT_IN_NUMBERING) && // #i32902# !IsFootnoteNumPortion() ) { commit f6b82458770a91323267aeaa1a5f667cd0d9acba Author: Michael Stahl <[email protected]> Date: Fri May 18 16:09:32 2018 +0200 sw_redlinehide: trivial conversions in portxt.cxx Change-Id: I88206586f89f9a799ee23b1d48922e06f74953f2 diff --git a/sw/source/core/text/portxt.cxx b/sw/source/core/text/portxt.cxx index 971d5816bce7..785935e151ec 100644 --- a/sw/source/core/text/portxt.cxx +++ b/sw/source/core/text/portxt.cxx @@ -225,8 +225,8 @@ void SwTextPortion::BreakCut( SwTextFormatInfo &rInf, const SwTextGuess &rGuess // Special case 1: The word is larger than the line // We truncate ... const sal_uInt16 nLineWidth = static_cast<sal_uInt16>(rInf.Width() - rInf.X()); - sal_Int32 nLen = rGuess.CutPos() - rInf.GetIdx(); - if (nLen > 0) + TextFrameIndex nLen = rGuess.CutPos() - rInf.GetIdx(); + if (nLen > TextFrameIndex(0)) { // special case: guess does not always provide the correct // width, only in common cases. @@ -254,12 +254,12 @@ void SwTextPortion::BreakCut( SwTextFormatInfo &rInf, const SwTextGuess &rGuess // special case: first character does not fit to line else if ( rGuess.CutPos() == rInf.GetLineStart() ) { - SetLen( 1 ); + SetLen( TextFrameIndex(1) ); Width( nLineWidth ); } else { - SetLen( 0 ); + SetLen( TextFrameIndex(0) ); Width( 0 ); } } @@ -269,7 +269,7 @@ void SwTextPortion::BreakUnderflow( SwTextFormatInfo &rInf ) Truncate(); Height( 0 ); Width( 0 ); - SetLen( 0 ); + SetLen( TextFrameIndex(0) ); SetAscent( 0 ); rInf.SetUnderflow( this ); } @@ -295,12 +295,12 @@ bool SwTextPortion::Format_( SwTextFormatInfo &rInf ) SwTextGuess aGuess; // check for alternative spelling left from the soft hyphen // this should usually be true but - aGuess.AlternativeSpelling( rInf, rInf.GetSoftHyphPos() - 1 ); + aGuess.AlternativeSpelling(rInf, rInf.GetSoftHyphPos() - TextFrameIndex(1)); bFull = CreateHyphen( rInf, aGuess ); OSL_ENSURE( bFull, "Problem with hyphenation!!!" ); } rInf.ChgHyph( bHyph ); - rInf.SetSoftHyphPos( 0 ); + rInf.SetSoftHyphPos( TextFrameIndex(0) ); return bFull; } @@ -347,7 +347,7 @@ bool SwTextPortion::Format_( SwTextFormatInfo &rInf ) Insert( aGuess.ReleaseHangingPortion() ); } // breakPos >= index - else if ( aGuess.BreakPos() >= rInf.GetIdx() && aGuess.BreakPos() != COMPLETE_STRING ) + else if (aGuess.BreakPos() >= rInf.GetIdx() && aGuess.BreakPos() != TextFrameIndex(COMPLETE_STRING)) { // case B1 if( aGuess.HyphWord().is() && aGuess.BreakPos() > rInf.GetLineStart() @@ -372,7 +372,7 @@ bool SwTextPortion::Format_( SwTextFormatInfo &rInf ) rInf.IsOtherThanFootnoteInside() ) || ( rInf.GetLast() && - rInf.GetTextFrame()->GetTextNode()->getIDocumentSettingAccess()->get(DocumentSettingId::TAB_COMPAT) && + rInf.GetTextFrame()->GetDoc().getIDocumentSettingAccess().get(DocumentSettingId::TAB_COMPAT) && rInf.GetLast()->InTabGrp() && rInf.GetLineStart() + rInf.GetLast()->GetLen() < rInf.GetIdx() && aGuess.BreakPos() == rInf.GetIdx() && @@ -405,7 +405,7 @@ bool SwTextPortion::Format_( SwTextFormatInfo &rInf ) OSL_ENSURE( aGuess.BreakStart() >= aGuess.FieldDiff(), "Trouble with expanded field portions during line break" ); - const sal_Int32 nRealStart = aGuess.BreakStart() - aGuess.FieldDiff(); + TextFrameIndex const nRealStart = aGuess.BreakStart() - aGuess.FieldDiff(); if( aGuess.BreakPos() < nRealStart && !InExpGrp() ) { SwHolePortion *pNew = new SwHolePortion( *this ); @@ -420,11 +420,12 @@ bool SwTextPortion::Format_( SwTextFormatInfo &rInf ) else { bool bFirstPor = rInf.GetLineStart() == rInf.GetIdx(); - if( aGuess.BreakPos() != COMPLETE_STRING && + if (aGuess.BreakPos() != TextFrameIndex(COMPLETE_STRING) && aGuess.BreakPos() != rInf.GetLineStart() && ( !bFirstPor || rInf.GetFly() || rInf.GetLast()->IsFlyPortion() || rInf.IsFirstMulti() ) && - ( !rInf.GetLast()->IsBlankPortion() || SwBlankPortion::MayUnderflow( rInf, rInf.GetIdx()-1, true ))) + ( !rInf.GetLast()->IsBlankPortion() || + SwBlankPortion::MayUnderflow(rInf, rInf.GetIdx() - TextFrameIndex(1), true))) { // case C1 (former BreakUnderflow()) BreakUnderflow( rInf ); } @@ -442,7 +443,7 @@ bool SwTextPortion::Format( SwTextFormatInfo &rInf ) { Height( 0 ); Width( 0 ); - SetLen( 0 ); + SetLen( TextFrameIndex(0) ); SetAscent( 0 ); SetPortion( nullptr ); // ???? return true; @@ -469,14 +470,15 @@ void SwTextPortion::FormatEOL( SwTextFormatInfo &rInf ) ( !GetPortion() || ( GetPortion()->IsKernPortion() && !GetPortion()->GetPortion() ) ) && GetLen() && - rInf.GetIdx() < rInf.GetText().getLength() && - 1 < rInf.GetIdx() && ' ' == rInf.GetChar( rInf.GetIdx() - 1 ) && + rInf.GetIdx() < TextFrameIndex(rInf.GetText().getLength()) && + TextFrameIndex(1) < rInf.GetIdx() && + ' ' == rInf.GetChar(rInf.GetIdx() - TextFrameIndex(1)) && !rInf.GetLast()->IsHolePortion()) ) return; // calculate number of blanks - sal_Int32 nX = rInf.GetIdx() - 1; - sal_Int32 nHoleLen = 1; + TextFrameIndex nX(rInf.GetIdx() - TextFrameIndex(1)); + TextFrameIndex nHoleLen(1); while( nX && nHoleLen < GetLen() && CH_BLANK == rInf.GetChar( --nX ) ) nHoleLen++; @@ -486,7 +488,7 @@ void SwTextPortion::FormatEOL( SwTextFormatInfo &rInf ) if( nHoleLen == GetLen() ) nBlankSize = Width(); else - nBlankSize = nHoleLen * rInf.GetTextSize(OUString(' ')).Width(); + nBlankSize = sal_Int32(nHoleLen) * rInf.GetTextSize(OUString(' ')).Width(); Width( Width() - nBlankSize ); rInf.X( rInf.X() - nBlankSize ); SetLen( GetLen() - nHoleLen ); @@ -521,14 +523,16 @@ SwPosSize SwTextPortion::GetTextSize( const SwTextSizeInfo &rInf ) const void SwTextPortion::Paint( const SwTextPaintInfo &rInf ) const { - if (rInf.OnWin() && 1==rInf.GetLen() && CH_TXT_ATR_FIELDEND==rInf.GetText()[rInf.GetIdx()]) + if (rInf.OnWin() && TextFrameIndex(1) == rInf.GetLen() + && CH_TXT_ATR_FIELDEND == rInf.GetText()[sal_Int32(rInf.GetIdx())]) { assert(false); // this is some debugging only code rInf.DrawBackBrush( *this ); const OUString aText(CH_TXT_ATR_SUBST_FIELDEND); rInf.DrawText( aText, *this, 0, aText.getLength() ); } - else if (rInf.OnWin() && 1==rInf.GetLen() && CH_TXT_ATR_FIELDSTART==rInf.GetText()[rInf.GetIdx()]) + else if (rInf.OnWin() && TextFrameIndex(1) == rInf.GetLen() + && CH_TXT_ATR_FIELDSTART == rInf.GetText()[sal_Int32(rInf.GetIdx())]) { assert(false); // this is some debugging only code rInf.DrawBackBrush( *this ); @@ -576,7 +580,7 @@ TextFrameIndex SwTextPortion::GetSpaceCnt(const SwTextSizeInfo &rInf, { SwTextGridItem const*const pGrid(GetGridItem(rInf.GetTextFrame()->FindPageFrame())); if (pGrid && GRID_LINES_CHARS == pGrid->GetGridType() && pGrid->IsSnapToChars()) - return 0; + return TextFrameIndex(0); } if ( InExpGrp() ) @@ -690,14 +694,14 @@ void SwTextInputFieldPortion::Paint( const SwTextPaintInfo &rInf ) const bool SwTextInputFieldPortion::GetExpText( const SwTextSizeInfo &rInf, OUString &rText ) const { - sal_Int32 nIdx = rInf.GetIdx(); - sal_Int32 nLen = rInf.GetLen(); + sal_Int32 nIdx(rInf.GetIdx()); + sal_Int32 nLen(rInf.GetLen()); if ( rInf.GetChar( rInf.GetIdx() ) == CH_TXT_ATR_INPUTFIELDSTART ) { ++nIdx; --nLen; } - if ( rInf.GetChar( rInf.GetIdx() + rInf.GetLen() - 1 ) == CH_TXT_ATR_INPUTFIELDEND ) + if (rInf.GetChar(rInf.GetIdx() + rInf.GetLen() - TextFrameIndex(1)) == CH_TXT_ATR_INPUTFIELDEND) { --nLen; } @@ -709,7 +713,7 @@ bool SwTextInputFieldPortion::GetExpText( const SwTextSizeInfo &rInf, OUString & SwPosSize SwTextInputFieldPortion::GetTextSize( const SwTextSizeInfo &rInf ) const { SwTextSlot aFormatText( &rInf, this, true, false ); - if ( rInf.GetLen() == 0 ) + if (rInf.GetLen() == TextFrameIndex(0)) { return SwPosSize( 0, 0 ); } @@ -720,7 +724,7 @@ SwPosSize SwTextInputFieldPortion::GetTextSize( const SwTextSizeInfo &rInf ) con SwHolePortion::SwHolePortion( const SwTextPortion &rPor ) : nBlankWidth( 0 ) { - SetLen( 1 ); + SetLen( TextFrameIndex(1) ); Height( rPor.Height() ); SetAscent( rPor.GetAscent() ); SetWhichPor( POR_HOLE ); @@ -783,19 +787,16 @@ bool SwFieldMarkPortion::Format( SwTextFormatInfo & ) void SwFieldFormCheckboxPortion::Paint( const SwTextPaintInfo& rInf ) const { - SwTextNode* pNd = const_cast<SwTextNode*>(rInf.GetTextFrame()->GetTextNode()); - const SwDoc *doc=pNd->GetDoc(); - SwIndex aIndex( pNd, rInf.GetIdx() ); - SwPosition aPosition(*pNd, aIndex); + SwPosition const aPosition(rInf.GetTextFrame()->MapViewToModelPos(rInf.GetIdx())); - IFieldmark* pBM = doc->getIDocumentMarkAccess( )->getFieldmarkFor( aPosition ); + IFieldmark const*const pBM = rInf.GetTextFrame()->GetDoc().getIDocumentMarkAccess()->getFieldmarkFor( aPosition ); OSL_ENSURE(pBM && pBM->GetFieldname( ) == ODF_FORMCHECKBOX, "Where is my form field bookmark???"); if (pBM && pBM->GetFieldname( ) == ODF_FORMCHECKBOX) { - const ICheckboxFieldmark* pCheckboxFm = dynamic_cast< ICheckboxFieldmark* >(pBM); + const ICheckboxFieldmark* pCheckboxFm = dynamic_cast<ICheckboxFieldmark const*>(pBM); bool bChecked = pCheckboxFm && pCheckboxFm->IsChecked(); rInf.DrawCheckBox(*this, bChecked); } @@ -803,11 +804,8 @@ void SwFieldFormCheckboxPortion::Paint( const SwTextPaintInfo& rInf ) const bool SwFieldFormCheckboxPortion::Format( SwTextFormatInfo & rInf ) { - SwTextNode *pNd = rInf.GetTextFrame( )->GetTextNode( ); - const SwDoc *doc = pNd->GetDoc( ); - SwIndex aIndex( pNd, rInf.GetIdx( ) ); - SwPosition aPosition( *pNd, aIndex ); - IFieldmark *pBM = doc->getIDocumentMarkAccess( )->getFieldmarkFor( aPosition ); + SwPosition const aPosition(rInf.GetTextFrame()->MapViewToModelPos(rInf.GetIdx())); + IFieldmark const*const pBM = rInf.GetTextFrame()->GetDoc().getIDocumentMarkAccess()->getFieldmarkFor( aPosition ); OSL_ENSURE(pBM && pBM->GetFieldname( ) == ODF_FORMCHECKBOX, "Where is my form field bookmark???"); if (pBM && pBM->GetFieldname( ) == ODF_FORMCHECKBOX) { commit eda4bba58cf36c2151cb0e6e07de0e0779b6ccef Author: Michael Stahl <[email protected]> Date: Fri May 18 15:32:28 2018 +0200 sw_redlinehide: trivial node conversions in widorp.cxx Change-Id: I58e9b241e543e72be410d88f640635e9dbe42ff0 diff --git a/sw/source/core/text/widorp.cxx b/sw/source/core/text/widorp.cxx index 6ffc9324853e..b87396701d8d 100644 --- a/sw/source/core/text/widorp.cxx +++ b/sw/source/core/text/widorp.cxx @@ -67,8 +67,8 @@ SwTextFrameBreak::SwTextFrameBreak( SwTextFrame *pNewFrame, const SwTwips nRst ) const SwSectionFrame* const pSct = m_pFrame->FindSctFrame(); m_bKeep = pSct->Lower()->IsColumnFrame() && !pSct->MoveAllowed( m_pFrame ); } - m_bKeep = m_bKeep || !m_pFrame->GetTextNode()->GetSwAttrSet().GetSplit().GetValue() || - m_pFrame->GetTextNode()->GetSwAttrSet().GetKeep().GetValue(); + m_bKeep = m_bKeep || !m_pFrame->GetTextNodeForParaProps()->GetSwAttrSet().GetSplit().GetValue() || + m_pFrame->GetTextNodeForParaProps()->GetSwAttrSet().GetKeep().GetValue(); m_bBreak = false; if( !m_nRstHeight && !m_pFrame->IsFollow() && m_pFrame->IsInFootnote() && m_pFrame->HasPara() ) @@ -241,11 +241,11 @@ WidowsAndOrphans::WidowsAndOrphans( SwTextFrame *pNewFrame, const SwTwips nRst, // nevertheless the paragraph can request lines from the Master // because of the Orphan rule. if( m_pFrame->IsFollow() ) - nWidLines = m_pFrame->GetTextNode()->GetSwAttrSet().GetWidows().GetValue(); + nWidLines = m_pFrame->GetTextNodeForParaProps()->GetSwAttrSet().GetWidows().GetValue(); } else { - const SwAttrSet& rSet = m_pFrame->GetTextNode()->GetSwAttrSet(); + const SwAttrSet& rSet = m_pFrame->GetTextNodeForParaProps()->GetSwAttrSet(); const SvxOrphansItem &rOrph = rSet.GetOrphans(); if ( rOrph.GetValue() > 1 ) nOrphLines = rOrph.GetValue(); @@ -511,7 +511,7 @@ bool WidowsAndOrphans::WouldFit( SwTextMargin &rLine, SwTwips &rMaxHeight, bool // because we are just in the middle of calculating the break. // In Ctor of WidowsAndOrphans the nWidLines are only calced for // Follows from the AttrSet - so we catch up now: - const SwAttrSet& rSet = m_pFrame->GetTextNode()->GetSwAttrSet(); + const SwAttrSet& rSet = m_pFrame->GetTextNodeForParaProps()->GetSwAttrSet(); nWidLines = rSet.GetWidows().GetValue(); } commit 959230b07c5feddadaa85297ef408e46390c196a Author: Michael Stahl <[email protected]> Date: Fri May 18 15:31:37 2018 +0200 sw_redlinehide: trivial node conversions in porrst.cxx Change-Id: Idecf55238d42b3ec89278cfb792afe72471b0793 diff --git a/sw/source/core/text/porrst.cxx b/sw/source/core/text/porrst.cxx index 5d85adbf3c6d..5631e8434ce0 100644 --- a/sw/source/core/text/porrst.cxx +++ b/sw/source/core/text/porrst.cxx @@ -224,7 +224,7 @@ SwTwips SwTextFrame::EmptyHeight() const OSL_ENSURE( ! IsVertical() || ! IsSwapped(),"SwTextFrame::EmptyHeight with swapped frame" ); SwFont *pFnt; - const SwTextNode& rTextNode = *GetTextNode(); + const SwTextNode& rTextNode = *GetTextNodeForParaProps(); const IDocumentSettingAccess* pIDSA = rTextNode.getIDocumentSettingAccess(); SwViewShell *pSh = getRootFrame()->GetCurrShell(); if ( rTextNode.HasSwAttrSet() ) @@ -256,8 +256,8 @@ SwTwips SwTextFrame::EmptyHeight() const if( SwRedlineTable::npos != nRedlPos ) { SwAttrHandler aAttrHandler; - aAttrHandler.Init( GetTextNode()->GetSwAttrSet(), - *GetTextNode()->getIDocumentSettingAccess() ); + aAttrHandler.Init(rTextNode.GetSwAttrSet(), + *rTextNode.getIDocumentSettingAccess()); SwRedlineItr aRedln( rTextNode, *pFnt, aAttrHandler, nRedlPos, SwRedlineItr::Mode::Show); } @@ -284,12 +284,13 @@ bool SwTextFrame::FormatEmpty() bool bCollapse = EmptyHeight( ) == 1 && IsCollapse( ); - if ( HasFollow() || GetTextNode()->GetpSwpHints() || - nullptr != GetTextNode()->GetNumRule() || + // sw_redlinehide: just disable FormatEmpty optimisation for now + if (HasFollow() || GetMergedPara() || GetTextNodeFirst()->GetpSwpHints() || + nullptr != GetTextNodeForParaProps()->GetNumRule() || GetTextNode()->HasHiddenCharAttribute( true ) || IsInFootnote() || ( HasPara() && GetPara()->IsPrepMustFit() ) ) return false; - const SwAttrSet& aSet = GetTextNode()->GetSwAttrSet(); + const SwAttrSet& aSet = GetTextNodeForParaProps()->GetSwAttrSet(); const SvxAdjust nAdjust = aSet.GetAdjust().GetAdjust(); if( !bCollapse && ( ( ( ! IsRightToLeft() && ( SvxAdjust::Left != nAdjust ) ) || ( IsRightToLeft() && ( SvxAdjust::Right != nAdjust ) ) ) || @@ -310,7 +311,7 @@ bool SwTextFrame::FormatEmpty() SwTwips nHeight = EmptyHeight(); - if ( GetTextNode()->GetSwAttrSet().GetParaGrid().GetValue() && + if (aSet.GetParaGrid().GetValue() && IsInDocBody() ) { SwTextGridItem const*const pGrid(GetGridItem(FindPageFrame())); @@ -386,7 +387,7 @@ bool SwTextFrame::FillRegister( SwTwips& rRegStart, sal_uInt16& rRegDiff ) OutputDevice *pOut = nullptr; if( !pSh || !pSh->GetViewOptions()->getBrowseMode() || pSh->GetViewOptions()->IsPrtFormat() ) - pOut = GetTextNode()->getIDocumentDeviceAccess().getReferenceDevice( true ); + pOut = GetDoc().getIDocumentDeviceAccess().getReferenceDevice( true ); if( pSh && !pOut ) pOut = pSh->GetWin(); commit 3163fe3be3ab383786dc1505552ed836a0a1d382 Author: Michael Stahl <[email protected]> Date: Fri May 18 15:09:04 2018 +0200 sw_redlinehide: convert SwTextFrame::MakePos() which has... ... and odd LOKit notification loop that looks a bit unoptimised. Change-Id: I9b510f1bc8c295bb9b871ce5cc6060dbd8b96bcb diff --git a/sw/source/core/text/frmform.cxx b/sw/source/core/text/frmform.cxx index f6cb776baf15..40ed097b1200 100644 --- a/sw/source/core/text/frmform.cxx +++ b/sw/source/core/text/frmform.cxx @@ -351,14 +351,20 @@ void SwTextFrame::MakePos() // Inform LOK clients about change in position of redlines (if any) if(comphelper::LibreOfficeKit::isActive()) { - const SwTextNode& rTextNode = *GetTextNode(); - const SwRedlineTable& rTable = rTextNode.getIDocumentRedlineAccess().GetRedlineTable(); + SwTextNode const* pTextNode = GetTextNodeFirst(); + const SwRedlineTable& rTable = pTextNode->getIDocumentRedlineAccess().GetRedlineTable(); for (SwRedlineTable::size_type nRedlnPos = 0; nRedlnPos < rTable.size(); ++nRedlnPos) { SwRangeRedline* pRedln = rTable[nRedlnPos]; - if (rTextNode.GetIndex() == pRedln->GetPoint()->nNode.GetNode().GetIndex()) + if (pTextNode->GetIndex() == pRedln->GetPoint()->nNode.GetNode().GetIndex()) { pRedln->MaybeNotifyRedlinePositionModification(getFrameArea().Top()); + if (GetMergedPara() + && pRedln->GetType() == nsRedlineType_t::REDLINE_DELETE + && pRedln->GetPoint()->nNode != pRedln->GetMark()->nNode) + { + pTextNode = pRedln->End()->nNode.GetNode().GetTextNode(); + } } } } commit 6ec3fd209f9a2b646a36d436d2345b8ff79d5df6 Author: Michael Stahl <[email protected]> Date: Fri May 18 14:49:39 2018 +0200 sw_redlinehide: trivial node conversions in headers Change-Id: I74607928dbc8e07df0bba8f3179797735f37a92a diff --git a/sw/source/core/text/inftxt.hxx b/sw/source/core/text/inftxt.hxx index c0bf6f7aa46c..40bf57ebcebb 100644 --- a/sw/source/core/text/inftxt.hxx +++ b/sw/source/core/text/inftxt.hxx @@ -776,7 +776,8 @@ inline TextFrameIndex SwTextFormatInfo::GetReformatStart() const inline const SwAttrSet& SwTextFormatInfo::GetCharAttr() const { - return GetTextFrame()->GetTextNode()->GetSwAttrSet(); + // sw_redlinehide: this is used for numbering/footnote number portions, so: + return GetTextFrame()->GetTextNodeForParaProps()->GetSwAttrSet(); } inline void SwTextFormatInfo::SetParaFootnote() diff --git a/sw/source/core/text/itrform2.hxx b/sw/source/core/text/itrform2.hxx index 8071c42455c9..bf9a6c8af749 100644 --- a/sw/source/core/text/itrform2.hxx +++ b/sw/source/core/text/itrform2.hxx @@ -152,7 +152,7 @@ public: void CtorInitTextFormatter( SwTextFrame *pFrame, SwTextFormatInfo *pInf ); SwTextFormatter(SwTextFrame *pTextFrame, SwTextFormatInfo *pTextFormatInf) - : SwTextPainter(pTextFrame->GetTextNode()) + : SwTextPainter(pTextFrame->GetTextNodeFirst()) , bUnclipped(false) { CtorInitTextFormatter( pTextFrame, pTextFormatInf ); diff --git a/sw/source/core/text/itrpaint.hxx b/sw/source/core/text/itrpaint.hxx index b9d3f03e974b..aa8807af1b0c 100644 --- a/sw/source/core/text/itrpaint.hxx +++ b/sw/source/core/text/itrpaint.hxx @@ -40,7 +40,7 @@ protected: public: SwTextPainter(SwTextFrame *pTextFrame, SwTextPaintInfo *pTextPaintInf) - : SwTextCursor(pTextFrame->GetTextNode()) + : SwTextCursor(pTextFrame->GetTextNodeFirst()) { CtorInitTextPainter( pTextFrame, pTextPaintInf ); } commit 63e7d9f1d5dd673d2c467b7690a670b4210d6e1b Author: Michael Stahl <[email protected]> Date: Fri May 18 14:47:36 2018 +0200 sw_redlinehide: trivial node conversions in txtfly.cxx,txttab.cxx Change-Id: I6da08994e2f3f23f583f41bfc5ac6c4f6e5a5112 diff --git a/sw/source/core/text/txtfly.cxx b/sw/source/core/text/txtfly.cxx index d15a398ffa43..0d698da79ab9 100644 --- a/sw/source/core/text/txtfly.cxx +++ b/sw/source/core/text/txtfly.cxx @@ -802,7 +802,7 @@ bool SwTextFly::GetTop( const SwAnchoredObject* _pAnchoredObj, // object position and former text wrapping is applied. // This condition is typically for documents imported from the // OpenOffice.org file format. - const IDocumentSettingAccess* pIDSA = pCurrFrame->GetTextNode()->getIDocumentSettingAccess(); + const IDocumentSettingAccess* pIDSA = &pCurrFrame->GetDoc().getIDocumentSettingAccess(); if ( ( pIDSA->get(DocumentSettingId::CONSIDER_WRAP_ON_OBJECT_POSITION) || !pIDSA->get(DocumentSettingId::USE_FORMER_TEXT_WRAPPING) ) && ::FindContext( pTmp, SwFrameType::None ) == ::FindContext( pCurrFrame, SwFrameType::None ) ) @@ -855,7 +855,7 @@ SwAnchoredObjList* SwTextFly::InitAnchoredObjList() // --> #108724# Page header/footer content doesn't have to wrap around // floating screen objects const bool bFooterHeader = nullptr != pCurrFrame->FindFooterOrHeader(); - const IDocumentSettingAccess* pIDSA = pCurrFrame->GetTextNode()->getIDocumentSettingAccess(); + const IDocumentSettingAccess* pIDSA = &pCurrFrame->GetDoc().getIDocumentSettingAccess(); // #i40155# - check, if frame is marked not to wrap const bool bWrapAllowed = ( pIDSA->get(DocumentSettingId::USE_FORMER_TEXT_WRAPPING) || ( !pCurrFrame->IsInFootnote() && !bFooterHeader ) ); @@ -886,7 +886,7 @@ SwAnchoredObjList* SwTextFly::InitAnchoredObjList() const long nLeft = aRectFnSet.GetLeft(aRect) + 1; const bool bR2L = pCurrFrame->IsRightToLeft(); - const IDocumentDrawModelAccess& rIDDMA = pCurrFrame->GetTextNode()->getIDocumentDrawModelAccess(); + const IDocumentDrawModelAccess& rIDDMA = pCurrFrame->GetDoc().getIDocumentDrawModelAccess(); for( size_t i = 0; i < nCount; ++i ) { diff --git a/sw/source/core/text/txttab.cxx b/sw/source/core/text/txttab.cxx index 90bbe6d552ce..3c32608813c3 100644 --- a/sw/source/core/text/txttab.cxx +++ b/sw/source/core/text/txttab.cxx @@ -23,6 +23,7 @@ #include <editeng/tstpitem.hxx> #include <rtl/ustrbuf.hxx> #include <IDocumentSettingAccess.hxx> +#include <doc.hxx> #include <frmatr.hxx> #include <SwPortionHandler.hxx> @@ -76,7 +77,7 @@ SwTabPortion *SwTextFormatter::NewTabPortion( SwTextFormatInfo &rInf, bool bAuto // #i91133# const bool bTabsRelativeToIndent = - m_pFrame->GetTextNode()->getIDocumentSettingAccess()->get(DocumentSettingId::TABS_RELATIVE_TO_INDENT); + m_pFrame->GetDoc().getIDocumentSettingAccess().get(DocumentSettingId::TABS_RELATIVE_TO_INDENT); const SwTwips nTabLeft = bRTL ? m_pFrame->getFrameArea().Right() - ( bTabsRelativeToIndent ? GetTabLeft() : 0 ) @@ -168,7 +169,7 @@ SwTabPortion *SwTextFormatter::NewTabPortion( SwTextFormatInfo &rInf, bool bAuto : ( ( nCount + 1 ) * nDefTabDist ); // --> FME 2004-09-21 #117919 Minimum tab stop width is 1 or 51 twips: - const SwTwips nMinimumTabWidth = m_pFrame->GetTextNode()->getIDocumentSettingAccess()->get(DocumentSettingId::TAB_COMPAT) ? 0 : 50; + const SwTwips nMinimumTabWidth = m_pFrame->GetDoc().getIDocumentSettingAccess().get(DocumentSettingId::TAB_COMPAT) ? 0 : 50; if( ( bRTL && nTabLeft - nNextPos >= nCurrentAbsPos - nMinimumTabWidth ) || ( !bRTL && nNextPos + nTabLeft <= nCurrentAbsPos + nMinimumTabWidth ) ) { @@ -229,7 +230,7 @@ SwTabPortion *SwTextFormatter::NewTabPortion( SwTextFormatInfo &rInf, bool bAuto !pTabStop || nNextPos != m_aLineInf.GetListTabStopPosition() ) || // compatibility option TAB_AT_LEFT_INDENT_FOR_PARA_IN_LIST: - m_pFrame->GetTextNode()->getIDocumentSettingAccess()-> + m_pFrame->GetDoc().getIDocumentSettingAccess(). get(DocumentSettingId::TAB_AT_LEFT_INDENT_FOR_PARA_IN_LIST); if ( bTabAtLeftMarginAllowed ) { @@ -322,9 +323,10 @@ bool SwTabPortion::PreFormat( SwTextFormatInfo &rInf ) // Here we settle down ... SetFix( static_cast<sal_uInt16>(rInf.X()) ); - const bool bTabCompat = rInf.GetTextFrame()->GetTextNode()->getIDocumentSettingAccess()->get(DocumentSettingId::TAB_COMPAT); - const bool bTabOverflow = rInf.GetTextFrame()->GetTextNode()->getIDocumentSettingAccess()->get(DocumentSettingId::TAB_OVERFLOW); - const bool bTabOverMargin = rInf.GetTextFrame()->GetTextNode()->getIDocumentSettingAccess()->get(DocumentSettingId::TAB_OVER_MARGIN); + IDocumentSettingAccess const& rIDSA(rInf.GetTextFrame()->GetDoc().getIDocumentSettingAccess()); + const bool bTabCompat = rIDSA.get(DocumentSettingId::TAB_COMPAT); + const bool bTabOverflow = rIDSA.get(DocumentSettingId::TAB_OVERFLOW); + const bool bTabOverMargin = rIDSA.get(DocumentSettingId::TAB_OVER_MARGIN); // The minimal width of a tab is one blank at least. // #i37686# In compatibility mode, the minimum width @@ -437,7 +439,7 @@ bool SwTabPortion::PreFormat( SwTextFormatInfo &rInf ) bool SwTabPortion::PostFormat( SwTextFormatInfo &rInf ) { - const bool bTabOverMargin = rInf.GetTextFrame()->GetTextNode()->getIDocumentSettingAccess()->get(DocumentSettingId::TAB_OVER_MARGIN); + const bool bTabOverMargin = rInf.GetTextFrame()->GetDoc().getIDocumentSettingAccess().get(DocumentSettingId::TAB_OVER_MARGIN); // If the tab position is larger than the right margin, it gets scaled down by default. // However, if compat mode enabled, we allow tabs to go over the margin: the rest of the paragraph is not broken into lines. const sal_uInt16 nRight = bTabOverMargin ? GetTabPos() : std::min(GetTabPos(), rInf.Width()); @@ -451,7 +453,7 @@ bool SwTabPortion::PostFormat( SwTextFormatInfo &rInf ) } const sal_uInt16 nWhich = GetWhichPor(); - const bool bTabCompat = rInf.GetTextFrame()->GetTextNode()->getIDocumentSettingAccess()->get(DocumentSettingId::TAB_COMPAT); + const bool bTabCompat = rInf.GetTextFrame()->GetDoc().getIDocumentSettingAccess().get(DocumentSettingId::TAB_COMPAT); if ( bTabOverMargin && POR_TABLEFT == nWhich ) { commit fcde9e4442c4b7d29270c2749863ff84fc37878a Author: Michael Stahl <[email protected]> Date: Fri May 18 14:28:22 2018 +0200 sw_redlinehide: trivial node conversions in inftxt.cxx Change-Id: Ic823676c3a6a752aa90b9bccc6d425d982a075ce diff --git a/sw/source/core/text/inftxt.cxx b/sw/source/core/text/inftxt.cxx index e850ade21484..4a0aef64c070 100644 --- a/sw/source/core/text/inftxt.cxx +++ b/sw/source/core/text/inftxt.cxx @@ -1291,7 +1291,7 @@ void SwTextPaintInfo::DrawViewOpt( const SwLinePortion &rPor, && !GetOpt().IsReadonly() && SwViewOption::IsFieldShadings() && ( POR_NUMBER != nWhich - || m_pFrame->GetTextNode()->HasMarkedLabel())) // #i27615# + || m_pFrame->GetTextNodeForParaProps()->HasMarkedLabel())) // #i27615# { bDraw = true; } @@ -1362,7 +1362,7 @@ const PropertyValues & SwTextFormatInfo::GetHyphValues() const bool SwTextFormatInfo::InitHyph( const bool bAutoHyphen ) { - const SwAttrSet& rAttrSet = GetTextFrame()->GetTextNode()->GetSwAttrSet(); + const SwAttrSet& rAttrSet = GetTextFrame()->GetTextNodeForParaProps()->GetSwAttrSet(); SetHanging( rAttrSet.GetHangingPunctuation().GetValue() ); SetScriptSpace( rAttrSet.GetScriptSpace().GetValue() ); SetForbiddenChars( rAttrSet.GetForbiddenRule().GetValue() ); @@ -1447,7 +1447,7 @@ bool SwTextFormatInfo::IsHyphenate() const const SwFormatDrop *SwTextFormatInfo::GetDropFormat() const { - const SwFormatDrop *pDrop = &GetTextFrame()->GetTextNode()->GetSwAttrSet().GetDrop(); + const SwFormatDrop *pDrop = &GetTextFrame()->GetTextNodeForParaProps()->GetSwAttrSet().GetDrop(); if( 1 >= pDrop->GetLines() || ( !pDrop->GetChars() && !pDrop->GetWholeWord() ) ) pDrop = nullptr; @@ -1582,7 +1582,7 @@ TextFrameIndex SwTextFormatInfo::ScanPortionEnd(TextFrameIndex const nStart, const sal_Unicode cThousandSep2 = ',' == cTabDec ? '.' : '\''; bool bNumFound = false; - const bool bTabCompat = GetTextFrame()->GetTextNode()->getIDocumentSettingAccess()->get(DocumentSettingId::TAB_COMPAT); + const bool bTabCompat = GetTextFrame()->GetDoc().getIDocumentSettingAccess().get(DocumentSettingId::TAB_COMPAT); for( ; i < nEnd; ++i ) { @@ -1693,7 +1693,7 @@ SwTwips SwTextFormatInfo::GetLineWidth() { SwTwips nLineWidth = Width() - X(); - const bool bTabOverMargin = GetTextFrame()->GetTextNode()->getIDocumentSettingAccess()->get( + const bool bTabOverMargin = GetTextFrame()->GetDoc().getIDocumentSettingAccess().get( DocumentSettingId::TAB_OVER_MARGIN); if (!bTabOverMargin) return nLineWidth; commit 7ccb32c7d7d9c0e1c9104f66257c2ce2ea0604f2 Author: Michael Stahl <[email protected]> Date: Fri May 18 14:21:21 2018 +0200 sw_redlinehide: trivial node conversions in itrcrsr.cxx Change-Id: Id47d46cf376391c7156f3f1eea5d5a48e09367b2 diff --git a/sw/source/core/text/itrcrsr.cxx b/sw/source/core/text/itrcrsr.cxx index 44c9212ff233..fb1e7fba9cb2 100644 --- a/sw/source/core/text/itrcrsr.cxx +++ b/sw/source/core/text/itrcrsr.cxx @@ -19,6 +19,7 @@ #include <hintids.hxx> #include <ndtxt.hxx> +#include <doc.hxx> #include <frmfmt.hxx> #include <paratr.hxx> #include <flyfrm.hxx> @@ -164,13 +165,13 @@ void SwTextMargin::CtorInitTextMargin( SwTextFrame *pNewFrame, SwTextSizeInfo *p m_pInf = pNewInf; GetInfo().SetFont( GetFnt() ); - const SwTextNode *pNode = m_pFrame->GetTextNode(); + const SwTextNode *const pNode = m_pFrame->GetTextNodeForParaProps(); - const SvxLRSpaceItem &rSpace = m_pFrame->GetTextNode()->GetSwAttrSet().GetLRSpace(); + const SvxLRSpaceItem &rSpace = pNode->GetSwAttrSet().GetLRSpace(); // #i95907# // #i111284# const bool bListLevelIndentsApplicableAndLabelAlignmentActive( - AreListLevelIndentsApplicableAndLabelAlignmentActive( *(m_pFrame->GetTextNode()) ) ); + AreListLevelIndentsApplicableAndLabelAlignmentActive( *(m_pFrame->GetTextNodeForParaProps()) ) ); // Carefully adjust the text formatting ranges. @@ -248,7 +249,7 @@ void SwTextMargin::CtorInitTextMargin( SwTextFrame *pNewFrame, SwTextSizeInfo *p rSpace.IsAutoFirst() ) { nFirstLineOfs = GetFnt()->GetSize( GetFnt()->GetActual() ).Height(); - LanguageType aLang = pNode->GetLang( 0, 1, css::i18n::ScriptType::ASIAN); + LanguageType aLang = m_pFrame->GetTextNode()->GetLang( 0, 1, css::i18n::ScriptType::ASIAN); if (aLang != LANGUAGE_KOREAN && aLang != LANGUAGE_JAPANESE) nFirstLineOfs<<=1; @@ -325,7 +326,7 @@ void SwTextMargin::CtorInitTextMargin( SwTextFrame *pNewFrame, SwTextSizeInfo *p if( nFirst >= nRight ) nFirst = nRight - 1; } - const SvxAdjustItem& rAdjust = m_pFrame->GetTextNode()->GetSwAttrSet().GetAdjust(); + const SvxAdjustItem& rAdjust = m_pFrame->GetTextNodeForParaProps()->GetSwAttrSet().GetAdjust(); nAdjust = rAdjust.GetAdjust(); // left is left and right is right @@ -1214,7 +1215,7 @@ bool SwTextCursor::GetCharRect( SwRect* pOrig, TextFrameIndex const nOfst, pCMS->m_p2Lines->aPortion.Pos().AdjustY(aCharPos.Y() ); } - const bool bTabOverMargin = GetTextFrame()->GetTextNode()->getIDocumentSettingAccess()->get(DocumentSettingId::TAB_OVER_MARGIN); + const bool bTabOverMargin = GetTextFrame()->GetDoc().getIDocumentSettingAccess().get(DocumentSettingId::TAB_OVER_MARGIN); // Make sure the cursor respects the right margin, unless in compat mode, where the tab size has priority over the margin size. if( pOrig->Left() > nTmpRight && !bTabOverMargin) pOrig->Pos().setX( nTmpRight ); commit f721de8abdc8f285e5bbc08d6288562f493c3843 Author: Michael Stahl <[email protected]> Date: Fri May 18 14:10:15 2018 +0200 sw_redlinehide: trivial node conversions in itrform2.cxx/itrpaint.cxx Change-Id: I25fcfb14dee92a9072608fe741f0cf335a749688 diff --git a/sw/source/core/text/itrform2.cxx b/sw/source/core/text/itrform2.cxx index 260cf6705154..86e59b0effdf 100755 --- a/sw/source/core/text/itrform2.cxx +++ b/sw/source/core/text/itrform2.cxx @@ -1103,7 +1103,7 @@ SwLinePortion *SwTextFormatter::WhichFirstPortion(SwTextFormatInfo &rInf) "Rotated number portion trouble" ); // If we're in the follow, then of course not - if( GetTextFrame()->GetTextNode()->GetNumRule() ) + if (GetTextFrame()->GetTextNodeForParaProps()->GetNumRule()) pPor = static_cast<SwLinePortion*>(NewNumberPortion( rInf )); rInf.SetNumDone( true ); } @@ -1124,7 +1124,7 @@ SwLinePortion *SwTextFormatter::WhichFirstPortion(SwTextFormatInfo &rInf) // 10. Decimal tab portion at the beginning of each line in table cells if ( !pPor && !m_pCurr->GetPortion() && GetTextFrame()->IsInTab() && - GetTextFrame()->GetTextNode()->getIDocumentSettingAccess()->get(DocumentSettingId::TAB_COMPAT) ) + GetTextFrame()->GetDoc().getIDocumentSettingAccess().get(DocumentSettingId::TAB_COMPAT)) { pPor = NewTabPortion( rInf, true ); } @@ -1255,8 +1255,8 @@ SwLinePortion *SwTextFormatter::NewPortion( SwTextFormatInfo &rInf ) else if ( SwMultiCreatorId::Ruby == pCreate->nId ) { pTmp = new SwRubyPortion( *pCreate, *rInf.GetFont(), - *GetTextFrame()->GetTextNode()->getIDocumentSettingAccess(), - nEnd, TextFrameIndex(0), rInf ); + GetTextFrame()->GetDoc().getIDocumentSettingAccess(), + nEnd, TextFrameIndex(0), rInf ); } else if( SwMultiCreatorId::Rotate == pCreate->nId ) pTmp = new SwRotatedPortion( *pCreate, nEnd, @@ -1334,7 +1334,7 @@ SwLinePortion *SwTextFormatter::NewPortion( SwTextFormatInfo &rInf ) // We have a decimal tab portion in the line and the next character has to be // aligned at the tab stop position. We store the width from the beginning of // the tab stop portion up to the portion containing the decimal separator: - if ( GetTextFrame()->GetTextNode()->getIDocumentSettingAccess()->get(DocumentSettingId::TAB_COMPAT) /*rInf.GetVsh()->IsTabCompat();*/ && + if (GetTextFrame()->GetDoc().getIDocumentSettingAccess().get(DocumentSettingId::TAB_COMPAT) /*rInf.GetVsh()->IsTabCompat();*/ && POR_TABDECIMAL == pLastTabPortion->GetWhichPor() ) { OSL_ENSURE( rInf.X() >= pLastTabPortion->GetFix(), "Decimal tab stop position cannot be calculated" ); @@ -1604,7 +1604,7 @@ TextFrameIndex SwTextFormatter::FormatLine(TextFrameIndex const nStartPos) // In case of compat mode, it's possible that a tab portion is wider after // formatting than before. If this is the case, we also have to make sure // the SwLineLayout is wider as well. - if (GetInfo().GetTextFrame()->GetTextNode()->getIDocumentSettingAccess()->get(DocumentSettingId::TAB_OVER_MARGIN)) + if (GetInfo().GetTextFrame()->GetDoc().getIDocumentSettingAccess().get(DocumentSettingId::TAB_OVER_MARGIN)) { sal_uInt16 nSum = 0; SwLinePortion* pPor = m_pCurr->GetFirstPortion(); @@ -1736,7 +1736,7 @@ void SwTextFormatter::CalcRealHeight( bool bNewLine ) // shrink first line of paragraph too on spacing < 100% if (IsParaLine() && pSpace->GetInterLineSpaceRule() == SvxInterLineSpaceRule::Prop - && GetTextFrame()->GetTextNode()->getIDocumentSettingAccess()->get(DocumentSettingId::PROP_LINE_SPACING_SHRINKS_FIRST_LINE)) + && GetTextFrame()->GetDoc().getIDocumentSettingAccess().get(DocumentSettingId::PROP_LINE_SPACING_SHRINKS_FIRST_LINE)) { long nTmp = pSpace->GetPropLineSpace(); // Word will render < 50% too but it's just not readable @@ -2284,7 +2284,7 @@ void SwTextFormatter::CalcFlyWidth( SwTextFormatInfo &rInf ) // tdf#116486: consider also the upper margin from getFramePrintArea because intersections // with this additional space should lead to repositioning of paragraphs // For compatibility we grab a related compat flag: - if ( GetTextFrame()->GetTextNode()->getIDocumentSettingAccess()->get(DocumentSettingId::ADD_VERTICAL_FLY_OFFSETS) ) + if (GetTextFrame()->GetDoc().getIDocumentSettingAccess().get(DocumentSettingId::ADD_VERTICAL_FLY_OFFSETS)) { const long nUpper = m_pFrame->getFramePrintArea().Top(); // Increase the rectangle diff --git a/sw/source/core/text/itrpaint.cxx b/sw/source/core/text/itrpaint.cxx index 2a73d47cf0af..295765d7f809 100644 --- a/sw/source/core/text/itrpaint.cxx +++ b/sw/source/core/text/itrpaint.cxx @@ -162,7 +162,7 @@ void SwTextPainter::DrawTextLine( const SwRect &rPaint, SwSaveClip &rClip, SwTwips nMaxRight = std::min( rPaint.Right(), Right() ); const SwTwips nTmpLeft = GetInfo().X(); //compatibility setting: allow tabstop text to exceed right margin - if( GetInfo().GetTextFrame()->GetTextNode()->getIDocumentSettingAccess()->get(DocumentSettingId::TAB_OVER_MARGIN) ) + if (GetInfo().GetTextFrame()->GetDoc().getIDocumentSettingAccess().get(DocumentSettingId::TAB_OVER_MARGIN)) { SwLinePortion* pPorIter = pPor; while( pPorIter ) commit ec06b387a873af77b0d5068c8de07e41981e7bb8 Author: Michael Stahl <[email protected]> Date: Fri May 18 13:58:10 2018 +0200 sw_redlinehide: trivial node conversions in frmpaint.cxx Change-Id: I8ef3d0ca495d65d72506763fd10c137d53cfc47a diff --git a/sw/source/core/text/frmpaint.cxx b/sw/source/core/text/frmpaint.cxx index 1ba4b8588d91..9d9107053399 100644 --- a/sw/source/core/text/frmpaint.cxx +++ b/sw/source/core/text/frmpaint.cxx @@ -126,9 +126,9 @@ SwExtraPainter::SwExtraPainter( const SwTextFrame *pFrame, SwViewShell *pVwSh, */ nDivider = !rLineInf.GetDivider().isEmpty() ? rLineInf.GetDividerCountBy() : 0; nX = pFrame->getFrameArea().Left(); - SwCharFormat* pFormat = rLineInf.GetCharFormat( const_cast<IDocumentStylePoolAccess&>(pFrame->GetNode()->getIDocumentStylePoolAccess()) ); + SwCharFormat* pFormat = rLineInf.GetCharFormat( const_cast<IDocumentStylePoolAccess&>(pFrame->GetDoc().getIDocumentStylePoolAccess()) ); OSL_ENSURE( pFormat, "PaintExtraData without CharFormat" ); - pFnt.reset( new SwFont( &pFormat->GetAttrSet(), pFrame->GetTextNode()->getIDocumentSettingAccess() ) ); + pFnt.reset( new SwFont(&pFormat->GetAttrSet(), &pFrame->GetDoc().getIDocumentSettingAccess()) ); pFnt->Invalidate(); pFnt->ChgPhysFnt( pSh, *pSh->GetOut() ); pFnt->SetVertical( 0, pFrame->IsVertical() ); @@ -286,9 +286,9 @@ void SwTextFrame::PaintExtraData( const SwRect &rRect ) const if( getFrameArea().Top() > rRect.Bottom() || getFrameArea().Bottom() < rRect.Top() ) return; - const SwTextNode& rTextNode = *GetTextNode(); - const IDocumentRedlineAccess& rIDRA = rTextNode.getIDocumentRedlineAccess(); - const SwLineNumberInfo &rLineInf = rTextNode.GetDoc()->GetLineNumberInfo(); + SwDoc const& rDoc(GetDoc()); + const IDocumentRedlineAccess& rIDRA = rDoc.getIDocumentRedlineAccess(); + const SwLineNumberInfo &rLineInf = rDoc.GetLineNumberInfo(); const SwFormatLineNumber &rLineNum = GetAttrSet()->GetLineNumber(); bool bLineNum = !IsInTab() && rLineInf.IsPaintLineNumbers() && ( !IsInFly() || rLineInf.IsCountInFlys() ) && rLineNum.IsCount(); @@ -387,8 +387,11 @@ void SwTextFrame::PaintExtraData( const SwRect &rRect ) const } else { - if ( SwRedlineTable::npos == rIDRA.GetRedlinePos(rTextNode, USHRT_MAX) ) + if (!GetMergedPara() && + SwRedlineTable::npos == rIDRA.GetRedlinePos(*GetTextNodeFirst(), USHRT_MAX)) + { bRedLine = false; + } if( bLineNum && rLineInf.IsCountBlankLines() && ( aExtra.HasNumber() || aExtra.HasDivider() ) ) @@ -464,7 +467,7 @@ bool SwTextFrame::PaintEmpty( const SwRect &rRect, bool bCheck ) const else if( pSh->GetWin() ) { SwFont *pFnt; - const SwTextNode& rTextNode = *GetTextNode(); + const SwTextNode& rTextNode = *GetTextNodeForParaProps(); if ( rTextNode.HasSwAttrSet() ) { const SwAttrSet *pAttrSet = &( rTextNode.GetSwAttrSet() ); @@ -509,7 +512,7 @@ bool SwTextFrame::PaintEmpty( const SwRect &rRect, bool bCheck ) const Point aPos = getFrameArea().Pos() + getFramePrintArea().Pos(); const SvxLRSpaceItem &rSpace = - GetTextNode()->GetSwAttrSet().GetLRSpace(); + GetTextNodeForParaProps()->GetSwAttrSet().GetLRSpace(); if ( rSpace.GetTextFirstLineOfst() > 0 ) aPos.AdjustX(rSpace.GetTextFirstLineOfst() ); @@ -525,7 +528,7 @@ bool SwTextFrame::PaintEmpty( const SwRect &rRect, bool bCheck ) const aPos.AdjustY(pFnt->GetAscent( pSh, *pSh->GetOut() ) ); - if ( GetTextNode()->GetSwAttrSet().GetParaGrid().GetValue() && + if (GetTextNodeForParaProps()->GetSwAttrSet().GetParaGrid().GetValue() && IsInDocBody() ) { SwTextGridItem const*const pGrid(GetGridItem(FindPageFrame())); commit 44b1d4f664a2fb4266479abed7e67e685d158de6 Author: Michael Stahl <[email protected]> Date: Fri May 18 13:37:30 2018 +0200 sw_redlinehide: trivial node conversion in itrtxt.cxx Change-Id: I9b23edb5463d9483ba33b4d569414ff5ac723d17 diff --git a/sw/source/core/text/itrtxt.cxx b/sw/source/core/text/itrtxt.cxx index cfd4d092ba6e..53c1c7c91b2b 100644 --- a/sw/source/core/text/itrtxt.cxx +++ b/sw/source/core/text/itrtxt.cxx @@ -35,11 +35,11 @@ void SwTextIter::CtorInitTextIter( SwTextFrame *pNewFrame, SwTextInfo *pNewInf ) { - SwTextNode *pNode = pNewFrame->GetTextNode(); - assert(pNewFrame->GetPara()); - CtorInitAttrIter( *pNode, pNewFrame->GetPara()->GetScriptInfo(), pNewFrame ); + CtorInitAttrIter( *pNewFrame->GetTextNodeFirst(), pNewFrame->GetPara()->GetScriptInfo(), pNewFrame ); + + SwTextNode const*const pNode = pNewFrame->GetTextNodeForParaProps(); m_pFrame = pNewFrame; m_pInf = pNewInf; commit f15df2167477761783d25e97f83f107b70cf8ac4 Author: Michael Stahl <[email protected]> Date: Fri May 18 13:21:15 2018 +0200 sw_redlinehide: dump the MergedPara to layout.xml Change-Id: I211a92823e7b949fe55e50e6b172a0883056a189 diff --git a/sw/source/core/layout/dbg_lay.cxx b/sw/source/core/layout/dbg_lay.cxx index 6db1895b80e8..11d332f5187e 100755 --- a/sw/source/core/layout/dbg_lay.cxx +++ b/sw/source/core/layout/dbg_lay.cxx @@ -775,7 +775,7 @@ void SwImplProtocol::Record_( const SwFrame* pFrame, PROT nFunction, DbgAction n { aOut.append(" "); while (aOut.getLength() < 140) aOut.append(" "); - const OUString& text = static_cast<const SwTextFrame*>(pFrame)->GetTextNode()->GetText(); + const OUString& text = static_cast<const SwTextFrame*>(pFrame)->GetText(); OString o = OUStringToOString(text, RTL_TEXTENCODING_ASCII_US); aOut.append(o); } diff --git a/sw/source/core/text/xmldump.cxx b/sw/source/core/text/xmldump.cxx index 0f951cd6f033..d29d7abdbd7a 100644 --- a/sw/source/core/text/xmldump.cxx +++ b/sw/source/core/text/xmldump.cxx @@ -328,6 +328,26 @@ void SwFrame::dumpAsXml( xmlTextWriterPtr writer ) const xmlTextWriterEndElement(writer); } + if (IsTextFrame()) + { + const SwTextFrame *pTextFrame = static_cast<const SwTextFrame *>(this); + sw::MergedPara const*const pMerged(pTextFrame->GetMergedPara()); + if (pMerged) + { + xmlTextWriterStartElement( writer, BAD_CAST( "merged" ) ); + xmlTextWriterWriteFormatAttribute( writer, BAD_CAST( "paraPropsNodeIndex" ), "%" SAL_PRIuUINTPTR, pMerged->pParaPropsNode->GetIndex() ); + for (auto const& e : pMerged->extents) + { + xmlTextWriterStartElement( writer, BAD_CAST( "extent" ) ); + xmlTextWriterWriteFormatAttribute( writer, BAD_CAST( "txtNodeIndex" ), "%" SAL_PRIuUINTPTR, e.pNode->GetIndex() ); + xmlTextWriterWriteFormatAttribute( writer, BAD_CAST( "start" ), "%" SAL_PRIdINT32, e.nStart ); + xmlTextWriterWriteFormatAttribute( writer, BAD_CAST( "end" ), "%" SAL_PRIdINT32, e.nEnd ); + xmlTextWriterEndElement( writer ); + } + xmlTextWriterEndElement( writer ); + } + } + xmlTextWriterStartElement( writer, BAD_CAST( "infos" ) ); dumpInfosAsXml( writer ); xmlTextWriterEndElement( writer ); @@ -426,7 +446,7 @@ void SwFrame::dumpAsXmlAttributes( xmlTextWriterPtr writer ) const if ( IsTextFrame( ) ) { const SwTextFrame *pTextFrame = static_cast<const SwTextFrame *>(this); - const SwTextNode *pTextNode = pTextFrame->GetTextNode(); + const SwTextNode *pTextNode = pTextFrame->GetTextNodeFirst(); xmlTextWriterWriteFormatAttribute( writer, BAD_CAST( "txtNodeIndex" ), TMP_FORMAT, pTextNode->GetIndex() ); } if (IsHeaderFrame() || IsFooterFrame()) commit d6196611d067bd747e74e8a6442349de8d15e912 Author: Michael Stahl <[email protected]> Date: Fri May 18 12:56:31 2018 +0200 sw_redlinehide: convert checkApplyParagraphMarkFormatToNumbering() Put in an early exit too; for whatever reason this is only interested in empty hints at the end of the text... Change-Id: Ief9112ab9f610a8507707b3dcc11de4c26f75ec9 diff --git a/sw/source/core/text/txtfld.cxx b/sw/source/core/text/txtfld.cxx index a5011dee2212..9ba37a923740 100644 --- a/sw/source/core/text/txtfld.cxx +++ b/sw/source/core/text/txtfld.cxx @@ -418,47 +418,52 @@ SwLinePortion *SwTextFormatter::NewExtraPortion( SwTextFormatInfo &rInf ) */ static void checkApplyParagraphMarkFormatToNumbering( SwFont* pNumFnt, SwTextFormatInfo& rInf, const IDocumentSettingAccess* pIDSA ) { - SwTextNode* node = rInf.GetTextFrame()->GetTextNode(); if( !pIDSA->get(DocumentSettingId::APPLY_PARAGRAPH_MARK_FORMAT_TO_NUMBERING )) return; - if( SwpHints* hints = node->GetpSwpHints()) + TextFrameIndex const nTextLen(rInf.GetTextFrame()->GetText().getLength()); + SwTextNode const* pNode(nullptr); + sw::MergedAttrIterReverse iter(*rInf.GetTextFrame()); + for (SwTextAttr const* pHint = iter.PrevAttr(&pNode); pHint; + pHint = iter.PrevAttr(&pNode)) { - for( size_t i = 0; i < hints->Count(); ++i ) + TextFrameIndex const nHintStart( + rInf.GetTextFrame()->MapModelToView(pNode, pHint->GetStart())); + if (nHintStart < nTextLen) + { + break; // only those at para end are interesting + } + // Formatting for the paragraph mark is set to apply only to the + // (non-existent) extra character at end of the text node. + if (pHint->Which() == RES_TXTATR_AUTOFMT + && pHint->GetStart() == *pHint->End()) { - SwTextAttr* hint = hints->Get( i ); - // Formatting for the paragraph mark is set to apply only to the (non-existent) extra character - // the at end of the txt node. - if( hint->Which() == RES_TXTATR_AUTOFMT && hint->GetEnd() != nullptr - && hint->GetStart() == *hint->GetEnd() && hint->GetStart() == node->Len()) + std::shared_ptr<SfxItemSet> pSet(pHint->GetAutoFormat().GetStyleHandle()); + + // Check each item and in case it should be ignored, then clear it. + std::unique_ptr<SfxItemSet> pCleanedSet; + if (pSet.get()) { - std::shared_ptr<SfxItemSet> pSet(hint->GetAutoFormat().GetStyleHandle()); + pCleanedSet = pSet->Clone(); - // Check each item and in case it should be ignored, then clear it. - std::unique_ptr<SfxItemSet> pCleanedSet; - if (pSet.get()) + SfxItemIter aIter(*pSet); + const SfxPoolItem* pItem = aIter.GetCurItem(); + while (true) { - pCleanedSet = pSet->Clone(); + if (SwTextNode::IsIgnoredCharFormatForNumbering(pItem->Which())) + pCleanedSet->ClearItem(pItem->Which()); - SfxItemIter aIter(*pSet); - const SfxPoolItem* pItem = aIter.GetCurItem(); - while (true) - { - if (SwTextNode::IsIgnoredCharFormatForNumbering(pItem->Which())) - pCleanedSet->ClearItem(pItem->Which()); + if (aIter.IsAtEnd()) + break; - if (aIter.IsAtEnd()) - break; - - pItem = aIter.NextItem(); - } + pItem = aIter.NextItem(); } + } - // Highlightcolor also needed to be untouched, but we can't have that just by clearing the item - Color nSaveHighlight = pNumFnt->GetHighlightColor(); + // Highlightcolor also needed to be untouched, but we can't have that just by clearing the item + Color nSaveHighlight = pNumFnt->GetHighlightColor(); - pNumFnt->SetDiffFnt(pCleanedSet.get(), pIDSA); - pNumFnt->SetHighlightColor(nSaveHighlight); - } + pNumFnt->SetDiffFnt(pCleanedSet.get(), pIDSA); + pNumFnt->SetHighlightColor(nSaveHighlight); } } } commit 300f40c39deec917e90eb560ce51d7c1b35f77aa Author: Michael Stahl <[email protected]> Date: Fri May 18 12:54:24 2018 +0200 sw_redlinehide: trivial conversions in txtfld.cxx Change-Id: I1b8d05a6d274f3826d99dd3f064f90232c54b384 diff --git a/sw/source/core/text/txtfld.cxx b/sw/source/core/text/txtfld.cxx index f1d5ef9f0dca..a5011dee2212 100644 --- a/sw/source/core/text/txtfld.cxx +++ b/sw/source/core/text/txtfld.cxx @@ -279,7 +279,7 @@ SwExpandPortion *SwTextFormatter::NewFieldPortion( SwTextFormatInfo &rInf, if( !bName ) { pTmpFnt = new SwFont( *m_pFont ); - pTmpFnt->SetDiffFnt( &pChFormat->GetAttrSet(), m_pFrame->GetTextNode()->getIDocumentSettingAccess() ); + pTmpFnt->SetDiffFnt(&pChFormat->GetAttrSet(), &m_pFrame->GetDoc().getIDocumentSettingAccess()); } { OUString const aStr( bName @@ -471,7 +471,7 @@ SwNumberPortion *SwTextFormatter::NewNumberPortion( SwTextFormatInfo &rInf ) con return nullptr; SwNumberPortion *pRet = nullptr; - const SwTextNode* pTextNd = GetTextFrame()->GetTextNode(); + const SwTextNode *const pTextNd = GetTextFrame()->GetTextNodeForParaProps(); const SwNumRule* pNumRule = pTextNd->GetNumRule(); // Has a "valid" number? _______________________________________________ Libreoffice-commits mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
