diff options
Diffstat (limited to 'sw')
-rw-r--r-- | sw/inc/splargs.hxx | 36 | ||||
-rw-r--r-- | sw/source/core/doc/docedt.cxx | 27 | ||||
-rw-r--r-- | sw/source/core/txtnode/txtedt.cxx | 28 | ||||
-rw-r--r-- | sw/source/uibase/lingu/hhcwrp.cxx | 18 |
4 files changed, 46 insertions, 63 deletions
diff --git a/sw/inc/splargs.hxx b/sw/inc/splargs.hxx index ba5574a15549..a4ec4f0a6c36 100644 --- a/sw/inc/splargs.hxx +++ b/sw/inc/splargs.hxx @@ -28,6 +28,7 @@ #include <functional> #include <utility> +struct SwPosition; class SwTextFrame; class SwTextNode; class SwContentIndex; @@ -36,26 +37,21 @@ namespace com::sun::star::linguistic2 { class XHyphenatedWord; } struct SwArgsBase // used for text conversion (Hangul/Hanja, ...) { - SwTextNode *pStartNode; - SwContentIndex *pStartIdx; - SwTextNode *pEndNode; - SwContentIndex *pEndIdx; - - SwArgsBase( - SwTextNode* pStart, SwContentIndex& rStart, - SwTextNode* pEnd, SwContentIndex& rEnd ) - : pStartNode( pStart ), pStartIdx( &rStart ), - pEndNode( pEnd ), pEndIdx( &rEnd ) + SwPosition *pStartPos; // these both both point to SwTextNode + SwPosition *pEndPos; + + SwArgsBase(SwPosition& rStart, SwPosition& rEnd ) + : pStartPos( &rStart ), pEndPos( &rEnd ) {} - void SetStart(SwTextNode* pStart, SwContentIndex& rStart ) + void SetStart(SwPosition& rStart ) { - pStartNode = pStart; pStartIdx = &rStart ; + pStartPos = &rStart; } - void SetEnd( SwTextNode* pEnd, SwContentIndex& rEnd ) + void SetEnd( SwPosition& rEnd ) { - pEndNode = pEnd; pEndIdx = &rEnd ; + pEndPos = &rEnd ; } }; @@ -73,9 +69,9 @@ struct SwConversionArgs : SwArgsBase bool bAllowImplicitChangesForNotConvertibleText; SwConversionArgs( LanguageType nLang, - SwTextNode* pStart, SwContentIndex& rStart, - SwTextNode* pEnd, SwContentIndex& rEnd ) - : SwArgsBase( pStart, rStart, pEnd, rEnd ), + SwPosition& rStart, + SwPosition& rEnd ) + : SwArgsBase( rStart, rEnd ), nConvSrcLang( nLang ), nConvTextLang( LANGUAGE_NONE ), nConvTargetLang( LANGUAGE_NONE ), @@ -93,10 +89,10 @@ struct SwSpellArgs : SwArgsBase bool bIsGrammarCheck; SwSpellArgs(css::uno::Reference< css::linguistic2::XSpellChecker1 > xSplChk, - SwTextNode* pStart, SwContentIndex& rStart, - SwTextNode* pEnd, SwContentIndex& rEnd, + SwPosition& rStart, + SwPosition& rEnd, bool bGrammar ) - : SwArgsBase( pStart, rStart, pEnd, rEnd ), + : SwArgsBase( rStart, rEnd ), xSpeller(std::move( xSplChk )), bIsGrammarCheck( bGrammar ) {} diff --git a/sw/source/core/doc/docedt.cxx b/sw/source/core/doc/docedt.cxx index 2b097eca37cb..6a209530b428 100644 --- a/sw/source/core/doc/docedt.cxx +++ b/sw/source/core/doc/docedt.cxx @@ -525,14 +525,11 @@ uno::Any SwDoc::Spell( SwPaM& rPaM, std::unique_ptr<SwSpellArgs> pSpellArgs; if (pConvArgs) { - pConvArgs->SetStart(pSttPos->GetNode().GetTextNode(), pSttPos->nContent); - pConvArgs->SetEnd( pEndPos->GetNode().GetTextNode(), pEndPos->nContent ); + pConvArgs->SetStart(*pSttPos); + pConvArgs->SetEnd(*pEndPos); } else - pSpellArgs.reset(new SwSpellArgs( xSpeller, - pSttPos->GetNode().GetTextNode(), pSttPos->nContent, - pEndPos->GetNode().GetTextNode(), pEndPos->nContent, - bGrammarCheck )); + pSpellArgs.reset(new SwSpellArgs( xSpeller, *pSttPos, *pEndPos, bGrammarCheck )); SwNodeOffset nCurrNd = pSttPos->GetNodeIndex(); SwNodeOffset nEndNd = pEndPos->GetNodeIndex(); @@ -578,7 +575,7 @@ uno::Any SwDoc::Spell( SwPaM& rPaM, sal_Int32 nEndGrammarCheck = 0; if( pSpellArgs && pSpellArgs->bIsGrammarCheck) { - nBeginGrammarCheck = pSpellArgs->pStartNode == pNd ? pSpellArgs->pStartIdx->GetIndex() : 0; + nBeginGrammarCheck = &pSpellArgs->pStartPos->GetNode() == pNd ? pSpellArgs->pStartPos->GetContentIndex() : 0; // if grammar checking starts inside of a sentence the start position has to be adjusted if( nBeginGrammarCheck ) { @@ -592,8 +589,8 @@ uno::Any SwDoc::Spell( SwPaM& rPaM, nBeginGrammarCheck = aCursor.GetPoint()->GetContentIndex(); } } - nEndGrammarCheck = (pSpellArgs->pEndNode == pNd) - ? pSpellArgs->pEndIdx->GetIndex() + nEndGrammarCheck = (&pSpellArgs->pEndPos->GetNode() == pNd) + ? pSpellArgs->pEndPos->GetContentIndex() : pNd->GetTextNode() ->GetText().getLength(); } @@ -607,9 +604,9 @@ uno::Any SwDoc::Spell( SwPaM& rPaM, pEndPos->nNode = nCurrNd; nCurrNd = nEndNd; if( pSpellArgs ) - nSpellErrorPosition = pSpellArgs->pStartIdx->GetIndex() > pSpellArgs->pEndIdx->GetIndex() ? - pSpellArgs->pEndIdx->GetIndex() : - pSpellArgs->pStartIdx->GetIndex(); + nSpellErrorPosition = pSpellArgs->pStartPos->GetContentIndex() > pSpellArgs->pEndPos->GetContentIndex() ? + pSpellArgs->pEndPos->GetContentIndex() : + pSpellArgs->pStartPos->GetContentIndex(); } if( pSpellArgs && pSpellArgs->bIsGrammarCheck ) @@ -654,10 +651,8 @@ uno::Any SwDoc::Spell( SwPaM& rPaM, nCurrNd = pNd->GetIndex(); pSttPos->nNode = nCurrNd; pEndPos->nNode = nCurrNd; - pSpellArgs->pStartNode = pNd->GetTextNode(); - pSpellArgs->pEndNode = pNd->GetTextNode(); - pSpellArgs->pStartIdx->Assign(pNd->GetTextNode(), aConversionMap.ConvertToModelPosition( rError.nErrorStart ).mnPos ); - pSpellArgs->pEndIdx->Assign(pNd->GetTextNode(), aConversionMap.ConvertToModelPosition( rError.nErrorStart + rError.nErrorLength ).mnPos ); + pSpellArgs->pStartPos->Assign(*pNd->GetTextNode(), aConversionMap.ConvertToModelPosition( rError.nErrorStart ).mnPos ); + pSpellArgs->pEndPos->Assign(*pNd->GetTextNode(), aConversionMap.ConvertToModelPosition( rError.nErrorStart + rError.nErrorLength ).mnPos ); nCurrNd = nEndNd; } } diff --git a/sw/source/core/txtnode/txtedt.cxx b/sw/source/core/txtnode/txtedt.cxx index c22601e99a8a..90bca7705239 100644 --- a/sw/source/core/txtnode/txtedt.cxx +++ b/sw/source/core/txtnode/txtedt.cxx @@ -962,13 +962,13 @@ bool SwTextNode::Spell(SwSpellArgs* pArgs) m_Text = buf.makeStringAndClear(); } - sal_Int32 nBegin = ( pArgs->pStartNode != this ) + sal_Int32 nBegin = ( &pArgs->pStartPos->GetNode() != this ) ? 0 - : pArgs->pStartIdx->GetIndex(); + : pArgs->pStartPos->GetContentIndex(); - sal_Int32 nEnd = ( pArgs->pEndNode != this ) + sal_Int32 nEnd = ( &pArgs->pEndPos->GetNode() != this ) ? m_Text.getLength() - : pArgs->pEndIdx->GetIndex(); + : pArgs->pEndPos->GetContentIndex(); pArgs->xSpellAlt = nullptr; @@ -1061,10 +1061,8 @@ bool SwTextNode::Spell(SwSpellArgs* pArgs) while (pChar && *pChar-- == CH_TXTATR_INWORD) ++nRight; - pArgs->pStartNode = this; - pArgs->pEndNode = this; - pArgs->pStartIdx->Assign(this, aScanner.GetEnd() - nRight ); - pArgs->pEndIdx->Assign(this, aScanner.GetBegin() + nLeft ); + pArgs->pStartPos->Assign(*this, aScanner.GetEnd() - nRight ); + pArgs->pEndPos->Assign(*this, aScanner.GetBegin() + nLeft ); } } } @@ -1115,12 +1113,12 @@ bool SwTextNode::Convert( SwConversionArgs &rArgs ) // get range of text within node to be converted // (either all the text or the text within the selection // when the conversion was started) - const sal_Int32 nTextBegin = ( rArgs.pStartNode == this ) - ? std::min(rArgs.pStartIdx->GetIndex(), m_Text.getLength()) + const sal_Int32 nTextBegin = ( &rArgs.pStartPos->GetNode() == this ) + ? std::min(rArgs.pStartPos->GetContentIndex(), m_Text.getLength()) : 0; - const sal_Int32 nTextEnd = ( rArgs.pEndNode == this ) - ? std::min(rArgs.pEndIdx->GetIndex(), m_Text.getLength()) + const sal_Int32 nTextEnd = ( &rArgs.pEndPos->GetNode() == this ) + ? std::min(rArgs.pEndPos->GetContentIndex(), m_Text.getLength()) : m_Text.getLength(); rArgs.aConvText.clear(); @@ -1229,11 +1227,9 @@ bool SwTextNode::Convert( SwConversionArgs &rArgs ) rArgs.nConvTextLang = nLangFound; // position where to start looking in next iteration (after current ends) - rArgs.pStartNode = this; - rArgs.pStartIdx->Assign(this, nBegin + nLen ); + rArgs.pStartPos->Assign(*this, nBegin + nLen ); // end position (when we have travelled over the whole document) - rArgs.pEndNode = this; - rArgs.pEndIdx->Assign(this, nBegin ); + rArgs.pEndPos->Assign(*this, nBegin ); } // restore original text diff --git a/sw/source/uibase/lingu/hhcwrp.cxx b/sw/source/uibase/lingu/hhcwrp.cxx index 142399ed30c9..0838fdf37e4c 100644 --- a/sw/source/uibase/lingu/hhcwrp.cxx +++ b/sw/source/uibase/lingu/hhcwrp.cxx @@ -510,9 +510,7 @@ void SwHHCWrapper::Convert() if (pSttPos->GetNode().IsTextNode() && pEndPos->GetNode().IsTextNode()) { - m_pConvArgs.reset( new SwConversionArgs( GetSourceLanguage(), - pSttPos->GetNode().GetTextNode(), pSttPos->nContent, - pEndPos->GetNode().GetTextNode(), pEndPos->nContent ) ); + m_pConvArgs.reset( new SwConversionArgs( GetSourceLanguage(), *pSttPos, *pEndPos ) ); } else // we are not in the text (maybe a graphic or OLE object is selected) let's start from the top { @@ -526,13 +524,11 @@ void SwHHCWrapper::Convert() // just in case we check anyway... if (!pTextNode || !pTextNode->IsTextNode()) return; - m_pConvArgs.reset( new SwConversionArgs( GetSourceLanguage(), - pTextNode, pSttPos->nContent, - pTextNode, pSttPos->nContent ) ); + m_pConvArgs.reset( new SwConversionArgs( GetSourceLanguage(), *pSttPos, *pSttPos ) ); } - OSL_ENSURE( m_pConvArgs->pStartNode && m_pConvArgs->pStartNode->IsTextNode(), + OSL_ENSURE( m_pConvArgs->pStartPos && m_pConvArgs->pStartPos->GetNode().IsTextNode(), "failed to get proper start text node" ); - OSL_ENSURE( m_pConvArgs->pEndNode && m_pConvArgs->pEndNode->IsTextNode(), + OSL_ENSURE( m_pConvArgs->pEndPos && m_pConvArgs->pEndPos->GetNode().IsTextNode(), "failed to get proper end text node" ); // chinese conversion specific settings @@ -564,8 +560,8 @@ void SwHHCWrapper::Convert() nStartIdx = 0; else { - OUString aText( m_pConvArgs->pStartNode->GetText() ); - const sal_Int32 nPos = m_pConvArgs->pStartIdx->GetIndex(); + OUString aText( m_pConvArgs->pStartPos->GetNode().GetTextNode()->GetText() ); + const sal_Int32 nPos = m_pConvArgs->pStartPos->GetContentIndex(); Boundary aBoundary( g_pBreakIt->GetBreakIter()-> getWordBoundary( aText, nPos, g_pBreakIt->GetLocale( m_pConvArgs->nConvSrcLang ), WordType::DICTIONARY_WORD, true ) ); @@ -579,7 +575,7 @@ void SwHHCWrapper::Convert() } if (nStartIdx != -1) - *m_pConvArgs->pStartIdx = nStartIdx; + m_pConvArgs->pStartPos->SetContent( nStartIdx ); } } |