summaryrefslogtreecommitdiffstatshomepage
path: root/roff.c
diff options
context:
space:
mode:
authorKristaps Dzonsons <kristaps@bsd.lv>2008-12-10 10:43:57 +0000
committerKristaps Dzonsons <kristaps@bsd.lv>2008-12-10 10:43:57 +0000
commit7d393d45bdff6d0d4a4742e71d0c6997150410be (patch)
tree9998584b5f49d7853deab8b04a9bb7e7e62f3613 /roff.c
parent643d4d3e12bab073d256761997a695832f403658 (diff)
downloadmandoc-7d393d45bdff6d0d4a4742e71d0c6997150410be.tar.gz
mandoc-7d393d45bdff6d0d4a4742e71d0c6997150410be.tar.zst
mandoc-7d393d45bdff6d0d4a4742e71d0c6997150410be.zip
*** empty log message ***
Diffstat (limited to 'roff.c')
-rw-r--r--roff.c46
1 files changed, 40 insertions, 6 deletions
diff --git a/roff.c b/roff.c
index d40c4b35..99047556 100644
--- a/roff.c
+++ b/roff.c
@@ -1,4 +1,4 @@
-/* $Id: roff.c,v 1.57 2008/12/10 00:52:46 kristaps Exp $ */
+/* $Id: roff.c,v 1.58 2008/12/10 10:43:57 kristaps Exp $ */
/*
* Copyright (c) 2008 Kristaps Dzonsons <kristaps@kth.se>
*
@@ -70,7 +70,7 @@ struct rofftree {
char os[64]; /* `Os' results. */
char title[64]; /* `Dt' results. */
enum roffmsec section;
- char volume[64]; /* `Dt' results. */
+ enum roffvol volume;
int state;
#define ROFF_PRELUDE (1 << 1) /* In roff prelude. */ /* FIXME: put into asec. */
#define ROFF_PRELUDE_Os (1 << 2) /* `Os' is parsed. */
@@ -1022,12 +1022,46 @@ roff_Dt(ROFFCALL_ARGS)
return(roff_errp(tree, *argv, tok, ERR_BADARG));
argv++;
- sz = sizeof(tree->volume);
if (NULL == *argv) {
- tree->volume[0] = 0;
- } else if (strlcpy(tree->volume, *argv, sz) >= sz)
- return(roff_errp(tree, *argv, tok, ERR_ARGLEN));
+ switch (tree->section) {
+ case(ROFF_MSEC_1):
+ /* 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);
tree->state |= ROFF_PRELUDE_Dt;