version 1.57, 2008/12/10 00:52:46 |
version 1.59, 2008/12/10 12:05:33 |
Line 70 struct rofftree { |
|
Line 70 struct rofftree { |
|
char os[64]; /* `Os' results. */ |
char os[64]; /* `Os' results. */ |
char title[64]; /* `Dt' results. */ |
char title[64]; /* `Dt' results. */ |
enum roffmsec section; |
enum roffmsec section; |
char volume[64]; /* `Dt' results. */ |
enum roffvol volume; |
int state; |
int state; |
#define ROFF_PRELUDE (1 << 1) /* In roff prelude. */ /* FIXME: put into asec. */ |
#define ROFF_PRELUDE (1 << 1) /* In roff prelude. */ /* FIXME: put into asec. */ |
#define ROFF_PRELUDE_Os (1 << 2) /* `Os' is parsed. */ |
#define ROFF_PRELUDE_Os (1 << 2) /* `Os' is parsed. */ |
Line 164 roff_free(struct rofftree *tree, int flush) |
|
Line 164 roff_free(struct rofftree *tree, int flush) |
|
goto end; |
goto end; |
} |
} |
|
|
if ( ! (*tree->cb.rofftail)(tree->arg)) |
if ( ! (*tree->cb.rofftail)(tree->arg, &tree->tm, |
|
tree->os, tree->title, |
|
tree->section, tree->volume)) |
goto end; |
goto end; |
|
|
error = 0; |
error = 0; |
Line 1022 roff_Dt(ROFFCALL_ARGS) |
|
Line 1024 roff_Dt(ROFFCALL_ARGS) |
|
return(roff_errp(tree, *argv, tok, ERR_BADARG)); |
return(roff_errp(tree, *argv, tok, ERR_BADARG)); |
|
|
argv++; |
argv++; |
sz = sizeof(tree->volume); |
|
|
|
if (NULL == *argv) { |
if (NULL == *argv) { |
tree->volume[0] = 0; |
switch (tree->section) { |
} else if (strlcpy(tree->volume, *argv, sz) >= sz) |
case(ROFF_MSEC_1): |
return(roff_errp(tree, *argv, tok, ERR_ARGLEN)); |
/* FALLTHROUGH */ |
|
case(ROFF_MSEC_6): |
|
/* FALLTHROUGH */ |
|
case(ROFF_MSEC_7): |
|
tree->volume = ROFF_VOL_URM; |
|
break; |
|
case(ROFF_MSEC_2): |
|
/* FALLTHROUGH */ |
|
case(ROFF_MSEC_3): |
|
/* FALLTHROUGH */ |
|
case(ROFF_MSEC_3p): |
|
/* FALLTHROUGH */ |
|
case(ROFF_MSEC_4): |
|
/* FALLTHROUGH */ |
|
case(ROFF_MSEC_5): |
|
tree->volume = ROFF_VOL_PRM; |
|
break; |
|
case(ROFF_MSEC_8): |
|
tree->volume = ROFF_VOL_PRM; |
|
break; |
|
case(ROFF_MSEC_9): |
|
tree->volume = ROFF_VOL_KM; |
|
break; |
|
case(ROFF_MSEC_UNASS): |
|
/* FALLTHROUGH */ |
|
case(ROFF_MSEC_DRAFT): |
|
/* FALLTHROUGH */ |
|
case(ROFF_MSEC_PAPER): |
|
tree->volume = ROFF_VOL_NONE; |
|
break; |
|
default: |
|
abort(); |
|
/* NOTREACHED */ |
|
} |
|
} else if (ROFF_VOL_MAX == (tree->volume = roff_vol(*argv))) |
|
return(roff_errp(tree, *argv, tok, ERR_BADARG)); |
|
|
assert(NULL == tree->last); |
assert(NULL == tree->last); |
tree->state |= ROFF_PRELUDE_Dt; |
tree->state |= ROFF_PRELUDE_Dt; |