Apply hyphenation patch (Igor Poretsky) FIXME: tests fail
diff --git a/liblouis/lou_translateString.c b/liblouis/lou_translateString.c index a9ccc76..7cbf3bd 100644 --- a/liblouis/lou_translateString.c +++ b/liblouis/lou_translateString.c
@@ -2038,6 +2038,7 @@ { #define HYPHSTRING 100 widechar workingBuffer[HYPHSTRING]; + int inputPos[HYPHSTRING]; int k, kk; int wordStart; int wordEnd; @@ -2051,7 +2052,7 @@ kk = HYPHSTRING; if (!lou_backTranslate (tableList, inbuf, &k, &workingBuffer[0], - &kk, NULL, NULL, NULL, NULL, NULL, 0)) + &kk, NULL, NULL, NULL, inputPos, NULL, 0)) return 0; } else @@ -2079,30 +2080,24 @@ (&workingBuffer[wordStart], wordEnd - wordStart + 1, &hyphens[wordStart])) return 0; - for (k = 0; k <= wordStart; k++) - hyphens[k] = '0'; if (mode != 0) { - widechar workingBuffer2[HYPHSTRING]; - int outputPos[HYPHSTRING]; char hyphens2[HYPHSTRING]; - kk = wordEnd - wordStart + 1; + kk = wordEnd + 1; k = HYPHSTRING; - if (!lou_translate (tableList, &workingBuffer[wordStart], &kk, - &workingBuffer2[0], &k, NULL, - NULL, &outputPos[0], NULL, NULL, 0)) - return 0; - for (kk = 0; kk < k; kk++) + for (kk = wordStart; kk < wordEnd; kk++) { - int hyphPos = outputPos[kk]; + int hyphPos = inputPos[kk]; if (hyphPos > k || hyphPos < 0) break; - if (hyphens[wordStart + kk] & 1) + if (hyphens[kk] & 1) hyphens2[hyphPos] = '1'; else hyphens2[hyphPos] = '0'; } - for (kk = wordStart; kk < wordStart + k; kk++) + wordStart = inputPos[wordStart]; + wordEnd = inputPos[wordEnd]; + for (kk = wordStart; kk < k; kk++) if (!table->noBreak || hyphens2[kk] == '0') hyphens[kk] = hyphens2[kk]; else @@ -2110,15 +2105,15 @@ TranslationTableRule *noBreakRule = (TranslationTableRule *) & table->ruleArea[table->noBreak]; int kkk; - if (kk > 0) + if (kk > wordStart) for (kkk = 0; kkk < noBreakRule->charslen; kkk++) - if (workingBuffer2[kk - 1] == noBreakRule->charsdots[kkk]) + if (inbuf[kk - 1] == noBreakRule->charsdots[kkk]) { hyphens[kk] = '0'; break; } for (kkk = 0; kkk < noBreakRule->dotslen; kkk++); - if (workingBuffer2[kk] == + if (inbuf[kk] == noBreakRule->charsdots[noBreakRule->charslen + kkk]) { hyphens[kk] = '0'; @@ -2127,7 +2122,9 @@ } } for (k = 0; k < inlen; k++) - if (hyphens[k] & 1) + if ((k <= wordStart) || (k >= wordEnd)) + hyphens[k] = '0'; + else if (hyphens[k] & 1) hyphens[k] = '1'; else hyphens[k] = '0';