=================================================================== RCS file: /cvs/mandoc/mdoc_term.c,v retrieving revision 1.168 retrieving revision 1.171 diff -u -p -r1.168 -r1.171 --- mandoc/mdoc_term.c 2010/07/02 15:03:14 1.168 +++ mandoc/mdoc_term.c 2010/07/04 22:04:04 1.171 @@ -1,6 +1,7 @@ -/* $Id: mdoc_term.c,v 1.168 2010/07/02 15:03:14 kristaps Exp $ */ +/* $Id: mdoc_term.c,v 1.171 2010/07/04 22:04:04 schwarze Exp $ */ /* - * Copyright (c) 2008, 2009 Kristaps Dzonsons + * Copyright (c) 2008, 2009, 2010 Kristaps Dzonsons + * Copyright (c) 2010 Ingo Schwarze * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -57,7 +58,6 @@ static size_t a2width(const struct termp *, const ch static size_t a2height(const struct termp *, const char *); static size_t a2offs(const struct termp *, const char *); -static int arg_getattr(int, const struct mdoc_node *); static void print_bvspace(struct termp *, const struct mdoc_node *, const struct mdoc_node *); @@ -527,26 +527,6 @@ a2offs(const struct termp *p, const char *v) /* - * Get the index of an argument in a node's argument list or -1 if it - * does not exist. - */ -static int -arg_getattr(int v, const struct mdoc_node *n) -{ - int i; - - if (NULL == n->args) - return(0); - - for (i = 0; i < (int)n->args->argc; i++) - if (n->args->argv[i].arg == v) - return(i); - - return(-1); -} - - -/* * Determine how much space to print out before block elements of `It' * (and thus `Bl') and `Bd'. And then go ahead and print that space, * too. @@ -631,7 +611,7 @@ termp_it_pre(DECL_ARGS) { const struct mdoc_node *bl, *nn; char buf[7]; - int i, col; + int i; size_t width, offset, ncols, dcol; enum mdoc_list type; @@ -660,8 +640,6 @@ termp_it_pre(DECL_ARGS) if (MDOC_HEAD == n->type) break; - col = arg_getattr(MDOC_Column, bl); - /* * Imitate groff's column handling: * - For each earlier column, add its width. @@ -671,7 +649,8 @@ termp_it_pre(DECL_ARGS) * column. * - For more than 5 columns, add only one column. */ - ncols = bl->args->argv[col].sz; + ncols = bl->data.Bl->ncols; + /* LINTED */ dcol = ncols < 5 ? term_len(p, 4) : ncols == 5 ? term_len(p, 3) : term_len(p, 1); @@ -685,7 +664,7 @@ termp_it_pre(DECL_ARGS) nn->prev && i < (int)ncols; nn = nn->prev, i++) offset += dcol + a2width - (p, bl->args->argv[col].value[i]); + (p, bl->data.Bl->cols[i]); /* * When exceeding the declared number of columns, leave @@ -700,7 +679,7 @@ termp_it_pre(DECL_ARGS) * Use the declared column widths, extended as explained * in the preceding paragraph. */ - width = a2width(p, bl->args->argv[col].value[i]) + dcol; + width = a2width(p, bl->data.Bl->cols[i]) + dcol; break; default: if (NULL == bl->data.Bl->width) @@ -2012,9 +1991,11 @@ termp_fo_pre(DECL_ARGS) return(1); } + if (NULL == n->child) + return(0); + /* XXX: we drop non-initial arguments as per groff. */ - assert(n->child); assert(n->child->string); term_fontpush(p, TERMFONT_BOLD); term_word(p, n->child->string);