=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/mandoc/mdoc_man.c,v retrieving revision 1.133 retrieving revision 1.134 diff -c -r1.133 -r1.134 *** src/usr.bin/mandoc/mdoc_man.c 2020/02/20 22:55:10 1.133 --- src/usr.bin/mandoc/mdoc_man.c 2020/02/27 01:25:57 1.134 *************** *** 1,4 **** ! /* $OpenBSD: mdoc_man.c,v 1.133 2020/02/20 22:55:10 schwarze Exp $ */ /* * Copyright (c) 2011-2020 Ingo Schwarze * --- 1,4 ---- ! /* $OpenBSD: mdoc_man.c,v 1.134 2020/02/27 01:25:57 schwarze Exp $ */ /* * Copyright (c) 2011-2020 Ingo Schwarze * *************** *** 111,117 **** static void pre_sp(DECL_ARGS); static int pre_sect(DECL_ARGS); static int pre_sy(DECL_ARGS); ! static void pre_syn(const struct roff_node *); static void pre_ta(DECL_ARGS); static int pre_vt(DECL_ARGS); static int pre_xr(DECL_ARGS); --- 111,117 ---- static void pre_sp(DECL_ARGS); static int pre_sect(DECL_ARGS); static int pre_sy(DECL_ARGS); ! static void pre_syn(struct roff_node *); static void pre_ta(DECL_ARGS); static int pre_vt(DECL_ARGS); static int pre_xr(DECL_ARGS); *************** *** 648,654 **** * Break the line if we were parsed subsequent the current node. * This makes the page structure be more consistent. */ ! if (MMAN_spc & outflags && NODE_LINE & n->flags) outflags |= MMAN_nl; act = NULL; --- 648,656 ---- * Break the line if we were parsed subsequent the current node. * This makes the page structure be more consistent. */ ! if (outflags & MMAN_spc && ! n->flags & NODE_LINE && ! !roff_node_transparent(n)) outflags |= MMAN_nl; act = NULL; *************** *** 775,787 **** static void post_percent(DECL_ARGS) { if (mdoc_man_act(n->tok)->pre == pre_em) font_pop(); ! if (n->next) { ! print_word(","); ! if (n->prev && n->prev->tok == n->tok && ! n->next->tok == n->tok) print_word("and"); } else { print_word("."); --- 777,796 ---- static void post_percent(DECL_ARGS) { + struct roff_node *np, *nn, *nnn; if (mdoc_man_act(n->tok)->pre == pre_em) font_pop(); ! ! if ((nn = roff_node_next(n)) != NULL) { ! np = roff_node_prev(n); ! nnn = nn == NULL ? NULL : roff_node_next(nn); ! if (nn->tok != n->tok || ! (np != NULL && np->tok == n->tok) || ! (nnn != NULL && nnn->tok == n->tok)) ! print_word(","); ! if (nn->tok == n->tok && ! (nnn == NULL || nnn->tok != n->tok)) print_word("and"); } else { print_word("."); *************** *** 849,861 **** /* See mdoc_term.c, synopsis_pre() for comments. */ static void ! pre_syn(const struct roff_node *n) { ! if (NULL == n->prev || ! (NODE_SYNPRETTY & n->flags)) return; ! if (n->prev->tok == n->tok && MDOC_Ft != n->tok && MDOC_Fo != n->tok && MDOC_Fn != n->tok) { --- 858,872 ---- /* See mdoc_term.c, synopsis_pre() for comments. */ static void ! pre_syn(struct roff_node *n) { + struct roff_node *np; ! if ((n->flags & NODE_SYNPRETTY) == 0 || ! (np = roff_node_prev(n)) == NULL) return; ! if (np->tok == n->tok && MDOC_Ft != n->tok && MDOC_Fo != n->tok && MDOC_Fn != n->tok) { *************** *** 863,869 **** return; } ! switch (n->prev->tok) { case MDOC_Fd: case MDOC_Fn: case MDOC_Fo: --- 874,880 ---- return; } ! switch (np->tok) { case MDOC_Fd: case MDOC_Fn: case MDOC_Fo: *************** *** 939,949 **** pre_bd(DECL_ARGS) { outflags &= ~(MMAN_PP | MMAN_sp | MMAN_br); ! ! if (DISP_unfilled == n->norm->Bd.type || ! DISP_literal == n->norm->Bd.type) print_line(".nf", 0); ! if (0 == n->norm->Bd.comp && NULL != n->parent->prev) outflags |= MMAN_sp; print_offs(n->norm->Bd.offs, 1); return 1; --- 950,959 ---- pre_bd(DECL_ARGS) { outflags &= ~(MMAN_PP | MMAN_sp | MMAN_br); ! if (n->norm->Bd.type == DISP_unfilled || ! n->norm->Bd.type == DISP_literal) print_line(".nf", 0); ! if (n->norm->Bd.comp == 0 && roff_node_prev(n->parent) != NULL) outflags |= MMAN_sp; print_offs(n->norm->Bd.offs, 1); return 1; *************** *** 975,981 **** } /* Maybe we are inside an enclosing list? */ ! if (NULL != n->parent->next) mid_it(); } --- 985,991 ---- } /* Maybe we are inside an enclosing list? */ ! if (roff_node_next(n->parent) != NULL) mid_it(); } *************** *** 1100,1115 **** print_line(".RE", MMAN_nl); assert(Bl_stack_len); Bl_stack_len--; ! assert(0 == Bl_stack[Bl_stack_len]); } else { outflags |= MMAN_PP | MMAN_nl; outflags &= ~(MMAN_sp | MMAN_br); } /* Maybe we are inside an enclosing list? */ ! if (NULL != n->parent->next) mid_it(); - } static void --- 1110,1124 ---- print_line(".RE", MMAN_nl); assert(Bl_stack_len); Bl_stack_len--; ! assert(Bl_stack[Bl_stack_len] == 0); } else { outflags |= MMAN_PP | MMAN_nl; outflags &= ~(MMAN_sp | MMAN_br); } /* Maybe we are inside an enclosing list? */ ! if (roff_node_next(n->parent) != NULL) mid_it(); } static void *************** *** 1121,1127 **** static int pre_dl(DECL_ARGS) { - print_offs("6n", 0); return 1; } --- 1130,1135 ---- *************** *** 1129,1139 **** static void post_dl(DECL_ARGS) { - print_line(".RE", MMAN_nl); /* Maybe we are inside an enclosing list? */ ! if (NULL != n->parent->next) mid_it(); } --- 1137,1146 ---- static void post_dl(DECL_ARGS) { print_line(".RE", MMAN_nl); /* Maybe we are inside an enclosing list? */ ! if (roff_node_next(n->parent) != NULL) mid_it(); } *************** *** 1234,1248 **** static void post_fa(DECL_ARGS) { ! if (NULL != n->next && MDOC_Fa == n->next->tok) print_word(","); } static int pre_fd(DECL_ARGS) { - pre_syn(n); font_push('B'); return 1; --- 1241,1255 ---- static void post_fa(DECL_ARGS) { + struct roff_node *nn; ! if ((nn = roff_node_next(n)) != NULL && nn->tok == MDOC_Fa) print_word(","); } static int pre_fd(DECL_ARGS) { pre_syn(n); font_push('B'); return 1; *************** *** 1251,1257 **** static void post_fd(DECL_ARGS) { - font_pop(); outflags |= MMAN_br; } --- 1258,1263 ---- *************** *** 1259,1265 **** static int pre_fl(DECL_ARGS) { - font_push('B'); print_word("\\-"); if (n->child != NULL) --- 1265,1270 ---- *************** *** 1270,1281 **** static void post_fl(DECL_ARGS) { font_pop(); ! if (!(n->child != NULL || ! n->next == NULL || ! n->next->type == ROFFT_TEXT || ! n->next->flags & NODE_LINE)) outflags &= ~MMAN_spc; } --- 1275,1287 ---- static void post_fl(DECL_ARGS) { + struct roff_node *nn; font_pop(); ! if (n->child == NULL && ! ((nn = roff_node_next(n)) != NULL && ! nn->type != ROFFT_TEXT && ! (nn->flags & NODE_LINE) == 0)) outflags &= ~MMAN_spc; } *************** *** 1418,1426 **** case ROFFT_HEAD: outflags |= MMAN_PP | MMAN_nl; bln = n->parent->parent; ! if (0 == bln->norm->Bl.comp || ! (NULL == n->parent->prev && ! NULL == bln->parent->prev)) outflags |= MMAN_sp; outflags &= ~MMAN_br; switch (bln->norm->Bl.type) { --- 1424,1432 ---- case ROFFT_HEAD: outflags |= MMAN_PP | MMAN_nl; bln = n->parent->parent; ! if (bln->norm->Bl.comp == 0 || ! (n->parent->prev == NULL && ! roff_node_prev(bln->parent) == NULL)) outflags |= MMAN_sp; outflags &= ~MMAN_br; switch (bln->norm->Bl.type) { *************** *** 1632,1648 **** { char *name; ! if (n->type == ROFFT_BLOCK) { outflags |= MMAN_Bk; pre_syn(n); - } - if (n->type != ROFFT_ELEM && n->type != ROFFT_HEAD) return 1; name = n->child == NULL ? NULL : n->child->string; ! if (NULL == name) return 0; if (n->type == ROFFT_HEAD) { ! if (NULL == n->parent->prev) outflags |= MMAN_sp; print_block(".HP", 0); printf(" %dn", man_strlen(name) + 1); --- 1638,1659 ---- { char *name; ! switch (n->type) { ! case ROFFT_BLOCK: outflags |= MMAN_Bk; pre_syn(n); return 1; + case ROFFT_HEAD: + case ROFFT_ELEM: + break; + default: + return 1; + } name = n->child == NULL ? NULL : n->child->string; ! if (name == NULL) return 0; if (n->type == ROFFT_HEAD) { ! if (roff_node_prev(n->parent) == NULL) outflags |= MMAN_sp; print_block(".HP", 0); printf(" %dn", man_strlen(name) + 1);