i18npool/source/breakiterator/breakiterator_unicode.cxx |   22 +++++++++++++---
 1 file changed, 19 insertions(+), 3 deletions(-)

New commits:
commit 5955e7d66d9b0e87f93fd9746a85bff132da9794
Author: László Németh <nem...@numbertext.org>
Date:   Tue Jul 1 00:15:11 2014 +0200

    Revert "fdo#79372 fix hyphenation (remove fdo#56392 fix..."
    
    This reverts commit 259d3421d4cf7788d9099daa40fc181c661783ee.
    
    Change-Id: I59564fb26111891f01ef062a598e2d61b29b41fe
    Reviewed-on: https://gerrit.libreoffice.org/10000
    Reviewed-by: Caolán McNamara <caol...@redhat.com>
    Tested-by: Caolán McNamara <caol...@redhat.com>

diff --git a/i18npool/source/breakiterator/breakiterator_unicode.cxx 
b/i18npool/source/breakiterator/breakiterator_unicode.cxx
index b491181..126ac7a 100644
--- a/i18npool/source/breakiterator/breakiterator_unicode.cxx
+++ b/i18npool/source/breakiterator/breakiterator_unicode.cxx
@@ -376,13 +376,29 @@ LineBreakResults SAL_CALL 
BreakIterator_Unicode::getLineBreak(
         if (line.aBreakIterator->preceding(nStartPos + 1) == nStartPos) { 
//Line boundary break
             lbr.breakIndex = nStartPos;
             lbr.breakType = BreakType::WORDBOUNDARY;
-        } else if (hOptions.rHyphenator.is()) { //Hyphenation break, FIXME: 
fdo#56392
-            Boundary wBoundary = getWordBoundary( Text, nStartPos, rLocale,
+        } else if (hOptions.rHyphenator.is()) { //Hyphenation break
+            sal_Int32 boundary_with_punctuation = (line.aBreakIterator->next() 
!= BreakIterator::DONE) ? line.aBreakIterator->current() : 0;
+            line.aBreakIterator->preceding(nStartPos + 1); // reset to check 
correct hyphenation of "word-word"
+
+            sal_Int32 nStartPosWordEnd = nStartPos;
+            while (line.aBreakIterator->current() < nStartPosWordEnd && 
u_ispunct((sal_uInt32)Text[nStartPosWordEnd])) // starting punctuation
+                nStartPosWordEnd --;
+
+            Boundary wBoundary = getWordBoundary( Text, nStartPosWordEnd, 
rLocale,
                 WordType::DICTIONARY_WORD, false);
+
+            nStartPosWordEnd = wBoundary.endPos;
+            while (nStartPosWordEnd < Text.getLength() && 
(u_ispunct((sal_uInt32)Text[nStartPosWordEnd]))) // ending punctuation
+                nStartPosWordEnd ++;
+            nStartPosWordEnd = nStartPosWordEnd - wBoundary.endPos;
+            if (hOptions.hyphenIndex - wBoundary.startPos < nStartPosWordEnd) 
nStartPosWordEnd = hOptions.hyphenIndex - wBoundary.startPos;
+#define SPACE 0x0020
+            while (boundary_with_punctuation > wBoundary.endPos && 
Text[--boundary_with_punctuation] == SPACE);
+            if (boundary_with_punctuation != 0) boundary_with_punctuation += 1 
- wBoundary.endPos;
             uno::Reference< linguistic2::XHyphenatedWord > aHyphenatedWord;
             aHyphenatedWord = 
hOptions.rHyphenator->hyphenate(Text.copy(wBoundary.startPos,
                         wBoundary.endPos - wBoundary.startPos), rLocale,
-                    (sal_Int16) (hOptions.hyphenIndex - wBoundary.startPos), 
hOptions.aHyphenationOptions);
+                    (sal_Int16) (hOptions.hyphenIndex - wBoundary.startPos - 
nStartPosWordEnd), hOptions.aHyphenationOptions);
             if (aHyphenatedWord.is()) {
                 lbr.rHyphenatedWord = aHyphenatedWord;
                 if(wBoundary.startPos + aHyphenatedWord->getHyphenationPos() + 
1 < nMinBreakPos )
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to