From 8575c261dfe0a8671a0f20ffaf68572b439becba Mon Sep 17 00:00:00 2001 From: Kristaps Dzonsons Date: Thu, 23 Jul 2009 08:36:32 +0000 Subject: Bl -column now accepts columns = (1 + stated columns), which covers all remaining column usage/abuse I can see. --- mdoc_term.c | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) (limited to 'mdoc_term.c') diff --git a/mdoc_term.c b/mdoc_term.c index 8c868fc3..0b324ccd 100644 --- a/mdoc_term.c +++ b/mdoc_term.c @@ -1,4 +1,4 @@ -/* $Id: mdoc_term.c,v 1.57 2009/07/21 15:54:18 kristaps Exp $ */ +/* $Id: mdoc_term.c,v 1.58 2009/07/23 08:36:32 kristaps Exp $ */ /* * Copyright (c) 2008, 2009 Kristaps Dzonsons * @@ -782,11 +782,27 @@ termp_it_pre(DECL_ARGS) case (MDOC_Column): if (MDOC_BODY == node->type) break; - for (i = 0, n = node->prev; n; n = n->prev, i++) + /* + * Work around groff's column handling. The offset is + * equal to the sum of all widths leading to the current + * column (plus the -offset value). If this column + * exceeds the stated number of columns, the width is + * set as 0, else it's the stated column width (later + * the 0 will be adjusted to default 10 or, if in the + * last column case, set to stretch to the margin). + */ + for (i = 0, n = node->prev; n && n && + i < (int)bl->args[vals[2]].argv->sz; + n = n->prev, i++) offset += arg_width (&bl->args->argv[vals[2]], i); - assert(i < (int)bl->args->argv[vals[2]].sz); - width = arg_width(&bl->args->argv[vals[2]], i); + + /* Whether exceeds maximum column. */ + if (i < (int)bl->args[vals[2]].argv->sz) + width = arg_width(&bl->args->argv[vals[2]], i); + else + width = 0; + if (vals[1] >= 0) offset += arg_offset(&bl->args->argv[vals[1]]); break; -- cgit v1.2.3-56-ge451