version 1.304, 2016/08/10 12:29:38 |
version 1.308, 2016/08/20 14:43:50 |
Line 886 post_display(POST_ARGS) |
|
Line 886 post_display(POST_ARGS) |
|
n = mdoc->last; |
n = mdoc->last; |
switch (n->type) { |
switch (n->type) { |
case ROFFT_BODY: |
case ROFFT_BODY: |
if (n->end != ENDBODY_NOT) |
if (n->end != ENDBODY_NOT) { |
break; |
if (n->tok == MDOC_Bd && |
if (n->child == NULL) |
n->body->parent->args == NULL) |
|
roff_node_delete(mdoc, n); |
|
} else if (n->child == NULL) |
mandoc_msg(MANDOCERR_BLK_EMPTY, mdoc->parse, |
mandoc_msg(MANDOCERR_BLK_EMPTY, mdoc->parse, |
n->line, n->pos, mdoc_macronames[n->tok]); |
n->line, n->pos, mdoc_macronames[n->tok]); |
else if (n->tok == MDOC_D1) |
else if (n->tok == MDOC_D1) |
Line 1327 post_bl(POST_ARGS) |
|
Line 1329 post_bl(POST_ARGS) |
|
return; |
return; |
} |
} |
while (nchild != NULL) { |
while (nchild != NULL) { |
|
nnext = nchild->next; |
if (nchild->tok == MDOC_It || |
if (nchild->tok == MDOC_It || |
(nchild->tok == MDOC_Sm && |
(nchild->tok == MDOC_Sm && |
nchild->next != NULL && |
nnext != NULL && nnext->tok == MDOC_It)) { |
nchild->next->tok == MDOC_It)) { |
nchild = nnext; |
nchild = nchild->next; |
|
continue; |
continue; |
} |
} |
|
|
|
/* |
|
* In .Bl -column, the first rows may be implicit, |
|
* that is, they may not start with .It macros. |
|
* Such rows may be followed by nodes generated on the |
|
* roff level, for example .TS, which cannot be moved |
|
* out of the list. In that case, wrap such roff nodes |
|
* into an implicit row. |
|
*/ |
|
|
|
if (nchild->prev != NULL) { |
|
mdoc->last = nchild; |
|
mdoc->next = ROFF_NEXT_SIBLING; |
|
roff_block_alloc(mdoc, nchild->line, |
|
nchild->pos, MDOC_It); |
|
roff_head_alloc(mdoc, nchild->line, |
|
nchild->pos, MDOC_It); |
|
mdoc->next = ROFF_NEXT_SIBLING; |
|
roff_body_alloc(mdoc, nchild->line, |
|
nchild->pos, MDOC_It); |
|
while (nchild->tok != MDOC_It) { |
|
mdoc_node_relink(mdoc, nchild); |
|
if ((nchild = nnext) == NULL) |
|
break; |
|
nnext = nchild->next; |
|
mdoc->next = ROFF_NEXT_SIBLING; |
|
} |
|
mdoc->last = nbody; |
|
continue; |
|
} |
|
|
mandoc_msg(MANDOCERR_BL_MOVE, mdoc->parse, |
mandoc_msg(MANDOCERR_BL_MOVE, mdoc->parse, |
nchild->line, nchild->pos, |
nchild->line, nchild->pos, |
mdoc_macronames[nchild->tok]); |
mdoc_macronames[nchild->tok]); |
Line 1347 post_bl(POST_ARGS) |
|
Line 1379 post_bl(POST_ARGS) |
|
nblock = nbody->parent; |
nblock = nbody->parent; |
nprev = nblock->prev; |
nprev = nblock->prev; |
nparent = nblock->parent; |
nparent = nblock->parent; |
nnext = nchild->next; |
|
|
|
/* |
/* |
* Unlink this child. |
* Unlink this child. |
*/ |
*/ |
|
|
assert(nchild->prev == NULL); |
|
nbody->child = nnext; |
nbody->child = nnext; |
if (nnext == NULL) |
if (nnext == NULL) |
nbody->last = NULL; |
nbody->last = NULL; |
Line 1761 post_sh_authors(POST_ARGS) |
|
Line 1791 post_sh_authors(POST_ARGS) |
|
static void |
static void |
post_sh_head(POST_ARGS) |
post_sh_head(POST_ARGS) |
{ |
{ |
const char *goodsec; |
struct roff_node *nch; |
enum roff_sec sec; |
const char *goodsec; |
|
enum roff_sec sec; |
|
|
/* |
/* |
* Process a new section. Sections are either "named" or |
* Process a new section. Sections are either "named" or |
Line 1778 post_sh_head(POST_ARGS) |
|
Line 1809 post_sh_head(POST_ARGS) |
|
if (sec != SEC_NAME && mdoc->lastnamed == SEC_NONE) |
if (sec != SEC_NAME && mdoc->lastnamed == SEC_NONE) |
mandoc_vmsg(MANDOCERR_NAMESEC_FIRST, mdoc->parse, |
mandoc_vmsg(MANDOCERR_NAMESEC_FIRST, mdoc->parse, |
mdoc->last->line, mdoc->last->pos, "Sh %s", |
mdoc->last->line, mdoc->last->pos, "Sh %s", |
sec == SEC_CUSTOM ? mdoc->last->child->string : |
sec != SEC_CUSTOM ? secnames[sec] : |
secnames[sec]); |
(nch = mdoc->last->child) == NULL ? "" : |
|
nch->type == ROFFT_TEXT ? nch->string : |
|
mdoc_macronames[nch->tok]); |
|
|
/* The SYNOPSIS gets special attention in other areas. */ |
/* The SYNOPSIS gets special attention in other areas. */ |
|
|