=================================================================== RCS file: /cvs/mandoc/Attic/macro.c,v retrieving revision 1.74 retrieving revision 1.77 diff -u -p -r1.74 -r1.77 --- mandoc/Attic/macro.c 2009/03/21 09:20:15 1.74 +++ mandoc/Attic/macro.c 2009/03/22 19:01:11 1.77 @@ -1,4 +1,4 @@ -/* $Id: macro.c,v 1.74 2009/03/21 09:20:15 kristaps Exp $ */ +/* $Id: macro.c,v 1.77 2009/03/22 19:01:11 kristaps Exp $ */ /* * Copyright (c) 2008, 2009 Kristaps Dzonsons * @@ -33,6 +33,7 @@ /* FIXME: .Fl, .Ar, .Cd handling of `|'. */ enum mwarn { + WIMPBRK, WMACPARM, WOBS }; @@ -198,6 +199,7 @@ const struct mdoc_macro __mdoc_macros[MDOC_MAX] = { { obsolete, 0 }, /* Es */ { obsolete, 0 }, /* En */ { in_line_argn, MDOC_CALLABLE | MDOC_PARSED }, /* Dx */ + { in_line_eoln, 0 }, /* %Q */ }; const struct mdoc_macro * const mdoc_macros = __mdoc_macros; @@ -235,6 +237,9 @@ pwarn(struct mdoc *mdoc, int line, int pos, enum mwarn p = NULL; switch (type) { + case (WIMPBRK): + p = "crufty end-of-line scope violation"; + break; case (WMACPARM): p = "macro-like parameter"; break; @@ -1057,19 +1062,18 @@ blk_part_imp(MACRO_PROT_ARGS) if (body == n) break; - if (n) { - mdoc->last = body; - mdoc->next = MDOC_NEXT_SIBLING; - } + if (NULL == n && ! pwarn(mdoc, body->line, body->pos, WIMPBRK)) + return(0); + if (n && ! rew_last(mdoc, body)) + return(0); + if (1 == ppos && ! append_delims(mdoc, line, pos, buf)) return(0); - if (n) { - mdoc->last = mdoc->last->parent; - assert(mdoc->last == blk); - mdoc->next = MDOC_NEXT_SIBLING; - } + if (n && ! rew_last(mdoc, blk)) + return(0); + return(1); }