diff options
-rw-r--r-- | regress/usr.bin/mandoc/mdoc/Bl/bullet.in | 2 | ||||
-rw-r--r-- | regress/usr.bin/mandoc/mdoc/Bl/bullet.out_ascii | 12 | ||||
-rw-r--r-- | regress/usr.bin/mandoc/mdoc/Bl/dash.in | 2 | ||||
-rw-r--r-- | regress/usr.bin/mandoc/mdoc/Bl/dash.out_ascii | 12 | ||||
-rw-r--r-- | regress/usr.bin/mandoc/mdoc/Bl/enum.in | 2 | ||||
-rw-r--r-- | regress/usr.bin/mandoc/mdoc/Bl/enum.out_ascii | 12 | ||||
-rw-r--r-- | regress/usr.bin/mandoc/mdoc/Bl/hang.in | 9 | ||||
-rw-r--r-- | regress/usr.bin/mandoc/mdoc/Bl/hang.out_ascii | 4 | ||||
-rw-r--r-- | regress/usr.bin/mandoc/roff/sp/Makefile | 4 | ||||
-rw-r--r-- | regress/usr.bin/mandoc/roff/sp/negative.in | 8 | ||||
-rw-r--r-- | regress/usr.bin/mandoc/roff/sp/negative.out_ascii | 14 | ||||
-rw-r--r-- | usr.bin/mandoc/man_term.c | 23 | ||||
-rw-r--r-- | usr.bin/mandoc/mdoc_man.c | 153 |
13 files changed, 142 insertions, 115 deletions
diff --git a/regress/usr.bin/mandoc/mdoc/Bl/bullet.in b/regress/usr.bin/mandoc/mdoc/Bl/bullet.in index 6893426ff6e..13a58f338af 100644 --- a/regress/usr.bin/mandoc/mdoc/Bl/bullet.in +++ b/regress/usr.bin/mandoc/mdoc/Bl/bullet.in @@ -37,7 +37,7 @@ x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x .It x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x .El -.Bl -bullet +.Bl -bullet -compact .It x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x .It diff --git a/regress/usr.bin/mandoc/mdoc/Bl/bullet.out_ascii b/regress/usr.bin/mandoc/mdoc/Bl/bullet.out_ascii index 37e77f59c24..5722099d36c 100644 --- a/regress/usr.bin/mandoc/mdoc/Bl/bullet.out_ascii +++ b/regress/usr.bin/mandoc/mdoc/Bl/bullet.out_ascii @@ -27,40 +27,28 @@ DDEESSCCRRIIPPTTIIOONN oo x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x - oo x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x - oo x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x - oo x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x - oo x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x - oo x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x - oo x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x - oo x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x - oo x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x - oo x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x - oo x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x - oo x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x - oo x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x diff --git a/regress/usr.bin/mandoc/mdoc/Bl/dash.in b/regress/usr.bin/mandoc/mdoc/Bl/dash.in index ea35e3f292b..92e36821f72 100644 --- a/regress/usr.bin/mandoc/mdoc/Bl/dash.in +++ b/regress/usr.bin/mandoc/mdoc/Bl/dash.in @@ -37,7 +37,7 @@ x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x .It x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x .El -.Bl -dash +.Bl -dash -compact .It x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x .It diff --git a/regress/usr.bin/mandoc/mdoc/Bl/dash.out_ascii b/regress/usr.bin/mandoc/mdoc/Bl/dash.out_ascii index e1ef8e2f7f8..07f78523b66 100644 --- a/regress/usr.bin/mandoc/mdoc/Bl/dash.out_ascii +++ b/regress/usr.bin/mandoc/mdoc/Bl/dash.out_ascii @@ -27,40 +27,28 @@ DDEESSCCRRIIPPTTIIOONN -- x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x - -- x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x - -- x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x - -- x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x - -- x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x - -- x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x - -- x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x - -- x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x - -- x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x - -- x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x - -- x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x - -- x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x - -- x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x diff --git a/regress/usr.bin/mandoc/mdoc/Bl/enum.in b/regress/usr.bin/mandoc/mdoc/Bl/enum.in index 0f87afa2ce5..a2cc696f155 100644 --- a/regress/usr.bin/mandoc/mdoc/Bl/enum.in +++ b/regress/usr.bin/mandoc/mdoc/Bl/enum.in @@ -33,7 +33,7 @@ x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x .It x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x .El -.Bl -enum +.Bl -enum -compact .It x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x .It diff --git a/regress/usr.bin/mandoc/mdoc/Bl/enum.out_ascii b/regress/usr.bin/mandoc/mdoc/Bl/enum.out_ascii index 1635beaebcf..49ba343bf5f 100644 --- a/regress/usr.bin/mandoc/mdoc/Bl/enum.out_ascii +++ b/regress/usr.bin/mandoc/mdoc/Bl/enum.out_ascii @@ -24,40 +24,28 @@ DDEESSCCRRIIPPTTIIOONN 1. x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x - 1. x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x - 2. x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x - 3. x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x - 4. x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x - 5. x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x - 6. x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x - 7. x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x - 8. x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x - 9. x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x - 10. x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x - 11. x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x - 12. x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x diff --git a/regress/usr.bin/mandoc/mdoc/Bl/hang.in b/regress/usr.bin/mandoc/mdoc/Bl/hang.in index 2d32bf2bd7c..434f84d99cc 100644 --- a/regress/usr.bin/mandoc/mdoc/Bl/hang.in +++ b/regress/usr.bin/mandoc/mdoc/Bl/hang.in @@ -45,6 +45,15 @@ x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x .El +Compact hanged list: +.Bl -hang -width 6n -compact +.It one +first line +.It second +second line +.It third_tag +last line +.El Hanged list without a width: .Bl -hang .It tag diff --git a/regress/usr.bin/mandoc/mdoc/Bl/hang.out_ascii b/regress/usr.bin/mandoc/mdoc/Bl/hang.out_ascii index ea1e58f483b..a9b378867a9 100644 --- a/regress/usr.bin/mandoc/mdoc/Bl/hang.out_ascii +++ b/regress/usr.bin/mandoc/mdoc/Bl/hang.out_ascii @@ -35,6 +35,10 @@ DDEESSCCRRIIPPTTIIOONN zehn__zehn x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x + Compact hanged list: + one first line + second second line + third_tag last line Hanged list without a width: tag text diff --git a/regress/usr.bin/mandoc/roff/sp/Makefile b/regress/usr.bin/mandoc/roff/sp/Makefile index 79560a0c5d1..62e2b34001b 100644 --- a/regress/usr.bin/mandoc/roff/sp/Makefile +++ b/regress/usr.bin/mandoc/roff/sp/Makefile @@ -1,5 +1,5 @@ -# $OpenBSD: Makefile,v 1.2 2011/11/17 16:28:46 schwarze Exp $ +# $OpenBSD: Makefile,v 1.3 2012/07/13 14:15:50 schwarze Exp $ -REGRESS_TARGETS=badargs-mdoc badargs-man +REGRESS_TARGETS = badargs-mdoc badargs-man negative .include <bsd.regress.mk> diff --git a/regress/usr.bin/mandoc/roff/sp/negative.in b/regress/usr.bin/mandoc/roff/sp/negative.in new file mode 100644 index 00000000000..10c6edc98f1 --- /dev/null +++ b/regress/usr.bin/mandoc/roff/sp/negative.in @@ -0,0 +1,8 @@ +.TH SP-NEGATIVE 1 "July 12, 2012" OpenBSD +.SH NAME +sp-negative \- negative vertical spacing +.SH DESCRIPTION +first line +.sp -1v +.PP +second line diff --git a/regress/usr.bin/mandoc/roff/sp/negative.out_ascii b/regress/usr.bin/mandoc/roff/sp/negative.out_ascii new file mode 100644 index 00000000000..30c19682a8f --- /dev/null +++ b/regress/usr.bin/mandoc/roff/sp/negative.out_ascii @@ -0,0 +1,14 @@ +SP-NEGATIVE(1) OpenBSD Reference Manual SP-NEGATIVE(1) + + + +NNAAMMEE + sp-negative - negative vertical spacing + +DDEESSCCRRIIPPTTIIOONN + first line + second line + + + +OpenBSD July 12, 2012 SP-NEGATIVE(1) diff --git a/usr.bin/mandoc/man_term.c b/usr.bin/mandoc/man_term.c index 03a612ad28b..b14ca7726d3 100644 --- a/usr.bin/mandoc/man_term.c +++ b/usr.bin/mandoc/man_term.c @@ -1,4 +1,4 @@ -/* $Id: man_term.c,v 1.84 2012/07/10 19:53:11 schwarze Exp $ */ +/* $Id: man_term.c,v 1.85 2012/07/13 14:15:50 schwarze Exp $ */ /* * Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv> * Copyright (c) 2010, 2011, 2012 Ingo Schwarze <schwarze@openbsd.org> @@ -436,7 +436,9 @@ pre_in(DECL_ARGS) static int pre_sp(DECL_ARGS) { + char *s; size_t i, len; + int neg; if ((NULL == n->prev && n->parent)) { if (MAN_SS == n->parent->tok) @@ -445,19 +447,32 @@ pre_sp(DECL_ARGS) return(0); } + neg = 0; switch (n->tok) { case (MAN_br): len = 0; break; default: - len = n->child ? a2height(p, n->child->string) : 1; + if (NULL == n->child) { + len = 1; + break; + } + s = n->child->string; + if ('-' == *s) { + neg = 1; + s++; + } + len = a2height(p, s); break; } if (0 == len) term_newln(p); - for (i = 0; i < len; i++) - term_vspace(p); + else if (neg) + p->skipvsp += len; + else + for (i = 0; i < len; i++) + term_vspace(p); return(0); } diff --git a/usr.bin/mandoc/mdoc_man.c b/usr.bin/mandoc/mdoc_man.c index bb5772c6bfa..df86701e52b 100644 --- a/usr.bin/mandoc/mdoc_man.c +++ b/usr.bin/mandoc/mdoc_man.c @@ -1,4 +1,4 @@ -/* $Id: mdoc_man.c,v 1.33 2012/07/12 08:53:45 schwarze Exp $ */ +/* $Id: mdoc_man.c,v 1.34 2012/07/13 14:15:50 schwarze Exp $ */ /* * Copyright (c) 2011, 2012 Ingo Schwarze <schwarze@openbsd.org> * @@ -98,6 +98,8 @@ static int pre_vt(DECL_ARGS); static int pre_ux(DECL_ARGS); static int pre_xr(DECL_ARGS); static void print_word(const char *); +static void print_line(const char *, int); +static void print_block(const char *, int); static void print_offs(const char *); static void print_width(const char *, const struct mdoc_node *, size_t); @@ -237,15 +239,16 @@ static const struct manact manacts[MDOC_MAX + 1] = { }; static int outflags; -#define MMAN_spc (1 << 0) -#define MMAN_spc_force (1 << 1) -#define MMAN_nl (1 << 2) -#define MMAN_br (1 << 3) -#define MMAN_sp (1 << 4) -#define MMAN_Sm (1 << 5) -#define MMAN_Bk (1 << 6) -#define MMAN_An_split (1 << 7) -#define MMAN_An_nosplit (1 << 8) +#define MMAN_spc (1 << 0) /* blank character before next word */ +#define MMAN_spc_force (1 << 1) /* even before trailing punctuation */ +#define MMAN_nl (1 << 2) /* break man(7) code line */ +#define MMAN_br (1 << 3) /* break output line */ +#define MMAN_sp (1 << 4) /* insert a blank output line */ +#define MMAN_PP (1 << 5) /* reset indentation etc. */ +#define MMAN_Sm (1 << 6) /* horizontal spacing mode */ +#define MMAN_Bk (1 << 7) /* word keep mode */ +#define MMAN_An_split (1 << 8) /* author mode is "split" */ +#define MMAN_An_nosplit (1 << 9) /* author mode is "nosplit" */ static struct { char *head; @@ -283,17 +286,21 @@ static void print_word(const char *s) { - if ((MMAN_sp | MMAN_br | MMAN_nl) & outflags) { + if ((MMAN_PP | MMAN_sp | MMAN_br | MMAN_nl) & outflags) { /* * If we need a newline, print it now and start afresh. */ - if (MMAN_sp & outflags) + if (MMAN_PP & outflags) { + if ( ! (MMAN_sp & outflags)) + printf("\n.sp -1v"); + printf("\n.PP\n"); + } else if (MMAN_sp & outflags) printf("\n.sp\n"); else if (MMAN_br & outflags) printf("\n.br\n"); else if (MMAN_nl & outflags) putchar('\n'); - outflags &= ~(MMAN_sp|MMAN_br|MMAN_nl|MMAN_spc); + outflags &= ~(MMAN_PP|MMAN_sp|MMAN_br|MMAN_nl|MMAN_spc); } else if (MMAN_spc & outflags && '\0' != s[0]) /* * If we need a space, only print it if @@ -337,6 +344,30 @@ print_word(const char *s) } static void +print_line(const char *s, int newflags) +{ + + outflags &= ~MMAN_br; + outflags |= MMAN_nl; + print_word(s); + outflags |= newflags; +} + +static void +print_block(const char *s, int newflags) +{ + + outflags &= ~MMAN_PP; + if (MMAN_sp & outflags) + outflags &= ~(MMAN_sp | MMAN_br); + else + print_line(".sp -1v", 0); + outflags |= MMAN_nl; + print_word(s); + outflags |= newflags; +} + +static void print_offs(const char *v) { char buf[24]; @@ -377,9 +408,9 @@ print_width(const char *v, const struct mdoc_node *child, size_t defsz) sz = su.scale; else { if (chsz) - print_word(".HP"); + print_block(".HP", 0); else - print_word(".TP"); + print_block(".TP", 0); print_word(v); return; } @@ -387,9 +418,9 @@ print_width(const char *v, const struct mdoc_node *child, size_t defsz) sz = strlen(v); if (chsz > sz) - print_word(".HP"); + print_block(".HP", 0); else - print_word(".TP"); + print_block(".TP", 0); snprintf(buf, sizeof(buf), "%ldn", sz + 2); print_word(buf); } @@ -593,8 +624,8 @@ pre_sect(DECL_ARGS) if (MDOC_HEAD != n->type) return(1); - outflags |= MMAN_nl; - print_word(manacts[n->tok].prefix); + outflags |= MMAN_sp; + print_block(manacts[n->tok].prefix, 0); print_word("\""); outflags &= ~MMAN_spc; return(1); @@ -693,15 +724,14 @@ static int pre_bd(DECL_ARGS) { - if (0 == n->norm->Bd.comp) - outflags |= MMAN_sp; + outflags &= ~(MMAN_PP | MMAN_sp | MMAN_br); + if (DISP_unfilled == n->norm->Bd.type || - DISP_literal == n->norm->Bd.type) { - outflags |= MMAN_nl; - print_word(".nf"); - } - outflags |= MMAN_nl; - print_word(".RS"); + DISP_literal == n->norm->Bd.type) + print_line(".nf", 0); + if (0 == n->norm->Bd.comp && NULL != n->parent->prev) + outflags |= MMAN_sp; + print_line(".RS", 0); print_offs(n->norm->Bd.offs); outflags |= MMAN_nl; return(1); @@ -711,14 +741,10 @@ static void post_bd(DECL_ARGS) { - outflags |= MMAN_nl; - print_word(".RE"); + print_line(".RE", MMAN_nl); if (DISP_unfilled == n->norm->Bd.type || - DISP_literal == n->norm->Bd.type) { - outflags |= MMAN_nl; - print_word(".fi"); - } - outflags |= MMAN_nl; + DISP_literal == n->norm->Bd.type) + print_line(".fi", MMAN_nl); } static int @@ -793,12 +819,11 @@ pre_bl(DECL_ARGS) return(1); } - outflags |= MMAN_nl; - print_word(".TS"); - outflags |= MMAN_nl; + print_line(".TS", MMAN_nl); for (icol = 0; icol < n->norm->Bl.ncols; icol++) print_word("l"); print_word("."); + outflags |= MMAN_nl; return(1); } @@ -807,17 +832,17 @@ post_bl(DECL_ARGS) { switch (n->norm->Bl.type) { + case (LIST_column): + print_line(".TE", 0); + break; case (LIST_enum): n->norm->Bl.count = 0; break; - case (LIST_column): - outflags |= MMAN_nl; - print_word(".TE"); - break; default: break; } - outflags |= MMAN_br; + outflags |= MMAN_PP | MMAN_nl; + outflags &= ~(MMAN_sp | MMAN_br); } static int @@ -852,9 +877,7 @@ static int pre_dl(DECL_ARGS) { - outflags |= MMAN_nl; - print_word(".RS 6n"); - outflags |= MMAN_nl; + print_line(".RS 6n", MMAN_nl); return(1); } @@ -862,9 +885,7 @@ static void post_dl(DECL_ARGS) { - outflags |= MMAN_nl; - print_word(".RE"); - outflags |= MMAN_nl; + print_line(".RE", MMAN_nl); } static int @@ -1066,28 +1087,24 @@ pre_it(DECL_ARGS) switch (n->type) { case (MDOC_HEAD): - outflags |= MMAN_nl; + outflags |= MMAN_PP | MMAN_nl; bln = n->parent->parent; + if (0 == bln->norm->Bl.comp || + NULL == bln->parent->prev) + outflags |= MMAN_sp; + outflags &= ~MMAN_br; switch (bln->norm->Bl.type) { case (LIST_item): - if (bln->norm->Bl.comp) - outflags |= MMAN_br; - else - outflags |= MMAN_sp; return(0); case (LIST_inset): /* FALLTHROUGH */ case (LIST_diag): /* FALLTHROUGH */ case (LIST_ohang): - if (bln->norm->Bl.comp) - outflags |= MMAN_br; - else - outflags |= MMAN_sp; if (bln->norm->Bl.type == LIST_diag) - print_word(".B \""); + print_line(".B \"", 0); else - print_word(".R \""); + print_line(".R \"", 0); outflags &= ~MMAN_spc; return(1); case (LIST_bullet): @@ -1250,12 +1267,10 @@ static int pre_pp(DECL_ARGS) { - outflags |= MMAN_nl; - if (MDOC_It == n->parent->tok) - print_word(".sp"); - else - print_word(".PP"); - outflags |= MMAN_nl; + if (MDOC_It != n->parent->tok) + outflags |= MMAN_PP; + outflags |= MMAN_sp | MMAN_nl; + outflags &= ~MMAN_br; return(0); } @@ -1264,9 +1279,8 @@ pre_rs(DECL_ARGS) { if (SEC_SEE_ALSO == n->sec) { - outflags |= MMAN_nl; - print_word(".PP"); - outflags |= MMAN_nl; + outflags |= MMAN_PP | MMAN_sp | MMAN_nl; + outflags &= ~MMAN_br; } return(1); } @@ -1287,8 +1301,7 @@ static int pre_sp(DECL_ARGS) { - outflags |= MMAN_nl; - print_word(".sp"); + print_line(".sp", MMAN_nl); return(1); } |