diff options
Diffstat (limited to 'sw/source/core/txtnode/modeltoviewhelper.cxx')
-rw-r--r-- | sw/source/core/txtnode/modeltoviewhelper.cxx | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/sw/source/core/txtnode/modeltoviewhelper.cxx b/sw/source/core/txtnode/modeltoviewhelper.cxx index 846e4d1a51b1..8f0d5ccd7676 100644 --- a/sw/source/core/txtnode/modeltoviewhelper.cxx +++ b/sw/source/core/txtnode/modeltoviewhelper.cxx @@ -140,8 +140,16 @@ ModelToViewHelper::ModelToViewHelper(const SwTextNode &rNode, // skip it, must be handled in loop below if (pFieldMark->GetMarkStart().nNode < rNode) { - SwPosition const sepPos(::sw::mark::FindFieldSep(*pFieldMark)); - startedFields.emplace_front(pFieldMark, sepPos.nNode < rNode); + // this can be a nested field's end - skip over those! + if (pFieldMark->GetMarkEnd().nNode < rNode) + { + assert(cursor.GetPoint()->nNode.GetNode().GetTextNode()->GetText()[cursor.GetPoint()->nContent.GetIndex()] == CH_TXT_ATR_FIELDEND); + } + else + { + SwPosition const sepPos(::sw::mark::FindFieldSep(*pFieldMark)); + startedFields.emplace_front(pFieldMark, sepPos.nNode < rNode); + } *cursor.GetPoint() = pFieldMark->GetMarkStart(); } if (!cursor.Move(fnMoveBackward, GoInContent)) @@ -286,7 +294,7 @@ ModelToViewHelper::ModelToViewHelper(const SwTextNode &rNode, for (sw::mark::IFieldmark *const pMark : aNoTextFieldmarks) { - const sal_Int32 nDummyCharPos = pMark->GetMarkPos().nContent.GetIndex()-1; + const sal_Int32 nDummyCharPos = pMark->GetMarkStart().nContent.GetIndex(); if (aHiddenMulti.IsSelected(nDummyCharPos)) continue; std::vector<block>::iterator aFind = std::find_if(aBlocks.begin(), aBlocks.end(), |