version 1.31, 2012/07/10 19:54:11 |
version 1.35, 2012/07/12 08:55:48 |
Line 43 static int cond_body(DECL_ARGS); |
|
Line 43 static int cond_body(DECL_ARGS); |
|
static int cond_head(DECL_ARGS); |
static int cond_head(DECL_ARGS); |
static void font_push(char); |
static void font_push(char); |
static void font_pop(void); |
static void font_pop(void); |
|
static void post__t(DECL_ARGS); |
static void post_bd(DECL_ARGS); |
static void post_bd(DECL_ARGS); |
static void post_bf(DECL_ARGS); |
static void post_bf(DECL_ARGS); |
static void post_bk(DECL_ARGS); |
static void post_bk(DECL_ARGS); |
Line 65 static void post_pf(DECL_ARGS); |
|
Line 66 static void post_pf(DECL_ARGS); |
|
static void post_sect(DECL_ARGS); |
static void post_sect(DECL_ARGS); |
static void post_sp(DECL_ARGS); |
static void post_sp(DECL_ARGS); |
static void post_vt(DECL_ARGS); |
static void post_vt(DECL_ARGS); |
|
static int pre__t(DECL_ARGS); |
static int pre_an(DECL_ARGS); |
static int pre_an(DECL_ARGS); |
static int pre_ap(DECL_ARGS); |
static int pre_ap(DECL_ARGS); |
static int pre_bd(DECL_ARGS); |
static int pre_bd(DECL_ARGS); |
Line 90 static int pre_nm(DECL_ARGS); |
|
Line 92 static int pre_nm(DECL_ARGS); |
|
static int pre_no(DECL_ARGS); |
static int pre_no(DECL_ARGS); |
static int pre_ns(DECL_ARGS); |
static int pre_ns(DECL_ARGS); |
static int pre_pp(DECL_ARGS); |
static int pre_pp(DECL_ARGS); |
|
static int pre_rs(DECL_ARGS); |
static int pre_sm(DECL_ARGS); |
static int pre_sm(DECL_ARGS); |
static int pre_sp(DECL_ARGS); |
static int pre_sp(DECL_ARGS); |
static int pre_sect(DECL_ARGS); |
static int pre_sect(DECL_ARGS); |
Line 100 static int pre_ux(DECL_ARGS); |
|
Line 103 static int pre_ux(DECL_ARGS); |
|
static int pre_xr(DECL_ARGS); |
static int pre_xr(DECL_ARGS); |
static void print_word(const char *); |
static void print_word(const char *); |
static void print_offs(const char *); |
static void print_offs(const char *); |
static void print_width(const char *, const struct mdoc_node *); |
static void print_width(const char *, |
|
const struct mdoc_node *, size_t); |
static void print_count(int *); |
static void print_count(int *); |
static void print_node(DECL_ARGS); |
static void print_node(DECL_ARGS); |
|
|
Line 152 static const struct manact manacts[MDOC_MAX + 1] = { |
|
Line 156 static const struct manact manacts[MDOC_MAX + 1] = { |
|
{ NULL, pre_em, post_font, NULL, NULL }, /* Va */ |
{ NULL, pre_em, post_font, NULL, NULL }, /* Va */ |
{ NULL, pre_vt, post_vt, NULL, NULL }, /* Vt */ |
{ NULL, pre_vt, post_vt, NULL, NULL }, /* Vt */ |
{ NULL, pre_xr, NULL, NULL, NULL }, /* Xr */ |
{ NULL, pre_xr, NULL, NULL, NULL }, /* Xr */ |
{ NULL, NULL, post_percent, NULL, NULL }, /* _%A */ |
{ NULL, NULL, post_percent, NULL, NULL }, /* %A */ |
{ NULL, NULL, NULL, NULL, NULL }, /* _%B */ |
{ NULL, pre_em, post_percent, NULL, NULL }, /* %B */ |
{ NULL, NULL, post_percent, NULL, NULL }, /* _%D */ |
{ NULL, NULL, post_percent, NULL, NULL }, /* %D */ |
{ NULL, NULL, NULL, NULL, NULL }, /* _%I */ |
{ NULL, pre_em, post_percent, NULL, NULL }, /* %I */ |
{ NULL, pre_enc, post_percent, "\\fI", "\\fP" }, /* %J */ |
{ NULL, pre_em, post_percent, NULL, NULL }, /* %J */ |
{ NULL, NULL, NULL, NULL, NULL }, /* _%N */ |
{ NULL, NULL, post_percent, NULL, NULL }, /* %N */ |
{ NULL, NULL, NULL, NULL, NULL }, /* _%O */ |
{ NULL, NULL, post_percent, NULL, NULL }, /* %O */ |
{ NULL, NULL, NULL, NULL, NULL }, /* _%P */ |
{ NULL, NULL, post_percent, NULL, NULL }, /* %P */ |
{ NULL, NULL, NULL, NULL, NULL }, /* _%R */ |
{ NULL, NULL, post_percent, NULL, NULL }, /* %R */ |
{ NULL, pre_enc, post_percent, "\"", "\"" }, /* %T */ |
{ NULL, pre__t, post__t, NULL, NULL }, /* %T */ |
{ NULL, NULL, NULL, NULL, NULL }, /* _%V */ |
{ NULL, NULL, post_percent, NULL, NULL }, /* %V */ |
{ NULL, NULL, NULL, NULL, NULL }, /* Ac */ |
{ NULL, NULL, NULL, NULL, NULL }, /* Ac */ |
{ cond_body, pre_enc, post_enc, "<", ">" }, /* Ao */ |
{ cond_body, pre_enc, post_enc, "<", ">" }, /* Ao */ |
{ cond_body, pre_enc, post_enc, "<", ">" }, /* Aq */ |
{ cond_body, pre_enc, post_enc, "<", ">" }, /* Aq */ |
Line 196 static const struct manact manacts[MDOC_MAX + 1] = { |
|
Line 200 static const struct manact manacts[MDOC_MAX + 1] = { |
|
{ cond_body, pre_enc, post_enc, "\"", "\"" }, /* Qo */ |
{ cond_body, pre_enc, post_enc, "\"", "\"" }, /* Qo */ |
{ cond_body, pre_enc, post_enc, "\"", "\"" }, /* Qq */ |
{ cond_body, pre_enc, post_enc, "\"", "\"" }, /* Qq */ |
{ NULL, NULL, NULL, NULL, NULL }, /* Re */ |
{ NULL, NULL, NULL, NULL, NULL }, /* Re */ |
{ cond_body, pre_pp, NULL, NULL, NULL }, /* Rs */ |
{ cond_body, pre_rs, NULL, NULL, NULL }, /* Rs */ |
{ NULL, NULL, NULL, NULL, NULL }, /* Sc */ |
{ NULL, NULL, NULL, NULL, NULL }, /* Sc */ |
{ cond_body, pre_enc, post_enc, "`", "'" }, /* So */ |
{ cond_body, pre_enc, post_enc, "`", "'" }, /* So */ |
{ cond_body, pre_enc, post_enc, "`", "'" }, /* Sq */ |
{ cond_body, pre_enc, post_enc, "`", "'" }, /* Sq */ |
Line 205 static const struct manact manacts[MDOC_MAX + 1] = { |
|
Line 209 static const struct manact manacts[MDOC_MAX + 1] = { |
|
{ NULL, pre_sy, post_font, NULL, NULL }, /* Sy */ |
{ NULL, pre_sy, post_font, NULL, NULL }, /* Sy */ |
{ NULL, pre_li, post_font, NULL, NULL }, /* Tn */ |
{ NULL, pre_li, post_font, NULL, NULL }, /* Tn */ |
{ NULL, pre_ux, NULL, "UNIX", NULL }, /* Ux */ |
{ NULL, pre_ux, NULL, "UNIX", NULL }, /* Ux */ |
{ NULL, NULL, NULL, NULL, NULL }, /* _Xc */ |
{ NULL, NULL, NULL, NULL, NULL }, /* Xc */ |
{ NULL, NULL, NULL, NULL, NULL }, /* _Xo */ |
{ NULL, NULL, NULL, NULL, NULL }, /* Xo */ |
{ NULL, pre_fo, post_fo, NULL, NULL }, /* Fo */ |
{ NULL, pre_fo, post_fo, NULL, NULL }, /* Fo */ |
{ NULL, NULL, NULL, NULL, NULL }, /* Fc */ |
{ NULL, NULL, NULL, NULL, NULL }, /* Fc */ |
{ cond_body, pre_enc, post_enc, "[", "]" }, /* Oo */ |
{ cond_body, pre_enc, post_enc, "[", "]" }, /* Oo */ |
Line 224 static const struct manact manacts[MDOC_MAX + 1] = { |
|
Line 228 static const struct manact manacts[MDOC_MAX + 1] = { |
|
{ cond_body, pre_enc, post_enc, "{", "}" }, /* Brq */ |
{ cond_body, pre_enc, post_enc, "{", "}" }, /* Brq */ |
{ cond_body, pre_enc, post_enc, "{", "}" }, /* Bro */ |
{ cond_body, pre_enc, post_enc, "{", "}" }, /* Bro */ |
{ NULL, NULL, NULL, NULL, NULL }, /* Brc */ |
{ NULL, NULL, NULL, NULL, NULL }, /* Brc */ |
{ NULL, NULL, NULL, NULL, NULL }, /* _%C */ |
{ NULL, NULL, post_percent, NULL, NULL }, /* %C */ |
{ NULL, NULL, NULL, NULL, NULL }, /* Es */ |
{ NULL, NULL, NULL, NULL, NULL }, /* Es */ |
{ NULL, NULL, NULL, NULL, NULL }, /* En */ |
{ NULL, NULL, NULL, NULL, NULL }, /* En */ |
{ NULL, pre_ux, NULL, "DragonFly", NULL }, /* Dx */ |
{ NULL, pre_ux, NULL, "DragonFly", NULL }, /* Dx */ |
{ NULL, NULL, NULL, NULL, NULL }, /* _%Q */ |
{ NULL, NULL, post_percent, NULL, NULL }, /* %Q */ |
{ NULL, pre_br, NULL, NULL, NULL }, /* br */ |
{ NULL, pre_br, NULL, NULL, NULL }, /* br */ |
{ NULL, pre_sp, post_sp, NULL, NULL }, /* sp */ |
{ NULL, pre_sp, post_sp, NULL, NULL }, /* sp */ |
{ NULL, NULL, NULL, NULL, NULL }, /* _%U */ |
{ NULL, NULL, post_percent, NULL, NULL }, /* %U */ |
{ NULL, NULL, NULL, NULL, NULL }, /* _Ta */ |
{ NULL, NULL, NULL, NULL, NULL }, /* Ta */ |
{ NULL, NULL, NULL, NULL, NULL }, /* ROOT */ |
{ NULL, NULL, NULL, NULL, NULL }, /* ROOT */ |
}; |
}; |
|
|
Line 360 print_offs(const char *v) |
|
Line 364 print_offs(const char *v) |
|
} |
} |
|
|
void |
void |
print_width(const char *v, const struct mdoc_node *child) |
print_width(const char *v, const struct mdoc_node *child, size_t defsz) |
{ |
{ |
char buf[24]; |
char buf[24]; |
struct roffsu su; |
struct roffsu su; |
Line 370 print_width(const char *v, const struct mdoc_node *chi |
|
Line 374 print_width(const char *v, const struct mdoc_node *chi |
|
chsz = (NULL != child && MDOC_TEXT == child->type) ? |
chsz = (NULL != child && MDOC_TEXT == child->type) ? |
strlen(child->string) : 0; |
strlen(child->string) : 0; |
|
|
if (a2roffsu(v, &su, SCALE_MAX)) { |
if (NULL == v) |
|
sz = defsz; |
|
else if (a2roffsu(v, &su, SCALE_MAX)) { |
if (SCALE_EN == su.unit) |
if (SCALE_EN == su.unit) |
sz = su.scale; |
sz = su.scale; |
else { |
else { |
Line 539 post_font(DECL_ARGS) |
|
Line 545 post_font(DECL_ARGS) |
|
font_pop(); |
font_pop(); |
} |
} |
|
|
/* |
|
* Used in listings (percent = %A, e.g.). |
|
* FIXME: this is incomplete. |
|
* It doesn't print a nice ", and" for lists. |
|
*/ |
|
static void |
static void |
post_percent(DECL_ARGS) |
post_percent(DECL_ARGS) |
{ |
{ |
|
|
post_enc(m, n); |
if (pre_em == manacts[n->tok].pre) |
if (n->next) |
font_pop(); |
|
if (n->next) { |
print_word(","); |
print_word(","); |
else { |
if (n->prev && n->prev->tok == n->tok && |
|
n->next->tok == n->tok) |
|
print_word("and"); |
|
} else { |
print_word("."); |
print_word("."); |
outflags |= MMAN_nl; |
outflags |= MMAN_nl; |
} |
} |
} |
} |
|
|
|
static int |
|
pre__t(DECL_ARGS) |
|
{ |
|
|
|
if (n->parent && MDOC_Rs == n->parent->tok && |
|
n->parent->norm->Rs.quote_T) { |
|
print_word("\""); |
|
outflags &= ~MMAN_spc; |
|
} else |
|
font_push('I'); |
|
return(1); |
|
} |
|
|
|
static void |
|
post__t(DECL_ARGS) |
|
{ |
|
|
|
if (n->parent && MDOC_Rs == n->parent->tok && |
|
n->parent->norm->Rs.quote_T) { |
|
outflags &= ~MMAN_spc; |
|
print_word("\""); |
|
} else |
|
font_pop(); |
|
post_percent(m, n); |
|
} |
|
|
/* |
/* |
* Print before a section header. |
* Print before a section header. |
*/ |
*/ |
Line 754 post_bk(DECL_ARGS) |
|
Line 785 post_bk(DECL_ARGS) |
|
static int |
static int |
pre_bl(DECL_ARGS) |
pre_bl(DECL_ARGS) |
{ |
{ |
|
size_t icol; |
|
|
if (LIST_enum == n->norm->Bl.type) |
switch (n->norm->Bl.type) { |
|
case (LIST_enum): |
n->norm->Bl.count = 0; |
n->norm->Bl.count = 0; |
|
return(1); |
|
case (LIST_column): |
|
break; |
|
default: |
|
return(1); |
|
} |
|
|
|
outflags |= MMAN_nl; |
|
print_word(".TS"); |
|
outflags |= MMAN_nl; |
|
for (icol = 0; icol < n->norm->Bl.ncols; icol++) |
|
print_word("l"); |
|
print_word("."); |
return(1); |
return(1); |
} |
} |
|
|
|
|
post_bl(DECL_ARGS) |
post_bl(DECL_ARGS) |
{ |
{ |
|
|
if (LIST_enum == n->norm->Bl.type) |
switch (n->norm->Bl.type) { |
|
case (LIST_enum): |
n->norm->Bl.count = 0; |
n->norm->Bl.count = 0; |
|
break; |
|
case (LIST_column): |
|
outflags |= MMAN_nl; |
|
print_word(".TE"); |
|
break; |
|
default: |
|
break; |
|
} |
|
outflags |= MMAN_br; |
} |
} |
|
|
static int |
static int |
Line 909 pre_fn(DECL_ARGS) |
|
Line 965 pre_fn(DECL_ARGS) |
|
outflags &= ~MMAN_spc; |
outflags &= ~MMAN_spc; |
print_word("("); |
print_word("("); |
outflags &= ~MMAN_spc; |
outflags &= ~MMAN_spc; |
return(pre_fa(m, n->next)); |
|
|
n = n->next; |
|
if (NULL != n) |
|
pre_fa(m, n); |
|
return(0); |
} |
} |
|
|
static void |
static void |
Line 1039 pre_it(DECL_ARGS) |
|
Line 1099 pre_it(DECL_ARGS) |
|
case (LIST_dash): |
case (LIST_dash): |
/* FALLTHROUGH */ |
/* FALLTHROUGH */ |
case (LIST_hyphen): |
case (LIST_hyphen): |
print_width(bln->norm->Bl.width, NULL); |
print_width(bln->norm->Bl.width, NULL, 0); |
outflags |= MMAN_nl; |
outflags |= MMAN_nl; |
font_push('B'); |
font_push('B'); |
if (LIST_bullet == bln->norm->Bl.type) |
if (LIST_bullet == bln->norm->Bl.type) |
Line 1049 pre_it(DECL_ARGS) |
|
Line 1109 pre_it(DECL_ARGS) |
|
font_pop(); |
font_pop(); |
break; |
break; |
case (LIST_enum): |
case (LIST_enum): |
print_width(bln->norm->Bl.width, NULL); |
print_width(bln->norm->Bl.width, NULL, 0); |
outflags |= MMAN_nl; |
outflags |= MMAN_nl; |
print_count(&bln->norm->Bl.count); |
print_count(&bln->norm->Bl.count); |
outflags |= MMAN_nl; |
|
break; |
break; |
case (LIST_hang): |
case (LIST_hang): |
print_width(bln->norm->Bl.width, n->child); |
print_width(bln->norm->Bl.width, n->child, 6); |
outflags |= MMAN_nl; |
|
break; |
break; |
default: |
case (LIST_tag): |
if (bln->norm->Bl.width) |
print_width(bln->norm->Bl.width, NULL, 8); |
print_width(bln->norm->Bl.width, n->child); |
|
break; |
break; |
|
default: |
|
return(1); |
} |
} |
outflags |= MMAN_nl; |
outflags |= MMAN_nl; |
default: |
default: |
Line 1075 post_it(DECL_ARGS) |
|
Line 1134 post_it(DECL_ARGS) |
|
{ |
{ |
const struct mdoc_node *bln; |
const struct mdoc_node *bln; |
|
|
if (MDOC_HEAD == n->type) { |
bln = n->parent->parent; |
bln = n->parent->parent; |
|
|
switch (n->type) { |
|
case (MDOC_HEAD): |
switch (bln->norm->Bl.type) { |
switch (bln->norm->Bl.type) { |
case (LIST_diag): |
case (LIST_diag): |
outflags &= ~MMAN_spc; |
outflags &= ~MMAN_spc; |
Line 1088 post_it(DECL_ARGS) |
|
Line 1149 post_it(DECL_ARGS) |
|
default: |
default: |
break; |
break; |
} |
} |
|
break; |
|
case (MDOC_BODY): |
|
if (LIST_column == bln->norm->Bl.type && |
|
NULL != n->next) { |
|
putchar('\t'); |
|
outflags &= ~MMAN_spc; |
|
} |
|
break; |
|
default: |
|
break; |
} |
} |
} |
} |
|
|
Line 1189 pre_pp(DECL_ARGS) |
|
Line 1260 pre_pp(DECL_ARGS) |
|
else |
else |
print_word(".PP"); |
print_word(".PP"); |
outflags |= MMAN_nl; |
outflags |= MMAN_nl; |
return(MDOC_Rs == n->tok); |
return(0); |
|
} |
|
|
|
static int |
|
pre_rs(DECL_ARGS) |
|
{ |
|
|
|
if (SEC_SEE_ALSO == n->sec) { |
|
outflags |= MMAN_nl; |
|
print_word(".PP"); |
|
outflags |= MMAN_nl; |
|
} |
|
return(1); |
} |
} |
|
|
static int |
static int |