version 1.102, 2009/11/12 05:50:12 |
version 1.105, 2010/01/01 14:27:59 |
Line 651 termp_it_pre(DECL_ARGS) |
|
Line 651 termp_it_pre(DECL_ARGS) |
|
const struct mdoc_node *bl, *nn; |
const struct mdoc_node *bl, *nn; |
char buf[7]; |
char buf[7]; |
int i, type, keys[3], vals[3]; |
int i, type, keys[3], vals[3]; |
size_t width, offset; |
size_t width, offset, ncols, dcol; |
|
|
if (MDOC_BLOCK == n->type) { |
if (MDOC_BLOCK == n->type) { |
print_bvspace(p, n->parent->parent, n); |
print_bvspace(p, n->parent->parent, n); |
Line 679 termp_it_pre(DECL_ARGS) |
|
Line 679 termp_it_pre(DECL_ARGS) |
|
type = arg_listtype(bl); |
type = arg_listtype(bl); |
assert(-1 != type); |
assert(-1 != type); |
|
|
|
if (vals[1] >= 0) |
|
offset = a2offs(&bl->args->argv[vals[1]]); |
|
|
/* Calculate real width and offset. */ |
/* Calculate real width and offset. */ |
|
|
switch (type) { |
switch (type) { |
case (MDOC_Column): |
case (MDOC_Column): |
if (MDOC_BODY == n->type) |
if (MDOC_BODY == n->type) |
break; |
break; |
/* |
|
* Work around groff's column handling. The offset is |
/* |
* equal to the sum of all widths leading to the current |
* Imitate groff's column handling. |
* column (plus the -offset value). If this column |
* For each earlier column, add its width. |
* exceeds the stated number of columns, the width is |
* For less than 5 columns, add two more blanks per column. |
* set as 0, else it's the stated column width (later |
* For exactly 5 columns, add only one more blank per column. |
* the 0 will be adjusted to default 10 or, if in the |
* For more than 5 columns, add no blanks per column. |
* last column case, set to stretch to the margin). |
|
*/ |
*/ |
for (i = 0, nn = n->prev; nn && |
ncols = bl->args->argv[vals[2]].sz; |
i < (int)bl->args->argv[vals[2]].sz; |
/* LINTED */ |
nn = nn->prev, i++) |
dcol = ncols < 5 ? 2 : ncols == 5 ? 1 : 0; |
offset += a2width |
for (i=0, nn=n->prev; nn && i < (int)ncols; nn=nn->prev, i++) |
(&bl->args->argv[vals[2]], i); |
offset += a2width(&bl->args->argv[vals[2]], i) + dcol; |
|
|
/* Whether exceeds maximum column. */ |
/* |
if (i < (int)bl->args->argv[vals[2]].sz) |
* FIXME: newer groff only wants one space between |
width = a2width(&bl->args->argv[vals[2]], i); |
* columns > 5; however, a2width will have min. two |
else |
* spaces. For now, let this slide. |
width = 0; |
*/ |
|
|
if (vals[1] >= 0) |
/* |
offset += a2offs(&bl->args->argv[vals[1]]); |
* Use the declared column widths, |
|
* extended as explained in the preceding paragraph. |
|
*/ |
|
if (i < (int)ncols) |
|
width = a2width(&bl->args->argv[vals[2]], i) + dcol; |
|
|
|
/* |
|
* When exceeding the declared number of columns, |
|
* leave the remaining widths at 0. |
|
* This will later be adjusted to the default width of 10, |
|
* or, for the last column, stretched to the right margin. |
|
*/ |
break; |
break; |
default: |
default: |
if (vals[0] >= 0) |
if (vals[0] >= 0) |
width = a2width(&bl->args->argv[vals[0]], 0); |
width = a2width(&bl->args->argv[vals[0]], 0); |
if (vals[1] >= 0) |
|
offset += a2offs(&bl->args->argv[vals[1]]); |
|
break; |
break; |
} |
} |
|
|
Line 898 termp_it_pre(DECL_ARGS) |
|
Line 909 termp_it_pre(DECL_ARGS) |
|
* right-most column is filled to the right margin. |
* right-most column is filled to the right margin. |
*/ |
*/ |
if (MDOC_HEAD == n->type && |
if (MDOC_HEAD == n->type && |
MDOC_BODY == n->next->type) |
MDOC_BODY == n->next->type && |
|
p->rmargin < p->maxrmargin) |
p->rmargin = p->maxrmargin; |
p->rmargin = p->maxrmargin; |
break; |
break; |
default: |
default: |
Line 1020 termp_fl_pre(DECL_ARGS) |
|
Line 1032 termp_fl_pre(DECL_ARGS) |
|
|
|
term_fontpush(p, TERMFONT_BOLD); |
term_fontpush(p, TERMFONT_BOLD); |
term_word(p, "\\-"); |
term_word(p, "\\-"); |
p->flags |= TERMP_NOSPACE; |
|
|
/* A blank `Fl' should incur a subsequent space. */ |
|
|
|
if (n->child) |
|
p->flags |= TERMP_NOSPACE; |
|
|
return(1); |
return(1); |
} |
} |
|
|