=================================================================== RCS file: /cvs/mandoc/mdoc_macro.c,v retrieving revision 1.75 retrieving revision 1.82 diff -u -p -r1.75 -r1.82 --- mandoc/mdoc_macro.c 2010/05/31 10:28:04 1.75 +++ mandoc/mdoc_macro.c 2010/06/27 15:52:41 1.82 @@ -1,6 +1,6 @@ -/* $Id: mdoc_macro.c,v 1.75 2010/05/31 10:28:04 kristaps Exp $ */ +/* $Id: mdoc_macro.c,v 1.82 2010/06/27 15:52:41 kristaps Exp $ */ /* - * Copyright (c) 2008, 2009 Kristaps Dzonsons + * Copyright (c) 2008, 2009 Kristaps Dzonsons * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -607,7 +607,6 @@ rew_sub(enum mdoc_type t, struct mdoc *m, if ( ! rew_last(m, n)) return(0); -#ifdef UGLY /* * The current block extends an enclosing block beyond a line * break. Now that the current block ends, close the enclosing @@ -620,7 +619,6 @@ rew_sub(enum mdoc_type t, struct mdoc *m, if ( ! mdoc_body_alloc(m, n->line, n->pos, n->tok)) return(0); } -#endif return(1); } @@ -936,9 +934,7 @@ blk_full(MACRO_PROT_ARGS) struct mdoc_arg *arg; struct mdoc_node *head; /* save of head macro */ struct mdoc_node *body; /* save of body macro */ -#ifdef UGLY struct mdoc_node *n; -#endif enum mdoc_type mtt; enum mdoct ntok; enum margserr ac, lac; @@ -1118,9 +1114,8 @@ blk_full(MACRO_PROT_ARGS) /* If we've already opened our body, exit now. */ if (NULL != body) - return(1); + goto out; -#ifdef UGLY /* * If there is an open (i.e., unvalidated) sub-block requiring * explicit close-out, postpone switching the current block from @@ -1136,7 +1131,6 @@ blk_full(MACRO_PROT_ARGS) return(1); } } -#endif /* Close out scopes to remain in a consistent state. */ @@ -1145,6 +1139,16 @@ blk_full(MACRO_PROT_ARGS) if ( ! mdoc_body_alloc(m, line, ppos, tok)) return(0); +out: + if ( ! (MDOC_FREECOL & m->flags)) + return(1); + + if ( ! rew_sub(MDOC_BODY, m, tok, line, ppos)) + return(0); + if ( ! rew_sub(MDOC_BLOCK, m, tok, line, ppos)) + return(0); + + m->flags &= ~MDOC_FREECOL; return(1); } @@ -1673,13 +1677,13 @@ phrase(struct mdoc *m, int line, int ppos, char *buf) } +/* ARGSUSED */ static int phrase_ta(MACRO_PROT_ARGS) { int la; enum mdoct ntok; enum margserr ac; - struct mdoc_node *n; char *p; /* @@ -1687,26 +1691,8 @@ phrase_ta(MACRO_PROT_ARGS) * it should simply error out with ARGSLOST. */ - n = m->last; if ( ! rew_sub(MDOC_BODY, m, MDOC_It, line, ppos)) return(0); - - /* - * FIXME: this is necessary in bogus constructions like - * .Bl -column foo bar - * .Sy foo Ta bar - * It is, however, an ugly way to do it. - * - * XXX; remove this when the above construct builds an implied - * `It' marker. - */ - if (NULL == m->last || - MDOC_BODY != m->last->type || - MDOC_It != m->last->tok) { - swarn(m, tok, line, ppos, n); - return(0); - } - if ( ! mdoc_body_alloc(m, line, ppos, MDOC_It)) return(0);