=================================================================== RCS file: /cvs/mandoc/mdoc.c,v retrieving revision 1.140 retrieving revision 1.143 diff -u -p -r1.140 -r1.143 --- mandoc/mdoc.c 2010/05/30 11:00:53 1.140 +++ mandoc/mdoc.c 2010/05/31 15:50:48 1.143 @@ -1,4 +1,4 @@ -/* $Id: mdoc.c,v 1.140 2010/05/30 11:00:53 kristaps Exp $ */ +/* $Id: mdoc.c,v 1.143 2010/05/31 15:50:48 kristaps Exp $ */ /* * Copyright (c) 2008, 2009 Kristaps Dzonsons * @@ -69,7 +69,7 @@ const char *const __mdoc_macronames[MDOC_MAX] = { /* LINTED */ "Dx", "%Q", "br", "sp", /* LINTED */ - "%U" + "%U", "Ta" }; const char *const __mdoc_argnames[MDOC_ARG_MAX] = { @@ -542,7 +542,8 @@ mdoc_node_delete(struct mdoc *m, struct mdoc_node *p) static int mdoc_ptext(struct mdoc *m, int line, char *buf, int offs) { - char *c, *ws, *end; + char *c, *ws, *end; + struct mdoc_node *n; /* Ignore bogus comments. */ @@ -555,6 +556,30 @@ mdoc_ptext(struct mdoc *m, int line, char *buf, int of if (SEC_NONE == m->lastnamed) return(mdoc_pmsg(m, line, offs, MANDOCERR_NOTEXT)); + + assert(m->last); + n = m->last; + + /* + * Diver directly into list processing if we're encountering a + * columnar MDOC_BLOCK with or without a prior MDOC_BLOCK entry + * (if it's a MDOC_BODY that means it's open, in which case we + * should process within its context). + */ + + if (MDOC_Bl == n->tok && MDOC_BODY == n->type && + LIST_column == n->data.list) { + m->flags |= MDOC_FREECOL; + return(mdoc_macro(m, MDOC_It, line, offs, &offs, buf)); + } + + if (MDOC_It == n->tok && MDOC_BLOCK == n->type && + NULL != n->parent && + MDOC_Bl == n->parent->tok && + LIST_column == n->parent->data.list) { + m->flags |= MDOC_FREECOL; + return(mdoc_macro(m, MDOC_It, line, offs, &offs, buf)); + } /* * Search for the beginning of unescaped trailing whitespace (ws)