diff options
author | Kristaps Dzonsons <kristaps@bsd.lv> | 2009-03-01 13:06:49 +0000 |
---|---|---|
committer | Kristaps Dzonsons <kristaps@bsd.lv> | 2009-03-01 13:06:49 +0000 |
commit | 97b5fc0261467f0f882205086dbf42286c92c8a3 (patch) | |
tree | 720463505816698e322b451eba9a256dd0533ed2 /mdocterm.c | |
parent | 7a49cc5212b86749bc74fb4733c81bd65f2f177e (diff) | |
download | mandoc-97b5fc0261467f0f882205086dbf42286c92c8a3.tar.gz |
Fixed TERMP_NOBREAK and line overruns.
Fixed TERMP_SETFLAGS and current-flag omission.
Diffstat (limited to 'mdocterm.c')
-rw-r--r-- | mdocterm.c | 39 |
1 files changed, 25 insertions, 14 deletions
@@ -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'); |