=================================================================== RCS file: /cvs/mandoc/mdoc_macro.c,v retrieving revision 1.123 retrieving revision 1.129 diff -u -p -r1.123 -r1.129 --- mandoc/mdoc_macro.c 2013/10/21 23:47:58 1.123 +++ mandoc/mdoc_macro.c 2014/01/21 10:26:53 1.129 @@ -1,4 +1,4 @@ -/* $Id: mdoc_macro.c,v 1.123 2013/10/21 23:47:58 schwarze Exp $ */ +/* $Id: mdoc_macro.c,v 1.129 2014/01/21 10:26:53 schwarze Exp $ */ /* * Copyright (c) 2008-2012 Kristaps Dzonsons * Copyright (c) 2010, 2012, 2013 Ingo Schwarze @@ -87,7 +87,7 @@ const struct mdoc_macro __mdoc_macros[MDOC_MAX] = { { in_line, MDOC_CALLABLE | MDOC_PARSED }, /* Ad */ { in_line, MDOC_CALLABLE | MDOC_PARSED | MDOC_JOIN }, /* An */ { in_line, MDOC_CALLABLE | MDOC_PARSED }, /* Ar */ - { in_line, MDOC_CALLABLE | MDOC_PARSED }, /* Cd */ + { in_line, MDOC_CALLABLE | MDOC_PARSED | MDOC_JOIN }, /* Cd */ { in_line, MDOC_CALLABLE | MDOC_PARSED }, /* Cm */ { in_line, MDOC_CALLABLE | MDOC_PARSED }, /* Dv */ { in_line, MDOC_CALLABLE | MDOC_PARSED }, /* Er */ @@ -98,7 +98,7 @@ const struct mdoc_macro __mdoc_macros[MDOC_MAX] = { { in_line, MDOC_CALLABLE | MDOC_PARSED }, /* Fl */ { in_line, MDOC_CALLABLE | MDOC_PARSED }, /* Fn */ { in_line, MDOC_CALLABLE | MDOC_PARSED }, /* Ft */ - { in_line, MDOC_CALLABLE | MDOC_PARSED }, /* Ic */ + { in_line, MDOC_CALLABLE | MDOC_PARSED | MDOC_JOIN }, /* Ic */ { in_line_argn, MDOC_CALLABLE | MDOC_PARSED }, /* In */ { in_line, MDOC_CALLABLE | MDOC_PARSED | MDOC_JOIN }, /* Li */ { blk_full, MDOC_JOIN }, /* Nd */ @@ -561,6 +561,9 @@ rew_sub(enum mdoc_type t, struct mdoc *mdoc, case (REWIND_NONE): return(1); case (REWIND_THIS): + n->lastline = line - + (MDOC_NEWLINE & mdoc->flags && + ! (MDOC_EXPLICIT & mdoc_macros[tok].flags)); break; case (REWIND_FORCE): mandoc_vmsg(MANDOCERR_SCOPEBROKEN, mdoc->parse, @@ -569,6 +572,8 @@ rew_sub(enum mdoc_type t, struct mdoc *mdoc, mdoc_macronames[n->tok]); /* FALLTHROUGH */ case (REWIND_MORE): + n->lastline = line - + (MDOC_NEWLINE & mdoc->flags ? 1 : 0); n = n->parent; continue; case (REWIND_LATER): @@ -678,7 +683,7 @@ append_delims(struct mdoc *mdoc, int line, int *pos, c * knowing which symbols break this behaviour, for * example, `. ;' shouldn't propagate the double-space. */ - if (mandoc_eos(p, strlen(p), 0)) + if (mandoc_eos(p, strlen(p))) mdoc->last->flags |= MDOC_EOS; } @@ -708,8 +713,7 @@ blk_exp_close(MACRO_PROT_ARGS) maxargs = 1; break; case (MDOC_Ek): - if ( ! (MDOC_SYNOPSIS & mdoc->flags)) - mdoc->flags &= ~MDOC_KEEP; + mdoc->flags &= ~MDOC_KEEP; default: maxargs = 0; break; @@ -1343,25 +1347,6 @@ blk_part_imp(MACRO_PROT_ARGS) if ( ! mdoc_body_alloc(mdoc, line, ppos, tok)) return(0); body = mdoc->last; - } - - for (n = body->child; n && n->next; n = n->next) - /* Do nothing. */ ; - - /* - * End of sentence spacing: if the last node is a text node and - * has a trailing period, then mark it as being end-of-sentence. - */ - - if (n && MDOC_TEXT == n->type && n->string) - if (mandoc_eos(n->string, strlen(n->string), 1)) - n->flags |= MDOC_EOS; - - /* Up-propagate the end-of-space flag. */ - - if (n && (MDOC_EOS & n->flags)) { - body->flags |= MDOC_EOS; - body->parent->flags |= MDOC_EOS; } /*