=================================================================== RCS file: /cvs/mandoc/man_macro.c,v retrieving revision 1.127 retrieving revision 1.132 diff -u -p -r1.127 -r1.132 --- mandoc/man_macro.c 2018/08/17 20:33:37 1.127 +++ mandoc/man_macro.c 2018/08/18 20:41:54 1.132 @@ -1,4 +1,4 @@ -/* $Id: man_macro.c,v 1.127 2018/08/17 20:33:37 schwarze Exp $ */ +/* $Id: man_macro.c,v 1.132 2018/08/18 20:41:54 schwarze Exp $ */ /* * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons * Copyright (c) 2012-2015, 2017, 2018 Ingo Schwarze @@ -71,6 +71,8 @@ static const struct man_macro man_macros[MAN_MAX - MAN { in_line_eoln, MAN_NSCOPED }, /* PD */ { in_line_eoln, 0 }, /* AT */ { in_line_eoln, MAN_NSCOPED }, /* in */ + { blk_imp, MAN_BSCOPE }, /* SY */ + { blk_close, MAN_BSCOPE }, /* YS */ { in_line_eoln, 0 }, /* OP */ { in_line_eoln, MAN_BSCOPE }, /* EX */ { in_line_eoln, MAN_BSCOPE }, /* EE */ @@ -223,6 +225,9 @@ blk_close(MACRO_PROT_ARGS) return; } break; + case MAN_YS: + ntok = MAN_SY; + break; case MAN_UE: ntok = MAN_UR; break; @@ -241,6 +246,12 @@ blk_close(MACRO_PROT_ARGS) mandoc_msg(MANDOCERR_BLK_NOTOPEN, man->parse, line, ppos, roff_name[tok]); rew_scope(man, MAN_PP); + if (tok == MAN_RE) { + roff_elem_alloc(man, line, ppos, ROFF_br); + man->last->flags |= NODE_LINE | + NODE_VALID | NODE_ENDED; + man->next = ROFF_NEXT_SIBLING; + } return; } @@ -257,6 +268,8 @@ blk_close(MACRO_PROT_ARGS) if (buf[*pos] != '\0') { roff_word_alloc(man, line, ppos, buf + *pos); man->last->flags |= NODE_DELIMC; + if (mandoc_eos(man->last->string, strlen(man->last->string))) + man->last->flags |= NODE_EOS; } /* Move a trailing paragraph behind the block. */ @@ -265,6 +278,13 @@ blk_close(MACRO_PROT_ARGS) *pos = strlen(buf); blk_imp(man, ctok, cline, cpos, pos, buf); } + + /* Synopsis blocks need an explicit end marker for spacing. */ + + if (tok == MAN_YS && man->last == nn) { + roff_elem_alloc(man, line, ppos, tok); + man_unscope(man, man->last); + } } void @@ -274,7 +294,8 @@ blk_exp(MACRO_PROT_ARGS) char *p; int la; - rew_scope(man, tok); + if (tok == MAN_RS) + rew_scope(man, tok); roff_block_alloc(man, line, ppos, tok); head = roff_head_alloc(man, line, ppos, tok);