blob: 7c18074753db38da20285987b6227d80c6209910 [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 <wrtsh.hxx>
#include <crsskip.hxx>
/*
* private Methoden, die den Cursor ueber Suchen bewegen. Das
* Aufheben der Selektion muss auf der Ebene darueber erfolgen.
*/
/*
* Der Anfang eines Wortes ist das Folgen eines nicht-
* Trennzeichens auf Trennzeichen. Ferner das Folgen von
* nicht-Satztrennern auf Satztrenner. Der Absatzanfang ist
* ebenfalls Wortanfang.
*/
sal_Bool SwWrtShell::_SttWrd()
{
if ( IsSttPara() )
return 1;
/*
* temporaeren Cursor ohne Selektion erzeugen
*/
Push();
ClearMark();
if( !GoStartWord() )
// nicht gefunden --> an den Absatzanfang
SwCrsrShell::MovePara( fnParaCurr, fnParaStart );
ClearMark();
// falls vorher Mark gesetzt war, zusammenfassen
Combine();
return 1;
}
/*
* Das Ende eines Wortes ist das Folgen von Trennzeichen auf
* nicht-Trennzeichen. Unter dem Ende eines Wortes wird
* ebenfalls die Folge von Worttrennzeichen auf Interpunktions-
* zeichen verstanden. Das Absatzende ist ebenfalls Wortende.
*/
sal_Bool SwWrtShell::_EndWrd()
{
if ( IsEndWrd() )
return 1;
// temporaeren Cursor ohne Selektion erzeugen
Push();
ClearMark();
if( !GoEndWord() )
// nicht gefunden --> an das Absatz Ende
SwCrsrShell::MovePara(fnParaCurr, fnParaEnd);
ClearMark();
// falls vorher Mark gesetzt war, zusammenfassen
Combine();
return 1;
}
sal_Bool SwWrtShell::_NxtWrd()
{
sal_Bool bRet = sal_False;
while( IsEndPara() ) // wenn schon am Ende, dann naechsten ???
{
if(!SwCrsrShell::Right(1,CRSR_SKIP_CHARS)) // Document - Ende ??
{
Pop( sal_False );
return bRet;
}
bRet = IsStartWord();
}
Push();
ClearMark();
while( !bRet )
{
if( !GoNextWord() )
{
if( (!IsEndPara() && !SwCrsrShell::MovePara( fnParaCurr, fnParaEnd ) )
|| !SwCrsrShell::Right(1,CRSR_SKIP_CHARS) )
break;
bRet = IsStartWord();
}
else
bRet = sal_True;
}
ClearMark();
Combine();
return bRet;
}
sal_Bool SwWrtShell::_PrvWrd()
{
sal_Bool bRet = sal_False;
while( IsSttPara() )
{ // wenn schon am Anfang, dann naechsten ???
if(!SwCrsrShell::Left(1,CRSR_SKIP_CHARS))
{ // Document - Anfang ??
Pop( sal_False );
return bRet;
}
bRet = IsStartWord();
}
Push();
ClearMark();
while( !bRet )
{
if( !GoPrevWord() )
{
if( (!IsSttPara() && !SwCrsrShell::MovePara( fnParaCurr, fnParaStart ) )
|| !SwCrsrShell::Left(1,CRSR_SKIP_CHARS) )
break;
bRet = IsStartWord();
}
else
bRet = sal_True;
}
ClearMark();
Combine();
return bRet;
}
// --> OD 2008-08-06 #i92468#
// method code of <SwWrtShell::_NxtWrd()> before fix for issue i72162
sal_Bool SwWrtShell::_NxtWrdForDelete()
{
if ( IsEndPara() )
{
if ( !SwCrsrShell::Right(1,CRSR_SKIP_CHARS) )
{
Pop( sal_False );
return sal_False;
}
return sal_True;
}
Push();
ClearMark();
if ( !GoNextWord() )
{
SwCrsrShell::MovePara( fnParaCurr, fnParaEnd );
}
ClearMark();
Combine();
return sal_True;
}
// method code of <SwWrtShell::_PrvWrd()> before fix for issue i72162
sal_Bool SwWrtShell::_PrvWrdForDelete()
{
if ( IsSttPara() )
{
if ( !SwCrsrShell::Left(1,CRSR_SKIP_CHARS) )
{
Pop( sal_False );
return sal_False;
}
return sal_True;
}
Push();
ClearMark();
if( !GoPrevWord() )
{
SwCrsrShell::MovePara( fnParaCurr, fnParaStart );
}
ClearMark();
Combine();
return sal_True;
}
// <--
sal_Bool SwWrtShell::_FwdSentence()
{
Push();
ClearMark();
if(!SwCrsrShell::Right(1,CRSR_SKIP_CHARS))
{
Pop(sal_False);
return 0;
}
if( !GoNextSentence() && !IsEndPara() )
SwCrsrShell::MovePara(fnParaCurr, fnParaEnd);
ClearMark();
Combine();
return 1;
}
sal_Bool SwWrtShell::_BwdSentence()
{
Push();
ClearMark();
if(!SwCrsrShell::Left(1,CRSR_SKIP_CHARS))
{
Pop(sal_False);
return sal_False;
}
if(IsSttPara())
{
Pop();
return sal_True;
}
if( !GoPrevSentence() && !IsSttPara() )
// nicht gefunden --> an den Absatz Anfang
SwCrsrShell::MovePara( fnParaCurr, fnParaStart );
ClearMark();
Combine();
return sal_True;
}
sal_Bool SwWrtShell::_FwdPara()
{
Push();
ClearMark();
// --> OD 2009-01-06 #i81824#
// going right and back again left not needed and causes too much
// accessibility events due to the cursor movements.
// if(!SwCrsrShell::Right(1,CRSR_SKIP_CHARS))
// {
// Pop(sal_False);
// return 0;
// }
// SwCrsrShell::Left(1,CRSR_SKIP_CHARS);
// <--
sal_Bool bRet = SwCrsrShell::MovePara(fnParaNext, fnParaStart);
ClearMark();
Combine();
return bRet;
}
sal_Bool SwWrtShell::_BwdPara()
{
Push();
ClearMark();
// --> OD 2009-01-06 #i81824#
// going left and back again right not needed and causes too much
// accessibility events due to the cursor movements.
// if(!SwCrsrShell::Left(1,CRSR_SKIP_CHARS))
// {
// Pop(sal_False);
// return 0;
// }
// SwCrsrShell::Right(1,CRSR_SKIP_CHARS);
// <--
// --> OD 2009-01-06 #i81824#
// going to start of paragraph only needed, if move to previous paragraph
// does not happen. Otherwise, useless accessibility events are triggered
// due to cursor movements.
// if(!IsSttOfPara())
// SttPara();
sal_Bool bRet = SwCrsrShell::MovePara(fnParaPrev, fnParaStart);
if ( !bRet && !IsSttOfPara() )
{
SttPara();
}
// <--
ClearMark();
Combine();
return bRet;
}