blob: bdd26f65029b630131b45cbf59029e2929ef5622 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_sw.hxx"
#include "SwGrammarMarkUp.hxx"
SwGrammarMarkUp::~SwGrammarMarkUp()
{
}
SwWrongList* SwGrammarMarkUp::Clone()
{
SwWrongList* pClone = new SwGrammarMarkUp();
pClone->CopyFrom( *this );
return pClone;
}
void SwGrammarMarkUp::CopyFrom( const SwWrongList& rCopy )
{
maSentence = ((const SwGrammarMarkUp&)rCopy).maSentence;
SwWrongList::CopyFrom( rCopy );
}
void SwGrammarMarkUp::MoveGrammar( xub_StrLen nPos, long nDiff )
{
Move( nPos, nDiff );
if( !maSentence.size() )
return;
std::vector< xub_StrLen >::iterator pIter = maSentence.begin();
while( pIter != maSentence.end() && *pIter < nPos )
++pIter;
xub_StrLen nEnd = nDiff < 0 ? xub_StrLen(nPos - nDiff) : nPos;
while( pIter != maSentence.end() )
{
if( *pIter >= nEnd )
*pIter = xub_StrLen( *pIter + nDiff );
else
*pIter = nPos;
++pIter;
}
}
SwGrammarMarkUp* SwGrammarMarkUp::SplitGrammarList( xub_StrLen nSplitPos )
{
SwGrammarMarkUp* pNew = (SwGrammarMarkUp*)SplitList( nSplitPos );
if( !maSentence.size() )
return pNew;
std::vector< xub_StrLen >::iterator pIter = maSentence.begin();
while( pIter != maSentence.end() && *pIter < nSplitPos )
++pIter;
if( pIter != maSentence.begin() )
{
if( !pNew ) {
pNew = new SwGrammarMarkUp();
pNew->SetInvalid( 0, STRING_LEN );
}
pNew->maSentence.insert( pNew->maSentence.begin(), maSentence.begin(), pIter );
maSentence.erase( maSentence.begin(), pIter );
}
return pNew;
}
void SwGrammarMarkUp::JoinGrammarList( SwGrammarMarkUp* pNext, xub_StrLen nInsertPos )
{
JoinList( pNext, nInsertPos );
if (pNext)
{
if( !pNext->maSentence.size() )
return;
std::vector< xub_StrLen >::iterator pIter = pNext->maSentence.begin();
while( pIter != pNext->maSentence.end() )
{
*pIter = *pIter + nInsertPos;
++pIter;
}
maSentence.insert( maSentence.end(), pNext->maSentence.begin(), pNext->maSentence.end() );
}
}
void SwGrammarMarkUp::ClearGrammarList( xub_StrLen nSentenceEnd )
{
if( STRING_LEN == nSentenceEnd ) {
ClearList();
maSentence.clear();
Validate();
} else if( GetBeginInv() <= nSentenceEnd ) {
std::vector< xub_StrLen >::iterator pIter = maSentence.begin();
xub_StrLen nStart = 0;
while( pIter != maSentence.end() && *pIter < GetBeginInv() )
{
nStart = *pIter;
++pIter;
}
std::vector< xub_StrLen >::iterator pLast = pIter;
while( pLast != maSentence.end() && *pLast <= nSentenceEnd )
++pLast;
maSentence.erase( pIter, pLast );
RemoveEntry( nStart, nSentenceEnd );
SetInvalid( nSentenceEnd + 1, STRING_LEN );
}
}
void SwGrammarMarkUp::setSentence( xub_StrLen nStart )
{
std::vector< xub_StrLen >::iterator pIter = maSentence.begin();
while( pIter != maSentence.end() && *pIter < nStart )
++pIter;
if( pIter == maSentence.end() || *pIter > nStart )
maSentence.insert( pIter, nStart );
}
xub_StrLen SwGrammarMarkUp::getSentenceStart( xub_StrLen nPos )
{
if( !maSentence.size() )
return 0;
std::vector< xub_StrLen >::iterator pIter = maSentence.begin();
while( pIter != maSentence.end() && *pIter < nPos )
++pIter;
if( pIter != maSentence.begin() )
--pIter;
xub_StrLen nRet = 0;
if( pIter != maSentence.end() && *pIter < nPos )
nRet = *pIter;
return nRet;
}
xub_StrLen SwGrammarMarkUp::getSentenceEnd( xub_StrLen nPos )
{
if( !maSentence.size() )
return STRING_LEN;
std::vector< xub_StrLen >::iterator pIter = maSentence.begin();
while( pIter != maSentence.end() && *pIter <= nPos )
++pIter;
xub_StrLen nRet = STRING_LEN;
if( pIter != maSentence.end() )
nRet = *pIter;
return nRet;
}