xref: /AOO41X/main/sw/source/ui/wrtsh/wrtsh4.cxx (revision d3e0dd8eb215533c15e891ee35bd141abe9397ee)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_sw.hxx"
26 
27 
28 #include <wrtsh.hxx>
29 #include <crsskip.hxx>
30 
31 
32 /*
33 * private Methoden, die den Cursor ueber Suchen bewegen. Das
34 * Aufheben der Selektion muss auf der Ebene darueber erfolgen.
35 */
36 
37 /*
38 * Der Anfang eines Wortes ist das Folgen eines nicht-
39 * Trennzeichens auf Trennzeichen. Ferner das Folgen von
40 * nicht-Satztrennern auf Satztrenner. Der Absatzanfang ist
41 * ebenfalls Wortanfang.
42 */
43 
44 
_SttWrd()45 sal_Bool SwWrtShell::_SttWrd()
46 {
47     if ( IsSttPara() )
48         return 1;
49         /*
50             * temporaeren Cursor ohne Selektion erzeugen
51             */
52     Push();
53     ClearMark();
54     if( !GoStartWord() )
55             // nicht gefunden --> an den Absatzanfang
56         SwCrsrShell::MovePara( fnParaCurr, fnParaStart );
57     ClearMark();
58         // falls vorher Mark gesetzt war, zusammenfassen
59     Combine();
60     return 1;
61 }
62 /*
63  * Das Ende eines Wortes ist das Folgen von Trennzeichen auf
64  * nicht-Trennzeichen.  Unter dem Ende eines Wortes wird
65  * ebenfalls die Folge von Worttrennzeichen auf Interpunktions-
66  * zeichen verstanden. Das Absatzende ist ebenfalls Wortende.
67  */
68 
69 
70 
_EndWrd()71 sal_Bool SwWrtShell::_EndWrd()
72 {
73     if ( IsEndWrd() )
74         return 1;
75         // temporaeren Cursor ohne Selektion erzeugen
76     Push();
77     ClearMark();
78     if( !GoEndWord() )
79             // nicht gefunden --> an das Absatz Ende
80         SwCrsrShell::MovePara(fnParaCurr, fnParaEnd);
81     ClearMark();
82         // falls vorher Mark gesetzt war, zusammenfassen
83     Combine();
84     return 1;
85 }
86 
87 
88 
_NxtWrd()89 sal_Bool SwWrtShell::_NxtWrd()
90 {
91     sal_Bool bRet = sal_False;
92     while( IsEndPara() )                // wenn schon am Ende, dann naechsten ???
93     {
94         if(!SwCrsrShell::Right(1,CRSR_SKIP_CHARS))  // Document - Ende ??
95         {
96             Pop( sal_False );
97             return bRet;
98         }
99         bRet = IsStartWord();
100     }
101     Push();
102     ClearMark();
103     while( !bRet )
104     {
105         if( !GoNextWord() )
106         {
107             if( (!IsEndPara() && !SwCrsrShell::MovePara( fnParaCurr, fnParaEnd ) )
108                 || !SwCrsrShell::Right(1,CRSR_SKIP_CHARS) )
109                 break;
110             bRet = IsStartWord();
111         }
112         else
113             bRet = sal_True;
114     }
115     ClearMark();
116     Combine();
117     return bRet;
118 }
119 
_PrvWrd()120 sal_Bool SwWrtShell::_PrvWrd()
121 {
122     sal_Bool bRet = sal_False;
123     while( IsSttPara() )
124     {                               // wenn schon am Anfang, dann naechsten ???
125         if(!SwCrsrShell::Left(1,CRSR_SKIP_CHARS))
126         {                           // Document - Anfang ??
127             Pop( sal_False );
128             return bRet;
129         }
130         bRet = IsStartWord();
131     }
132     Push();
133     ClearMark();
134     while( !bRet )
135     {
136         if( !GoPrevWord() )
137         {
138             if( (!IsSttPara() && !SwCrsrShell::MovePara( fnParaCurr, fnParaStart ) )
139                 || !SwCrsrShell::Left(1,CRSR_SKIP_CHARS) )
140                 break;
141             bRet = IsStartWord();
142         }
143         else
144             bRet = sal_True;
145     }
146     ClearMark();
147     Combine();
148     return bRet;
149 }
150 
151 // --> OD 2008-08-06 #i92468#
152 // method code of <SwWrtShell::_NxtWrd()> before fix for issue i72162
_NxtWrdForDelete()153 sal_Bool SwWrtShell::_NxtWrdForDelete()
154 {
155     if ( IsEndPara() )
156     {
157         if ( !SwCrsrShell::Right(1,CRSR_SKIP_CHARS) )
158         {
159             Pop( sal_False );
160             return sal_False;
161         }
162         return sal_True;
163     }
164     Push();
165     ClearMark();
166     if ( !GoNextWord() )
167     {
168         SwCrsrShell::MovePara( fnParaCurr, fnParaEnd );
169     }
170     ClearMark();
171     Combine();
172     return sal_True;
173 }
174 
175 // method code of <SwWrtShell::_PrvWrd()> before fix for issue i72162
_PrvWrdForDelete()176 sal_Bool SwWrtShell::_PrvWrdForDelete()
177 {
178     if ( IsSttPara() )
179     {
180         if ( !SwCrsrShell::Left(1,CRSR_SKIP_CHARS) )
181         {
182             Pop( sal_False );
183             return sal_False;
184         }
185         return sal_True;
186     }
187     Push();
188     ClearMark();
189     if( !GoPrevWord() )
190     {
191         SwCrsrShell::MovePara( fnParaCurr, fnParaStart );
192     }
193     ClearMark();
194     Combine();
195     return sal_True;
196 }
197 // <--
198 
199 
_FwdSentence()200 sal_Bool SwWrtShell::_FwdSentence()
201 {
202     Push();
203     ClearMark();
204     if(!SwCrsrShell::Right(1,CRSR_SKIP_CHARS))
205     {
206         Pop(sal_False);
207         return 0;
208     }
209     if( !GoNextSentence() && !IsEndPara() )
210         SwCrsrShell::MovePara(fnParaCurr, fnParaEnd);
211 
212     ClearMark();
213     Combine();
214     return 1;
215 }
216 
217 
218 
_BwdSentence()219 sal_Bool SwWrtShell::_BwdSentence()
220 {
221     Push();
222     ClearMark();
223     if(!SwCrsrShell::Left(1,CRSR_SKIP_CHARS))
224     {
225         Pop(sal_False);
226         return sal_False;
227     }
228     if(IsSttPara())
229     {
230         Pop();
231         return sal_True;
232     }
233     if( !GoPrevSentence()  && !IsSttPara() )
234         // nicht gefunden --> an den Absatz Anfang
235             SwCrsrShell::MovePara( fnParaCurr, fnParaStart );
236     ClearMark();
237     Combine();
238 
239     return sal_True;
240 }
241 
242 
_FwdPara()243 sal_Bool SwWrtShell::_FwdPara()
244 {
245     Push();
246     ClearMark();
247     // --> OD 2009-01-06 #i81824#
248     // going right and back again left not needed and causes too much
249     // accessibility events due to the cursor movements.
250 //    if(!SwCrsrShell::Right(1,CRSR_SKIP_CHARS))
251 //    {
252 //        Pop(sal_False);
253 //        return 0;
254 //    }
255 //    SwCrsrShell::Left(1,CRSR_SKIP_CHARS);
256     // <--
257     sal_Bool bRet = SwCrsrShell::MovePara(fnParaNext, fnParaStart);
258 
259     ClearMark();
260     Combine();
261     return bRet;
262 }
263 
264 
_BwdPara()265 sal_Bool SwWrtShell::_BwdPara()
266 {
267     Push();
268     ClearMark();
269     // --> OD 2009-01-06 #i81824#
270     // going left and back again right not needed and causes too much
271     // accessibility events due to the cursor movements.
272 //    if(!SwCrsrShell::Left(1,CRSR_SKIP_CHARS))
273 //    {
274 //        Pop(sal_False);
275 //        return 0;
276 //    }
277 //    SwCrsrShell::Right(1,CRSR_SKIP_CHARS);
278     // <--
279     // --> OD 2009-01-06 #i81824#
280     // going to start of paragraph only needed, if move to previous paragraph
281     // does not happen. Otherwise, useless accessibility events are triggered
282     // due to cursor movements.
283 //    if(!IsSttOfPara())
284 //        SttPara();
285     sal_Bool bRet = SwCrsrShell::MovePara(fnParaPrev, fnParaStart);
286     if ( !bRet && !IsSttOfPara() )
287     {
288         SttPara();
289     }
290     // <--
291 
292     ClearMark();
293     Combine();
294     return bRet;
295 }
296 
297 
298