version 1.2, 2009/01/05 16:11:14 |
version 1.3, 2009/01/07 15:53:00 |
|
|
|
|
#include "private.h" |
#include "private.h" |
|
|
typedef int (*a_act)(struct mdoc *, int, int, |
typedef int (*a_act)(struct mdoc *, int, int); |
int, const char *[], |
|
int, const struct mdoc_arg *); |
|
|
|
|
|
struct actions { |
struct actions { |
|
|
}; |
}; |
|
|
|
|
|
static int action_sh(struct mdoc *, int, int); |
|
|
|
|
const struct actions mdoc_actions[MDOC_MAX] = { |
const struct actions mdoc_actions[MDOC_MAX] = { |
{ NULL }, /* \" */ |
{ NULL }, /* \" */ |
{ NULL }, /* Dd */ |
{ NULL }, /* Dd */ |
{ NULL }, /* Dt */ |
{ NULL }, /* Dt */ |
{ NULL }, /* Os */ |
{ NULL }, /* Os */ |
{ NULL }, /* Sh */ |
{ action_sh }, /* Sh */ |
{ NULL }, /* Ss */ |
{ NULL }, /* Ss */ |
{ NULL }, /* Pp */ |
{ NULL }, /* Pp */ |
{ NULL }, /* D1 */ |
{ NULL }, /* D1 */ |
Line 141 const struct actions mdoc_actions[MDOC_MAX] = { |
|
Line 142 const struct actions mdoc_actions[MDOC_MAX] = { |
|
}; |
}; |
|
|
|
|
int |
static int |
mdoc_action(struct mdoc *mdoc, int tok, int pos) |
action_sh(struct mdoc *mdoc, int tok, int pos) |
{ |
{ |
|
enum mdoc_sec sec; |
|
int i; |
|
struct mdoc_node *n; |
|
char *args[MDOC_LINEARG_MAX]; |
|
|
|
if (MDOC_HEAD != mdoc->last->type) |
|
return(1); |
|
|
|
n = mdoc->last->child; |
|
assert(n); |
|
|
|
for (i = 0; n && i < MDOC_LINEARG_MAX; n = n->next, i++) { |
|
assert(MDOC_TEXT == n->type); |
|
assert(NULL == n->child); |
|
assert(n->data.text.string); |
|
args[i] = n->data.text.string; |
|
} |
|
|
|
sec = mdoc_atosec((size_t)i, (const char **)args); |
|
if (SEC_CUSTOM != sec) |
|
mdoc->sec_lastn = sec; |
|
mdoc->sec_last = sec; |
|
|
return(1); |
return(1); |
} |
} |
|
|
#if 0 |
|
/* Post-processing. */ |
int |
switch (tok) { |
mdoc_action(struct mdoc *mdoc, int pos) |
case (MDOC_Sh): |
{ |
sec = mdoc_atosec((size_t)sz, _CC(args)); |
int t; |
if (SEC_CUSTOM != sec) |
|
mdoc->sec_lastn = sec; |
switch (mdoc->last->type) { |
mdoc->sec_last = sec; |
case (MDOC_BODY): |
|
t = mdoc->last->data.body.tok; |
break; |
break; |
default: |
case (MDOC_ELEM): |
|
t = mdoc->last->data.elem.tok; |
break; |
break; |
|
case (MDOC_BLOCK): |
|
t = mdoc->last->data.block.tok; |
|
break; |
|
case (MDOC_HEAD): |
|
t = mdoc->last->data.head.tok; |
|
break; |
|
default: |
|
return(1); |
} |
} |
|
|
MDOC_Nm... ? |
if (NULL == mdoc_actions[t].action) |
#endif |
return(1); |
|
/* TODO: MDOC_Nm... ? */ |
|
return((*mdoc_actions[t].action)(mdoc, t, pos)); |
|
} |
|
|