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';