version 1.110, 2014/07/09 11:30:07 |
version 1.111, 2014/08/08 15:32:17 |
|
|
mdoc_node(const struct mdoc *mdoc) |
mdoc_node(const struct mdoc *mdoc) |
{ |
{ |
|
|
assert( ! (MDOC_HALT & mdoc->flags)); |
|
return(mdoc->first); |
return(mdoc->first); |
} |
} |
|
|
|
|
mdoc_meta(const struct mdoc *mdoc) |
mdoc_meta(const struct mdoc *mdoc) |
{ |
{ |
|
|
assert( ! (MDOC_HALT & mdoc->flags)); |
|
return(&mdoc->meta); |
return(&mdoc->meta); |
} |
} |
|
|
|
|
return(p); |
return(p); |
} |
} |
|
|
/* |
|
* Climb back up the parse tree, validating open scopes. Mostly calls |
|
* through to macro_end() in macro.c. |
|
*/ |
|
int |
int |
mdoc_endparse(struct mdoc *mdoc) |
mdoc_endparse(struct mdoc *mdoc) |
{ |
{ |
|
|
assert( ! (MDOC_HALT & mdoc->flags)); |
return(mdoc_macroend(mdoc)); |
if (mdoc_macroend(mdoc)) |
|
return(1); |
|
mdoc->flags |= MDOC_HALT; |
|
return(0); |
|
} |
} |
|
|
int |
int |
|
|
{ |
{ |
struct mdoc_node *n; |
struct mdoc_node *n; |
|
|
assert( ! (MDOC_HALT & mdoc->flags)); |
|
|
|
n = node_alloc(mdoc, ep->ln, ep->pos, MDOC_MAX, MDOC_EQN); |
n = node_alloc(mdoc, ep->ln, ep->pos, MDOC_MAX, MDOC_EQN); |
n->eqn = ep; |
n->eqn = ep; |
|
|
|
|
{ |
{ |
struct mdoc_node *n; |
struct mdoc_node *n; |
|
|
assert( ! (MDOC_HALT & mdoc->flags)); |
|
|
|
n = node_alloc(mdoc, sp->line, 0, MDOC_MAX, MDOC_TBL); |
n = node_alloc(mdoc, sp->line, 0, MDOC_MAX, MDOC_TBL); |
n->span = sp; |
n->span = sp; |
|
|
|
|
mdoc_parseln(struct mdoc *mdoc, int ln, char *buf, int offs) |
mdoc_parseln(struct mdoc *mdoc, int ln, char *buf, int offs) |
{ |
{ |
|
|
assert( ! (MDOC_HALT & mdoc->flags)); |
|
|
|
mdoc->flags |= MDOC_NEWLINE; |
mdoc->flags |= MDOC_NEWLINE; |
|
|
/* |
/* |
|
|
* into macro processing. |
* into macro processing. |
*/ |
*/ |
|
|
if (NULL == mdoc->last || MDOC_It == tok || MDOC_El == tok) { |
if (NULL == mdoc->last || MDOC_It == tok || MDOC_El == tok) |
if ( ! mdoc_macro(mdoc, tok, ln, sv, &offs, buf)) |
return(mdoc_macro(mdoc, tok, ln, sv, &offs, buf)); |
goto err; |
|
return(1); |
|
} |
|
|
|
n = mdoc->last; |
n = mdoc->last; |
assert(mdoc->last); |
assert(mdoc->last); |
|
|
if (MDOC_Bl == n->tok && MDOC_BODY == n->type && |
if (MDOC_Bl == n->tok && MDOC_BODY == n->type && |
LIST_column == n->norm->Bl.type) { |
LIST_column == n->norm->Bl.type) { |
mdoc->flags |= MDOC_FREECOL; |
mdoc->flags |= MDOC_FREECOL; |
if ( ! mdoc_macro(mdoc, MDOC_It, ln, sv, &sv, buf)) |
return(mdoc_macro(mdoc, MDOC_It, ln, sv, &sv, buf)); |
goto err; |
|
return(1); |
|
} |
} |
|
|
/* |
/* |
|
|
MDOC_Bl == n->parent->tok && |
MDOC_Bl == n->parent->tok && |
LIST_column == n->parent->norm->Bl.type) { |
LIST_column == n->parent->norm->Bl.type) { |
mdoc->flags |= MDOC_FREECOL; |
mdoc->flags |= MDOC_FREECOL; |
if ( ! mdoc_macro(mdoc, MDOC_It, ln, sv, &sv, buf)) |
return(mdoc_macro(mdoc, MDOC_It, ln, sv, &sv, buf)); |
goto err; |
|
return(1); |
|
} |
} |
|
|
/* Normal processing of a macro. */ |
/* Normal processing of a macro. */ |
|
|
if ( ! mdoc_macro(mdoc, tok, ln, sv, &offs, buf)) |
if ( ! mdoc_macro(mdoc, tok, ln, sv, &offs, buf)) |
goto err; |
return(0); |
|
|
/* In quick mode (for mandocdb), abort after the NAME section. */ |
/* In quick mode (for mandocdb), abort after the NAME section. */ |
|
|
|
|
return(2); |
return(2); |
|
|
return(1); |
return(1); |
|
|
err: /* Error out. */ |
|
|
|
mdoc->flags |= MDOC_HALT; |
|
return(0); |
|
} |
} |
|
|
enum mdelim |
enum mdelim |