From b898b1a09307cfb38721a179419b1fa48b772490 Mon Sep 17 00:00:00 2001 From: David Tardon Date: Fri, 11 May 2012 10:19:11 +0200 Subject: [PATCH] fdo#49629 skip white space at word boundaries After that, isEndWord is always true for getWordBoundary().endPos (and similarly isStartWord for getWordBoundary().startPos). Note that skipSpace can actually skip other characters besides white space, depending on word type. Change-Id: I322bcd0f926a8a7905ec8d2ebbed10584e33d9c8 --- .../source/breakiterator/breakiteratorImpl.cxx | 16 ++++++++++++++++ 1 files changed, 16 insertions(+), 0 deletions(-) diff --git a/i18npool/source/breakiterator/breakiteratorImpl.cxx b/i18npool/source/breakiterator/breakiteratorImpl.cxx index 8201453..51e08ee 100644 --- a/i18npool/source/breakiterator/breakiteratorImpl.cxx +++ b/i18npool/source/breakiterator/breakiteratorImpl.cxx @@ -189,6 +189,22 @@ Boundary SAL_CALL BreakIteratorImpl::getWordBoundary( const OUString& Text, sal_ nPos = bDirection ? next : prev; } result = LBI->getWordBoundary(Text, nPos, rLocale, rWordType, bDirection); + + const sal_Int32 nStartPos(skipSpace(Text, result.startPos, len, rWordType, sal_True)); + const sal_Int32 nEndPos(skipSpace(Text, result.endPos, len, rWordType, sal_False)); + if ((nStartPos != result.startPos) || nEndPos != result.endPos) + { + if (nStartPos >= nEndPos) + // that should not be possible? + result.endPos = result.startPos = len; + else + { + if (nStartPos != result.startPos) + result.startPos = nStartPos; + if (nEndPos != result.endPos) + result.endPos = nEndPos; + } + } } } return result; -- 1.7.7.6