version 1.194, 2013/10/05 22:08:12 |
version 1.195, 2013/10/06 13:32:46 |
Line 1590 post_bl_head(POST_ARGS) |
|
Line 1590 post_bl_head(POST_ARGS) |
|
static int |
static int |
post_bl(POST_ARGS) |
post_bl(POST_ARGS) |
{ |
{ |
struct mdoc_node *n; |
struct mdoc_node *nparent, *nprev; /* of the Bl block */ |
|
struct mdoc_node *nblock, *nbody; /* of the Bl */ |
|
struct mdoc_node *nchild, *nnext; /* of the Bl body */ |
|
|
if (MDOC_HEAD == mdoc->last->type) |
nbody = mdoc->last; |
return(post_bl_head(mdoc)); |
switch (nbody->type) { |
if (MDOC_BLOCK == mdoc->last->type) |
case (MDOC_BLOCK): |
return(post_bl_block(mdoc)); |
return(post_bl_block(mdoc)); |
if (MDOC_BODY != mdoc->last->type) |
case (MDOC_HEAD): |
|
return(post_bl_head(mdoc)); |
|
case (MDOC_BODY): |
|
break; |
|
default: |
return(1); |
return(1); |
|
} |
|
|
for (n = mdoc->last->child; n; n = n->next) { |
nchild = nbody->child; |
switch (n->tok) { |
while (NULL != nchild) { |
case (MDOC_Lp): |
if (MDOC_It == nchild->tok || MDOC_Sm == nchild->tok) { |
/* FALLTHROUGH */ |
nchild = nchild->next; |
case (MDOC_Pp): |
|
mdoc_nmsg(mdoc, n, MANDOCERR_CHILD); |
|
/* FALLTHROUGH */ |
|
case (MDOC_It): |
|
/* FALLTHROUGH */ |
|
case (MDOC_Sm): |
|
continue; |
continue; |
default: |
|
break; |
|
} |
} |
|
|
mdoc_nmsg(mdoc, n, MANDOCERR_SYNTCHILD); |
mdoc_nmsg(mdoc, nchild, MANDOCERR_CHILD); |
return(0); |
|
|
/* |
|
* Move the node out of the Bl block. |
|
* First, collect all required node pointers. |
|
*/ |
|
|
|
nblock = nbody->parent; |
|
nprev = nblock->prev; |
|
nparent = nblock->parent; |
|
nnext = nchild->next; |
|
|
|
/* |
|
* Unlink this child. |
|
*/ |
|
|
|
assert(NULL == nchild->prev); |
|
if (0 == --nbody->nchild) { |
|
nbody->child = NULL; |
|
nbody->last = NULL; |
|
assert(NULL == nnext); |
|
} else { |
|
nbody->child = nnext; |
|
nnext->prev = NULL; |
|
} |
|
|
|
/* |
|
* Relink this child. |
|
*/ |
|
|
|
nchild->parent = nparent; |
|
nchild->prev = nprev; |
|
nchild->next = nblock; |
|
|
|
nblock->prev = nchild; |
|
nparent->nchild++; |
|
if (NULL == nprev) |
|
nparent->child = nchild; |
|
else |
|
nprev->next = nchild; |
|
|
|
nchild = nnext; |
} |
} |
|
|
return(1); |
return(1); |