version 1.9, 2009/06/11 12:07:49 |
version 1.14, 2009/06/16 19:45:51 |
Line 86 struct termpair { |
|
Line 86 struct termpair { |
|
struct termpair *ppair; |
struct termpair *ppair; |
int type; |
int type; |
#define TERMPAIR_FLAG (1 << 0) |
#define TERMPAIR_FLAG (1 << 0) |
int flag; |
int flag; /* Whether being used. */ |
size_t offset; |
size_t offset; /* Left margin. */ |
size_t rmargin; |
size_t rmargin; /* Right margin. */ |
int count; |
int count; /* Enum count. */ |
}; |
}; |
|
|
#define TERMPAIR_SETFLAG(termp, p, fl) \ |
#define TERMPAIR_SETFLAG(termp, p, fl) \ |
Line 183 struct termact { |
|
Line 183 struct termact { |
|
}; |
}; |
|
|
static const struct termact termacts[MDOC_MAX] = { |
static const struct termact termacts[MDOC_MAX] = { |
{ NULL, NULL }, /* \" */ |
{ termp_ap_pre, NULL }, /* Ap */ |
{ NULL, NULL }, /* Dd */ |
{ NULL, NULL }, /* Dd */ |
{ NULL, NULL }, /* Dt */ |
{ NULL, NULL }, /* Dt */ |
{ NULL, NULL }, /* Os */ |
{ NULL, NULL }, /* Os */ |
Line 290 static const struct termact termacts[MDOC_MAX] = { |
|
Line 290 static const struct termact termacts[MDOC_MAX] = { |
|
{ NULL, NULL }, /* Fr */ |
{ NULL, NULL }, /* Fr */ |
{ termp_ud_pre, NULL }, /* Ud */ |
{ termp_ud_pre, NULL }, /* Ud */ |
{ termp_lb_pre, termp_lb_post }, /* Lb */ |
{ termp_lb_pre, termp_lb_post }, /* Lb */ |
{ termp_ap_pre, NULL }, /* Lb */ |
{ termp_pp_pre, NULL }, /* Lp */ |
{ termp_pp_pre, NULL }, /* Pp */ |
|
{ termp_lk_pre, NULL }, /* Lk */ |
{ termp_lk_pre, NULL }, /* Lk */ |
{ termp_mt_pre, NULL }, /* Mt */ |
{ termp_mt_pre, NULL }, /* Mt */ |
{ termp_brq_pre, termp_brq_post }, /* Brq */ |
{ termp_brq_pre, termp_brq_post }, /* Brq */ |
Line 336 mdoc_run(struct termp *p, const struct mdoc *m) |
|
Line 335 mdoc_run(struct termp *p, const struct mdoc *m) |
|
*/ |
*/ |
|
|
print_head(p, mdoc_meta(m)); |
print_head(p, mdoc_meta(m)); |
print_body(p, NULL, mdoc_meta(m), mdoc_node(m)); |
assert(mdoc_node(m)); |
|
assert(MDOC_ROOT == mdoc_node(m)->type); |
|
if (mdoc_node(m)->child) |
|
print_body(p, NULL, mdoc_meta(m), mdoc_node(m)->child); |
print_foot(p, mdoc_meta(m)); |
print_foot(p, mdoc_meta(m)); |
return(1); |
return(1); |
} |
} |
Line 415 print_foot(struct termp *p, const struct mdoc_meta *me |
|
Line 417 print_foot(struct termp *p, const struct mdoc_meta *me |
|
|
|
tm = localtime(&meta->date); |
tm = localtime(&meta->date); |
|
|
#ifdef __OpenBSD__ |
|
if (NULL == strftime(buf, p->rmargin, "%B %d, %Y", tm)) |
|
#else |
|
if (0 == strftime(buf, p->rmargin, "%B %d, %Y", tm)) |
if (0 == strftime(buf, p->rmargin, "%B %d, %Y", tm)) |
#endif |
|
err(1, "strftime"); |
err(1, "strftime"); |
|
|
(void)strlcpy(os, meta->os, p->rmargin); |
(void)strlcpy(os, meta->os, p->rmargin); |
Line 592 arg_listtype(const struct mdoc_node *n) |
|
Line 590 arg_listtype(const struct mdoc_node *n) |
|
break; |
break; |
} |
} |
|
|
|
/* FIXME: mandated by parser. */ |
|
|
errx(1, "list type not supported"); |
errx(1, "list type not supported"); |
/* NOTREACHED */ |
/* NOTREACHED */ |
} |
} |
Line 602 arg_offset(const struct mdoc_argv *arg) |
|
Line 602 arg_offset(const struct mdoc_argv *arg) |
|
{ |
{ |
|
|
assert(*arg->value); |
assert(*arg->value); |
|
if (0 == strcmp(*arg->value, "left")) |
|
return(0); |
if (0 == strcmp(*arg->value, "indent")) |
if (0 == strcmp(*arg->value, "indent")) |
return(INDENT); |
return(INDENT); |
if (0 == strcmp(*arg->value, "indent-two")) |
if (0 == strcmp(*arg->value, "indent-two")) |
return(INDENT * 2); |
return(INDENT * 2); |
|
|
|
/* FIXME: needs to support field-widths (10n, etc.). */ |
|
|
return(strlen(*arg->value)); |
return(strlen(*arg->value)); |
} |
} |
|
|
Line 1067 termp_rv_pre(DECL_ARGS) |
|
Line 1072 termp_rv_pre(DECL_ARGS) |
|
{ |
{ |
int i; |
int i; |
|
|
|
/* FIXME: mandated by parser. */ |
|
|
if (-1 == (i = arg_getattr(MDOC_Std, node))) |
if (-1 == (i = arg_getattr(MDOC_Std, node))) |
errx(1, "expected -std argument"); |
errx(1, "expected -std argument"); |
if (1 != node->args->argv[i].sz) |
if (1 != node->args->argv[i].sz) |
Line 1100 termp_ex_pre(DECL_ARGS) |
|
Line 1107 termp_ex_pre(DECL_ARGS) |
|
{ |
{ |
int i; |
int i; |
|
|
|
/* FIXME: mandated by parser? */ |
|
|
if (-1 == (i = arg_getattr(MDOC_Std, node))) |
if (-1 == (i = arg_getattr(MDOC_Std, node))) |
errx(1, "expected -std argument"); |
errx(1, "expected -std argument"); |
if (1 != node->args->argv[i].sz) |
if (1 != node->args->argv[i].sz) |
Line 1153 termp_xr_pre(DECL_ARGS) |
|
Line 1162 termp_xr_pre(DECL_ARGS) |
|
{ |
{ |
const struct mdoc_node *n; |
const struct mdoc_node *n; |
|
|
if (NULL == (n = node->child)) |
assert(node->child && MDOC_TEXT == node->child->type); |
errx(1, "expected text line argument"); |
n = node->child; |
|
|
term_word(p, n->string); |
term_word(p, n->string); |
if (NULL == (n = n->next)) |
if (NULL == (n = n->next)) |
return(0); |
return(0); |
Line 1288 termp_lb_pre(DECL_ARGS) |
|
Line 1298 termp_lb_pre(DECL_ARGS) |
|
{ |
{ |
const char *lb; |
const char *lb; |
|
|
if (NULL == node->child) |
assert(node->child && MDOC_TEXT == node->child->type); |
errx(1, "expected text line argument"); |
|
if ((lb = mdoc_a2lib(node->child->string))) { |
if ((lb = mdoc_a2lib(node->child->string))) { |
term_word(p, lb); |
term_word(p, lb); |
return(0); |
return(0); |
Line 1397 termp_fn_pre(DECL_ARGS) |
|
Line 1406 termp_fn_pre(DECL_ARGS) |
|
{ |
{ |
const struct mdoc_node *n; |
const struct mdoc_node *n; |
|
|
if (NULL == node->child) |
assert(node->child && MDOC_TEXT == node->child->type); |
errx(1, "expected text line arguments"); |
|
|
|
/* FIXME: can be "type funcname" "type varname"... */ |
/* FIXME: can be "type funcname" "type varname"... */ |
|
|
Line 1505 termp_bd_pre(DECL_ARGS) |
|
Line 1513 termp_bd_pre(DECL_ARGS) |
|
else if (MDOC_BODY != node->type) |
else if (MDOC_BODY != node->type) |
return(1); |
return(1); |
|
|
|
/* FIXME: display type should be mandated by parser. */ |
|
|
if (NULL == node->parent->args) |
if (NULL == node->parent->args) |
errx(1, "missing display type"); |
errx(1, "missing display type"); |
|
|
Line 1953 termp_fo_pre(DECL_ARGS) |
|
Line 1963 termp_fo_pre(DECL_ARGS) |
|
|
|
p->flags |= ttypes[TTYPE_FUNC_NAME]; |
p->flags |= ttypes[TTYPE_FUNC_NAME]; |
for (n = node->child; n; n = n->next) { |
for (n = node->child; n; n = n->next) { |
if (MDOC_TEXT != n->type) |
assert(MDOC_TEXT == n->type); |
errx(1, "expected text line argument"); |
|
term_word(p, n->string); |
term_word(p, n->string); |
} |
} |
p->flags &= ~ttypes[TTYPE_FUNC_NAME]; |
p->flags &= ~ttypes[TTYPE_FUNC_NAME]; |
Line 1998 termp_bf_pre(DECL_ARGS) |
|
Line 2007 termp_bf_pre(DECL_ARGS) |
|
return(1); |
return(1); |
} |
} |
|
|
if (MDOC_TEXT != n->type) |
assert(MDOC_TEXT == n->type); |
errx(1, "expected text line arguments"); |
|
|
|
if (0 == strcmp("Em", n->string)) |
if (0 == strcmp("Em", n->string)) |
TERMPAIR_SETFLAG(p, pair, ttypes[TTYPE_EMPH]); |
TERMPAIR_SETFLAG(p, pair, ttypes[TTYPE_EMPH]); |
else if (0 == strcmp("Sy", n->string)) |
else if (0 == strcmp("Sy", n->string)) |
|
|
termp_sm_pre(DECL_ARGS) |
termp_sm_pre(DECL_ARGS) |
{ |
{ |
|
|
if (NULL == node->child || MDOC_TEXT != node->child->type) |
assert(node->child && MDOC_TEXT == node->child->type); |
errx(1, "expected boolean line argument"); |
|
|
|
if (0 == strcmp("on", node->child->string)) { |
if (0 == strcmp("on", node->child->string)) { |
p->flags &= ~TERMP_NONOSPACE; |
p->flags &= ~TERMP_NONOSPACE; |
p->flags &= ~TERMP_NOSPACE; |
p->flags &= ~TERMP_NOSPACE; |
Line 2109 termp_lk_pre(DECL_ARGS) |
|
Line 2114 termp_lk_pre(DECL_ARGS) |
|
{ |
{ |
const struct mdoc_node *n; |
const struct mdoc_node *n; |
|
|
if (NULL == (n = node->child)) |
assert(node->child); |
errx(1, "expected line argument"); |
n = node->child; |
|
|
|
if (NULL == n->next) { |
|
TERMPAIR_SETFLAG(p, pair, ttypes[TTYPE_LINK_ANCHOR]); |
|
return(1); |
|
} |
|
|
p->flags |= ttypes[TTYPE_LINK_ANCHOR]; |
p->flags |= ttypes[TTYPE_LINK_ANCHOR]; |
term_word(p, n->string); |
term_word(p, n->string); |
p->flags &= ~ttypes[TTYPE_LINK_ANCHOR]; |
|
p->flags |= TERMP_NOSPACE; |
p->flags |= TERMP_NOSPACE; |
term_word(p, ":"); |
term_word(p, ":"); |
|
p->flags &= ~ttypes[TTYPE_LINK_ANCHOR]; |
|
|
p->flags |= ttypes[TTYPE_LINK_TEXT]; |
p->flags |= ttypes[TTYPE_LINK_TEXT]; |
for ( ; n; n = n->next) { |
for (n = n->next; n; n = n->next) |
term_word(p, n->string); |
term_word(p, n->string); |
} |
|
p->flags &= ~ttypes[TTYPE_LINK_TEXT]; |
|
|
|
|
p->flags &= ~ttypes[TTYPE_LINK_TEXT]; |
return(0); |
return(0); |
} |
} |
|
|