version 1.36, 2009/10/13 10:57:25 |
version 1.37, 2009/10/18 11:14:04 |
|
|
#include "term.h" |
#include "term.h" |
#include "chars.h" |
#include "chars.h" |
#include "main.h" |
#include "main.h" |
|
#include "out.h" |
|
|
#define INDENT 7 |
#define INDENT 7 |
#define HALFINDENT 3 |
#define HALFINDENT 3 |
Line 138 static void print_foot(struct termp *, |
|
Line 139 static void print_foot(struct termp *, |
|
const struct man_meta *); |
const struct man_meta *); |
static void fmt_block_vspace(struct termp *, |
static void fmt_block_vspace(struct termp *, |
const struct man_node *); |
const struct man_node *); |
static int arg_width(const struct man_node *); |
static int a2width(const char *); |
|
|
|
|
void |
void |
Line 195 fmt_block_vspace(struct termp *p, const struct man_nod |
|
Line 196 fmt_block_vspace(struct termp *p, const struct man_nod |
|
|
|
|
|
static int |
static int |
arg_width(const struct man_node *n) |
a2width(const char *p) |
{ |
{ |
int i, len; |
struct roffsu su; |
const char *p; |
double r; |
|
|
assert(MAN_TEXT == n->type); |
if ( ! a2roffsu(p, &su)) |
assert(n->string); |
|
|
|
p = n->string; |
|
|
|
if (0 == (len = (int)strlen(p))) |
|
return(-1); |
return(-1); |
|
|
for (i = 0; i < len; i++) |
switch (su.unit) { |
if ( ! isdigit((u_char)p[i])) |
case (SCALE_CM): |
break; |
r = 4 * su.scale; |
|
break; |
|
case (SCALE_IN): |
|
r = 10 * su.scale; |
|
break; |
|
case (SCALE_PC): |
|
r = 2 * su.scale; |
|
break; |
|
case (SCALE_PT): |
|
r = (su.scale / 10) + 1; |
|
break; |
|
case (SCALE_MM): |
|
r = su.scale / 1000; |
|
break; |
|
case (SCALE_VS): |
|
r = su.scale * 2 - 1; |
|
break; |
|
default: |
|
r = su.scale + 1; |
|
break; |
|
} |
|
|
if (i == len - 1) { |
if (r < 0.0) |
if ('n' == p[len - 1] || 'm' == p[len - 1]) |
r = 0.0; |
return(atoi(p)); |
return((int)/* LINTED */ |
} else if (i == len) |
r); |
return(atoi(p)); |
|
|
|
return(-1); |
|
} |
} |
|
|
|
|
Line 467 pre_HP(DECL_ARGS) |
|
Line 480 pre_HP(DECL_ARGS) |
|
|
|
/* Calculate offset. */ |
/* Calculate offset. */ |
|
|
if (NULL != (nn = n->parent->head->child)) |
if (NULL != (nn = n->parent->head->child)) { |
if ((ival = arg_width(nn)) >= 0) |
assert(MAN_TEXT == nn->type); |
|
if ((ival = a2width(nn->string)) >= 0) |
len = (size_t)ival; |
len = (size_t)ival; |
|
} |
|
|
if (0 == len) |
if (0 == len) |
len = 1; |
len = 1; |
Line 558 pre_IP(DECL_ARGS) |
|
Line 573 pre_IP(DECL_ARGS) |
|
if (NULL != (nn = nn->next)) { |
if (NULL != (nn = nn->next)) { |
for ( ; nn->next; nn = nn->next) |
for ( ; nn->next; nn = nn->next) |
/* Do nothing. */ ; |
/* Do nothing. */ ; |
if ((ival = arg_width(nn)) >= 0) |
assert(MAN_TEXT == nn->type); |
|
if ((ival = a2width(nn->string)) >= 0) |
len = (size_t)ival; |
len = (size_t)ival; |
} |
} |
|
|
Line 644 pre_TP(DECL_ARGS) |
|
Line 660 pre_TP(DECL_ARGS) |
|
/* Calculate offset. */ |
/* Calculate offset. */ |
|
|
if (NULL != (nn = n->parent->head->child)) |
if (NULL != (nn = n->parent->head->child)) |
if (NULL != nn->next) |
if (NULL != nn->next) { |
if ((ival = arg_width(nn)) >= 0) |
assert(MAN_TEXT == nn->type); |
|
if ((ival = a2width(nn->string)) >= 0) |
len = (size_t)ival; |
len = (size_t)ival; |
|
} |
|
|
switch (n->type) { |
switch (n->type) { |
case (MAN_HEAD): |
case (MAN_HEAD): |
Line 823 pre_RS(DECL_ARGS) |
|
Line 841 pre_RS(DECL_ARGS) |
|
return(1); |
return(1); |
} |
} |
|
|
if ((ival = arg_width(nn)) < 0) |
assert(MAN_TEXT == nn->type); |
|
if ((ival = a2width(nn->string)) < 0) |
return(1); |
return(1); |
|
|
mt->offset = INDENT + (size_t)ival; |
mt->offset = INDENT + (size_t)ival; |