summaryrefslogtreecommitdiffstats
path: root/sw/source/uibase/wrtsh/wrtsh4.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sw/source/uibase/wrtsh/wrtsh4.cxx')
-rw-r--r--sw/source/uibase/wrtsh/wrtsh4.cxx253
1 files changed, 253 insertions, 0 deletions
diff --git a/sw/source/uibase/wrtsh/wrtsh4.cxx b/sw/source/uibase/wrtsh/wrtsh4.cxx
new file mode 100644
index 0000000000..0442e3152b
--- /dev/null
+++ b/sw/source/uibase/wrtsh/wrtsh4.cxx
@@ -0,0 +1,253 @@
+/* -*- 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 <LibreOfficeKit/LibreOfficeKitEnums.h>
+
+// 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.
+
+void SwWrtShell::SttWrd()
+{
+ if ( IsSttPara() )
+ return;
+ // Create temporary cursor without selection.
+ Push();
+ ClearMark();
+ if( !GoStartWord() )
+ // not found --> go to the beginning of the paragraph.
+ SwCursorShell::MovePara( GoCurrPara, fnParaStart );
+ ClearMark();
+ // If Mark was previously set, summarize.
+ Combine();
+}
+
+// The end of a word is the follow of separator to nonseparator.
+// The end of a word is also the sequence of word separators to
+// punctuation marks.
+// The end of a paragraph is also the end of a word.
+
+void SwWrtShell::EndWrd()
+{
+ if ( IsEndWrd() )
+ return;
+ // Create temporary cursor without selection.
+ Push();
+ ClearMark();
+ if( !GoEndWord() )
+ // not found --> go to the end of the paragraph.
+ SwCursorShell::MovePara(GoCurrPara, fnParaEnd);
+ ClearMark();
+ // If Mark was previously set, summarize.
+ Combine();
+}
+
+bool SwWrtShell::NxtWrd_()
+{
+ bool bRet = false;
+ while( IsEndPara() ) // If already at the end, then the next???
+ {
+ if(!SwCursorShell::Right(1,SwCursorSkipMode::Chars)) // Document - end ??
+ {
+ Pop(SwCursorShell::PopMode::DeleteCurrent);
+ return bRet;
+ }
+ bRet = IsStartWord();
+ }
+ Push();
+ ClearMark();
+ while( !bRet )
+ {
+ if( !GoNextWord() )
+ {
+ if( (!IsEndPara() && !SwCursorShell::MovePara( GoCurrPara, fnParaEnd ) )
+ || !SwCursorShell::Right(1,SwCursorSkipMode::Chars) )
+ break;
+ bRet = IsStartWord();
+ }
+ else
+ bRet = true;
+ }
+ ClearMark();
+ Combine();
+ return bRet;
+}
+
+bool SwWrtShell::PrvWrd_()
+{
+ bool bRet = false;
+ while( IsSttPara() )
+ { // if already at the beginning, then the next???
+ if(!SwCursorShell::Left(1,SwCursorSkipMode::Chars))
+ { // Document - beginning ??
+ Pop(SwCursorShell::PopMode::DeleteCurrent);
+ return bRet;
+ }
+ bRet = IsStartWord() || IsEndPara();
+ }
+ Push();
+ ClearMark();
+ while( !bRet )
+ {
+ if( !GoPrevWord() )
+ {
+ if( (!IsSttPara() && !SwCursorShell::MovePara( GoCurrPara, fnParaStart ) )
+ || !SwCursorShell::Left(1,SwCursorSkipMode::Chars) )
+ break;
+ bRet = IsStartWord();
+ }
+ else
+ bRet = true;
+ }
+ ClearMark();
+ Combine();
+ return bRet;
+}
+
+// #i92468#
+// method code of <SwWrtShell::NxtWrd_()> before fix for issue i72162
+bool SwWrtShell::NxtWrdForDelete()
+{
+ if ( IsEndPara() )
+ {
+ if ( !SwCursorShell::Right(1,SwCursorSkipMode::Chars) )
+ {
+ Pop(SwCursorShell::PopMode::DeleteCurrent);
+ return false;
+ }
+ return true;
+ }
+ Push();
+ ClearMark();
+ if ( !GoNextWord() )
+ {
+ SwCursorShell::MovePara( GoCurrPara, fnParaEnd );
+ }
+ ClearMark();
+ Combine();
+ return true;
+}
+
+// method code of <SwWrtShell::PrvWrd_()> before fix for issue i72162
+bool SwWrtShell::PrvWrdForDelete()
+{
+ if ( IsSttPara() )
+ {
+ if ( !SwCursorShell::Left(1,SwCursorSkipMode::Chars) )
+ {
+ Pop(SwCursorShell::PopMode::DeleteCurrent);
+ return false;
+ }
+ return true;
+ }
+ Push();
+ ClearMark();
+ if( !GoPrevWord() )
+ {
+ SwCursorShell::MovePara( GoCurrPara, fnParaStart );
+ }
+ ClearMark();
+ Combine();
+ return true;
+}
+
+bool SwWrtShell::FwdSentence_()
+{
+ Push();
+ ClearMark();
+ if(!SwCursorShell::Right(1,SwCursorSkipMode::Chars))
+ {
+ Pop(SwCursorShell::PopMode::DeleteCurrent);
+ return false;
+ }
+ if( !GoNextSentence() && !IsEndPara() )
+ SwCursorShell::MovePara(GoCurrPara, fnParaEnd);
+
+ ClearMark();
+ Combine();
+ return true;
+}
+
+bool SwWrtShell::BwdSentence_()
+{
+ Push();
+ ClearMark();
+ if(!SwCursorShell::Left(1,SwCursorSkipMode::Chars))
+ {
+ Pop(SwCursorShell::PopMode::DeleteCurrent);
+ return false;
+ }
+ if( !GoStartSentence() && !IsSttPara() )
+ // not found --> go to the beginning of the paragraph
+ SwCursorShell::MovePara( GoCurrPara, fnParaStart );
+ ClearMark();
+ Combine();
+ return true;
+}
+
+bool SwWrtShell::FwdPara_()
+{
+ Push();
+ ClearMark();
+ bool bRet = SwCursorShell::MovePara(GoNextPara, fnParaStart);
+
+ ClearMark();
+ Combine();
+ return bRet;
+}
+
+bool SwWrtShell::BwdPara_()
+{
+ Push();
+ ClearMark();
+
+ bool bRet = SwCursorShell::MovePara(GoPrevPara, fnParaStart);
+ if ( !bRet && !IsSttOfPara() )
+ {
+ SttPara();
+ }
+
+ ClearMark();
+ Combine();
+ return bRet;
+}
+
+std::optional<OString> SwWrtShell::getLOKPayload(int nType, int nViewId) const
+{
+ switch(nType)
+ {
+ case LOK_CALLBACK_INVALIDATE_VISIBLE_CURSOR:
+ case LOK_CALLBACK_INVALIDATE_VIEW_CURSOR:
+ return GetVisibleCursor()->getLOKPayload(nType, nViewId);
+ case LOK_CALLBACK_TEXT_SELECTION:
+ case LOK_CALLBACK_TEXT_SELECTION_START:
+ case LOK_CALLBACK_TEXT_SELECTION_END:
+ case LOK_CALLBACK_TEXT_VIEW_SELECTION:
+ return GetCursor_()->getLOKPayload(nType, nViewId);
+ }
+ abort();
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */