summaryrefslogtreecommitdiffstatshomepage
path: root/mdocterm.c
diff options
context:
space:
mode:
authorKristaps Dzonsons <kristaps@bsd.lv>2009-03-01 13:06:49 +0000
committerKristaps Dzonsons <kristaps@bsd.lv>2009-03-01 13:06:49 +0000
commitf52cdc4437cb37e93dbd03a14742e01eb654df7e (patch)
treee2e9cbebba0168f39837c646ea4f29945fadeb65 /mdocterm.c
parentdd4e091e1cb505b2de795c00410e4d592d03108c (diff)
downloadmandoc-f52cdc4437cb37e93dbd03a14742e01eb654df7e.tar.gz
mandoc-f52cdc4437cb37e93dbd03a14742e01eb654df7e.tar.zst
mandoc-f52cdc4437cb37e93dbd03a14742e01eb654df7e.zip
Fixed TERMP_NOBREAK and line overruns.
Fixed TERMP_SETFLAGS and current-flag omission.
Diffstat (limited to 'mdocterm.c')
-rw-r--r--mdocterm.c41
1 files changed, 26 insertions, 15 deletions
diff --git a/mdocterm.c b/mdocterm.c
index 02c80e6c..d4df8a39 100644
--- a/mdocterm.c
+++ b/mdocterm.c
@@ -1,4 +1,4 @@
-/* $Id: mdocterm.c,v 1.21 2009/02/28 21:31:13 kristaps Exp $ */
+/* $Id: mdocterm.c,v 1.22 2009/03/01 13:06:49 kristaps Exp $ */
/*
* Copyright (c) 2008 Kristaps Dzonsons <kristaps@kth.se>
*
@@ -190,23 +190,27 @@ flushln(struct termp *p)
assert(vsz > 0);
/*
+ * If we're breaking normally...
+ *
* If a word is too long and we're within a line, put it
* on the next line. Puke if we're being asked to write
* something that will exceed the right margin (i.e.,
- * from a fresh line or when we're not allowed to break
- * the line with TERMP_NOBREAK).
+ * from a fresh line).
+ *
+ * If we're not breaking...
+ *
+ * Don't let the visible size exceed the full margin.
*/
- /* FIXME: allow selective right-margin breaking. */
-
- if (vis && vis + vsz > maxvis) {
- if (p->flags & TERMP_NOBREAK)
+ if ( ! (TERMP_NOBREAK & p->flags)) {
+ if (vis && vis + vsz > maxvis) {
+ putchar('\n');
+ for (j = 0; j < p->offset; j++)
+ putchar(' ');
+ vis = 0;
+ } else if (vis + vsz > maxvis)
errx(1, "word breaks right margin");
- putchar('\n');
- for (j = 0; j < p->offset; j++)
- putchar(' ');
- vis = 0;
- } else if (vis + vsz > maxvis)
+ } else if (vis + vsz > p->maxrmargin)
errx(1, "word breaks right margin");
/*
@@ -226,15 +230,22 @@ flushln(struct termp *p)
}
}
+ if ((TERMP_NOBREAK & p->flags) && vis >= maxvis) {
+ putchar('\n');
+ for (i = 0; i < p->rmargin; i++)
+ putchar(' ');
+ p->col = 0;
+ return;
+ }
+
/*
* If we're not to right-marginalise it (newline), then instead
* pad to the right margin and stay off.
*/
if (p->flags & TERMP_NOBREAK) {
- if ( ! (p->flags & TERMP_NORPAD))
- for ( ; vis < maxvis; vis++)
- putchar(' ');
+ for ( ; vis < maxvis; vis++)
+ putchar(' ');
} else
putchar('\n');