diff options
author | Matteo Casalin <matteo.casalin@yahoo.com> | 2013-08-22 08:11:10 +0200 |
---|---|---|
committer | Michael Stahl <mstahl@redhat.com> | 2013-08-26 10:55:08 +0000 |
commit | 808d3c669c4c49c2dd5ea7fad7841378b5cc2f8c (patch) | |
tree | d9dc6d3ce60aa01ff7d5e5492a8b6728dd22f68b | |
parent | ee4d7829b7f5c07bd0b46dedc9436c83c7dc17ef (diff) |
String to OUString, some cleanup
Change-Id: I7d1cdabdaecae1d993730397a1757727fb40a6db
Reviewed-on: https://gerrit.libreoffice.org/5608
Reviewed-by: Michael Stahl <mstahl@redhat.com>
Tested-by: Michael Stahl <mstahl@redhat.com>
-rw-r--r-- | sw/inc/extinput.hxx | 8 | ||||
-rw-r--r-- | sw/source/core/doc/extinput.cxx | 106 |
2 files changed, 62 insertions, 52 deletions
diff --git a/sw/inc/extinput.hxx b/sw/inc/extinput.hxx index f4d999068d39..7b760e905d7d 100644 --- a/sw/inc/extinput.hxx +++ b/sw/inc/extinput.hxx @@ -16,8 +16,8 @@ * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef _EXTINPUT_HXX -#define _EXTINPUT_HXX +#ifndef EXTINPUT_HXX +#define EXTINPUT_HXX #include <pam.hxx> #include <i18nlangtag/lang.h> @@ -28,7 +28,7 @@ class CommandExtTextInputData; class SwExtTextInput : public SwPaM { std::vector<sal_uInt16> aAttrs; - String sOverwriteText; + OUString sOverwriteText; sal_Bool bInsText : 1; sal_Bool bIsOverwriteCursor : 1; LanguageType eInputLanguage; @@ -44,6 +44,6 @@ public: void SetLanguage(LanguageType eSet) { eInputLanguage = eSet;} }; -#endif //_EXTINPUT_HXX +#endif //EXTINPUT_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/source/core/doc/extinput.cxx b/sw/source/core/doc/extinput.cxx index 3879776ab3c9..f997ba7dfdb9 100644 --- a/sw/source/core/doc/extinput.cxx +++ b/sw/source/core/doc/extinput.cxx @@ -17,6 +17,8 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ +#include <algorithm> + #include <com/sun/star/i18n/ScriptType.hpp> #include <editeng/langitem.hxx> @@ -59,7 +61,7 @@ SwExtTextInput::~SwExtTextInput() { if( nEndCnt < nSttCnt ) { - xub_StrLen n = nEndCnt; nEndCnt = nSttCnt; nSttCnt = n; + std::swap(nSttCnt, nEndCnt); } // In order to get Undo/Redlining etc. working correctly, @@ -83,34 +85,29 @@ SwExtTextInput::~SwExtTextInput() } } rIdx = nSttCnt; - String sTxt( pTNd->GetTxt().copy(nSttCnt, nEndCnt - nSttCnt)); - if( bIsOverwriteCursor && sOverwriteText.Len() ) + const OUString sTxt( pTNd->GetTxt().copy(nSttCnt, nEndCnt - nSttCnt)); + if( bIsOverwriteCursor && !sOverwriteText.isEmpty() ) { - xub_StrLen nLen = sTxt.Len(); - if( nLen > sOverwriteText.Len() ) + const sal_Int32 nLen = sTxt.getLength(); + const sal_Int32 nOWLen = sOverwriteText.getLength(); + if( nLen > nOWLen ) { - rIdx += sOverwriteText.Len(); - pTNd->EraseText( rIdx, nLen - sOverwriteText.Len() ); + rIdx += nOWLen; + pTNd->EraseText( rIdx, nLen - nOWLen ); rIdx = nSttCnt; - pTNd->ReplaceText( rIdx, sOverwriteText.Len(), - sOverwriteText ); + pTNd->ReplaceText( rIdx, nOWLen, sOverwriteText ); if( bInsText ) { rIdx = nSttCnt; - pDoc->GetIDocumentUndoRedo().StartUndo( - UNDO_OVERWRITE, NULL ); - pDoc->Overwrite( *this, sTxt.Copy( 0, - sOverwriteText.Len() )); - pDoc->InsertString( *this, - sTxt.Copy( sOverwriteText.Len() ) ); - pDoc->GetIDocumentUndoRedo().EndUndo( - UNDO_OVERWRITE, NULL ); + pDoc->GetIDocumentUndoRedo().StartUndo( UNDO_OVERWRITE, NULL ); + pDoc->Overwrite( *this, sTxt.copy( 0, nOWLen ) ); + pDoc->InsertString( *this, sTxt.copy( nOWLen ) ); + pDoc->GetIDocumentUndoRedo().EndUndo( UNDO_OVERWRITE, NULL ); } } else { - pTNd->ReplaceText( rIdx, nLen, - sOverwriteText.Copy( 0, nLen )); + pTNd->ReplaceText( rIdx, nLen, sOverwriteText.copy( 0, nLen )); if( bInsText ) { rIdx = nSttCnt; @@ -140,35 +137,41 @@ void SwExtTextInput::SetInputData( const CommandExtTextInputData& rData ) nEndCnt = GetMark()->nContent.GetIndex(); if( nEndCnt < nSttCnt ) { - xub_StrLen n = nEndCnt; nEndCnt = nSttCnt; nSttCnt = n; + std::swap(nSttCnt, nEndCnt); } SwIndex aIdx( pTNd, nSttCnt ); - const String& rNewStr = rData.GetText(); + const OUString rNewStr = rData.GetText(); - if( bIsOverwriteCursor && sOverwriteText.Len() ) + if( bIsOverwriteCursor && !sOverwriteText.isEmpty() ) { - xub_StrLen nReplace = nEndCnt - nSttCnt; - if( rNewStr.Len() < nReplace ) + sal_Int32 nReplace = nEndCnt - nSttCnt; + const sal_Int32 nNewLen = rNewStr.getLength(); + if( nNewLen < nReplace ) { // We have to insert some characters from the saved original text - nReplace = nReplace - rNewStr.Len(); - aIdx += rNewStr.Len(); + nReplace -= nNewLen; + aIdx += nNewLen; pTNd->ReplaceText( aIdx, nReplace, - sOverwriteText.Copy( rNewStr.Len(), nReplace )); + sOverwriteText.copy( nNewLen, nReplace )); aIdx = nSttCnt; - nReplace = rNewStr.Len(); + nReplace = nNewLen; } - else if( sOverwriteText.Len() < nReplace ) + else { - nReplace = nReplace - sOverwriteText.Len(); - aIdx += sOverwriteText.Len(); - pTNd->EraseText( aIdx, nReplace ); - aIdx = nSttCnt; - nReplace = sOverwriteText.Len(); + const sal_Int32 nOWLen = sOverwriteText.getLength(); + if( nOWLen < nReplace ) + { + aIdx += nOWLen; + pTNd->EraseText( aIdx, nReplace-nOWLen ); + aIdx = nSttCnt; + nReplace = nOWLen; + } + else + { + nReplace = std::min(nOWLen, nNewLen); + } } - else if( (nReplace = sOverwriteText.Len()) > rNewStr.Len() ) - nReplace = rNewStr.Len(); pTNd->ReplaceText( aIdx, nReplace, rNewStr ); if( !HasMark() ) @@ -202,23 +205,30 @@ void SwExtTextInput::SetInputData( const CommandExtTextInputData& rData ) void SwExtTextInput::SetOverwriteCursor( sal_Bool bFlag ) { bIsOverwriteCursor = bFlag; + if (!bIsOverwriteCursor) + return; - SwTxtNode* pTNd; - if( bIsOverwriteCursor && - 0 != (pTNd = GetPoint()->nNode.GetNode().GetTxtNode()) ) + const SwTxtNode *const pTNd = GetPoint()->nNode.GetNode().GetTxtNode(); + if (pTNd) { xub_StrLen nSttCnt = GetPoint()->nContent.GetIndex(), nEndCnt = GetMark()->nContent.GetIndex(); - sOverwriteText = pTNd->GetTxt().copy( nEndCnt < nSttCnt ? nEndCnt - : nSttCnt ); - if( sOverwriteText.Len() ) + sOverwriteText = pTNd->GetTxt().copy( std::min(nSttCnt, nEndCnt) ); + if( !sOverwriteText.isEmpty() ) { - xub_StrLen nInWrdAttrPos = sOverwriteText.Search( CH_TXTATR_INWORD ), - nWrdAttrPos = sOverwriteText.Search( CH_TXTATR_BREAKWORD ); - if( nWrdAttrPos < nInWrdAttrPos ) - nInWrdAttrPos = nWrdAttrPos; - if( STRING_NOTFOUND != nInWrdAttrPos ) - sOverwriteText.Erase( nInWrdAttrPos ); + const sal_Int32 nInPos = sOverwriteText.indexOf( CH_TXTATR_INWORD ); + const sal_Int32 nBrkPos = sOverwriteText.indexOf( CH_TXTATR_BREAKWORD ); + + // Find the first attr found, if any. + sal_Int32 nPos = std::min(nInPos, nBrkPos); + if (nPos<0) + { + nPos = std::max(nInPos, nBrkPos); + } + if (nPos>=0) + { + sOverwriteText = sOverwriteText.copy( 0, nPos ); + } } } } |