version 1.18, 2009/07/07 11:47:17 |
version 1.19, 2009/07/12 16:34:16 |
Line 85 const struct mdoc_macro __mdoc_macros[MDOC_MAX] = { |
|
Line 85 const struct mdoc_macro __mdoc_macros[MDOC_MAX] = { |
|
{ in_line, MDOC_CALLABLE | MDOC_PARSED }, /* Ic */ |
{ in_line, MDOC_CALLABLE | MDOC_PARSED }, /* Ic */ |
{ in_line_argn, MDOC_CALLABLE | MDOC_PARSED }, /* In */ |
{ in_line_argn, MDOC_CALLABLE | MDOC_PARSED }, /* In */ |
{ in_line, MDOC_CALLABLE | MDOC_PARSED }, /* Li */ |
{ in_line, MDOC_CALLABLE | MDOC_PARSED }, /* Li */ |
{ in_line_eoln, 0 }, /* Nd */ |
{ blk_full, 0 }, /* Nd */ |
{ in_line, MDOC_CALLABLE | MDOC_PARSED }, /* Nm */ |
{ in_line, MDOC_CALLABLE | MDOC_PARSED }, /* Nm */ |
{ blk_part_imp, MDOC_CALLABLE | MDOC_PARSED }, /* Op */ |
{ blk_part_imp, MDOC_CALLABLE | MDOC_PARSED }, /* Op */ |
{ obsolete, 0 }, /* Ot */ |
{ obsolete, 0 }, /* Ot */ |
Line 386 rew_dohalt(int tok, enum mdoc_type type, const struct |
|
Line 386 rew_dohalt(int tok, enum mdoc_type type, const struct |
|
if (type == p->type && tok == p->tok) |
if (type == p->type && tok == p->tok) |
return(REWIND_REWIND); |
return(REWIND_REWIND); |
break; |
break; |
|
case (MDOC_Nd): |
|
/* FALLTHROUGH */ |
case (MDOC_Ss): |
case (MDOC_Ss): |
assert(MDOC_TAIL != type); |
assert(MDOC_TAIL != type); |
if (type == p->type && tok == p->tok) |
if (type == p->type && tok == p->tok) |
Line 491 rew_dobreak(int tok, const struct mdoc_node *p) |
|
Line 493 rew_dobreak(int tok, const struct mdoc_node *p) |
|
switch (tok) { |
switch (tok) { |
case (MDOC_It): |
case (MDOC_It): |
return(MDOC_It == p->tok); |
return(MDOC_It == p->tok); |
|
case (MDOC_Nd): |
|
return(MDOC_Nd == p->tok); |
case (MDOC_Ss): |
case (MDOC_Ss): |
return(MDOC_Ss == p->tok); |
return(MDOC_Ss == p->tok); |
case (MDOC_Sh): |
case (MDOC_Sh): |
|
if (MDOC_Nd == p->tok) |
|
return(1); |
if (MDOC_Ss == p->tok) |
if (MDOC_Ss == p->tok) |
return(1); |
return(1); |
return(MDOC_Sh == p->tok); |
return(MDOC_Sh == p->tok); |
Line 875 in_line(MACRO_PROT_ARGS) |
|
Line 881 in_line(MACRO_PROT_ARGS) |
|
static int |
static int |
blk_full(MACRO_PROT_ARGS) |
blk_full(MACRO_PROT_ARGS) |
{ |
{ |
int c, lastarg, reopen; |
int c, lastarg, reopen, dohead; |
struct mdoc_arg *arg; |
struct mdoc_arg *arg; |
char *p; |
char *p; |
|
|
|
/* |
|
* Whether to process a block-head section. If this is |
|
* non-zero, then a head will be opened for all line arguments. |
|
* If not, then the head will always be empty and only a body |
|
* will be opened, which will stay open at the eoln. |
|
*/ |
|
|
|
switch (tok) { |
|
case (MDOC_Nd): |
|
dohead = 0; |
|
break; |
|
default: |
|
dohead = 1; |
|
break; |
|
} |
|
|
if ( ! (MDOC_EXPLICIT & mdoc_macros[tok].flags)) { |
if ( ! (MDOC_EXPLICIT & mdoc_macros[tok].flags)) { |
if ( ! rew_subblock(MDOC_BODY, mdoc, |
if ( ! rew_subblock(MDOC_BODY, mdoc, |
tok, line, ppos)) |
tok, line, ppos)) |
Line 923 blk_full(MACRO_PROT_ARGS) |
|
Line 945 blk_full(MACRO_PROT_ARGS) |
|
|
|
if ( ! mdoc_head_alloc(mdoc, line, ppos, tok)) |
if ( ! mdoc_head_alloc(mdoc, line, ppos, tok)) |
return(0); |
return(0); |
|
|
|
/* Immediately close out head and enter body, if applicable. */ |
|
|
|
if (0 == dohead) { |
|
if ( ! rew_subblock(MDOC_HEAD, mdoc, tok, line, ppos)) |
|
return(0); |
|
if ( ! mdoc_body_alloc(mdoc, line, ppos, tok)) |
|
return(0); |
|
} |
|
|
mdoc->next = MDOC_NEXT_CHILD; |
mdoc->next = MDOC_NEXT_CHILD; |
|
|
for (reopen = 0;; ) { |
for (reopen = 0;; ) { |
Line 934 blk_full(MACRO_PROT_ARGS) |
|
Line 966 blk_full(MACRO_PROT_ARGS) |
|
if (ARGS_EOLN == c) |
if (ARGS_EOLN == c) |
break; |
break; |
if (ARGS_PHRASE == c) { |
if (ARGS_PHRASE == c) { |
|
assert(dohead); |
if (reopen && ! mdoc_head_alloc |
if (reopen && ! mdoc_head_alloc |
(mdoc, line, ppos, tok)) |
(mdoc, line, ppos, tok)) |
return(0); |
return(0); |
Line 970 blk_full(MACRO_PROT_ARGS) |
|
Line 1003 blk_full(MACRO_PROT_ARGS) |
|
|
|
if (1 == ppos && ! append_delims(mdoc, line, pos, buf)) |
if (1 == ppos && ! append_delims(mdoc, line, pos, buf)) |
return(0); |
return(0); |
|
|
|
/* If the body's already open, then just return. */ |
|
if (0 == dohead) |
|
return(1); |
|
|
if ( ! rew_subblock(MDOC_HEAD, mdoc, tok, line, ppos)) |
if ( ! rew_subblock(MDOC_HEAD, mdoc, tok, line, ppos)) |
return(0); |
return(0); |
|
|
if ( ! mdoc_body_alloc(mdoc, line, ppos, tok)) |
if ( ! mdoc_body_alloc(mdoc, line, ppos, tok)) |
return(0); |
return(0); |
mdoc->next = MDOC_NEXT_CHILD; |
mdoc->next = MDOC_NEXT_CHILD; |