summaryrefslogtreecommitdiff
path: root/sw/source/core/uibase/wrtsh/wrtsh4.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sw/source/core/uibase/wrtsh/wrtsh4.cxx')
-rw-r--r--sw/source/core/uibase/wrtsh/wrtsh4.cxx238
1 files changed, 238 insertions, 0 deletions
diff --git a/sw/source/core/uibase/wrtsh/wrtsh4.cxx b/sw/source/core/uibase/wrtsh/wrtsh4.cxx
new file mode 100644
index 000000000000..6966e45c4fda
--- /dev/null
+++ b/sw/source/core/uibase/wrtsh/wrtsh4.cxx
@@ -0,0 +1,238 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * 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 .
+ */
+
+#include <wrtsh.hxx>
+#include <crsskip.hxx>
+
+// Private methods, which move the cursor over search.
+// The removal of the selection must be made on the level above.
+
+// The beginning of a word is the follow of a
+// non-delimiter to delimiter. Furthermore, the follow of
+// non-sentence separators on sentence separator.
+// The begin of paragraph is also the word beginning.
+
+bool SwWrtShell::_SttWrd()
+{
+ if ( IsSttPara() )
+ return true;
+ // Create temporary cursor without selection.
+ Push();
+ ClearMark();
+ if( !GoStartWord() )
+ // not found --> go to the beginning of the paragraph.
+ SwCrsrShell::MovePara( fnParaCurr, fnParaStart );
+ ClearMark();
+ // If Mark was previously set, summarize.
+ Combine();
+ return true;
+}
+
+// The end of a word is the follow of separator to nonseparator.
+// The end of a word is also the sequence of wordseparators to
+// punctuation marks.
+// The end of a paragraph is also the end of a word.
+
+bool SwWrtShell::_EndWrd()
+{
+ if ( IsEndWrd() )
+ return true;
+ // Create temporary cursor without selection.
+ Push();
+ ClearMark();
+ if( !GoEndWord() )
+ // not found --> go to the end of the paragraph.
+ SwCrsrShell::MovePara(fnParaCurr, fnParaEnd);
+ ClearMark();
+ // If Mark was previously set, summarize.
+ Combine();
+ return true;
+}
+
+sal_Bool SwWrtShell::_NxtWrd()
+{
+ sal_Bool bRet = sal_False;
+ while( IsEndPara() ) // If already at the end, then the next???
+ {
+ if(!SwCrsrShell::Right(1,CRSR_SKIP_CHARS)) // Document - end ??
+ {
+ 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() )
+ { // if already at the beginning, then the next???
+ if(!SwCrsrShell::Left(1,CRSR_SKIP_CHARS))
+ { // Document - beginning ??
+ 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;
+}
+
+// #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 0;
+ }
+ if( !GoStartSentence() && !IsSttPara() )
+ // not found --> go to the beginning of the paragraph
+ SwCrsrShell::MovePara( fnParaCurr, fnParaStart );
+ ClearMark();
+ Combine();
+ return 1;
+}
+
+sal_Bool SwWrtShell::_FwdPara()
+{
+ Push();
+ ClearMark();
+ sal_Bool bRet = SwCrsrShell::MovePara(fnParaNext, fnParaStart);
+
+ ClearMark();
+ Combine();
+ return bRet;
+}
+
+sal_Bool SwWrtShell::_BwdPara()
+{
+ Push();
+ ClearMark();
+
+ sal_Bool bRet = SwCrsrShell::MovePara(fnParaPrev, fnParaStart);
+ if ( !bRet && !IsSttOfPara() )
+ {
+ SttPara();
+ }
+
+ ClearMark();
+ Combine();
+ return bRet;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */