summaryrefslogtreecommitdiffstats
path: root/term.c
diff options
context:
space:
mode:
authorKristaps Dzonsons <kristaps@bsd.lv>2010-06-07 10:52:44 +0000
committerKristaps Dzonsons <kristaps@bsd.lv>2010-06-07 10:52:44 +0000
commitbc3089425f6b3a43c2898c28f960f5a313c05ebe (patch)
tree90e922cb05b24707a53bfbca9db61f220ea19182 /term.c
parentdb7e43f14579272d3f0f3b85346bfb0e957dacee (diff)
downloadmandoc-bc3089425f6b3a43c2898c28f960f5a313c05ebe.tar.gz
Add -Owidth=width option to mandoc -Tascii. Asked for by joerg@ about a
thousand years ago. Note that this is normalised to >=60.
Diffstat (limited to 'term.c')
-rw-r--r--term.c29
1 files changed, 24 insertions, 5 deletions
diff --git a/term.c b/term.c
index 03d1ec5b..9506101c 100644
--- a/term.c
+++ b/term.c
@@ -22,6 +22,7 @@
#include <assert.h>
#include <ctype.h>
+#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -35,7 +36,7 @@
#include "mdoc.h"
#include "main.h"
-static struct termp *term_alloc(enum termenc, size_t);
+static struct termp *term_alloc(char *, enum termenc);
static void term_free(struct termp *);
static void spec(struct termp *, const char *, size_t);
static void res(struct termp *, const char *, size_t);
@@ -46,10 +47,10 @@ static void encode(struct termp *, const char *, size_t);
void *
-ascii_alloc(size_t width)
+ascii_alloc(char *outopts)
{
- return(term_alloc(TERMENC_ASCII, width));
+ return(term_alloc(outopts, TERMENC_ASCII));
}
@@ -75,17 +76,35 @@ term_free(struct termp *p)
static struct termp *
-term_alloc(enum termenc enc, size_t width)
+term_alloc(char *outopts, enum termenc enc)
{
- struct termp *p;
+ struct termp *p;
+ const char *toks[2];
+ char *v;
+ size_t width;
+
+ toks[0] = "width";
+ toks[1] = NULL;
p = calloc(1, sizeof(struct termp));
if (NULL == p) {
perror(NULL);
exit(EXIT_FAILURE);
}
+
p->tabwidth = 5;
p->enc = enc;
+ width = 80;
+
+ while (outopts && *outopts)
+ switch (getsubopt(&outopts, UNCONST(toks), &v)) {
+ case (0):
+ width = atoi(v);
+ break;
+ default:
+ break;
+ }
+
/* Enforce some lower boundary. */
if (width < 60)
width = 60;