-/* $Id: mdoc_macro.c,v 1.76 2010/05/31 11:52:06 kristaps Exp $ */
+/* $Id: mdoc_macro.c,v 1.80 2010/06/19 20:46:28 kristaps Exp $ */
/*
- * Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se>
+ * Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@bsd.lv>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
/* If we've already opened our body, exit now. */
if (NULL != body)
- return(1);
+ goto out;
#ifdef UGLY
/*
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);
}
}
+/* ARGSUSED */
static int
phrase_ta(MACRO_PROT_ARGS)
{
int la;
enum mdoct ntok;
enum margserr ac;
- struct mdoc_node *n;
char *p;
/*
* 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 ||
- NULL == m->last->parent->parent ||
- MDOC_Bl != m->last->parent->parent->tok ||
- LIST_column != m->last->parent->parent->data.list) {
- swarn(m, tok, line, ppos, n);
- return(0);
- }
-
if ( ! mdoc_body_alloc(m, line, ppos, MDOC_It))
return(0);