version 1.287, 2014/10/28 17:36:19 |
version 1.289, 2014/11/10 21:56:43 |
|
|
|
|
static size_t a2width(const struct termp *, const char *); |
static size_t a2width(const struct termp *, const char *); |
static size_t a2height(const struct termp *, const char *); |
static size_t a2height(const struct termp *, const char *); |
static size_t a2offs(const struct termp *, const char *); |
|
|
|
static void print_bvspace(struct termp *, |
static void print_bvspace(struct termp *, |
const struct mdoc_node *, |
const struct mdoc_node *, |
Line 550 a2width(const struct termp *p, const char *v) |
|
Line 549 a2width(const struct termp *p, const char *v) |
|
return(term_hspan(p, &su)); |
return(term_hspan(p, &su)); |
} |
} |
|
|
static size_t |
|
a2offs(const struct termp *p, const char *v) |
|
{ |
|
struct roffsu su; |
|
|
|
if ('\0' == *v) |
|
return(0); |
|
else if (0 == strcmp(v, "left")) |
|
return(0); |
|
else if (0 == strcmp(v, "indent")) |
|
return(term_len(p, p->defindent + 1)); |
|
else if (0 == strcmp(v, "indent-two")) |
|
return(term_len(p, (p->defindent + 1) * 2)); |
|
else if ( ! a2roffsu(v, &su, SCALE_MAX)) { |
|
SCALE_HS_INIT(&su, term_strlen(p, v)); |
|
su.scale /= term_strlen(p, "0"); |
|
} |
|
|
|
return(term_hspan(p, &su)); |
|
} |
|
|
|
/* |
/* |
* Determine how much space to print out before block elements of `It' |
* 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, |
* (and thus `Bl') and `Bd'. And then go ahead and print that space, |
Line 594 print_bvspace(struct termp *p, |
|
Line 572 print_bvspace(struct termp *p, |
|
|
|
/* Do not vspace directly after Ss/Sh. */ |
/* Do not vspace directly after Ss/Sh. */ |
|
|
for (nn = n; nn; nn = nn->parent) { |
nn = n; |
if (MDOC_BLOCK != nn->type) |
while (nn->prev == NULL) { |
continue; |
do { |
if (MDOC_Ss == nn->tok) |
nn = nn->parent; |
|
if (nn->type == MDOC_ROOT) |
|
return; |
|
} while (nn->type != MDOC_BLOCK); |
|
if (nn->tok == MDOC_Sh || nn->tok == MDOC_Ss) |
return; |
return; |
if (MDOC_Sh == nn->tok) |
if (nn->tok == MDOC_It && |
return; |
nn->parent->parent->norm->Bl.type != LIST_item) |
if (NULL == nn->prev) |
break; |
continue; |
|
break; |
|
} |
} |
|
|
/* A `-column' does not assert vspace within the list. */ |
/* A `-column' does not assert vspace within the list. */ |
Line 659 termp_it_pre(DECL_ARGS) |
|
Line 639 termp_it_pre(DECL_ARGS) |
|
width = offset = 0; |
width = offset = 0; |
|
|
if (bl->norm->Bl.offs) |
if (bl->norm->Bl.offs) |
offset = a2offs(p, bl->norm->Bl.offs); |
offset = a2width(p, bl->norm->Bl.offs); |
|
|
switch (type) { |
switch (type) { |
case LIST_column: |
case LIST_column: |
Line 1581 termp_bd_pre(DECL_ARGS) |
|
Line 1561 termp_bd_pre(DECL_ARGS) |
|
} else if (MDOC_HEAD == n->type) |
} else if (MDOC_HEAD == n->type) |
return(0); |
return(0); |
|
|
if (n->norm->Bd.offs) |
/* Handle the -offset argument. */ |
p->offset += a2offs(p, n->norm->Bd.offs); |
|
|
if (n->norm->Bd.offs == NULL || |
|
! strcmp(n->norm->Bd.offs, "left")) |
|
/* nothing */; |
|
else if ( ! strcmp(n->norm->Bd.offs, "indent")) |
|
p->offset += term_len(p, p->defindent + 1); |
|
else if ( ! strcmp(n->norm->Bd.offs, "indent-two")) |
|
p->offset += term_len(p, (p->defindent + 1) * 2); |
|
else |
|
p->offset += a2width(p, n->norm->Bd.offs); |
|
|
/* |
/* |
* If -ragged or -filled are specified, the block does nothing |
* If -ragged or -filled are specified, the block does nothing |