diff options
Diffstat (limited to 'sw/source/uibase/wrtsh/wrtsh4.cxx')
-rw-r--r-- | sw/source/uibase/wrtsh/wrtsh4.cxx | 253 |
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: */ |