xref: /aoo42x/main/sw/source/ui/wrtsh/wrtsh4.cxx (revision efeef26f)
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 
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 
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 
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 
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
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
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 
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 
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 0;
227 	}
228 	if(IsSttPara())
229 	{
230 		Pop();
231 		return 1;
232 	}
233 	if( !GoPrevSentence()  && !IsSttPara() )
234 			// nicht gefunden --> an den Absatz Anfang
235 		SwCrsrShell::MovePara( fnParaCurr, fnParaStart );
236 	ClearMark();
237 	Combine();
238 	return 1;
239 }
240 
241 
242 sal_Bool SwWrtShell::_FwdPara()
243 {
244 	Push();
245 	ClearMark();
246     // --> OD 2009-01-06 #i81824#
247     // going right and back again left not needed and causes too much
248     // accessibility events due to the cursor movements.
249 //    if(!SwCrsrShell::Right(1,CRSR_SKIP_CHARS))
250 //    {
251 //        Pop(sal_False);
252 //        return 0;
253 //    }
254 //    SwCrsrShell::Left(1,CRSR_SKIP_CHARS);
255     // <--
256 	sal_Bool bRet = SwCrsrShell::MovePara(fnParaNext, fnParaStart);
257 
258 	ClearMark();
259 	Combine();
260 	return bRet;
261 }
262 
263 
264 sal_Bool SwWrtShell::_BwdPara()
265 {
266 	Push();
267 	ClearMark();
268     // --> OD 2009-01-06 #i81824#
269     // going left and back again right not needed and causes too much
270     // accessibility events due to the cursor movements.
271 //    if(!SwCrsrShell::Left(1,CRSR_SKIP_CHARS))
272 //    {
273 //        Pop(sal_False);
274 //        return 0;
275 //    }
276 //    SwCrsrShell::Right(1,CRSR_SKIP_CHARS);
277     // <--
278     // --> OD 2009-01-06 #i81824#
279     // going to start of paragraph only needed, if move to previous paragraph
280     // does not happen. Otherwise, useless accessibility events are triggered
281     // due to cursor movements.
282 //    if(!IsSttOfPara())
283 //        SttPara();
284 	sal_Bool bRet = SwCrsrShell::MovePara(fnParaPrev, fnParaStart);
285     if ( !bRet && !IsSttOfPara() )
286     {
287         SttPara();
288     }
289     // <--
290 
291 	ClearMark();
292 	Combine();
293 	return bRet;
294 }
295 
296 
297