-/* $Id: term.c,v 1.278 2019/01/03 19:59:55 schwarze Exp $ */
+/* $Id: term.c,v 1.281 2019/06/03 20:23:41 schwarze Exp $ */
/*
* Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2010-2019 Ingo Schwarze <schwarze@openbsd.org>
/*
* Figure out how much text will fit in the field.
* If there is whitespace only, print nothing.
- * Otherwise, print the field content.
*/
term_fill(p, &nbr, &vbr, vtarget);
if (nbr == 0)
break;
+ /*
+ * With the CENTER or RIGHT flag, increase the indentation
+ * to center the text between the left and right margins
+ * or to adjust it to the right margin, respectively.
+ */
+
+ if (vbr < vtarget) {
+ if (p->flags & TERMP_CENTER)
+ vbl += (vtarget - vbr) / 2;
+ else if (p->flags & TERMP_RIGHT)
+ vbl += vtarget - vbr;
+ }
+
+ /* Finally, print the field content. */
+
term_field(p, vbl, nbr, vbr, vtarget);
/*
case ASCII_BREAK:
vn = vis;
break;
+ default:
+ abort();
}
/* Can break at the end of a word. */
if (breakline || vn > vtarget)
continue;
case ' ':
case ASCII_NBRSP:
- vbl++;
- vis++;
+ dv = (*p->width)(p, ' ');
+ vbl += dv;
+ vis += dv;
continue;
default:
break;