summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@cvs.openbsd.org>2010-05-24 00:00:11 +0000
committerIngo Schwarze <schwarze@cvs.openbsd.org>2010-05-24 00:00:11 +0000
commit6c7bf9cad1fb46791ef6a1c09fa7bc25809c5f62 (patch)
tree86650b0fbb5a4d65f42063e92a9e4db8647b752a
parent66861bd8ad64765972ebcbe5446042a89b6488a4 (diff)
Increase performance by saving the list type in struct mdoc_node.
This will eventually be used so that mdoc_macro can know whether to dump list line arguments into the body (`Bl -column' overflowing). Remove a2list() and arg_listtype() because of this. From kristaps@. While merging, fix a regression in mdoc_term.c, print_bvspace(): The bsd.lv version of this broke vertical spacing in .Bl -column.
-rw-r--r--usr.bin/mandoc/libmdoc.h4
-rw-r--r--usr.bin/mandoc/mdoc.h21
-rw-r--r--usr.bin/mandoc/mdoc_action.c63
-rw-r--r--usr.bin/mandoc/mdoc_html.c115
-rw-r--r--usr.bin/mandoc/mdoc_term.c139
-rw-r--r--usr.bin/mandoc/mdoc_validate.c32
6 files changed, 176 insertions, 198 deletions
diff --git a/usr.bin/mandoc/libmdoc.h b/usr.bin/mandoc/libmdoc.h
index 2ec5d2176df..189cd25131d 100644
--- a/usr.bin/mandoc/libmdoc.h
+++ b/usr.bin/mandoc/libmdoc.h
@@ -1,4 +1,4 @@
-/* $Id: libmdoc.h,v 1.35 2010/05/23 22:45:00 schwarze Exp $ */
+/* $Id: libmdoc.h,v 1.36 2010/05/24 00:00:10 schwarze Exp $ */
/*
* Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se>
*
@@ -121,7 +121,7 @@ int mdoc_valid_pre(struct mdoc *,
const struct mdoc_node *);
int mdoc_valid_post(struct mdoc *);
int mdoc_action_pre(struct mdoc *,
- const struct mdoc_node *);
+ struct mdoc_node *);
int mdoc_action_post(struct mdoc *);
enum margverr mdoc_argv(struct mdoc *, int, enum mdoct,
struct mdoc_arg **, int *, char *);
diff --git a/usr.bin/mandoc/mdoc.h b/usr.bin/mandoc/mdoc.h
index a790e68ea51..3b01a1854b9 100644
--- a/usr.bin/mandoc/mdoc.h
+++ b/usr.bin/mandoc/mdoc.h
@@ -1,4 +1,4 @@
-/* $Id: mdoc.h,v 1.25 2010/05/23 22:45:00 schwarze Exp $ */
+/* $Id: mdoc.h,v 1.26 2010/05/24 00:00:10 schwarze Exp $ */
/*
* Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se>
*
@@ -247,6 +247,21 @@ struct mdoc_arg {
unsigned int refcnt;
};
+enum mdoc_list {
+ LIST__NONE = 0,
+ LIST_bullet,
+ LIST_column,
+ LIST_dash,
+ LIST_diag,
+ LIST_enum,
+ LIST_hang,
+ LIST_hyphen,
+ LIST_inset,
+ LIST_item,
+ LIST_ohang,
+ LIST_tag
+};
+
/* Node in AST. */
struct mdoc_node {
struct mdoc_node *parent; /* parent AST node */
@@ -270,6 +285,10 @@ struct mdoc_node {
struct mdoc_node *body; /* BLOCK */
struct mdoc_node *tail; /* BLOCK */
char *string; /* TEXT */
+
+ union {
+ enum mdoc_list list; /* for `Bl' nodes */
+ } data;
};
#define MDOC_IGN_SCOPE (1 << 0) /* Ignore scope violations. */
diff --git a/usr.bin/mandoc/mdoc_action.c b/usr.bin/mandoc/mdoc_action.c
index 05e8022c30b..a5628261009 100644
--- a/usr.bin/mandoc/mdoc_action.c
+++ b/usr.bin/mandoc/mdoc_action.c
@@ -1,4 +1,4 @@
-/* $Id: mdoc_action.c,v 1.36 2010/05/23 22:45:00 schwarze Exp $ */
+/* $Id: mdoc_action.c,v 1.37 2010/05/24 00:00:10 schwarze Exp $ */
/*
* Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se>
*
@@ -29,7 +29,7 @@
#include "libmandoc.h"
#define POST_ARGS struct mdoc *m, struct mdoc_node *n
-#define PRE_ARGS struct mdoc *m, const struct mdoc_node *n
+#define PRE_ARGS struct mdoc *m, struct mdoc_node *n
#define NUMSIZ 32
#define DATESIZ 32
@@ -212,7 +212,7 @@ static const enum mdoct rsord[RSORD_MAX] = {
int
-mdoc_action_pre(struct mdoc *m, const struct mdoc_node *n)
+mdoc_action_pre(struct mdoc *m, struct mdoc_node *n)
{
switch (n->type) {
@@ -938,8 +938,63 @@ pre_offset(PRE_ARGS)
static int
pre_bl(PRE_ARGS)
{
+ int pos;
+
+ if (MDOC_BLOCK != n->type) {
+ assert(n->parent);
+ assert(MDOC_BLOCK == n->parent->type);
+ assert(MDOC_Bl == n->parent->tok);
+ assert(LIST__NONE != n->parent->data.list);
+ n->data.list = n->parent->data.list;
+ return(1);
+ }
+
+ assert(LIST__NONE == n->data.list);
+
+ for (pos = 0; pos < (int)n->args->argc; pos++) {
+ switch (n->args->argv[pos].arg) {
+ case (MDOC_Bullet):
+ n->data.list = LIST_bullet;
+ break;
+ case (MDOC_Dash):
+ n->data.list = LIST_dash;
+ break;
+ case (MDOC_Enum):
+ n->data.list = LIST_enum;
+ break;
+ case (MDOC_Hyphen):
+ n->data.list = LIST_hyphen;
+ break;
+ case (MDOC_Item):
+ n->data.list = LIST_item;
+ break;
+ case (MDOC_Tag):
+ n->data.list = LIST_tag;
+ break;
+ case (MDOC_Diag):
+ n->data.list = LIST_diag;
+ break;
+ case (MDOC_Hang):
+ n->data.list = LIST_hang;
+ break;
+ case (MDOC_Ohang):
+ n->data.list = LIST_ohang;
+ break;
+ case (MDOC_Inset):
+ n->data.list = LIST_inset;
+ break;
+ case (MDOC_Column):
+ n->data.list = LIST_column;
+ break;
+ default:
+ break;
+ }
+ if (LIST__NONE != n->data.list)
+ break;
+ }
- return(MDOC_BLOCK == n->type ? pre_offset(m, n) : 1);
+ assert(LIST__NONE != n->data.list);
+ return(pre_offset(m, n));
}
diff --git a/usr.bin/mandoc/mdoc_html.c b/usr.bin/mandoc/mdoc_html.c
index 8862f9f22c7..22d582d0c01 100644
--- a/usr.bin/mandoc/mdoc_html.c
+++ b/usr.bin/mandoc/mdoc_html.c
@@ -1,4 +1,4 @@
-/* $Id: mdoc_html.c,v 1.17 2010/05/23 22:45:00 schwarze Exp $ */
+/* $Id: mdoc_html.c,v 1.18 2010/05/24 00:00:10 schwarze Exp $ */
/*
* Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se>
*
@@ -53,8 +53,6 @@ static void print_mdoc_nodelist(MDOC_ARGS);
static void a2width(const char *, struct roffsu *);
static void a2offs(const char *, struct roffsu *);
-static int a2list(const struct mdoc_node *);
-
static void mdoc_root_post(MDOC_ARGS);
static int mdoc_root_pre(MDOC_ARGS);
@@ -94,11 +92,11 @@ static void mdoc_fo_post(MDOC_ARGS);
static int mdoc_fo_pre(MDOC_ARGS);
static int mdoc_ic_pre(MDOC_ARGS);
static int mdoc_in_pre(MDOC_ARGS);
-static int mdoc_it_block_pre(MDOC_ARGS, int, int,
- struct roffsu *, struct roffsu *);
-static int mdoc_it_head_pre(MDOC_ARGS, int,
+static int mdoc_it_block_pre(MDOC_ARGS, enum mdoc_list,
+ int, struct roffsu *, struct roffsu *);
+static int mdoc_it_head_pre(MDOC_ARGS, enum mdoc_list,
struct roffsu *);
-static int mdoc_it_body_pre(MDOC_ARGS, int);
+static int mdoc_it_body_pre(MDOC_ARGS, enum mdoc_list);
static int mdoc_it_pre(MDOC_ARGS);
static int mdoc_lb_pre(MDOC_ARGS);
static int mdoc_li_pre(MDOC_ARGS);
@@ -273,50 +271,6 @@ html_mdoc(void *arg, const struct mdoc *m)
/*
- * Return the list type for `Bl', e.g., `Bl -column' returns
- * MDOC_Column. This can ONLY be run for lists; it will abort() if no
- * list type is found.
- */
-static int
-a2list(const struct mdoc_node *n)
-{
- int i;
-
- assert(n->args);
- for (i = 0; i < (int)n->args->argc; i++)
- switch (n->args->argv[i].arg) {
- case (MDOC_Enum):
- /* FALLTHROUGH */
- case (MDOC_Dash):
- /* FALLTHROUGH */
- case (MDOC_Hyphen):
- /* FALLTHROUGH */
- case (MDOC_Bullet):
- /* FALLTHROUGH */
- case (MDOC_Tag):
- /* FALLTHROUGH */
- case (MDOC_Hang):
- /* FALLTHROUGH */
- case (MDOC_Inset):
- /* FALLTHROUGH */
- case (MDOC_Diag):
- /* FALLTHROUGH */
- case (MDOC_Item):
- /* FALLTHROUGH */
- case (MDOC_Column):
- /* FALLTHROUGH */
- case (MDOC_Ohang):
- return(n->args->argv[i].arg);
- default:
- break;
- }
-
- abort();
- /* NOTREACHED */
-}
-
-
-/*
* Calculate the scaling unit passed in a `-width' argument. This uses
* either a native scaling unit (e.g., 1i, 2m) or the string length of
* the value.
@@ -864,7 +818,7 @@ mdoc_bx_pre(MDOC_ARGS)
/* ARGSUSED */
static int
-mdoc_it_block_pre(MDOC_ARGS, int type, int comp,
+mdoc_it_block_pre(MDOC_ARGS, enum mdoc_list type, int comp,
struct roffsu *offs, struct roffsu *width)
{
struct htmlpair tag;
@@ -876,13 +830,13 @@ mdoc_it_block_pre(MDOC_ARGS, int type, int comp,
/* XXX: see notes in mdoc_it_pre(). */
- if (MDOC_Column == type) {
+ if (LIST_column == type) {
/* Don't width-pad on the left. */
SCALE_HS_INIT(width, 0);
/* Also disallow non-compact. */
comp = 1;
}
- if (MDOC_Diag == type)
+ if (LIST_diag == type)
/* Mandate non-compact with empty prior. */
if (n->prev && NULL == n->prev->body->child)
comp = 1;
@@ -919,17 +873,17 @@ mdoc_it_block_pre(MDOC_ARGS, int type, int comp,
/* ARGSUSED */
static int
-mdoc_it_body_pre(MDOC_ARGS, int type)
+mdoc_it_body_pre(MDOC_ARGS, enum mdoc_list type)
{
struct htmlpair tag;
struct roffsu su;
switch (type) {
- case (MDOC_Item):
+ case (LIST_item):
/* FALLTHROUGH */
- case (MDOC_Ohang):
+ case (LIST_ohang):
/* FALLTHROUGH */
- case (MDOC_Column):
+ case (LIST_column):
break;
default:
/*
@@ -949,19 +903,19 @@ mdoc_it_body_pre(MDOC_ARGS, int type)
/* ARGSUSED */
static int
-mdoc_it_head_pre(MDOC_ARGS, int type, struct roffsu *width)
+mdoc_it_head_pre(MDOC_ARGS, enum mdoc_list type, struct roffsu *width)
{
struct htmlpair tag;
struct ord *ord;
char nbuf[BUFSIZ];
switch (type) {
- case (MDOC_Item):
+ case (LIST_item):
return(0);
- case (MDOC_Ohang):
+ case (LIST_ohang):
print_otag(h, TAG_DIV, 0, &tag);
return(1);
- case (MDOC_Column):
+ case (LIST_column):
bufcat_su(h, "min-width", width);
bufcat_style(h, "clear", "none");
if (n->next && MDOC_HEAD == n->next->type)
@@ -985,24 +939,24 @@ mdoc_it_head_pre(MDOC_ARGS, int type, struct roffsu *width)
}
switch (type) {
- case (MDOC_Diag):
+ case (LIST_diag):
PAIR_CLASS_INIT(&tag, "diag");
print_otag(h, TAG_SPAN, 1, &tag);
break;
- case (MDOC_Enum):
+ case (LIST_enum):
ord = h->ords.head;
assert(ord);
nbuf[BUFSIZ - 1] = 0;
(void)snprintf(nbuf, BUFSIZ - 1, "%d.", ord->pos++);
print_text(h, nbuf);
return(0);
- case (MDOC_Dash):
+ case (LIST_dash):
print_text(h, "\\(en");
return(0);
- case (MDOC_Hyphen):
+ case (LIST_hyphen):
print_text(h, "\\(hy");
return(0);
- case (MDOC_Bullet):
+ case (LIST_bullet):
print_text(h, "\\(bu");
return(0);
default:
@@ -1016,9 +970,10 @@ mdoc_it_head_pre(MDOC_ARGS, int type, struct roffsu *width)
static int
mdoc_it_pre(MDOC_ARGS)
{
- int i, type, wp, comp;
+ int i, wp, comp;
const struct mdoc_node *bl, *nn;
struct roffsu width, offs;
+ enum mdoc_list type;
/*
* XXX: be very careful in changing anything, here. Lists in
@@ -1030,20 +985,20 @@ mdoc_it_pre(MDOC_ARGS)
if (MDOC_BLOCK != n->type)
bl = bl->parent;
- type = a2list(bl);
+ type = bl->data.list;
/* Set default width and offset. */
SCALE_HS_INIT(&offs, 0);
switch (type) {
- case (MDOC_Enum):
+ case (LIST_enum):
/* FALLTHROUGH */
- case (MDOC_Dash):
+ case (LIST_dash):
/* FALLTHROUGH */
- case (MDOC_Hyphen):
+ case (LIST_hyphen):
/* FALLTHROUGH */
- case (MDOC_Bullet):
+ case (LIST_bullet):
SCALE_HS_INIT(&width, 2);
break;
default:
@@ -1074,13 +1029,13 @@ mdoc_it_pre(MDOC_ARGS)
/* Override width in some cases. */
switch (type) {
- case (MDOC_Ohang):
+ case (LIST_ohang):
/* FALLTHROUGH */
- case (MDOC_Item):
+ case (LIST_item):
/* FALLTHROUGH */
- case (MDOC_Inset):
+ case (LIST_inset):
/* FALLTHROUGH */
- case (MDOC_Diag):
+ case (LIST_diag):
SCALE_HS_INIT(&width, 0);
break;
default:
@@ -1099,7 +1054,7 @@ mdoc_it_pre(MDOC_ARGS)
/* Override column widths. */
- if (MDOC_Column == type) {
+ if (LIST_column == type) {
nn = n->parent->child;
for (i = 0; nn && nn != n; nn = nn->next, i++)
/* Counter... */ ;
@@ -1121,7 +1076,7 @@ mdoc_bl_pre(MDOC_ARGS)
return(0);
if (MDOC_BLOCK != n->type)
return(1);
- if (MDOC_Enum != a2list(n))
+ if (MDOC_Enum != n->data.list)
return(1);
ord = malloc(sizeof(struct ord));
@@ -1145,7 +1100,7 @@ mdoc_bl_post(MDOC_ARGS)
if (MDOC_BLOCK != n->type)
return;
- if (MDOC_Enum != a2list(n))
+ if (MDOC_Enum != n->data.list)
return;
ord = h->ords.head;
diff --git a/usr.bin/mandoc/mdoc_term.c b/usr.bin/mandoc/mdoc_term.c
index b763898fad2..9a9cf58c780 100644
--- a/usr.bin/mandoc/mdoc_term.c
+++ b/usr.bin/mandoc/mdoc_term.c
@@ -1,4 +1,4 @@
-/* $Id: mdoc_term.c,v 1.81 2010/05/23 22:45:01 schwarze Exp $ */
+/* $Id: mdoc_term.c,v 1.82 2010/05/24 00:00:10 schwarze Exp $ */
/*
* Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se>
*
@@ -57,7 +57,6 @@ static int arg_getattrs(const int *, int *, size_t,
const struct mdoc_node *);
static int arg_getattr(int, const struct mdoc_node *);
static int arg_disptype(const struct mdoc_node *);
-static int arg_listtype(const struct mdoc_node *);
static void print_bvspace(struct termp *,
const struct mdoc_node *,
const struct mdoc_node *);
@@ -509,47 +508,6 @@ arg_disptype(const struct mdoc_node *n)
}
-static int
-arg_listtype(const struct mdoc_node *n)
-{
- int i, len;
-
- assert(MDOC_BLOCK == n->type);
-
- len = (int)(n->args ? n->args->argc : 0);
-
- for (i = 0; i < len; i++)
- switch (n->args->argv[i].arg) {
- case (MDOC_Bullet):
- /* FALLTHROUGH */
- case (MDOC_Dash):
- /* FALLTHROUGH */
- case (MDOC_Enum):
- /* FALLTHROUGH */
- case (MDOC_Hyphen):
- /* FALLTHROUGH */
- case (MDOC_Tag):
- /* FALLTHROUGH */
- case (MDOC_Inset):
- /* FALLTHROUGH */
- case (MDOC_Diag):
- /* FALLTHROUGH */
- case (MDOC_Item):
- /* FALLTHROUGH */
- case (MDOC_Column):
- /* FALLTHROUGH */
- case (MDOC_Hang):
- /* FALLTHROUGH */
- case (MDOC_Ohang):
- return(n->args->argv[i].arg);
- default:
- break;
- }
-
- return(-1);
-}
-
-
static size_t
a2offs(const struct mdoc_argv *arg)
{
@@ -652,13 +610,13 @@ print_bvspace(struct termp *p,
/* A `-column' does not assert vspace within the list. */
- if (MDOC_Bl == bl->tok && arg_hasattr(MDOC_Column, bl))
+ if (MDOC_Bl == bl->tok && LIST_column == bl->data.list)
if (n->prev && MDOC_It == n->prev->tok)
return;
/* A `-diag' without body does not vspace. */
- if (MDOC_Bl == bl->tok && arg_hasattr(MDOC_Diag, bl))
+ if (MDOC_Bl == bl->tok && LIST_diag == bl->data.list)
if (n->prev && MDOC_It == n->prev->tok) {
assert(n->prev->body);
if (NULL == n->prev->body->child)
@@ -702,8 +660,9 @@ termp_it_pre(DECL_ARGS)
{
const struct mdoc_node *bl, *nn;
char buf[7];
- int i, type, keys[3], vals[3];
+ int i, keys[3], vals[3];
size_t width, offset, ncols, dcol;
+ enum mdoc_list type;
if (MDOC_BLOCK == n->type) {
print_bvspace(p, n->parent->parent, n);
@@ -722,8 +681,7 @@ termp_it_pre(DECL_ARGS)
arg_getattrs(keys, vals, 3, bl);
- type = arg_listtype(bl);
- assert(-1 != type);
+ type = bl->data.list;
/*
* First calculate width and offset. This is pretty easy unless
@@ -737,7 +695,7 @@ termp_it_pre(DECL_ARGS)
offset = a2offs(&bl->args->argv[vals[1]]);
switch (type) {
- case (MDOC_Column):
+ case (LIST_column):
if (MDOC_BODY == n->type)
break;
/*
@@ -795,25 +753,25 @@ termp_it_pre(DECL_ARGS)
*/
switch (type) {
- case (MDOC_Bullet):
+ case (LIST_bullet):
/* FALLTHROUGH */
- case (MDOC_Dash):
+ case (LIST_dash):
/* FALLTHROUGH */
- case (MDOC_Hyphen):
+ case (LIST_hyphen):
if (width < 4)
width = 4;
break;
- case (MDOC_Enum):
+ case (LIST_enum):
if (width < 5)
width = 5;
break;
- case (MDOC_Hang):
+ case (LIST_hang):
if (0 == width)
width = 8;
break;
- case (MDOC_Column):
+ case (LIST_column):
/* FALLTHROUGH */
- case (MDOC_Tag):
+ case (LIST_tag):
if (0 == width)
width = 10;
break;
@@ -829,11 +787,11 @@ termp_it_pre(DECL_ARGS)
p->flags |= TERMP_NOSPACE;
switch (type) {
- case (MDOC_Diag):
+ case (LIST_diag):
if (MDOC_BODY == n->type)
term_word(p, "\\ \\ ");
break;
- case (MDOC_Inset):
+ case (LIST_inset):
if (MDOC_BODY == n->type)
term_word(p, "\\ ");
break;
@@ -844,7 +802,7 @@ termp_it_pre(DECL_ARGS)
p->flags |= TERMP_NOSPACE;
switch (type) {
- case (MDOC_Diag):
+ case (LIST_diag):
if (MDOC_HEAD == n->type)
term_fontpush(p, TERMFONT_BOLD);
break;
@@ -860,19 +818,19 @@ termp_it_pre(DECL_ARGS)
*/
switch (type) {
- case (MDOC_Bullet):
+ case (LIST_bullet):
/* FALLTHROUGH */
- case (MDOC_Dash):
+ case (LIST_dash):
/* FALLTHROUGH */
- case (MDOC_Enum):
+ case (LIST_enum):
/* FALLTHROUGH */
- case (MDOC_Hyphen):
+ case (LIST_hyphen):
if (MDOC_HEAD == n->type)
p->flags |= TERMP_NOBREAK;
else
p->flags |= TERMP_NOLPAD;
break;
- case (MDOC_Hang):
+ case (LIST_hang):
if (MDOC_HEAD == n->type)
p->flags |= TERMP_NOBREAK;
else
@@ -895,7 +853,7 @@ termp_it_pre(DECL_ARGS)
} else
p->flags |= TERMP_HANG;
break;
- case (MDOC_Tag):
+ case (LIST_tag):
if (MDOC_HEAD == n->type)
p->flags |= TERMP_NOBREAK | TERMP_TWOSPACE;
else
@@ -906,7 +864,7 @@ termp_it_pre(DECL_ARGS)
if (NULL == n->next || NULL == n->next->child)
p->flags |= TERMP_DANGLE;
break;
- case (MDOC_Column):
+ case (LIST_column):
if (MDOC_HEAD == n->type) {
assert(n->next);
if (MDOC_BODY == n->next->type)
@@ -917,7 +875,7 @@ termp_it_pre(DECL_ARGS)
p->flags |= TERMP_NOLPAD;
}
break;
- case (MDOC_Diag):
+ case (LIST_diag):
if (MDOC_HEAD == n->type)
p->flags |= TERMP_NOBREAK;
break;
@@ -934,7 +892,7 @@ termp_it_pre(DECL_ARGS)
p->offset += offset;
switch (type) {
- case (MDOC_Hang):
+ case (LIST_hang):
/*
* Same stipulation as above, regarding `-hang'. We
* don't want to recalculate rmargin and offsets when
@@ -945,22 +903,22 @@ termp_it_pre(DECL_ARGS)
MDOC_Bd == n->next->child->tok))
break;
/* FALLTHROUGH */
- case (MDOC_Bullet):
+ case (LIST_bullet):
/* FALLTHROUGH */
- case (MDOC_Dash):
+ case (LIST_dash):
/* FALLTHROUGH */
- case (MDOC_Enum):
+ case (LIST_enum):
/* FALLTHROUGH */
- case (MDOC_Hyphen):
+ case (LIST_hyphen):
/* FALLTHROUGH */
- case (MDOC_Tag):
+ case (LIST_tag):
assert(width);
if (MDOC_HEAD == n->type)
p->rmargin = p->offset + width;
else
p->offset += width;
break;
- case (MDOC_Column):
+ case (LIST_column):
assert(width);
p->rmargin = p->offset + width;
/*
@@ -983,19 +941,19 @@ termp_it_pre(DECL_ARGS)
if (MDOC_HEAD == n->type)
switch (type) {
- case (MDOC_Bullet):
+ case (LIST_bullet):
term_fontpush(p, TERMFONT_BOLD);
term_word(p, "\\[bu]");
term_fontpop(p);
break;
- case (MDOC_Dash):
+ case (LIST_dash):
/* FALLTHROUGH */
- case (MDOC_Hyphen):
+ case (LIST_hyphen):
term_fontpush(p, TERMFONT_BOLD);
term_word(p, "\\(hy");
term_fontpop(p);
break;
- case (MDOC_Enum):
+ case (LIST_enum):
(pair->ppair->ppair->count)++;
snprintf(buf, sizeof(buf), "%d.",
pair->ppair->ppair->count);
@@ -1010,19 +968,19 @@ termp_it_pre(DECL_ARGS)
*/
switch (type) {
- case (MDOC_Bullet):
+ case (LIST_bullet):
/* FALLTHROUGH */
- case (MDOC_Item):
+ case (LIST_item):
/* FALLTHROUGH */
- case (MDOC_Dash):
+ case (LIST_dash):
/* FALLTHROUGH */
- case (MDOC_Hyphen):
+ case (LIST_hyphen):
/* FALLTHROUGH */
- case (MDOC_Enum):
+ case (LIST_enum):
if (MDOC_HEAD == n->type)
return(0);
break;
- case (MDOC_Column):
+ case (LIST_column):
if (MDOC_BODY == n->type)
return(0);
break;
@@ -1038,24 +996,23 @@ termp_it_pre(DECL_ARGS)
static void
termp_it_post(DECL_ARGS)
{
- int type;
+ enum mdoc_list type;
if (MDOC_BLOCK == n->type)
return;
- type = arg_listtype(n->parent->parent->parent);
- assert(-1 != type);
+ type = n->parent->parent->parent->data.list;
switch (type) {
- case (MDOC_Item):
+ case (LIST_item):
/* FALLTHROUGH */
- case (MDOC_Diag):
+ case (LIST_diag):
/* FALLTHROUGH */
- case (MDOC_Inset):
+ case (LIST_inset):
if (MDOC_BODY == n->type)
term_newln(p);
break;
- case (MDOC_Column):
+ case (LIST_column):
if (MDOC_HEAD == n->type)
term_flushln(p);
break;
diff --git a/usr.bin/mandoc/mdoc_validate.c b/usr.bin/mandoc/mdoc_validate.c
index 185735279ca..8a4b2d98a0b 100644
--- a/usr.bin/mandoc/mdoc_validate.c
+++ b/usr.bin/mandoc/mdoc_validate.c
@@ -1,6 +1,6 @@
-/* $Id: mdoc_validate.c,v 1.55 2010/05/23 22:45:01 schwarze Exp $ */
+/* $Id: mdoc_validate.c,v 1.56 2010/05/24 00:00:10 schwarze Exp $ */
/*
- * Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se>
+ * Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@bsd.lv>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -564,27 +564,19 @@ pre_bl(PRE_ARGS)
case (MDOC_Inset):
/* FALLTHROUGH */
case (MDOC_Column):
- /*
- * Note that if a duplicate is detected, we
- * remove the duplicate instead of passing it
- * over. If we don't do this, mdoc_action will
- * become confused when it scans over multiple
- * types whilst setting its bitmasks.
- *
- * FIXME: this should occur in mdoc_action.c.
- */
- if (type >= 0) {
- if ( ! mdoc_nmsg(mdoc, n, MANDOCERR_LISTREP))
- return(0);
- mdoc_argn_free(n->args, pos);
+ if (type < 0) {
+ type = n->args->argv[pos].arg;
break;
}
- type = n->args->argv[pos].arg;
- break;
+ if (mdoc_nmsg(mdoc, n, MANDOCERR_LISTREP))
+ break;
+ return(0);
case (MDOC_Compact):
- if (type < 0 && ! mdoc_nmsg(mdoc, n, MANDOCERR_LISTFIRST))
- return(0);
- break;
+ if (type >= 0)
+ break;
+ if (mdoc_nmsg(mdoc, n, MANDOCERR_LISTFIRST))
+ break;
+ return(0);
case (MDOC_Width):
if (width >= 0)
if ( ! mdoc_nmsg(mdoc, n, MANDOCERR_ARGVREP))