[Libreoffice-commits] core.git: linguistic/source

Michael Stahl mstahl at redhat.com
Mon Sep 2 07:05:28 PDT 2013


 linguistic/source/gciterator.cxx |   12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

New commits:
commit b23999755a865a277c29adfc1dc0c249275bfd7e
Author: Michael Stahl <mstahl at redhat.com>
Date:   Mon Sep 2 15:58:00 2013 +0200

    fdo#68750: ensure that GetSuggestedEndOfSentence makes progress
    
    Checking a string of 17399 spaces takes 20 seconds here in
    GrammarCheckingIterator::GetSuggestedEndOfSentence() because
    BreakIterator_Unicode::endOfSentence() will always return
    0 as a result regardless of what nStartPos it gets.
    
    Change-Id: Id02440a91d7015c2896e387854445ee5383092fa

diff --git a/linguistic/source/gciterator.cxx b/linguistic/source/gciterator.cxx
index b806c22..694dcd7 100644
--- a/linguistic/source/gciterator.cxx
+++ b/linguistic/source/gciterator.cxx
@@ -754,13 +754,23 @@ sal_Int32 GrammarCheckingIterator::GetSuggestedEndOfSentence(
         m_xBreakIterator = i18n::BreakIterator::create(xContext);
     }
     sal_Int32 nTextLen = rText.getLength();
-    sal_Int32 nEndPosition;
+    sal_Int32 nEndPosition(0);
     sal_Int32 nTmpStartPos = nSentenceStartPos;
     do
     {
+        sal_Int32 const nPrevEndPosition(nEndPosition);
         nEndPosition = nTextLen;
         if (nTmpStartPos < nTextLen)
+        {
             nEndPosition = m_xBreakIterator->endOfSentence( rText, nTmpStartPos, rLocale );
+            if (nEndPosition <= nPrevEndPosition)
+            {
+                // fdo#68750 if there's no progress at all then presumably
+                // there's no end of sentence in this paragraph so just
+                // set the end position to end of paragraph
+                nEndPosition = nTextLen;
+            }
+        }
         if (nEndPosition < 0)
             nEndPosition = nTextLen;
 


More information about the Libreoffice-commits mailing list