=================================================================== RCS file: /cvs/mandoc/man_macro.c,v retrieving revision 1.122 retrieving revision 1.126 diff -u -p -r1.122 -r1.126 --- mandoc/man_macro.c 2017/06/17 16:47:48 1.122 +++ mandoc/man_macro.c 2018/08/16 23:43:37 1.126 @@ -1,7 +1,7 @@ -/* $Id: man_macro.c,v 1.122 2017/06/17 16:47:48 schwarze Exp $ */ +/* $Id: man_macro.c,v 1.126 2018/08/16 23:43:37 schwarze Exp $ */ /* * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons - * Copyright (c) 2012-2015, 2017 Ingo Schwarze + * Copyright (c) 2012-2015, 2017, 2018 Ingo Schwarze * Copyright (c) 2013 Franco Fichtner * * Permission to use, copy, modify, and distribute this software for any @@ -45,6 +45,7 @@ const struct man_macro __man_macros[MAN_MAX - MAN_TH] { blk_imp, MAN_BSCOPE | MAN_SCOPED }, /* SH */ { blk_imp, MAN_BSCOPE | MAN_SCOPED }, /* SS */ { blk_imp, MAN_BSCOPE | MAN_SCOPED }, /* TP */ + { blk_imp, MAN_BSCOPE | MAN_SCOPED }, /* TQ */ { blk_imp, MAN_BSCOPE }, /* LP */ { blk_imp, MAN_BSCOPE }, /* PP */ { blk_imp, MAN_BSCOPE }, /* P */ @@ -75,6 +76,8 @@ const struct man_macro __man_macros[MAN_MAX - MAN_TH] { in_line_eoln, MAN_BSCOPE }, /* EE */ { blk_exp, MAN_BSCOPE }, /* UR */ { blk_close, MAN_BSCOPE }, /* UE */ + { blk_exp, MAN_BSCOPE }, /* MT */ + { blk_close, MAN_BSCOPE }, /* ME */ }; const struct man_macro *const man_macros = __man_macros - MAN_TH; @@ -187,10 +190,10 @@ rew_scope(struct roff_man *man, enum roff_tok tok) void blk_close(MACRO_PROT_ARGS) { - enum roff_tok ntok; + enum roff_tok ctok, ntok; const struct roff_node *nn; char *p; - int nrew, target; + int cline, cpos, nrew, target; nrew = 1; switch (tok) { @@ -217,6 +220,9 @@ blk_close(MACRO_PROT_ARGS) case MAN_UE: ntok = MAN_UR; break; + case MAN_ME: + ntok = MAN_MT; + break; default: abort(); } @@ -229,23 +235,30 @@ blk_close(MACRO_PROT_ARGS) mandoc_msg(MANDOCERR_BLK_NOTOPEN, man->parse, line, ppos, roff_name[tok]); rew_scope(man, MAN_PP); - } else { - line = man->last->line; - ppos = man->last->pos; - ntok = man->last->tok; - man_unscope(man, nn); + return; + } - if (tok == MAN_RE && nn->head->aux > 0) - roff_setreg(man->roff, "an-margin", - nn->head->aux, '-'); + cline = man->last->line; + cpos = man->last->pos; + ctok = man->last->tok; + man_unscope(man, nn); - /* Move a trailing paragraph behind the block. */ + if (tok == MAN_RE && nn->head->aux > 0) + roff_setreg(man->roff, "an-margin", nn->head->aux, '-'); - if (ntok == MAN_LP || ntok == MAN_PP || ntok == MAN_P) { - *pos = strlen(buf); - blk_imp(man, ntok, line, ppos, pos, buf); - } + /* Trailing text. */ + + if (buf[*pos] != '\0') { + roff_word_alloc(man, line, ppos, buf + *pos); + man->last->flags |= NODE_DELIMC; } + + /* Move a trailing paragraph behind the block. */ + + if (ctok == MAN_LP || ctok == MAN_PP || ctok == MAN_P) { + *pos = strlen(buf); + blk_imp(man, ctok, cline, cpos, pos, buf); + } } void @@ -315,7 +328,7 @@ blk_imp(MACRO_PROT_ARGS) */ if (man_macros[tok].flags & MAN_SCOPED && - (tok == MAN_TP || n == man->last)) { + (tok == MAN_TP || tok == MAN_TQ || n == man->last)) { man->flags |= MAN_BLINE; return; }