summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNoel Grandin <noel.grandin@collabora.co.uk>2020-07-30 10:36:18 +0200
committerNoel Grandin <noel.grandin@collabora.co.uk>2020-07-31 13:12:45 +0200
commit443d24a27842f39b5bc833dbc03082fa52749a2d (patch)
treea2eb09d8b8e0938c0b504b4a8623b3a4e90250d4
parent639206f38ef5be7687fe8172298e1374df5576eb (diff)
loplugin:flatten in sw/core/txtnode
Change-Id: I0003a190cbc42845274d71f8f157977e598a3fd4 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/99859 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
-rw-r--r--sw/source/core/txtnode/SwGrammarContact.cxx24
-rw-r--r--sw/source/core/txtnode/atrfld.cxx144
-rw-r--r--sw/source/core/txtnode/atrftn.cxx62
-rw-r--r--sw/source/core/txtnode/fmtatr2.cxx34
-rw-r--r--sw/source/core/txtnode/fntcap.cxx102
-rw-r--r--sw/source/core/txtnode/ndtxt.cxx322
-rw-r--r--sw/source/core/txtnode/thints.cxx274
-rw-r--r--sw/source/core/txtnode/txatritr.cxx54
-rw-r--r--sw/source/core/txtnode/txtedt.cxx456
9 files changed, 736 insertions, 736 deletions
diff --git a/sw/source/core/txtnode/SwGrammarContact.cxx b/sw/source/core/txtnode/SwGrammarContact.cxx
index d957bfbcc273..fc6883ca92ab 100644
--- a/sw/source/core/txtnode/SwGrammarContact.cxx
+++ b/sw/source/core/txtnode/SwGrammarContact.cxx
@@ -85,21 +85,21 @@ IMPL_LINK( SwGrammarContact, TimerRepaint, Timer *, pTimer, void )
void SwGrammarContact::updateCursorPosition( const SwPosition& rNewPos )
{
SwTextNode* pTextNode = rNewPos.nNode.GetNode().GetTextNode();
- if( pTextNode != GetRegisteredIn() ) // paragraph has been changed
+ if( pTextNode == GetRegisteredIn() ) // paragraph has been changed
+ return;
+
+ aTimer.Stop();
+ if( GetRegisteredIn() ) // My last paragraph has been left
{
- aTimer.Stop();
- if( GetRegisteredIn() ) // My last paragraph has been left
- {
- if( mpProxyList )
- { // replace old list by the proxy list and repaint
- getMyTextNode()->SetGrammarCheck( mpProxyList.release() );
- SwTextFrame::repaintTextFrames( *getMyTextNode() );
- }
- EndListeningAll();
+ if( mpProxyList )
+ { // replace old list by the proxy list and repaint
+ getMyTextNode()->SetGrammarCheck( mpProxyList.release() );
+ SwTextFrame::repaintTextFrames( *getMyTextNode() );
}
- if( pTextNode )
- pTextNode->Add( this ); // welcome new paragraph
+ EndListeningAll();
}
+ if( pTextNode )
+ pTextNode->Add( this ); // welcome new paragraph
}
/* deliver a grammar check list for the given text node */
diff --git a/sw/source/core/txtnode/atrfld.cxx b/sw/source/core/txtnode/atrfld.cxx
index f8e055cf67e0..e13ea716932f 100644
--- a/sw/source/core/txtnode/atrfld.cxx
+++ b/sw/source/core/txtnode/atrfld.cxx
@@ -95,36 +95,36 @@ SwFormatField::SwFormatField( const SwFormatField& rAttr )
, SfxBroadcaster()
, mpTextField( nullptr )
{
- if ( rAttr.mpField )
+ if ( !rAttr.mpField )
+ return;
+
+ rAttr.mpField->GetTyp()->Add(this);
+ mpField = rAttr.mpField->CopyField();
+ if ( mpField->GetTyp()->Which() == SwFieldIds::Input )
{
- rAttr.mpField->GetTyp()->Add(this);
- mpField = rAttr.mpField->CopyField();
- if ( mpField->GetTyp()->Which() == SwFieldIds::Input )
+ // input field in-place editing
+ SetWhich( RES_TXTATR_INPUTFIELD );
+ SwInputField *pField = dynamic_cast<SwInputField*>(mpField.get());
+ assert(pField);
+ if (pField)
+ pField->SetFormatField( *this );
+ }
+ else if (mpField->GetTyp()->Which() == SwFieldIds::SetExp)
+ {
+ SwSetExpField *const pSetField(static_cast<SwSetExpField *>(mpField.get()));
+ if (pSetField->GetInputFlag()
+ && (static_cast<SwSetExpFieldType*>(pSetField->GetTyp())->GetType()
+ & nsSwGetSetExpType::GSE_STRING))
{
- // input field in-place editing
SetWhich( RES_TXTATR_INPUTFIELD );
- SwInputField *pField = dynamic_cast<SwInputField*>(mpField.get());
- assert(pField);
- if (pField)
- pField->SetFormatField( *this );
- }
- else if (mpField->GetTyp()->Which() == SwFieldIds::SetExp)
- {
- SwSetExpField *const pSetField(static_cast<SwSetExpField *>(mpField.get()));
- if (pSetField->GetInputFlag()
- && (static_cast<SwSetExpFieldType*>(pSetField->GetTyp())->GetType()
- & nsSwGetSetExpType::GSE_STRING))
- {
- SetWhich( RES_TXTATR_INPUTFIELD );
- }
- // see SwWrtShell::StartInputFieldDlg
- pSetField->SetFormatField(*this);
- }
- else if ( mpField->GetTyp()->Which() == SwFieldIds::Postit )
- {
- // text annotation field
- SetWhich( RES_TXTATR_ANNOTATION );
}
+ // see SwWrtShell::StartInputFieldDlg
+ pSetField->SetFormatField(*this);
+ }
+ else if ( mpField->GetTyp()->Which() == SwFieldIds::Postit )
+ {
+ // text annotation field
+ SetWhich( RES_TXTATR_ANNOTATION );
}
}
@@ -139,31 +139,31 @@ SwFormatField::~SwFormatField()
mpField.reset();
// some fields need to delete their field type
- if( pType && pType->HasOnlyOneListener() )
- {
- bool bDel = false;
- switch( pType->Which() )
- {
- case SwFieldIds::User:
- bDel = static_cast<SwUserFieldType*>(pType)->IsDeleted();
- break;
-
- case SwFieldIds::SetExp:
- bDel = static_cast<SwSetExpFieldType*>(pType)->IsDeleted();
- break;
+ if( !(pType && pType->HasOnlyOneListener()) )
+ return;
- case SwFieldIds::Dde:
- bDel = static_cast<SwDDEFieldType*>(pType)->IsDeleted();
- break;
- default: break;
- }
+ bool bDel = false;
+ switch( pType->Which() )
+ {
+ case SwFieldIds::User:
+ bDel = static_cast<SwUserFieldType*>(pType)->IsDeleted();
+ break;
+
+ case SwFieldIds::SetExp:
+ bDel = static_cast<SwSetExpFieldType*>(pType)->IsDeleted();
+ break;
+
+ case SwFieldIds::Dde:
+ bDel = static_cast<SwDDEFieldType*>(pType)->IsDeleted();
+ break;
+ default: break;
+ }
- if( bDel )
- {
- // unregister before deleting
- pType->Remove( this );
- delete pType;
- }
+ if( bDel )
+ {
+ // unregister before deleting
+ pType->Remove( this );
+ delete pType;
}
}
@@ -655,33 +655,33 @@ OUString SwTextInputField::GetFieldContent() const
void SwTextInputField::UpdateFieldContent()
{
- if ( IsFieldInDoc()
- && GetStart() != (*End()) )
- {
- assert( (*End()) - GetStart() >= 2 &&
- "<SwTextInputField::UpdateFieldContent()> - Are CH_TXT_ATR_INPUTFIELDSTART and/or CH_TXT_ATR_INPUTFIELDEND missing?" );
- // skip CH_TXT_ATR_INPUTFIELDSTART character
- const sal_Int32 nIdx = GetStart() + 1;
- // skip CH_TXT_ATR_INPUTFIELDEND character
- const sal_Int32 nLen = static_cast<sal_Int32>(std::max<sal_Int32>( 0, ( (*End()) - 1 - nIdx ) ));
- const OUString aNewFieldContent = GetTextNode().GetExpandText(nullptr, nIdx, nLen);
+ if ( !(IsFieldInDoc()
+ && GetStart() != (*End())) )
+ return;
- const SwField* pField = GetFormatField().GetField();
- const SwInputField* pInputField = dynamic_cast<const SwInputField*>(pField);
- if (pInputField)
- const_cast<SwInputField*>(pInputField)->applyFieldContent( aNewFieldContent );
+ assert( (*End()) - GetStart() >= 2 &&
+ "<SwTextInputField::UpdateFieldContent()> - Are CH_TXT_ATR_INPUTFIELDSTART and/or CH_TXT_ATR_INPUTFIELDEND missing?" );
+ // skip CH_TXT_ATR_INPUTFIELDSTART character
+ const sal_Int32 nIdx = GetStart() + 1;
+ // skip CH_TXT_ATR_INPUTFIELDEND character
+ const sal_Int32 nLen = static_cast<sal_Int32>(std::max<sal_Int32>( 0, ( (*End()) - 1 - nIdx ) ));
+ const OUString aNewFieldContent = GetTextNode().GetExpandText(nullptr, nIdx, nLen);
- const SwSetExpField* pExpField = dynamic_cast<const SwSetExpField*>(pField);
- if (pExpField)
- {
- assert(pExpField->GetInputFlag());
- const_cast<SwSetExpField*>(pExpField)->SetPar2(aNewFieldContent);
- }
- assert(pInputField || pExpField);
+ const SwField* pField = GetFormatField().GetField();
+ const SwInputField* pInputField = dynamic_cast<const SwInputField*>(pField);
+ if (pInputField)
+ const_cast<SwInputField*>(pInputField)->applyFieldContent( aNewFieldContent );
- // trigger update of fields for scenarios in which the Input Field's content is part of e.g. a table formula
- GetTextNode().GetDoc()->getIDocumentFieldsAccess().GetUpdateFields().SetFieldsDirty(true);
+ const SwSetExpField* pExpField = dynamic_cast<const SwSetExpField*>(pField);
+ if (pExpField)
+ {
+ assert(pExpField->GetInputFlag());
+ const_cast<SwSetExpField*>(pExpField)->SetPar2(aNewFieldContent);
}
+ assert(pInputField || pExpField);
+
+ // trigger update of fields for scenarios in which the Input Field's content is part of e.g. a table formula
+ GetTextNode().GetDoc()->getIDocumentFieldsAccess().GetUpdateFields().SetFieldsDirty(true);
}
void SwTextInputField::UpdateTextNodeContent( const OUString& rNewContent )
diff --git a/sw/source/core/txtnode/atrftn.cxx b/sw/source/core/txtnode/atrftn.cxx
index 4f76f4c0704c..913167342939 100644
--- a/sw/source/core/txtnode/atrftn.cxx
+++ b/sw/source/core/txtnode/atrftn.cxx
@@ -490,42 +490,42 @@ void SwTextFootnote::DelFrames(SwRootFrame const*const pRoot)
}
//JP 13.05.97: if the layout is deleted before the footnotes are deleted,
// try to delete the footnote's frames by another way
- if ( !bFrameFnd && m_pStartNode )
- {
- SwNodeIndex aIdx( *m_pStartNode );
- SwContentNode* pCNd = m_pTextNode->GetNodes().GoNext( &aIdx );
- if( pCNd )
- {
- SwIterator<SwContentFrame, SwContentNode, sw::IteratorMode::UnwrapMulti> aIter(*pCNd);
- for( SwContentFrame* pFnd = aIter.First(); pFnd; pFnd = aIter.Next() )
- {
- if( pRoot != pFnd->getRootFrame() && pRoot )
- continue;
- SwPageFrame* pPage = pFnd->FindPageFrame();
+ if ( !(!bFrameFnd && m_pStartNode) )
+ return;
+
+ SwNodeIndex aIdx( *m_pStartNode );
+ SwContentNode* pCNd = m_pTextNode->GetNodes().GoNext( &aIdx );
+ if( !pCNd )
+ return;
- SwFrame *pFrame = pFnd->GetUpper();
- while ( pFrame && !pFrame->IsFootnoteFrame() )
- pFrame = pFrame->GetUpper();
+ SwIterator<SwContentFrame, SwContentNode, sw::IteratorMode::UnwrapMulti> aIter(*pCNd);
+ for( SwContentFrame* pFnd = aIter.First(); pFnd; pFnd = aIter.Next() )
+ {
+ if( pRoot != pFnd->getRootFrame() && pRoot )
+ continue;
+ SwPageFrame* pPage = pFnd->FindPageFrame();
- SwFootnoteFrame *pFootnote = static_cast<SwFootnoteFrame*>(pFrame);
- while ( pFootnote && pFootnote->GetMaster() )
- pFootnote = pFootnote->GetMaster();
- OSL_ENSURE( pFootnote->GetAttr() == this, "Footnote mismatch error." );
+ SwFrame *pFrame = pFnd->GetUpper();
+ while ( pFrame && !pFrame->IsFootnoteFrame() )
+ pFrame = pFrame->GetUpper();
- while ( pFootnote )
- {
- SwFootnoteFrame *pFoll = pFootnote->GetFollow();
- pFootnote->Cut();
- SwFrame::DestroyFrame(pFootnote);
- pFootnote = pFoll;
- }
+ SwFootnoteFrame *pFootnote = static_cast<SwFootnoteFrame*>(pFrame);
+ while ( pFootnote && pFootnote->GetMaster() )
+ pFootnote = pFootnote->GetMaster();
+ OSL_ENSURE( pFootnote->GetAttr() == this, "Footnote mismatch error." );
- // #i20556# During hiding of a section, the connection
- // to the layout is already lost. pPage may be 0:
- if ( pPage )
- pPage->UpdateFootnoteNum();
- }
+ while ( pFootnote )
+ {
+ SwFootnoteFrame *pFoll = pFootnote->GetFollow();
+ pFootnote->Cut();
+ SwFrame::DestroyFrame(pFootnote);
+ pFootnote = pFoll;
}
+
+ // #i20556# During hiding of a section, the connection
+ // to the layout is already lost. pPage may be 0:
+ if ( pPage )
+ pPage->UpdateFootnoteNum();
}
}
diff --git a/sw/source/core/txtnode/fmtatr2.cxx b/sw/source/core/txtnode/fmtatr2.cxx
index e825a99a856c..5911474b5d3d 100644
--- a/sw/source/core/txtnode/fmtatr2.cxx
+++ b/sw/source/core/txtnode/fmtatr2.cxx
@@ -608,25 +608,25 @@ void SwFormatMeta::DoCopy(::sw::MetaFieldManager & i_rTargetDocManager,
SwTextNode & i_rTargetTextNode)
{
OSL_ENSURE(m_pMeta, "DoCopy called for SwFormatMeta with no sw::Meta?");
- if (m_pMeta)
+ if (!m_pMeta)
+ return;
+
+ const std::shared_ptr< ::sw::Meta> pOriginal( m_pMeta );
+ if (RES_TXTATR_META == Which())
{
- const std::shared_ptr< ::sw::Meta> pOriginal( m_pMeta );
- if (RES_TXTATR_META == Which())
- {
- m_pMeta = std::make_shared<::sw::Meta>(this);
- }
- else
- {
- ::sw::MetaField *const pMetaField(
- static_cast< ::sw::MetaField* >(pOriginal.get()));
- m_pMeta = i_rTargetDocManager.makeMetaField( this,
- pMetaField->m_nNumberFormat, pMetaField->IsFixedLanguage() );
- }
- // Meta must have a text node before calling RegisterAsCopyOf
- m_pMeta->NotifyChangeTextNode(& i_rTargetTextNode);
- // this cannot be done in Clone: a Clone is not necessarily a copy!
- m_pMeta->RegisterAsCopyOf(*pOriginal);
+ m_pMeta = std::make_shared<::sw::Meta>(this);
+ }
+ else
+ {
+ ::sw::MetaField *const pMetaField(
+ static_cast< ::sw::MetaField* >(pOriginal.get()));
+ m_pMeta = i_rTargetDocManager.makeMetaField( this,
+ pMetaField->m_nNumberFormat, pMetaField->IsFixedLanguage() );
}
+ // Meta must have a text node before calling RegisterAsCopyOf
+ m_pMeta->NotifyChangeTextNode(& i_rTargetTextNode);
+ // this cannot be done in Clone: a Clone is not necessarily a copy!
+ m_pMeta->RegisterAsCopyOf(*pOriginal);
}
namespace sw {
diff --git a/sw/source/core/txtnode/fntcap.cxx b/sw/source/core/txtnode/fntcap.cxx
index 8ab9cf830b98..3a64db9c82e6 100644
--- a/sw/source/core/txtnode/fntcap.cxx
+++ b/sw/source/core/txtnode/fntcap.cxx
@@ -185,35 +185,35 @@ void SwDoGetCapitalBreak::Init( SwFntObj *, SwFntObj * )
void SwDoGetCapitalBreak::Do()
{
- if ( nTextWidth )
- {
- if ( rInf.GetSize().Width() < nTextWidth )
- nTextWidth -= rInf.GetSize().Width();
- else
- {
- TextFrameIndex nEnd = rInf.GetEnd();
- m_nBreak = TextFrameIndex(GetOut().GetTextBreak(
- rInf.GetText(), nTextWidth, sal_Int32(rInf.GetIdx()),
- sal_Int32(rInf.GetLen()), rInf.GetKern()));
+ if ( !nTextWidth )
+ return;
- if (m_nBreak > nEnd || m_nBreak < TextFrameIndex(0))
- m_nBreak = nEnd;
+ if ( rInf.GetSize().Width() < nTextWidth )
+ nTextWidth -= rInf.GetSize().Width();
+ else
+ {
+ TextFrameIndex nEnd = rInf.GetEnd();
+ m_nBreak = TextFrameIndex(GetOut().GetTextBreak(
+ rInf.GetText(), nTextWidth, sal_Int32(rInf.GetIdx()),
+ sal_Int32(rInf.GetLen()), rInf.GetKern()));
- // m_nBreak may be relative to the display string. It has to be
- // calculated relative to the original string:
- if ( GetCapInf() )
- {
- if ( GetCapInf()->nLen != rInf.GetLen() )
- m_nBreak = sw_CalcCaseMap( *rInf.GetFont(),
- GetCapInf()->rString,
- GetCapInf()->nIdx,
- GetCapInf()->nLen, m_nBreak );
- else
- m_nBreak = m_nBreak + GetCapInf()->nIdx;
- }
+ if (m_nBreak > nEnd || m_nBreak < TextFrameIndex(0))
+ m_nBreak = nEnd;
- nTextWidth = 0;
+ // m_nBreak may be relative to the display string. It has to be
+ // calculated relative to the original string:
+ if ( GetCapInf() )
+ {
+ if ( GetCapInf()->nLen != rInf.GetLen() )
+ m_nBreak = sw_CalcCaseMap( *rInf.GetFont(),
+ GetCapInf()->rString,
+ GetCapInf()->nIdx,
+ GetCapInf()->nLen, m_nBreak );
+ else
+ m_nBreak = m_nBreak + GetCapInf()->nIdx;
}
+
+ nTextWidth = 0;
}
}
@@ -356,38 +356,38 @@ void SwDoCapitalCursorOfst::Init( SwFntObj *pUpperFont, SwFntObj *pLowerFont )
void SwDoCapitalCursorOfst::Do()
{
- if ( nOfst )
+ if ( !nOfst )
+ return;
+
+ if ( static_cast<long>(nOfst) > rInf.GetSize().Width() )
+ {
+ nOfst -= rInf.GetSize().Width();
+ nCursor = nCursor + rInf.GetLen();
+ }
+ else
{
- if ( static_cast<long>(nOfst) > rInf.GetSize().Width() )
+ SwDrawTextInfo aDrawInf( rInf.GetShell(), *rInf.GetpOut(),
+ rInf.GetScriptInfo(),
+ rInf.GetText(),
+ rInf.GetIdx(),
+ rInf.GetLen(), 0, false );
+ aDrawInf.SetOffset( nOfst );
+ aDrawInf.SetKern( rInf.GetKern() );
+ aDrawInf.SetKanaComp( rInf.GetKanaComp() );
+ aDrawInf.SetFrame( rInf.GetFrame() );
+ aDrawInf.SetFont( rInf.GetFont() );
+
+ if ( rInf.GetUpper() )
{
- nOfst -= rInf.GetSize().Width();
- nCursor = nCursor + rInf.GetLen();
+ aDrawInf.SetSpace( 0 );
+ nCursor = nCursor + pUpperFnt->GetModelPositionForViewPoint( aDrawInf );
}
else
{
- SwDrawTextInfo aDrawInf( rInf.GetShell(), *rInf.GetpOut(),
- rInf.GetScriptInfo(),
- rInf.GetText(),
- rInf.GetIdx(),
- rInf.GetLen(), 0, false );
- aDrawInf.SetOffset( nOfst );
- aDrawInf.SetKern( rInf.GetKern() );
- aDrawInf.SetKanaComp( rInf.GetKanaComp() );
- aDrawInf.SetFrame( rInf.GetFrame() );
- aDrawInf.SetFont( rInf.GetFont() );
-
- if ( rInf.GetUpper() )
- {
- aDrawInf.SetSpace( 0 );
- nCursor = nCursor + pUpperFnt->GetModelPositionForViewPoint( aDrawInf );
- }
- else
- {
- aDrawInf.SetSpace( rInf.GetSpace() );
- nCursor = nCursor + pLowerFnt->GetModelPositionForViewPoint( aDrawInf );
- }
- nOfst = 0;
+ aDrawInf.SetSpace( rInf.GetSpace() );
+ nCursor = nCursor + pLowerFnt->GetModelPositionForViewPoint( aDrawInf );
}
+ nOfst = 0;
}
}
diff --git a/sw/source/core/txtnode/ndtxt.cxx b/sw/source/core/txtnode/ndtxt.cxx
index 56fa589eaef5..df046a6f8e6a 100644
--- a/sw/source/core/txtnode/ndtxt.cxx
+++ b/sw/source/core/txtnode/ndtxt.cxx
@@ -281,73 +281,73 @@ sal_Int32 SwTextNode::Len() const
static void lcl_ChangeFootnoteRef( SwTextNode &rNode )
{
SwpHints *pSwpHints = rNode.GetpSwpHints();
- if( pSwpHints && rNode.GetDoc()->getIDocumentLayoutAccess().GetCurrentViewShell() )
- {
- SwContentFrame* pFrame = nullptr;
- // OD 07.11.2002 #104840# - local variable to remember first footnote
- // of node <rNode> in order to invalidate position of its first content.
- // Thus, in its <MakeAll()> it will checked its position relative to its reference.
- SwFootnoteFrame* pFirstFootnoteOfNode = nullptr;
- for( size_t j = pSwpHints->Count(); j; )
- {
- SwTextAttr* pHt = pSwpHints->Get(--j);
- if (RES_TXTATR_FTN == pHt->Which())
- {
- if( !pFrame )
- {
- pFrame = SwIterator<SwContentFrame, SwTextNode, sw::IteratorMode::UnwrapMulti>(rNode).First();
- if (!pFrame)
- return;
- }
- SwTextFootnote *pAttr = static_cast<SwTextFootnote*>(pHt);
- OSL_ENSURE( pAttr->GetStartNode(), "FootnoteAtr without StartNode." );
- SwNodeIndex aIdx( *pAttr->GetStartNode(), 1 );
- SwContentNode *pNd = aIdx.GetNode().GetContentNode();
- if ( !pNd )
- pNd = pFrame->GetAttrSet()->GetDoc()->
- GetNodes().GoNextSection( &aIdx, true, false );
- if ( !pNd )
- continue;
+ if( !(pSwpHints && rNode.GetDoc()->getIDocumentLayoutAccess().GetCurrentViewShell()) )
+ return;
+
+ SwContentFrame* pFrame = nullptr;
+ // OD 07.11.2002 #104840# - local variable to remember first footnote
+ // of node <rNode> in order to invalidate position of its first content.
+ // Thus, in its <MakeAll()> it will checked its position relative to its reference.
+ SwFootnoteFrame* pFirstFootnoteOfNode = nullptr;
+ for( size_t j = pSwpHints->Count(); j; )
+ {
+ SwTextAttr* pHt = pSwpHints->Get(--j);
+ if (RES_TXTATR_FTN == pHt->Which())
+ {
+ if( !pFrame )
+ {
+ pFrame = SwIterator<SwContentFrame, SwTextNode, sw::IteratorMode::UnwrapMulti>(rNode).First();
+ if (!pFrame)
+ return;
+ }
+ SwTextFootnote *pAttr = static_cast<SwTextFootnote*>(pHt);
+ OSL_ENSURE( pAttr->GetStartNode(), "FootnoteAtr without StartNode." );
+ SwNodeIndex aIdx( *pAttr->GetStartNode(), 1 );
+ SwContentNode *pNd = aIdx.GetNode().GetContentNode();
+ if ( !pNd )
+ pNd = pFrame->GetAttrSet()->GetDoc()->
+ GetNodes().GoNextSection( &aIdx, true, false );
+ if ( !pNd )
+ continue;
- SwIterator<SwContentFrame, SwContentNode, sw::IteratorMode::UnwrapMulti> aIter(*pNd);
- SwContentFrame* pContent = aIter.First();
- if( pContent )
+ SwIterator<SwContentFrame, SwContentNode, sw::IteratorMode::UnwrapMulti> aIter(*pNd);
+ SwContentFrame* pContent = aIter.First();
+ if( pContent )
+ {
+ OSL_ENSURE( pContent->getRootFrame() == pFrame->getRootFrame(),
+ "lcl_ChangeFootnoteRef: Layout double?" );
+ SwFootnoteFrame *pFootnote = pContent->FindFootnoteFrame();
+ if( pFootnote && pFootnote->GetAttr() == pAttr )
{
- OSL_ENSURE( pContent->getRootFrame() == pFrame->getRootFrame(),
- "lcl_ChangeFootnoteRef: Layout double?" );
- SwFootnoteFrame *pFootnote = pContent->FindFootnoteFrame();
- if( pFootnote && pFootnote->GetAttr() == pAttr )
+ while( pFootnote->GetMaster() )
+ pFootnote = pFootnote->GetMaster();
+ // #104840# - remember footnote frame
+ pFirstFootnoteOfNode = pFootnote;
+ while ( pFootnote )
{
- while( pFootnote->GetMaster() )
- pFootnote = pFootnote->GetMaster();
- // #104840# - remember footnote frame
- pFirstFootnoteOfNode = pFootnote;
- while ( pFootnote )
- {
- pFootnote->SetRef( pFrame );
- pFootnote = pFootnote->GetFollow();
- static_cast<SwTextFrame*>(pFrame)->SetFootnote( true );
- }
+ pFootnote->SetRef( pFrame );
+ pFootnote = pFootnote->GetFollow();
+ static_cast<SwTextFrame*>(pFrame)->SetFootnote( true );
}
+ }
#if OSL_DEBUG_LEVEL > 0
- while( nullptr != (pContent = aIter.Next()) )
- {
- SwFootnoteFrame *pDbgFootnote = pContent->FindFootnoteFrame();
- OSL_ENSURE( !pDbgFootnote || pDbgFootnote->GetRef() == pFrame,
- "lcl_ChangeFootnoteRef: Who's that guy?" );
- }
-#endif
+ while( nullptr != (pContent = aIter.Next()) )
+ {
+ SwFootnoteFrame *pDbgFootnote = pContent->FindFootnoteFrame();
+ OSL_ENSURE( !pDbgFootnote || pDbgFootnote->GetRef() == pFrame,
+ "lcl_ChangeFootnoteRef: Who's that guy?" );
}
+#endif
}
- } // end of for-loop on <SwpHints>
- // #104840# - invalidate
- if ( pFirstFootnoteOfNode )
+ }
+ } // end of for-loop on <SwpHints>
+ // #104840# - invalidate
+ if ( pFirstFootnoteOfNode )
+ {
+ SwContentFrame* pContent = pFirstFootnoteOfNode->ContainsContent();
+ if ( pContent )
{
- SwContentFrame* pContent = pFirstFootnoteOfNode->ContainsContent();
- if ( pContent )
- {
- pContent->InvalidatePos_();
- }
+ pContent->InvalidatePos_();
}
}
}
@@ -1535,26 +1535,26 @@ void SwTextNode::Update(
// Inform LOK clients about change in position of redlines (if any)
// Don't emit notifications during save: redline flags are temporarily changed during save, but
// it's not useful to let clients know about such changes.
- if (comphelper::LibreOfficeKit::isActive() && !GetDoc()->IsInWriting())
+ if (!(comphelper::LibreOfficeKit::isActive() && !GetDoc()->IsInWriting()))
+ return;
+
+ const SwRedlineTable& rTable = GetDoc()->getIDocumentRedlineAccess().GetRedlineTable();
+ for (SwRedlineTable::size_type nRedlnPos = 0; nRedlnPos < rTable.size(); ++nRedlnPos)
{
- const SwRedlineTable& rTable = GetDoc()->getIDocumentRedlineAccess().GetRedlineTable();
- for (SwRedlineTable::size_type nRedlnPos = 0; nRedlnPos < rTable.size(); ++nRedlnPos)
+ SwRangeRedline* pRedln = rTable[nRedlnPos];
+ if (pRedln->HasMark())
{
- SwRangeRedline* pRedln = rTable[nRedlnPos];
- if (pRedln->HasMark())
+ if (this == &pRedln->End()->nNode.GetNode() && *pRedln->GetPoint() != *pRedln->GetMark())
{
- if (this == &pRedln->End()->nNode.GetNode() && *pRedln->GetPoint() != *pRedln->GetMark())
+ // Redline is changed only when some change occurs before it
+ if (nChangePos <= pRedln->Start()->nContent.GetIndex())
{
- // Redline is changed only when some change occurs before it
- if (nChangePos <= pRedln->Start()->nContent.GetIndex())
- {
- SwRedlineTable::LOKRedlineNotification(RedlineNotification::Modify, pRedln);
- }
+ SwRedlineTable::LOKRedlineNotification(RedlineNotification::Modify, pRedln);
}
}
- else if (this == &pRedln->GetPoint()->nNode.GetNode())
- SwRedlineTable::LOKRedlineNotification(RedlineNotification::Modify, pRedln);
}
+ else if (this == &pRedln->GetPoint()->nNode.GetNode())
+ SwRedlineTable::LOKRedlineNotification(RedlineNotification::Modify, pRedln);
}
}
@@ -3330,43 +3330,43 @@ static void Replace0xFF(
sal_Int32 & rTextStt,
sal_Int32 nEndPos )
{
- if (rNode.GetpSwpHints())
+ if (!rNode.GetpSwpHints())
+ return;
+
+ sal_Unicode cSrchChr = CH_TXTATR_BREAKWORD;
+ for( int nSrchIter = 0; 2 > nSrchIter; ++nSrchIter, cSrchChr = CH_TXTATR_INWORD )
{
- sal_Unicode cSrchChr = CH_TXTATR_BREAKWORD;
- for( int nSrchIter = 0; 2 > nSrchIter; ++nSrchIter, cSrchChr = CH_TXTATR_INWORD )
+ sal_Int32 nPos = rText.indexOf(cSrchChr);
+ while (-1 != nPos && nPos < nEndPos)
{
- sal_Int32 nPos = rText.indexOf(cSrchChr);
- while (-1 != nPos && nPos < nEndPos)
+ const SwTextAttr* const pAttr =
+ rNode.GetTextAttrForCharAt(rTextStt + nPos);
+ if( pAttr )
{
- const SwTextAttr* const pAttr =
- rNode.GetTextAttrForCharAt(rTextStt + nPos);
- if( pAttr )
- {
- switch( pAttr->Which() )
- {
- case RES_TXTATR_FIELD:
- case RES_TXTATR_ANNOTATION:
- rText.remove(nPos, 1);
- ++rTextStt;
- break;
-
- case RES_TXTATR_FTN:
- rText.remove(nPos, 1);
- ++rTextStt;
- break;
-
- default:
- rText.remove(nPos, 1);
- ++rTextStt;
- }
- }
- else
+ switch( pAttr->Which() )
{
- ++nPos;
- ++nEndPos;
+ case RES_TXTATR_FIELD:
+ case RES_TXTATR_ANNOTATION:
+ rText.remove(nPos, 1);
+ ++rTextStt;
+ break;
+
+ case RES_TXTATR_FTN:
+ rText.remove(nPos, 1);
+ ++rTextStt;
+ break;
+
+ default:
+ rText.remove(nPos, 1);
+ ++rTextStt;
}
- nPos = rText.indexOf(cSrchChr, nPos);
}
+ else
+ {
+ ++nPos;
+ ++nEndPos;
+ }
+ nPos = rText.indexOf(cSrchChr, nPos);
}
}
}
@@ -4163,18 +4163,18 @@ void SwTextNode::SetAttrListRestartValue( SwNumberTree::tSwNumTreeNumber nNumber
? GetAttrListRestartValue() != nNumber
: nNumber != USHRT_MAX );
- if ( bChanged || !HasAttrListRestartValue() )
+ if ( !(bChanged || !HasAttrListRestartValue()) )
+ return;
+
+ if ( nNumber == USHRT_MAX )
{
- if ( nNumber == USHRT_MAX )
- {
- ResetAttr( RES_PARATR_LIST_RESTARTVALUE );
- }
- else
- {
- SfxInt16Item aNewListRestartValueItem( RES_PARATR_LIST_RESTARTVALUE,
- static_cast<sal_Int16>(nNumber) );
- SetAttr( aNewListRestartValueItem );
- }
+ ResetAttr( RES_PARATR_LIST_RESTARTVALUE );
+ }
+ else
+ {
+ SfxInt16Item aNewListRestartValueItem( RES_PARATR_LIST_RESTARTVALUE,
+ static_cast<sal_Int16>(nNumber) );
+ SetAttr( aNewListRestartValueItem );
}
}
@@ -4289,23 +4289,23 @@ void SwTextNode::AddToList()
}
SwList *const pList(FindList(this));
- if (pList && GetNodes().IsDocNodes()) // not for undo nodes
+ if (!(pList && GetNodes().IsDocNodes())) // not for undo nodes
+ return;
+
+ assert(!mpNodeNum);
+ mpNodeNum.reset(new SwNodeNum(this, false));
+ pList->InsertListItem(*mpNodeNum, false, GetAttrListLevel());
+ // iterate all frames & if there's one with hidden layout...
+ SwIterator<SwTextFrame, SwTextNode, sw::IteratorMode::UnwrapMulti> iter(*this);
+ for (SwTextFrame* pFrame = iter.First(); pFrame; pFrame = iter.Next())
{
- assert(!mpNodeNum);
- mpNodeNum.reset(new SwNodeNum(this, false));
- pList->InsertListItem(*mpNodeNum, false, GetAttrListLevel());
- // iterate all frames & if there's one with hidden layout...
- SwIterator<SwTextFrame, SwTextNode, sw::IteratorMode::UnwrapMulti> iter(*this);
- for (SwTextFrame* pFrame = iter.First(); pFrame; pFrame = iter.Next())
+ if (pFrame->getRootFrame()->IsHideRedlines())
{
- if (pFrame->getRootFrame()->IsHideRedlines())
+ if (pFrame->GetTextNodeForParaProps() == this)
{
- if (pFrame->GetTextNodeForParaProps() == this)
- {
- AddToListRLHidden();
- }
- break; // assume it's consistent, need to check only once
+ AddToListRLHidden();
}
+ break; // assume it's consistent, need to check only once
}
}
}
@@ -4879,22 +4879,22 @@ namespace {
}
// #i70748#
- if (mbOutlineLevelSet)
+ if (!mbOutlineLevelSet)
+ return;
+
+ mrTextNode.GetNodes().UpdateOutlineNode(mrTextNode);
+ if (mrTextNode.GetAttrOutlineLevel() == 0)
+ {
+ mrTextNode.ResetEmptyListStyleDueToResetOutlineLevelAttr();
+ }
+ else
{
- mrTextNode.GetNodes().UpdateOutlineNode(mrTextNode);
- if (mrTextNode.GetAttrOutlineLevel() == 0)
+ const SfxPoolItem* pItem = nullptr;
+ if ( mrTextNode.GetSwAttrSet().GetItemState( RES_PARATR_NUMRULE,
+ true, &pItem )
+ != SfxItemState::SET )
{
- mrTextNode.ResetEmptyListStyleDueToResetOutlineLevelAttr();
- }
- else
- {
- const SfxPoolItem* pItem = nullptr;
- if ( mrTextNode.GetSwAttrSet().GetItemState( RES_PARATR_NUMRULE,
- true, &pItem )
- != SfxItemState::SET )
- {
- mrTextNode.SetEmptyListStyleDueToSetOutlineLevelAttr();
- }
+ mrTextNode.SetEmptyListStyleDueToSetOutlineLevelAttr();
}
}
}
@@ -5103,29 +5103,29 @@ namespace {
}
}
- if ( mrTextNode.IsInList() )
+ if ( !mrTextNode.IsInList() )
+ return;
+
+ if ( mbUpdateListLevel )
{
- if ( mbUpdateListLevel )
- {
- auto const nLevel(mrTextNode.GetAttrListLevel());
- mrTextNode.DoNum(
- [nLevel](SwNodeNum & rNum) { rNum.SetLevelInListTree(nLevel); });
- }
+ auto const nLevel(mrTextNode.GetAttrListLevel());
+ mrTextNode.DoNum(
+ [nLevel](SwNodeNum & rNum) { rNum.SetLevelInListTree(nLevel); });
+ }
- if ( mbUpdateListRestart )
- {
- mrTextNode.DoNum(
- [](SwNodeNum & rNum) {
- rNum.InvalidateMe();
- rNum.NotifyInvalidSiblings();
- });
- }
+ if ( mbUpdateListRestart )
+ {
+ mrTextNode.DoNum(
+ [](SwNodeNum & rNum) {
+ rNum.InvalidateMe();
+ rNum.NotifyInvalidSiblings();
+ });
+ }
- if ( mbUpdateListCount )
- {
- mrTextNode.DoNum(
- [](SwNodeNum & rNum) { rNum.InvalidateAndNotifyTree(); });
- }
+ if ( mbUpdateListCount )
+ {
+ mrTextNode.DoNum(
+ [](SwNodeNum & rNum) { rNum.InvalidateAndNotifyTree(); });
}
}
// End of class <HandleResetAttrAtTextNode>
diff --git a/sw/source/core/txtnode/thints.cxx b/sw/source/core/txtnode/thints.cxx
index 51b3edd81cb6..48df59b19b3d 100644
--- a/sw/source/core/txtnode/thints.cxx
+++ b/sw/source/core/txtnode/thints.cxx
@@ -1146,110 +1146,110 @@ SwTextAttr* MakeTextAttr( SwDoc & rDoc, const SfxItemSet& rSet,
// delete the text attribute and unregister its item at the pool
void SwTextNode::DestroyAttr( SwTextAttr* pAttr )
{
- if( pAttr )
+ if( !pAttr )
+ return;
+
+ // some things need to be done before deleting the formatting attribute
+ SwDoc* pDoc = GetDoc();
+ switch( pAttr->Which() )
{
- // some things need to be done before deleting the formatting attribute
- SwDoc* pDoc = GetDoc();
- switch( pAttr->Which() )
+ case RES_TXTATR_FLYCNT:
{
- case RES_TXTATR_FLYCNT:
- {
- SwFrameFormat* pFormat = pAttr->GetFlyCnt().GetFrameFormat();
- if( pFormat ) // set to 0 by Undo?
- pDoc->getIDocumentLayoutAccess().DelLayoutFormat( pFormat );
- }
- break;
+ SwFrameFormat* pFormat = pAttr->GetFlyCnt().GetFrameFormat();
+ if( pFormat ) // set to 0 by Undo?
+ pDoc->getIDocumentLayoutAccess().DelLayoutFormat( pFormat );
+ }
+ break;
- case RES_CHRATR_HIDDEN:
- SetCalcHiddenCharFlags();
- break;
+ case RES_CHRATR_HIDDEN:
+ SetCalcHiddenCharFlags();
+ break;
- case RES_TXTATR_FTN:
- static_cast<SwTextFootnote*>(pAttr)->SetStartNode( nullptr );
- static_cast<SwFormatFootnote&>(pAttr->GetAttr()).InvalidateFootnote();
- break;
+ case RES_TXTATR_FTN:
+ static_cast<SwTextFootnote*>(pAttr)->SetStartNode( nullptr );
+ static_cast<SwFormatFootnote&>(pAttr->GetAttr()).InvalidateFootnote();
+ break;
- case RES_TXTATR_FIELD:
- case RES_TXTATR_ANNOTATION:
- case RES_TXTATR_INPUTFIELD:
- if( !pDoc->IsInDtor() )
- {
- SwTextField *const pTextField(static_txtattr_cast<SwTextField*>(pAttr));
- SwFieldType* pFieldType = pAttr->GetFormatField().GetField()->GetTyp();
+ case RES_TXTATR_FIELD:
+ case RES_TXTATR_ANNOTATION:
+ case RES_TXTATR_INPUTFIELD:
+ if( !pDoc->IsInDtor() )
+ {
+ SwTextField *const pTextField(static_txtattr_cast<SwTextField*>(pAttr));
+ SwFieldType* pFieldType = pAttr->GetFormatField().GetField()->GetTyp();
- //JP 06-08-95: DDE-fields are an exception
- assert(SwFieldIds::Dde == pFieldType->Which() ||
- this == pTextField->GetpTextNode());
+ //JP 06-08-95: DDE-fields are an exception
+ assert(SwFieldIds::Dde == pFieldType->Which() ||
+ this == pTextField->GetpTextNode());
- // certain fields must update the SwDoc's calculation flags
+ // certain fields must update the SwDoc's calculation flags
- // Certain fields (like HiddenParaField) must trigger recalculation of visible flag
- if (GetDoc()->FieldCanHideParaWeight(pFieldType->Which()))
- SetCalcHiddenParaField();
+ // Certain fields (like HiddenParaField) must trigger recalculation of visible flag
+ if (GetDoc()->FieldCanHideParaWeight(pFieldType->Which()))
+ SetCalcHiddenParaField();
- switch( pFieldType->Which() )
+ switch( pFieldType->Which() )
+ {
+ case SwFieldIds::HiddenPara:
+ case SwFieldIds::DbSetNumber:
+ case SwFieldIds::GetExp:
+ case SwFieldIds::Database:
+ case SwFieldIds::SetExp:
+ case SwFieldIds::HiddenText:
+ case SwFieldIds::DbNumSet:
+ case SwFieldIds::DbNextSet:
+ if( !pDoc->getIDocumentFieldsAccess().IsNewFieldLst() && GetNodes().IsDocNodes() )
+ pDoc->getIDocumentFieldsAccess().InsDelFieldInFieldLst(false, *pTextField);
+ break;
+ case SwFieldIds::Dde:
+ if (GetNodes().IsDocNodes() && pTextField->GetpTextNode())
+ static_cast<SwDDEFieldType*>(pFieldType)->DecRefCnt();
+ break;
+ case SwFieldIds::Postit:
{
- case SwFieldIds::HiddenPara:
- case SwFieldIds::DbSetNumber:
- case SwFieldIds::GetExp:
- case SwFieldIds::Database:
- case SwFieldIds::SetExp:
- case SwFieldIds::HiddenText:
- case SwFieldIds::DbNumSet:
- case SwFieldIds::DbNextSet:
- if( !pDoc->getIDocumentFieldsAccess().IsNewFieldLst() && GetNodes().IsDocNodes() )
- pDoc->getIDocumentFieldsAccess().InsDelFieldInFieldLst(false, *pTextField);
+ const_cast<SwFormatField&>(pAttr->GetFormatField()).Broadcast(
+ SwFormatFieldHint(&pTextField->GetFormatField(), SwFormatFieldHintWhich::REMOVED));
break;
- case SwFieldIds::Dde:
- if (GetNodes().IsDocNodes() && pTextField->GetpTextNode())
- static_cast<SwDDEFieldType*>(pFieldType)->DecRefCnt();
- break;
- case SwFieldIds::Postit:
- {
- const_cast<SwFormatField&>(pAttr->GetFormatField()).Broadcast(
- SwFormatFieldHint(&pTextField->GetFormatField(), SwFormatFieldHintWhich::REMOVED));
- break;
- }
- default: break;
}
+ default: break;
}
- static_cast<SwFormatField&>(pAttr->GetAttr()).InvalidateField();
- break;
+ }
+ static_cast<SwFormatField&>(pAttr->GetAttr()).InvalidateField();
+ break;
- case RES_TXTATR_TOXMARK:
- static_cast<SwTOXMark&>(pAttr->GetAttr()).InvalidateTOXMark();
- break;
+ case RES_TXTATR_TOXMARK:
+ static_cast<SwTOXMark&>(pAttr->GetAttr()).InvalidateTOXMark();
+ break;
- case RES_TXTATR_REFMARK:
- static_cast<SwFormatRefMark&>(pAttr->GetAttr()).InvalidateRefMark();
- break;
+ case RES_TXTATR_REFMARK:
+ static_cast<SwFormatRefMark&>(pAttr->GetAttr()).InvalidateRefMark();
+ break;
- case RES_TXTATR_META:
- case RES_TXTATR_METAFIELD:
+ case RES_TXTATR_META:
+ case RES_TXTATR_METAFIELD:
+ {
+ auto pTextMeta = static_txtattr_cast<SwTextMeta*>(pAttr);
+ SwFormatMeta & rFormatMeta( static_cast<SwFormatMeta &>(pTextMeta->GetAttr()) );
+ if (::sw::Meta* pMeta = rFormatMeta.GetMeta())
{
- auto pTextMeta = static_txtattr_cast<SwTextMeta*>(pAttr);
- SwFormatMeta & rFormatMeta( static_cast<SwFormatMeta &>(pTextMeta->GetAttr()) );
- if (::sw::Meta* pMeta = rFormatMeta.GetMeta())
+ if (SwDocShell* pDocSh = pDoc->GetDocShell())
{
- if (SwDocShell* pDocSh = pDoc->GetDocShell())
- {
- static const OUString metaNS("urn:bails");
- const css::uno::Reference<css::rdf::XResource> xSubject = pMeta->MakeUnoObject();
- uno::Reference<frame::XModel> xModel = pDocSh->GetBaseModel();
- SwRDFHelper::clearStatements(xModel, metaNS, xSubject);
- }
+ static const OUString metaNS("urn:bails");
+ const css::uno::Reference<css::rdf::XResource> xSubject = pMeta->MakeUnoObject();
+ uno::Reference<frame::XModel> xModel = pDocSh->GetBaseModel();
+ SwRDFHelper::clearStatements(xModel, metaNS, xSubject);
}
-
- static_txtattr_cast<SwTextMeta*>(pAttr)->ChgTextNode(nullptr);
}
- break;
- default:
- break;
- }
+ static_txtattr_cast<SwTextMeta*>(pAttr)->ChgTextNode(nullptr);
+ }
+ break;
- SwTextAttr::Destroy( pAttr, pDoc->GetAttrPool() );
+ default:
+ break;
}
+
+ SwTextAttr::Destroy( pAttr, pDoc->GetAttrPool() );
}
SwTextAttr* SwTextNode::InsertItem(
@@ -1839,25 +1839,25 @@ void SwTextNode::TryCharSetExpandToNum(const SfxItemSet& aCharSet)
int nLevel = GetActualListLevel();
- if (nLevel != -1 && pCurrNum)
- {
- const SwNumFormat* pCurrNumFormat = pCurrNum->GetNumFormat(static_cast<sal_uInt16>(nLevel));
- if (pCurrNumFormat)
- {
- if (pCurrNumFormat->IsItemize() && lcl_IsIgnoredCharFormatForBullets(nWhich))
- return;
- if (pCurrNumFormat->IsEnumeration() && SwTextNode::IsIgnoredCharFormatForNumbering(nWhich))
- return;
- SwCharFormat* pCurrCharFormat =pCurrNumFormat->GetCharFormat();
+ if (!(nLevel != -1 && pCurrNum))
+ return;
- if (pCurrCharFormat && pCurrCharFormat->GetItemState(nWhich,false) != SfxItemState::SET)
- {
- pCurrCharFormat->SetFormatAttr(*pItem);
- SwNumFormat aNewNumFormat(*pCurrNumFormat);
- aNewNumFormat.SetCharFormat(pCurrCharFormat);
- pCurrNum->Set(nLevel,aNewNumFormat);
- }
- }
+ const SwNumFormat* pCurrNumFormat = pCurrNum->GetNumFormat(static_cast<sal_uInt16>(nLevel));
+ if (!pCurrNumFormat)
+ return;
+
+ if (pCurrNumFormat->IsItemize() && lcl_IsIgnoredCharFormatForBullets(nWhich))
+ return;
+ if (pCurrNumFormat->IsEnumeration() && SwTextNode::IsIgnoredCharFormatForNumbering(nWhich))
+ return;
+ SwCharFormat* pCurrCharFormat =pCurrNumFormat->GetCharFormat();
+
+ if (pCurrCharFormat && pCurrCharFormat->GetItemState(nWhich,false) != SfxItemState::SET)
+ {
+ pCurrCharFormat->SetFormatAttr(*pItem);
+ SwNumFormat aNewNumFormat(*pCurrNumFormat);
+ aNewNumFormat.SetCharFormat(pCurrCharFormat);
+ pCurrNum->Set(nLevel,aNewNumFormat);
}
}
@@ -2074,19 +2074,19 @@ public:
static void lcl_MergeListLevelIndentAsLRSpaceItem( const SwTextNode& rTextNode,
SfxItemSet& rSet )
{
- if ( rTextNode.AreListLevelIndentsApplicable() )
+ if ( !rTextNode.AreListLevelIndentsApplicable() )
+ return;
+
+ const SwNumRule* pRule = rTextNode.GetNumRule();
+ if ( pRule && rTextNode.GetActualListLevel() >= 0 )
{
- const SwNumRule* pRule = rTextNode.GetNumRule();
- if ( pRule && rTextNode.GetActualListLevel() >= 0 )
+ const SwNumFormat& rFormat = pRule->Get(static_cast<sal_uInt16>(rTextNode.GetActualListLevel()));
+ if ( rFormat.GetPositionAndSpaceMode() == SvxNumberFormat::LABEL_ALIGNMENT )
{
- const SwNumFormat& rFormat = pRule->Get(static_cast<sal_uInt16>(rTextNode.GetActualListLevel()));
- if ( rFormat.GetPositionAndSpaceMode() == SvxNumberFormat::LABEL_ALIGNMENT )
- {
- SvxLRSpaceItem aLR( RES_LR_SPACE );
- aLR.SetTextLeft( rFormat.GetIndentAt() );
- aLR.SetTextFirstLineOffset( static_cast<short>(rFormat.GetFirstLineIndent()) );
- rSet.Put( aLR );
- }
+ SvxLRSpaceItem aLR( RES_LR_SPACE );
+ aLR.SetTextLeft( rFormat.GetIndentAt() );
+ aLR.SetTextFirstLineOffset( static_cast<short>(rFormat.GetFirstLineIndent()) );
+ rSet.Put( aLR );
}
}
}
@@ -3364,38 +3364,38 @@ void SwpHints::Delete( SwTextAttr const * pTextHt )
void SwTextNode::ClearSwpHintsArr( bool bDelFields )
{
- if ( HasHints() )
+ if ( !HasHints() )
+ return;
+
+ size_t nPos = 0;
+ while ( nPos < m_pSwpHints->Count() )
{
- size_t nPos = 0;
- while ( nPos < m_pSwpHints->Count() )
- {
- SwTextAttr* pDel = m_pSwpHints->Get( nPos );
- bool bDel = false;
+ SwTextAttr* pDel = m_pSwpHints->Get( nPos );
+ bool bDel = false;
- switch( pDel->Which() )
- {
- case RES_TXTATR_FLYCNT:
- case RES_TXTATR_FTN:
- break;
+ switch( pDel->Which() )
+ {
+ case RES_TXTATR_FLYCNT:
+ case RES_TXTATR_FTN:
+ break;
- case RES_TXTATR_FIELD:
- case RES_TXTATR_ANNOTATION:
- case RES_TXTATR_INPUTFIELD:
- if( bDelFields )
- bDel = true;
- break;
- default:
- bDel = true; break;
- }
+ case RES_TXTATR_FIELD:
+ case RES_TXTATR_ANNOTATION:
+ case RES_TXTATR_INPUTFIELD:
+ if( bDelFields )
+ bDel = true;
+ break;
+ default:
+ bDel = true; break;
+ }
- if( bDel )
- {
- m_pSwpHints->DeleteAtPos( nPos );
- DestroyAttr( pDel );
- }
- else
- ++nPos;
+ if( bDel )
+ {
+ m_pSwpHints->DeleteAtPos( nPos );
+ DestroyAttr( pDel );
}
+ else
+ ++nPos;
}
}
diff --git a/sw/source/core/txtnode/txatritr.cxx b/sw/source/core/txtnode/txatritr.cxx
index b90f1060fd5e..883c09760c33 100644
--- a/sw/source/core/txtnode/txatritr.cxx
+++ b/sw/source/core/txtnode/txatritr.cxx
@@ -178,39 +178,39 @@ void SwLanguageIterator::SearchNextChg()
m_pCurrentItem = m_pParaItem;
const SwpHints* pHts = m_rTextNode.GetpSwpHints();
- if( pHts )
+ if( !pHts )
+ return;
+
+ if( !nWh )
{
- if( !nWh )
- {
- nWh = GetWhichOfScript( RES_CHRATR_LANGUAGE, m_aScriptIter.GetCurrScript() );
- }
+ nWh = GetWhichOfScript( RES_CHRATR_LANGUAGE, m_aScriptIter.GetCurrScript() );
+ }
- const SfxPoolItem* pItem = nullptr;
- for( ; m_nAttrPos < pHts->Count(); ++m_nAttrPos )
- {
- const SwTextAttr* pHt = pHts->Get( m_nAttrPos );
- const sal_Int32* pEnd = pHt->End();
- const sal_Int32 nHtStt = pHt->GetStart();
- if( nHtStt < nStt && ( !pEnd || *pEnd <= nStt ))
- continue;
+ const SfxPoolItem* pItem = nullptr;
+ for( ; m_nAttrPos < pHts->Count(); ++m_nAttrPos )
+ {
+ const SwTextAttr* pHt = pHts->Get( m_nAttrPos );
+ const sal_Int32* pEnd = pHt->End();
+ const sal_Int32 nHtStt = pHt->GetStart();
+ if( nHtStt < nStt && ( !pEnd || *pEnd <= nStt ))
+ continue;
- if( nHtStt >= m_nChgPos )
- break;
+ if( nHtStt >= m_nChgPos )
+ break;
- pItem = CharFormat::GetItem( *pHt, nWh );
- if ( pItem )
+ pItem = CharFormat::GetItem( *pHt, nWh );
+ if ( pItem )
+ {
+ if( nHtStt > nStt )
{
- if( nHtStt > nStt )
- {
- if( m_nChgPos > nHtStt )
- m_nChgPos = nHtStt;
- break;
- }
- AddToStack( *pHt );
- m_pCurrentItem = pItem;
- if( *pEnd < m_nChgPos )
- m_nChgPos = *pEnd;
+ if( m_nChgPos > nHtStt )
+ m_nChgPos = nHtStt;
+ break;
}
+ AddToStack( *pHt );
+ m_pCurrentItem = pItem;
+ if( *pEnd < m_nChgPos )
+ m_nChgPos = *pEnd;
}
}
}
diff --git a/sw/source/core/txtnode/txtedt.cxx b/sw/source/core/txtnode/txtedt.cxx
index cbc5f4f396d7..f67324fd2ea1 100644
--- a/sw/source/core/txtnode/txtedt.cxx
+++ b/sw/source/core/txtnode/txtedt.cxx
@@ -622,23 +622,23 @@ void SwTextNode::RstTextAttr(
TryDeleteSwpHints();
- if (bChanged)
- {
- if ( HasHints() )
- { // possibly sometimes Resort would be sufficient, but...
- m_pSwpHints->MergePortions(*this);
- }
-
- // TextFrame's respond to aHint, others to aNew
- SwUpdateAttr aHint(
- nMin,
- nMax,
- 0);
+ if (!bChanged)
+ return;
- NotifyClients( nullptr, &aHint );
- SwFormatChg aNew( GetFormatColl() );
- NotifyClients( nullptr, &aNew );
+ if ( HasHints() )
+ { // possibly sometimes Resort would be sufficient, but...
+ m_pSwpHints->MergePortions(*this);
}
+
+ // TextFrame's respond to aHint, others to aNew
+ SwUpdateAttr aHint(
+ nMin,
+ nMax,
+ 0);
+
+ NotifyClients( nullptr, &aHint );
+ SwFormatChg aNew( GetFormatColl() );
+ NotifyClients( nullptr, &aNew );
}
static sal_Int32 clipIndexBounds(const OUString &rStr, sal_Int32 nPos)
@@ -1679,243 +1679,243 @@ void SwTextNode::TransliterateText(
sal_Int32 nStt, sal_Int32 nEnd,
SwUndoTransliterate* pUndo )
{
- if (nStt < nEnd)
- {
- // since we don't use Hiragana/Katakana or half-width/full-width transliterations here
- // it is fine to use ANYWORD_IGNOREWHITESPACES. (ANY_WORD btw is broken and will
- // occasionally miss words in consecutive sentences). Also with ANYWORD_IGNOREWHITESPACES
- // text like 'just-in-time' will be converted to 'Just-In-Time' which seems to be the
- // proper thing to do.
- const sal_Int16 nWordType = WordType::ANYWORD_IGNOREWHITESPACES;
-
- // In order to have less trouble with changing text size, e.g. because
- // of ligatures or German small sz being resolved, we need to process
- // the text replacements from end to start.
- // This way the offsets for the yet to be changed words will be
- // left unchanged by the already replaced text.
- // For this we temporarily save the changes to be done in this vector
- std::vector< swTransliterationChgData > aChanges;
- swTransliterationChgData aChgData;
-
- if (rTrans.getType() == TransliterationFlags::TITLE_CASE)
+ if (nStt >= nEnd)
+ return;
+
+ // since we don't use Hiragana/Katakana or half-width/full-width transliterations here
+ // it is fine to use ANYWORD_IGNOREWHITESPACES. (ANY_WORD btw is broken and will
+ // occasionally miss words in consecutive sentences). Also with ANYWORD_IGNOREWHITESPACES
+ // text like 'just-in-time' will be converted to 'Just-In-Time' which seems to be the
+ // proper thing to do.
+ const sal_Int16 nWordType = WordType::ANYWORD_IGNOREWHITESPACES;
+
+ // In order to have less trouble with changing text size, e.g. because
+ // of ligatures or German small sz being resolved, we need to process
+ // the text replacements from end to start.
+ // This way the offsets for the yet to be changed words will be
+ // left unchanged by the already replaced text.
+ // For this we temporarily save the changes to be done in this vector
+ std::vector< swTransliterationChgData > aChanges;
+ swTransliterationChgData aChgData;
+
+ if (rTrans.getType() == TransliterationFlags::TITLE_CASE)
+ {
+ // for 'capitalize every word' we need to iterate over each word
+
+ Boundary aSttBndry;
+ Boundary aEndBndry;
+ aSttBndry = g_pBreakIt->GetBreakIter()->getWordBoundary(
+ GetText(), nStt,
+ g_pBreakIt->GetLocale( GetLang( nStt ) ),
+ nWordType,
+ true /*prefer forward direction*/);
+ aEndBndry = g_pBreakIt->GetBreakIter()->getWordBoundary(
+ GetText(), nEnd,
+ g_pBreakIt->GetLocale( GetLang( nEnd ) ),
+ nWordType,
+ false /*prefer backward direction*/);
+
+ // prevent backtracking to the previous word if selection is at word boundary
+ if (aSttBndry.endPos <= nStt)
{
- // for 'capitalize every word' we need to iterate over each word
-
- Boundary aSttBndry;
- Boundary aEndBndry;
- aSttBndry = g_pBreakIt->GetBreakIter()->getWordBoundary(
- GetText(), nStt,
- g_pBreakIt->GetLocale( GetLang( nStt ) ),
- nWordType,
- true /*prefer forward direction*/);
- aEndBndry = g_pBreakIt->GetBreakIter()->getWordBoundary(
- GetText(), nEnd,
- g_pBreakIt->GetLocale( GetLang( nEnd ) ),
- nWordType,
- false /*prefer backward direction*/);
-
- // prevent backtracking to the previous word if selection is at word boundary
- if (aSttBndry.endPos <= nStt)
- {
- aSttBndry = g_pBreakIt->GetBreakIter()->nextWord(
- GetText(), aSttBndry.endPos,
- g_pBreakIt->GetLocale( GetLang( aSttBndry.endPos ) ),
- nWordType);
- }
- // prevent advancing to the next word if selection is at word boundary
- if (aEndBndry.startPos >= nEnd)
+ aSttBndry = g_pBreakIt->GetBreakIter()->nextWord(
+ GetText(), aSttBndry.endPos,
+ g_pBreakIt->GetLocale( GetLang( aSttBndry.endPos ) ),
+ nWordType);
+ }
+ // prevent advancing to the next word if selection is at word boundary
+ if (aEndBndry.startPos >= nEnd)
+ {
+ aEndBndry = g_pBreakIt->GetBreakIter()->previousWord(
+ GetText(), aEndBndry.startPos,
+ g_pBreakIt->GetLocale( GetLang( aEndBndry.startPos ) ),
+ nWordType);
+ }
+
+ Boundary aCurWordBndry( aSttBndry );
+ while (aCurWordBndry.startPos <= aEndBndry.startPos)
+ {
+ nStt = aCurWordBndry.startPos;
+ nEnd = aCurWordBndry.endPos;
+ const sal_Int32 nLen = nEnd - nStt;
+ OSL_ENSURE( nLen > 0, "invalid word length of 0" );
+
+ Sequence <sal_Int32> aOffsets;
+ OUString const sChgd( rTrans.transliterate(
+ GetText(), GetLang(nStt), nStt, nLen, &aOffsets) );
+
+ assert(nStt < m_Text.getLength());
+ if (0 != rtl_ustr_shortenedCompare_WithLength(
+ m_Text.getStr() + nStt, m_Text.getLength() - nStt,
+ sChgd.getStr(), sChgd.getLength(), nLen))
{
- aEndBndry = g_pBreakIt->GetBreakIter()->previousWord(
- GetText(), aEndBndry.startPos,
- g_pBreakIt->GetLocale( GetLang( aEndBndry.startPos ) ),
- nWordType);
+ aChgData.nStart = nStt;
+ aChgData.nLen = nLen;
+ aChgData.sChanged = sChgd;
+ aChgData.aOffsets = aOffsets;
+ aChanges.push_back( aChgData );
}
- Boundary aCurWordBndry( aSttBndry );
- while (aCurWordBndry.startPos <= aEndBndry.startPos)
- {
- nStt = aCurWordBndry.startPos;
- nEnd = aCurWordBndry.endPos;
- const sal_Int32 nLen = nEnd - nStt;
- OSL_ENSURE( nLen > 0, "invalid word length of 0" );
-
- Sequence <sal_Int32> aOffsets;
- OUString const sChgd( rTrans.transliterate(
- GetText(), GetLang(nStt), nStt, nLen, &aOffsets) );
-
- assert(nStt < m_Text.getLength());
- if (0 != rtl_ustr_shortenedCompare_WithLength(
- m_Text.getStr() + nStt, m_Text.getLength() - nStt,
- sChgd.getStr(), sChgd.getLength(), nLen))
- {
- aChgData.nStart = nStt;
- aChgData.nLen = nLen;
- aChgData.sChanged = sChgd;
- aChgData.aOffsets = aOffsets;
- aChanges.push_back( aChgData );
- }
+ aCurWordBndry = g_pBreakIt->GetBreakIter()->nextWord(
+ GetText(), nStt,
+ g_pBreakIt->GetLocale(GetLang(nStt, 1)),
+ nWordType);
+ }
+ }
+ else if (rTrans.getType() == TransliterationFlags::SENTENCE_CASE)
+ {
+ // for 'sentence case' we need to iterate sentence by sentence
- aCurWordBndry = g_pBreakIt->GetBreakIter()->nextWord(
- GetText(), nStt,
- g_pBreakIt->GetLocale(GetLang(nStt, 1)),
- nWordType);
- }
+ sal_Int32 nLastStart = g_pBreakIt->GetBreakIter()->beginOfSentence(
+ GetText(), nEnd,
+ g_pBreakIt->GetLocale( GetLang( nEnd ) ) );
+ sal_Int32 nLastEnd = g_pBreakIt->GetBreakIter()->endOfSentence(
+ GetText(), nLastStart,
+ g_pBreakIt->GetLocale( GetLang( nLastStart ) ) );
+
+ // extend nStt, nEnd to the current sentence boundaries
+ sal_Int32 nCurrentStart = g_pBreakIt->GetBreakIter()->beginOfSentence(
+ GetText(), nStt,
+ g_pBreakIt->GetLocale( GetLang( nStt ) ) );
+ sal_Int32 nCurrentEnd = g_pBreakIt->GetBreakIter()->endOfSentence(
+ GetText(), nCurrentStart,
+ g_pBreakIt->GetLocale( GetLang( nCurrentStart ) ) );
+
+ // prevent backtracking to the previous sentence if selection starts at end of a sentence
+ if (nCurrentEnd <= nStt)
+ {
+ // now nCurrentStart is probably located on a non-letter word. (unless we
+ // are in Asian text with no spaces...)
+ // Thus to get the real sentence start we should locate the next real word,
+ // that is one found by DICTIONARY_WORD
+ i18n::Boundary aBndry = g_pBreakIt->GetBreakIter()->nextWord(
+ GetText(), nCurrentEnd,
+ g_pBreakIt->GetLocale( GetLang( nCurrentEnd ) ),
+ i18n::WordType::DICTIONARY_WORD);
+
+ // now get new current sentence boundaries
+ nCurrentStart = g_pBreakIt->GetBreakIter()->beginOfSentence(
+ GetText(), aBndry.startPos,
+ g_pBreakIt->GetLocale( GetLang( aBndry.startPos) ) );
+ nCurrentEnd = g_pBreakIt->GetBreakIter()->endOfSentence(
+ GetText(), nCurrentStart,
+ g_pBreakIt->GetLocale( GetLang( nCurrentStart) ) );
}
- else if (rTrans.getType() == TransliterationFlags::SENTENCE_CASE)
+ // prevent advancing to the next sentence if selection ends at start of a sentence
+ if (nLastStart >= nEnd)
{
- // for 'sentence case' we need to iterate sentence by sentence
-
- sal_Int32 nLastStart = g_pBreakIt->GetBreakIter()->beginOfSentence(
- GetText(), nEnd,
- g_pBreakIt->GetLocale( GetLang( nEnd ) ) );
- sal_Int32 nLastEnd = g_pBreakIt->GetBreakIter()->endOfSentence(
+ // now nCurrentStart is probably located on a non-letter word. (unless we
+ // are in Asian text with no spaces...)
+ // Thus to get the real sentence start we should locate the previous real word,
+ // that is one found by DICTIONARY_WORD
+ i18n::Boundary aBndry = g_pBreakIt->GetBreakIter()->previousWord(
GetText(), nLastStart,
- g_pBreakIt->GetLocale( GetLang( nLastStart ) ) );
+ g_pBreakIt->GetLocale( GetLang( nLastStart) ),
+ i18n::WordType::DICTIONARY_WORD);
+ nLastEnd = g_pBreakIt->GetBreakIter()->endOfSentence(
+ GetText(), aBndry.startPos,
+ g_pBreakIt->GetLocale( GetLang( aBndry.startPos) ) );
+ if (nCurrentEnd > nLastEnd)
+ nCurrentEnd = nLastEnd;
+ }
- // extend nStt, nEnd to the current sentence boundaries
- sal_Int32 nCurrentStart = g_pBreakIt->GetBreakIter()->beginOfSentence(
- GetText(), nStt,
- g_pBreakIt->GetLocale( GetLang( nStt ) ) );
- sal_Int32 nCurrentEnd = g_pBreakIt->GetBreakIter()->endOfSentence(
+ while (nCurrentStart < nLastEnd)
+ {
+ sal_Int32 nLen = nCurrentEnd - nCurrentStart;
+ OSL_ENSURE( nLen > 0, "invalid word length of 0" );
+
+ Sequence <sal_Int32> aOffsets;
+ OUString const sChgd( rTrans.transliterate(GetText(),
+ GetLang(nCurrentStart), nCurrentStart, nLen, &aOffsets) );
+
+ assert(nStt < m_Text.getLength());
+ if (0 != rtl_ustr_shortenedCompare_WithLength(
+ m_Text.getStr() + nStt, m_Text.getLength() - nStt,
+ sChgd.getStr(), sChgd.getLength(), nLen))
+ {
+ aChgData.nStart = nCurrentStart;
+ aChgData.nLen = nLen;
+ aChgData.sChanged = sChgd;
+ aChgData.aOffsets = aOffsets;
+ aChanges.push_back( aChgData );
+ }
+
+ Boundary aFirstWordBndry = g_pBreakIt->GetBreakIter()->nextWord(
+ GetText(), nCurrentEnd,
+ g_pBreakIt->GetLocale( GetLang( nCurrentEnd ) ),
+ nWordType);
+ nCurrentStart = aFirstWordBndry.startPos;
+ nCurrentEnd = g_pBreakIt->GetBreakIter()->endOfSentence(
GetText(), nCurrentStart,
g_pBreakIt->GetLocale( GetLang( nCurrentStart ) ) );
+ }
+ }
+ else
+ {
+ // here we may transliterate over complete language portions...
+
+ std::unique_ptr<SwLanguageIterator> pIter;
+ if( rTrans.needLanguageForTheMode() )
+ pIter.reset(new SwLanguageIterator( *this, nStt ));
- // prevent backtracking to the previous sentence if selection starts at end of a sentence
- if (nCurrentEnd <= nStt)
+ sal_Int32 nEndPos = 0;
+ LanguageType nLang = LANGUAGE_NONE;
+ do {
+ if( pIter )
{
- // now nCurrentStart is probably located on a non-letter word. (unless we
- // are in Asian text with no spaces...)
- // Thus to get the real sentence start we should locate the next real word,
- // that is one found by DICTIONARY_WORD
- i18n::Boundary aBndry = g_pBreakIt->GetBreakIter()->nextWord(
- GetText(), nCurrentEnd,
- g_pBreakIt->GetLocale( GetLang( nCurrentEnd ) ),
- i18n::WordType::DICTIONARY_WORD);
-
- // now get new current sentence boundaries
- nCurrentStart = g_pBreakIt->GetBreakIter()->beginOfSentence(
- GetText(), aBndry.startPos,
- g_pBreakIt->GetLocale( GetLang( aBndry.startPos) ) );
- nCurrentEnd = g_pBreakIt->GetBreakIter()->endOfSentence(
- GetText(), nCurrentStart,
- g_pBreakIt->GetLocale( GetLang( nCurrentStart) ) );
+ nLang = pIter->GetLanguage();
+ nEndPos = pIter->GetChgPos();
+ if( nEndPos > nEnd )
+ nEndPos = nEnd;
}
- // prevent advancing to the next sentence if selection ends at start of a sentence
- if (nLastStart >= nEnd)
+ else
{
- // now nCurrentStart is probably located on a non-letter word. (unless we
- // are in Asian text with no spaces...)
- // Thus to get the real sentence start we should locate the previous real word,
- // that is one found by DICTIONARY_WORD
- i18n::Boundary aBndry = g_pBreakIt->GetBreakIter()->previousWord(
- GetText(), nLastStart,
- g_pBreakIt->GetLocale( GetLang( nLastStart) ),
- i18n::WordType::DICTIONARY_WORD);
- nLastEnd = g_pBreakIt->GetBreakIter()->endOfSentence(
- GetText(), aBndry.startPos,
- g_pBreakIt->GetLocale( GetLang( aBndry.startPos) ) );
- if (nCurrentEnd > nLastEnd)
- nCurrentEnd = nLastEnd;
+ nLang = LANGUAGE_SYSTEM;
+ nEndPos = nEnd;
}
+ const sal_Int32 nLen = nEndPos - nStt;
- while (nCurrentStart < nLastEnd)
- {
- sal_Int32 nLen = nCurrentEnd - nCurrentStart;
- OSL_ENSURE( nLen > 0, "invalid word length of 0" );
-
- Sequence <sal_Int32> aOffsets;
- OUString const sChgd( rTrans.transliterate(GetText(),
- GetLang(nCurrentStart), nCurrentStart, nLen, &aOffsets) );
-
- assert(nStt < m_Text.getLength());
- if (0 != rtl_ustr_shortenedCompare_WithLength(
- m_Text.getStr() + nStt, m_Text.getLength() - nStt,
- sChgd.getStr(), sChgd.getLength(), nLen))
- {
- aChgData.nStart = nCurrentStart;
- aChgData.nLen = nLen;
- aChgData.sChanged = sChgd;
- aChgData.aOffsets = aOffsets;
- aChanges.push_back( aChgData );
- }
+ Sequence <sal_Int32> aOffsets;
+ OUString const sChgd( rTrans.transliterate(
+ m_Text, nLang, nStt, nLen, &aOffsets) );
- Boundary aFirstWordBndry = g_pBreakIt->GetBreakIter()->nextWord(
- GetText(), nCurrentEnd,
- g_pBreakIt->GetLocale( GetLang( nCurrentEnd ) ),
- nWordType);
- nCurrentStart = aFirstWordBndry.startPos;
- nCurrentEnd = g_pBreakIt->GetBreakIter()->endOfSentence(
- GetText(), nCurrentStart,
- g_pBreakIt->GetLocale( GetLang( nCurrentStart ) ) );
+ assert(nStt < m_Text.getLength());
+ if (0 != rtl_ustr_shortenedCompare_WithLength(
+ m_Text.getStr() + nStt, m_Text.getLength() - nStt,
+ sChgd.getStr(), sChgd.getLength(), nLen))
+ {
+ aChgData.nStart = nStt;
+ aChgData.nLen = nLen;
+ aChgData.sChanged = sChgd;
+ aChgData.aOffsets = aOffsets;
+ aChanges.push_back( aChgData );
}
- }
- else
- {
- // here we may transliterate over complete language portions...
- std::unique_ptr<SwLanguageIterator> pIter;
- if( rTrans.needLanguageForTheMode() )
- pIter.reset(new SwLanguageIterator( *this, nStt ));
-
- sal_Int32 nEndPos = 0;
- LanguageType nLang = LANGUAGE_NONE;
- do {
- if( pIter )
- {
- nLang = pIter->GetLanguage();
- nEndPos = pIter->GetChgPos();
- if( nEndPos > nEnd )
- nEndPos = nEnd;
- }
- else
- {
- nLang = LANGUAGE_SYSTEM;
- nEndPos = nEnd;
- }
- const sal_Int32 nLen = nEndPos - nStt;
-
- Sequence <sal_Int32> aOffsets;
- OUString const sChgd( rTrans.transliterate(
- m_Text, nLang, nStt, nLen, &aOffsets) );
-
- assert(nStt < m_Text.getLength());
- if (0 != rtl_ustr_shortenedCompare_WithLength(
- m_Text.getStr() + nStt, m_Text.getLength() - nStt,
- sChgd.getStr(), sChgd.getLength(), nLen))
- {
- aChgData.nStart = nStt;
- aChgData.nLen = nLen;
- aChgData.sChanged = sChgd;
- aChgData.aOffsets = aOffsets;
- aChanges.push_back( aChgData );
- }
+ nStt = nEndPos;
+ } while( nEndPos < nEnd && pIter && pIter->Next() );
+ }
- nStt = nEndPos;
- } while( nEndPos < nEnd && pIter && pIter->Next() );
- }
+ if (aChanges.empty())
+ return;
- if (!aChanges.empty())
+ // now apply the changes from end to start to leave the offsets of the
+ // yet unchanged text parts remain the same.
+ size_t nSum(0);
+ for (size_t i = 0; i < aChanges.size(); ++i)
+ { // check this here since AddChanges cannot be moved below
+ // call to ReplaceTextOnly
+ swTransliterationChgData & rData =
+ aChanges[ aChanges.size() - 1 - i ];
+ nSum += rData.sChanged.getLength() - rData.nLen;
+ if (nSum > o3tl::make_unsigned(GetSpaceLeft()))
{
- // now apply the changes from end to start to leave the offsets of the
- // yet unchanged text parts remain the same.
- size_t nSum(0);
- for (size_t i = 0; i < aChanges.size(); ++i)
- { // check this here since AddChanges cannot be moved below
- // call to ReplaceTextOnly
- swTransliterationChgData & rData =
- aChanges[ aChanges.size() - 1 - i ];
- nSum += rData.sChanged.getLength() - rData.nLen;
- if (nSum > o3tl::make_unsigned(GetSpaceLeft()))
- {
- SAL_WARN("sw.core", "SwTextNode::ReplaceTextOnly: "
- "node text with insertion > node capacity.");
- return;
- }
- if (pUndo)
- pUndo->AddChanges( *this, rData.nStart, rData.nLen, rData.aOffsets );
- ReplaceTextOnly( rData.nStart, rData.nLen, rData.sChanged, rData.aOffsets );
- }
+ SAL_WARN("sw.core", "SwTextNode::ReplaceTextOnly: "
+ "node text with insertion > node capacity.");
+ return;
}
+ if (pUndo)
+ pUndo->AddChanges( *this, rData.nStart, rData.nLen, rData.aOffsets );
+ ReplaceTextOnly( rData.nStart, rData.nLen, rData.sChanged, rData.aOffsets );
}
}