summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorKristaps Dzonsons <kristaps@bsd.lv>2009-03-21 21:09:00 +0000
committerKristaps Dzonsons <kristaps@bsd.lv>2009-03-21 21:09:00 +0000
commitcef427b7b44922753d803c4b2af56b03e0abdcc0 (patch)
tree133afd20bc92a37a97f31466a8fd1ecfcd560fd7
parente4648a32d325bf9e23dcd2c60ac4a06930d3e699 (diff)
downloadmandoc-cef427b7b44922753d803c4b2af56b03e0abdcc0.tar.gz
mandoc-cef427b7b44922753d803c4b2af56b03e0abdcc0.tar.zst
mandoc-cef427b7b44922753d803c4b2af56b03e0abdcc0.zip
Fixes to dynamic addition of Bl width.
-rw-r--r--action.c83
-rw-r--r--argv.c4
-rw-r--r--mandoc.113
-rw-r--r--mdoc.324
-rw-r--r--validate.c5
5 files changed, 60 insertions, 69 deletions
diff --git a/action.c b/action.c
index 0caac70c..77b57e88 100644
--- a/action.c
+++ b/action.c
@@ -1,4 +1,4 @@
-/* $Id: action.c,v 1.48 2009/03/21 09:48:29 kristaps Exp $ */
+/* $Id: action.c,v 1.49 2009/03/21 21:09:00 kristaps Exp $ */
/*
* Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@openbsd.org>
*
@@ -32,10 +32,6 @@
* children have been filled in (post-fix order).
*/
-enum merr {
- ENOWIDTH
-};
-
enum mwarn {
WBADSEC,
WNOWIDTH,
@@ -51,7 +47,6 @@ struct actions {
};
static int pwarn(struct mdoc *, int, int, enum mwarn);
-static int perr(struct mdoc *, int, int, enum merr);
static int post_ar(POST_ARGS);
static int post_bl(POST_ARGS);
@@ -69,7 +64,6 @@ static int post_std(POST_ARGS);
static int pre_bd(PRE_ARGS);
static int pre_dl(PRE_ARGS);
-#define merr(m, t) perr((m), (m)->last->line, (m)->last->pos, (t))
#define mwarn(m, t) pwarn((m), (m)->last->line, (m)->last->pos, (t))
const struct actions mdoc_actions[MDOC_MAX] = {
@@ -236,24 +230,6 @@ mdoc_action_post(struct mdoc *m)
static int
-perr(struct mdoc *m, int line, int pos, enum merr type)
-{
- char *p;
-
- p = NULL;
-
- switch (type) {
- case (ENOWIDTH):
- p = "missing width argument";
- break;
- }
-
- assert(p);
- return(mdoc_perr(m, line, pos, p));
-}
-
-
-static int
pwarn(struct mdoc *m, int line, int pos, enum mwarn type)
{
char *p;
@@ -471,6 +447,10 @@ post_os(POST_ARGS)
}
+/*
+ * Calculate the -width for a `Bl -tag' list if it hasn't been provided.
+ * Uses the first head macro.
+ */
static int
post_bl_tagwidth(struct mdoc *m)
{
@@ -479,33 +459,21 @@ post_bl_tagwidth(struct mdoc *m)
char buf[32];
/*
- * If -tag has been specified and -width has not been, then try
- * to intuit our width from the first body element.
- */
-
- if (NULL == (n = m->last->body->child))
- return(1);
-
- /*
* Use the text width, if a text node, or the default macro
* width if a macro.
*/
- n = n->head->child;
+ n = m->last->head->child;
+ sz = 10; /* Default size. */
+
if (n) {
if (MDOC_TEXT != n->type) {
if (0 == (sz = (int)mdoc_macro2len(n->tok)))
- sz = -1;
+ if ( ! mwarn(m, WNOWIDTH))
+ return(0);
} else
sz = (int)strlen(n->string) + 1;
- } else
- sz = -1;
-
- if (-1 == sz) {
- if ( ! mwarn(m, WNOWIDTH))
- return(0);
- sz = 10;
- }
+ }
(void)snprintf(buf, sizeof(buf), "%dn", sz);
@@ -514,26 +482,19 @@ post_bl_tagwidth(struct mdoc *m)
* We're guaranteed that a MDOC_Width doesn't already exist.
*/
- if (NULL == m->last->args) {
- m->last->args = xcalloc
- (1, sizeof(struct mdoc_arg));
- m->last->args->refcnt = 1;
- }
-
n = m->last;
- sz = (int)n->args->argc;
-
- (n->args->argc)++;
+ assert(n->args);
+ (n->args->argc)++;
n->args->argv = xrealloc(n->args->argv,
- n->args->argc * sizeof(struct mdoc_arg));
+ n->args->argc * sizeof(struct mdoc_argv));
- n->args->argv[sz - 1].arg = MDOC_Width;
- n->args->argv[sz - 1].line = m->last->line;
- n->args->argv[sz - 1].pos = m->last->pos;
- n->args->argv[sz - 1].sz = 1;
- n->args->argv[sz - 1].value = xcalloc(1, sizeof(char *));
- n->args->argv[sz - 1].value[0] = xstrdup(buf);
+ n->args->argv[n->args->argc - 1].arg = MDOC_Width;
+ n->args->argv[n->args->argc - 1].line = m->last->line;
+ n->args->argv[n->args->argc - 1].pos = m->last->pos;
+ n->args->argv[n->args->argc - 1].sz = 1;
+ n->args->argv[n->args->argc - 1].value = xcalloc(1, sizeof(char *));
+ n->args->argv[n->args->argc - 1].value[0] = xstrdup(buf);
return(1);
}
@@ -548,14 +509,14 @@ post_bl_width(struct mdoc *m)
char *p;
if (NULL == m->last->args)
- return(merr(m, ENOWIDTH));
+ return(1);
for (i = 0; i < (int)m->last->args->argc; i++)
if (MDOC_Width == m->last->args->argv[i].arg)
break;
if (i == (int)m->last->args->argc)
- return(merr(m, ENOWIDTH));
+ return(1);
p = m->last->args->argv[i].value[0];
diff --git a/argv.c b/argv.c
index 7aa6a029..ead3cd9a 100644
--- a/argv.c
+++ b/argv.c
@@ -1,4 +1,4 @@
-/* $Id: argv.c,v 1.54 2009/03/21 09:42:07 kristaps Exp $ */
+/* $Id: argv.c,v 1.55 2009/03/21 21:09:00 kristaps Exp $ */
/*
* Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@openbsd.org>
*
@@ -330,7 +330,7 @@ mdoc_argv_free(struct mdoc_arg *p)
if (0 == p->argv[i].sz)
continue;
/* LINTED */
- for (j = 0; j < (int)p->argv[i].sz; j++)
+ for (j = 0; j < (int)p->argv[i].sz; j++)
free(p->argv[i].value[j]);
free(p->argv[i].value);
diff --git a/mandoc.1 b/mandoc.1
index 0fec9b82..88b47c56 100644
--- a/mandoc.1
+++ b/mandoc.1
@@ -1,4 +1,4 @@
-.\" $Id: mandoc.1,v 1.4 2009/03/21 13:09:29 kristaps Exp $
+.\" $Id: mandoc.1,v 1.5 2009/03/21 21:09:00 kristaps Exp $
.\"
.\" Copyright (c) 2009 Kristaps Dzonsons <kristaps@openbsd.org>
.\"
@@ -184,21 +184,30 @@ utility was written by
.Sh CAVEATS
The
.Nm
-utility doesn't yet know how to display the following:
+utility in
+.Fl T Ns Ar ascii
+mode doesn't yet know how to display the following:
.Pp
.Bl -bullet -compact
.It
The \-hang
.Sq \&Bl
list is not yet supported.
+.\" LIST-ITEM
.It
The \-literal and \-unfilled
.Sq \&Bd
displays types are synonyms, as are \-filled and \-ragged.
+.\" LIST-ITEM
.It
The
.Sq \&Xo/Xc
pair isn't supported.
+.\" LIST-ITEM
+.It
+The
+.Sq \&Bd
+macro doesn't process \-compact .
.El
.Pp
Other macros still aren't supported by virtue of nobody complaining
diff --git a/mdoc.3 b/mdoc.3
index 84d8cfb6..f7e32d04 100644
--- a/mdoc.3
+++ b/mdoc.3
@@ -1,4 +1,4 @@
-.\" $Id: mdoc.3,v 1.20 2009/03/20 15:14:01 kristaps Exp $
+.\" $Id: mdoc.3,v 1.21 2009/03/21 21:09:00 kristaps Exp $
.\"
.\" Copyright (c) 2009 Kristaps Dzonsons <kristaps@openbsd.org>
.\"
@@ -16,7 +16,7 @@
.\" TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
.\" PERFORMANCE OF THIS SOFTWARE.
.\"
-.Dd $Mdocdate: March 20 2009 $
+.Dd $Mdocdate: March 21 2009 $
.Dt mdoc 3
.Os
.\" SECTION
@@ -325,4 +325,24 @@ macro.
The
.Sq \&Bsx
macro doesn't yet understand version arguments.
+.\" LIST-ITEM
+.It
+If not given a value, the \-offset argument to
+.Sq \&Bd
+and
+.Sq \&Bl
+should by the width of
+.Qq <string> .
+.\" LIST-ITEM
+.It
+Columns widths in
+.Sq \&Bl -column
+should default to width
+.Qq <stringx>
+if not included.
+.\" LIST-ITEM
+.It
+List-width suffix
+.Qq m
+isn't handled.
.El
diff --git a/validate.c b/validate.c
index 98f6b7d5..7c3e514d 100644
--- a/validate.c
+++ b/validate.c
@@ -1,4 +1,4 @@
-/* $Id: validate.c,v 1.91 2009/03/21 13:47:02 kristaps Exp $ */
+/* $Id: validate.c,v 1.92 2009/03/21 21:09:00 kristaps Exp $ */
/*
* Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@openbsd.org>
*
@@ -839,7 +839,8 @@ pre_bl(PRE_ARGS)
case (MDOC_Tag):
if (-1 != width)
break;
- return(mdoc_nerr(mdoc, n, "missing %s argument",
+ return(mdoc_nwarn(mdoc, n, WARN_SYNTAX,
+ "suggest %s argument",
mdoc_argnames[MDOC_Width]));
default:
break;