summaryrefslogtreecommitdiffstatshomepage
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
commit82cd5e1a1b788d7b87b54cabf8843606475da964 (patch)
tree9577d3959d01c94af1d4c069e3c948ba92a3cd98
parent33883780dab2d66bcefd61599b61e4947f88a2db (diff)
downloadmandoc-82cd5e1a1b788d7b87b54cabf8843606475da964.tar.gz
mandoc-82cd5e1a1b788d7b87b54cabf8843606475da964.tar.zst
mandoc-82cd5e1a1b788d7b87b54cabf8843606475da964.zip
Add -Owidth=width option to mandoc -Tascii. Asked for by joerg@ about a
thousand years ago. Note that this is normalised to >=60.
-rw-r--r--html.c4
-rw-r--r--main.c4
-rw-r--r--main.h7
-rw-r--r--term.c31
4 files changed, 33 insertions, 13 deletions
diff --git a/html.c b/html.c
index d05e4b1d..6f0d318a 100644
--- a/html.c
+++ b/html.c
@@ -1,4 +1,4 @@
-/* $Id: html.c,v 1.100 2010/05/25 12:37:20 kristaps Exp $ */
+/* $Id: html.c,v 1.101 2010/06/07 10:52:44 kristaps Exp $ */
/*
* Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se>
*
@@ -35,8 +35,6 @@
#include "html.h"
#include "main.h"
-#define UNCONST(a) ((void *)(uintptr_t)(const void *)(a))
-
struct htmldata {
const char *name;
int flags;
diff --git a/main.c b/main.c
index 313a1679..b6a13f6e 100644
--- a/main.c
+++ b/main.c
@@ -1,4 +1,4 @@
-/* $Id: main.c,v 1.83 2010/06/06 20:44:53 joerg Exp $ */
+/* $Id: main.c,v 1.84 2010/06/07 10:52:44 kristaps Exp $ */
/*
* Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se>
*
@@ -601,7 +601,7 @@ fdesc(struct curparse *curp)
case (OUTT_LINT):
break;
default:
- curp->outdata = ascii_alloc(80);
+ curp->outdata = ascii_alloc(curp->outopts);
curp->outman = terminal_man;
curp->outmdoc = terminal_mdoc;
curp->outfree = terminal_free;
diff --git a/main.h b/main.h
index c011cc85..80c61c6c 100644
--- a/main.h
+++ b/main.h
@@ -1,4 +1,4 @@
-/* $Id: main.h,v 1.3 2010/05/15 16:18:23 joerg Exp $ */
+/* $Id: main.h,v 1.4 2010/06/07 10:52:44 kristaps Exp $ */
/*
* Copyright (c) 2009 Kristaps Dzonsons <kristaps@kth.se>
*
@@ -22,6 +22,9 @@ __BEGIN_DECLS
struct mdoc;
struct man;
+#define UNCONST(a) ((void *)(uintptr_t)(const void *)(a))
+
+
/*
* Definitions for main.c-visible output device functions, e.g., -Thtml
* and -Tascii. Note that ascii_alloc() is named as such in
@@ -38,7 +41,7 @@ void html_free(void *);
void tree_mdoc(void *, const struct mdoc *);
void tree_man(void *, const struct man *);
-void *ascii_alloc(size_t);
+void *ascii_alloc(char *);
void terminal_mdoc(void *, const struct mdoc *);
void terminal_man(void *, const struct man *);
void terminal_free(void *);
diff --git a/term.c b/term.c
index 02f69d9f..faa70675 100644
--- a/term.c
+++ b/term.c
@@ -1,4 +1,4 @@
-/* $Id: term.c,v 1.140 2010/05/25 12:37:20 kristaps Exp $ */
+/* $Id: term.c,v 1.141 2010/06/07 10:52:44 kristaps Exp $ */
/*
* Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se>
*
@@ -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;