From b6234f3e32fd4698cf2f872e446ec8a95ffc9275 Mon Sep 17 00:00:00 2001 From: Ali Gholami Rudi Date: Thu, 1 Nov 2018 22:32:17 +0330 Subject: [PATCH] fmt: ignore hyphenation marks at the end of the words Reported and tested by aksr . --- fmt.c | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/fmt.c b/fmt.c index ed460fa..82add7b 100644 --- a/fmt.c +++ b/fmt.c @@ -296,24 +296,31 @@ static int fmt_hyphmarks(char *word, int *hyidx, int *hyins, int *hygap) char *s = word; char *d = NULL; int c, n = 0; + int lastchar = 0; while ((c = escread(&s, &d)) > 0) ; if (c < 0 || !strcmp(c_hc, d)) return -1; while ((c = escread(&s, &d)) >= 0 && n < NHYPHSWORD) { - if (!c && !strcmp(c_hc, d)) { - hyins[n] = 1; - hyidx[n++] = s - word; - } - if (!c && c_hydash(d)) { - hyins[n] = 0; - hyidx[n++] = s - word; - } - if (!c && !strcmp(c_nb, d)) { - hygap[n] = 1; - hyidx[n++] = s - word; + if (!c) { + if (!strcmp(c_hc, d)) { + hyins[n] = 1; + hyidx[n++] = s - word; + } + if (c_hydash(d)) { + hyins[n] = 0; + hyidx[n++] = s - word; + } + if (!strcmp(c_nb, d)) { + hygap[n] = 1; + hyidx[n++] = s - word; + } + lastchar = s - word; } } + /* cannot break the end of a word */ + while (n > 0 && hyidx[n - 1] == lastchar) + n--; return n; } -- 2.11.4.GIT