summaryrefslogtreecommitdiffstats
path: root/man_term.c
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2012-07-10 19:54:11 +0000
committerIngo Schwarze <schwarze@openbsd.org>2012-07-10 19:54:11 +0000
commitb0095a770753743c2ece0f095b914220c7ae47fb (patch)
tree9d8d3dc027cb910cbb92875536a785225dc6b3e8 /man_term.c
parentb9ad3d659b9f14475c8f929576c2d0d901d89742 (diff)
downloadmandoc-b0095a770753743c2ece0f095b914220c7ae47fb.tar.gz
multiple fixes to -Tascii .HP rendering:
* do not add an excessive blank line before the block * in literal mode, start a new line after the tag getting this to work requires some general (print_man_node) fixes: * in literal mode, break the output line at the end of each input line, not just after those input lines ending in text * but don't break it when there was no output on the line * and adjust the margins after the .HP tag these general fixes require an adjustment to -Tascii .TP rendering: * set up NOBREAK mode before the body, not after the head finally, based on all this, implement -Tman .Bl -hang in terms of .HP OpenBSD rev. 1.84 and 1.29, respectively
Diffstat (limited to 'man_term.c')
-rw-r--r--man_term.c65
1 files changed, 34 insertions, 31 deletions
diff --git a/man_term.c b/man_term.c
index 996e507b..5a6b2648 100644
--- a/man_term.c
+++ b/man_term.c
@@ -1,7 +1,7 @@
/* $Id$ */
/*
* Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>
- * Copyright (c) 2010, 2011 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2010, 2011, 2012 Ingo Schwarze <schwarze@openbsd.org>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -480,13 +480,16 @@ pre_HP(DECL_ARGS)
print_bvspace(p, n);
return(1);
case (MAN_BODY):
- p->flags |= TERMP_NOBREAK;
- p->flags |= TERMP_TWOSPACE;
break;
default:
return(0);
}
+ if ( ! (MANT_LITERAL & mt->fl)) {
+ p->flags |= TERMP_NOBREAK;
+ p->flags |= TERMP_TWOSPACE;
+ }
+
len = mt->lmargin[mt->lmargincur];
ival = -1;
@@ -516,9 +519,6 @@ post_HP(DECL_ARGS)
{
switch (n->type) {
- case (MAN_BLOCK):
- term_flushln(p);
- break;
case (MAN_BODY):
term_flushln(p);
p->flags &= ~TERMP_NOBREAK;
@@ -696,6 +696,8 @@ pre_TP(DECL_ARGS)
case (MAN_BODY):
p->offset = mt->offset + len;
p->rmargin = p->maxrmargin;
+ p->flags &= ~TERMP_NOBREAK;
+ p->flags &= ~TERMP_TWOSPACE;
break;
default:
break;
@@ -713,9 +715,6 @@ post_TP(DECL_ARGS)
switch (n->type) {
case (MAN_HEAD):
term_flushln(p);
- p->flags &= ~TERMP_NOBREAK;
- p->flags &= ~TERMP_TWOSPACE;
- p->rmargin = p->maxrmargin;
break;
case (MAN_BODY):
term_newln(p);
@@ -912,29 +911,8 @@ print_man_node(DECL_ARGS)
term_newln(p);
term_word(p, n->string);
+ goto out;
- /*
- * If we're in a literal context, make sure that words
- * togehter on the same line stay together. This is a
- * POST-printing call, so we check the NEXT word. Since
- * -man doesn't have nested macros, we don't need to be
- * more specific than this.
- */
- if (MANT_LITERAL & mt->fl && ! (TERMP_NOBREAK & p->flags) &&
- (NULL == n->next ||
- n->next->line > n->line)) {
- rm = p->rmargin;
- rmax = p->maxrmargin;
- p->rmargin = p->maxrmargin = TERM_MAXMARGIN;
- p->flags |= TERMP_NOSPACE;
- term_flushln(p);
- p->rmargin = rm;
- p->maxrmargin = rmax;
- }
-
- if (MAN_EOS & n->flags)
- p->flags |= TERMP_SENTENCE;
- return;
case (MAN_EQN):
term_eqn(p, n->eqn);
return;
@@ -966,6 +944,31 @@ print_man_node(DECL_ARGS)
if ( ! (MAN_NOTEXT & termacts[n->tok].flags))
term_fontrepl(p, TERMFONT_NONE);
+out:
+ /*
+ * If we're in a literal context, make sure that words
+ * together on the same line stay together. This is a
+ * POST-printing call, so we check the NEXT word. Since
+ * -man doesn't have nested macros, we don't need to be
+ * more specific than this.
+ */
+ if (MANT_LITERAL & mt->fl && ! (TERMP_NOBREAK & p->flags) &&
+ NULL != n->next && n->next->line > n->line) {
+ rm = p->rmargin;
+ rmax = p->maxrmargin;
+ p->rmargin = p->maxrmargin = TERM_MAXMARGIN;
+ p->flags |= TERMP_NOSPACE;
+ if (NULL != n->string && '\0' != *n->string)
+ term_flushln(p);
+ else
+ term_newln(p);
+ if (rm < rmax && n->parent->tok == MAN_HP) {
+ p->offset = rm;
+ p->rmargin = rmax;
+ } else
+ p->rmargin = rm;
+ p->maxrmargin = rmax;
+ }
if (MAN_EOS & n->flags)
p->flags |= TERMP_SENTENCE;
}