diff options
author | Kristaps Dzonsons <kristaps@bsd.lv> | 2010-05-31 15:42:09 +0000 |
---|---|---|
committer | Kristaps Dzonsons <kristaps@bsd.lv> | 2010-05-31 15:42:09 +0000 |
commit | 4e6de631247e651c0cdb6f83ef3f819d7c8fd390 (patch) | |
tree | eadbef674d38c1fbee07a8ed27dfb2e5b3388bac /mdoc.c | |
parent | 57a28b7a61012e5f8378170afd8bf060000a4a08 (diff) | |
download | mandoc-4e6de631247e651c0cdb6f83ef3f819d7c8fd390.tar.gz |
Add ability to interpret initial free-form lines as part of a `Bl
-column' up until the first `It'. This is UGLY and should have all
sorts of warnings, and will. On the one hand, it fits with groff's
notion of tabs and tab-spaces. On the other hand, it's not really
"free-form" text any more. Note that this does not yet accomodate for
macros coming on these lines.
Diffstat (limited to 'mdoc.c')
-rw-r--r-- | mdoc.c | 26 |
1 files changed, 25 insertions, 1 deletions
@@ -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. */ @@ -556,6 +557,29 @@ mdoc_ptext(struct mdoc *m, int line, char *buf, int offs) 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 && 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) * and for the first character not to be output (end). |