=================================================================== RCS file: /cvs/mandoc/man_term.c,v retrieving revision 1.215 retrieving revision 1.221 diff -u -p -r1.215 -r1.221 --- mandoc/man_term.c 2018/08/18 02:08:27 1.215 +++ mandoc/man_term.c 2018/12/03 21:00:10 1.221 @@ -1,4 +1,4 @@ -/* $Id: man_term.c,v 1.215 2018/08/18 02:08:27 schwarze Exp $ */ +/* $Id: man_term.c,v 1.221 2018/12/03 21:00:10 schwarze Exp $ */ /* * Copyright (c) 2008-2012 Kristaps Dzonsons * Copyright (c) 2010-2015, 2017, 2018 Ingo Schwarze @@ -81,6 +81,7 @@ static int pre_SS(DECL_ARGS); static int pre_SY(DECL_ARGS); static int pre_TP(DECL_ARGS); static int pre_UR(DECL_ARGS); +static int pre_abort(DECL_ARGS); static int pre_alternate(DECL_ARGS); static int pre_ign(DECL_ARGS); static int pre_in(DECL_ARGS); @@ -101,9 +102,9 @@ static const struct man_term_act man_term_acts[MAN_MAX { pre_SS, post_SS, 0 }, /* SS */ { pre_TP, post_TP, 0 }, /* TP */ { pre_TP, post_TP, 0 }, /* TQ */ - { pre_PP, NULL, 0 }, /* LP */ + { pre_abort, NULL, 0 }, /* LP */ { pre_PP, NULL, 0 }, /* PP */ - { pre_PP, NULL, 0 }, /* P */ + { pre_abort, NULL, 0 }, /* P */ { pre_IP, post_IP, 0 }, /* IP */ { pre_HP, post_HP, 0 }, /* HP */ { NULL, NULL, 0 }, /* SM */ @@ -117,8 +118,8 @@ static const struct man_term_act man_term_acts[MAN_MAX { pre_I, NULL, 0 }, /* I */ { pre_alternate, NULL, 0 }, /* IR */ { pre_alternate, NULL, 0 }, /* RI */ - { pre_literal, NULL, 0 }, /* nf */ - { pre_literal, NULL, 0 }, /* fi */ + { pre_literal, NULL, MAN_NOTEXT }, /* nf */ + { pre_literal, NULL, MAN_NOTEXT }, /* fi */ { NULL, NULL, 0 }, /* RE */ { pre_RS, post_RS, 0 }, /* RS */ { pre_DT, NULL, 0 }, /* DT */ @@ -222,6 +223,12 @@ print_bvspace(struct termp *p, const struct roff_node static int +pre_abort(DECL_ARGS) +{ + abort(); +} + +static int pre_ign(DECL_ARGS) { @@ -346,7 +353,7 @@ pre_OP(DECL_ARGS) { term_word(p, "["); - p->flags |= TERMP_NOSPACE; + p->flags |= TERMP_KEEP | TERMP_NOSPACE; if (NULL != (n = n->child)) { term_fontrepl(p, TERMFONT_BOLD); @@ -358,6 +365,7 @@ pre_OP(DECL_ARGS) } term_fontrepl(p, TERMFONT_NONE); + p->flags &= ~TERMP_KEEP; p->flags |= TERMP_NOSPACE; term_word(p, "]"); return 0; @@ -860,7 +868,8 @@ pre_SY(DECL_ARGS) switch (n->type) { case ROFFT_BLOCK: - print_bvspace(p, n, mt->pardist); + if (n->prev == NULL || n->prev->tok != MAN_SY) + print_bvspace(p, n, mt->pardist); return 1; case ROFFT_HEAD: case ROFFT_BODY: @@ -870,7 +879,7 @@ pre_SY(DECL_ARGS) } nn = n->parent->head->child; - len = nn == NULL ? 0 : term_strlen(p, nn->string) + 1; + len = nn == NULL ? 1 : term_strlen(p, nn->string) + 1; switch (n->type) { case ROFFT_HEAD: @@ -983,7 +992,7 @@ print_man_node(DECL_ARGS) } act = man_term_act(n->tok); - if ((act->flags & MAN_NOTEXT) == 0) + if ((act->flags & MAN_NOTEXT) == 0 && n->tok != MAN_SM) term_fontrepl(p, TERMFONT_NONE); c = 1; @@ -995,7 +1004,7 @@ print_man_node(DECL_ARGS) if (act->post != NULL) (*act->post)(p, mt, n, meta); - if ((act->flags & MAN_NOTEXT) == 0) + if ((act->flags & MAN_NOTEXT) == 0 && n->tok != MAN_SM) term_fontrepl(p, TERMFONT_NONE); out: