ref: 27e85f150fa856a46ccba345d1e77849a279d26f
parent: 9b5448d2cc4b03f27285fd047b0fed9a596fac29
author: Ali Gholami Rudi <ali@rudi.ir>
date: Thu Jun 23 10:14:21 EDT 2016
fmt: shrink spaces in the last line of a paragraph
--- a/fmt.c
+++ b/fmt.c
@@ -176,17 +176,18 @@
return l;
}
-static int fmt_extractline(struct fmt *f, int beg, int end, int llen)
+/* extract words from beg to end; shrink or stretch spaces if needed */
+static int fmt_extractline(struct fmt *f, int beg, int end, int str)
{
int fmt_div, fmt_rem;
- int w, i, nspc;
+ int w, i, nspc, llen;
struct line *l;
if (!(l = fmt_mkline(f)))
return 1;
+ llen = FMT_LLEN(f);
w = fmt_wordslen(f, beg, end);
nspc = fmt_spaces(f, beg, end);
- /* stretch if (spread & 1) and shrink if (spread & 2) */
- if (nspc && llen) {
+ if (nspc && FMT_ADJ(f) && (llen < w || str)) {
fmt_div = (llen - w) / nspc;
fmt_rem = (llen - w) % nspc;
if (fmt_rem < 0) {
@@ -553,7 +554,7 @@
if (beg > 0)
ret += fmt_break(f, beg);
f->words[beg].gap = 0;
- if (fmt_extractline(f, beg, end, FMT_ADJ(f) ? FMT_LLEN(f) : 0))
+ if (fmt_extractline(f, beg, end, 1))
return ret;
if (beg > 0)
fmt_confupdate(f);