version 1.162, 2015/02/01 16:47:39 |
version 1.163, 2015/02/01 17:30:45 |
Line 1340 blk_part_exp(MACRO_PROT_ARGS) |
|
Line 1340 blk_part_exp(MACRO_PROT_ARGS) |
|
int la, nl; |
int la, nl; |
enum margserr ac; |
enum margserr ac; |
struct mdoc_node *head; /* keep track of head */ |
struct mdoc_node *head; /* keep track of head */ |
struct mdoc_node *body; /* keep track of body */ |
|
char *p; |
char *p; |
|
|
nl = MDOC_NEWLINE & mdoc->flags; |
nl = MDOC_NEWLINE & mdoc->flags; |
Line 1352 blk_part_exp(MACRO_PROT_ARGS) |
|
Line 1351 blk_part_exp(MACRO_PROT_ARGS) |
|
*/ |
*/ |
|
|
mdoc_block_alloc(mdoc, line, ppos, tok, NULL); |
mdoc_block_alloc(mdoc, line, ppos, tok, NULL); |
for (head = body = NULL; ; ) { |
head = NULL; |
|
for (;;) { |
la = *pos; |
la = *pos; |
ac = mdoc_args(mdoc, line, pos, buf, tok, &p); |
ac = mdoc_args(mdoc, line, pos, buf, tok, &p); |
if (ac == ARGS_PUNCT || ac == ARGS_EOLN) |
if (ac == ARGS_PUNCT || ac == ARGS_EOLN) |
Line 1362 blk_part_exp(MACRO_PROT_ARGS) |
|
Line 1362 blk_part_exp(MACRO_PROT_ARGS) |
|
|
|
if (head == NULL && ac != ARGS_QWORD && |
if (head == NULL && ac != ARGS_QWORD && |
mdoc_isdelim(p) == DELIM_OPEN) { |
mdoc_isdelim(p) == DELIM_OPEN) { |
assert(NULL == body); |
|
dword(mdoc, line, la, p, DELIM_OPEN, 0); |
dword(mdoc, line, la, p, DELIM_OPEN, 0); |
continue; |
continue; |
} |
} |
|
|
if (head == NULL) { |
if (head == NULL) { |
assert(body == NULL); |
|
head = mdoc_head_alloc(mdoc, line, ppos, tok); |
head = mdoc_head_alloc(mdoc, line, ppos, tok); |
} |
if (tok == MDOC_Eo) /* Not parsed. */ |
|
|
/* |
|
* `Eo' gobbles any data into the head, but most other |
|
* macros just immediately close out and begin the body. |
|
*/ |
|
|
|
if (body == NULL) { |
|
assert(head); |
|
/* No check whether it's a macro! */ |
|
if (tok == MDOC_Eo) |
|
dword(mdoc, line, la, p, DELIM_MAX, 0); |
dword(mdoc, line, la, p, DELIM_MAX, 0); |
rew_sub(MDOC_HEAD, mdoc, tok, line, ppos); |
rew_last(mdoc, head); |
body = mdoc_body_alloc(mdoc, line, ppos, tok); |
mdoc_body_alloc(mdoc, line, ppos, tok); |
if (tok == MDOC_Eo) |
if (tok == MDOC_Eo) |
continue; |
continue; |
} |
} |
assert(head != NULL && body != NULL); |
|
|
|
if (macro_or_word(mdoc, tok, line, la, pos, buf, 1)) |
if (macro_or_word(mdoc, tok, line, la, pos, buf, 1)) |
break; |
break; |
Line 1395 blk_part_exp(MACRO_PROT_ARGS) |
|
Line 1382 blk_part_exp(MACRO_PROT_ARGS) |
|
|
|
/* Clean-up to leave in a consistent state. */ |
/* Clean-up to leave in a consistent state. */ |
|
|
if (head == NULL) |
if (head == NULL) { |
mdoc_head_alloc(mdoc, line, ppos, tok); |
rew_last(mdoc, mdoc_head_alloc(mdoc, line, ppos, tok)); |
|
|
if (body == NULL) { |
|
rew_sub(MDOC_HEAD, mdoc, tok, line, ppos); |
|
mdoc_body_alloc(mdoc, line, ppos, tok); |
mdoc_body_alloc(mdoc, line, ppos, tok); |
} |
} |
if (nl) |
if (nl) |