version 1.50, 2009/07/21 12:47:52 |
version 1.56, 2009/07/21 15:39:04 |
|
|
#define TTYPE_LINK_ANCHOR 19 |
#define TTYPE_LINK_ANCHOR 19 |
#define TTYPE_LINK_TEXT 20 |
#define TTYPE_LINK_TEXT 20 |
#define TTYPE_REF_JOURNAL 21 |
#define TTYPE_REF_JOURNAL 21 |
#define TTYPE_LIST 22 |
#define TTYPE_REF_TITLE 22 |
#define TTYPE_NMAX 23 |
#define TTYPE_LIST 23 |
|
#define TTYPE_NMAX 24 |
|
|
const int ttypes[TTYPE_NMAX] = { |
const int ttypes[TTYPE_NMAX] = { |
TERMP_BOLD, /* TTYPE_PROG */ |
TERMP_BOLD, /* TTYPE_PROG */ |
Line 65 const int ttypes[TTYPE_NMAX] = { |
|
Line 66 const int ttypes[TTYPE_NMAX] = { |
|
TERMP_UNDER, /* TTYPE_FUNC_ARG */ |
TERMP_UNDER, /* TTYPE_FUNC_ARG */ |
TERMP_UNDER, /* TTYPE_LINK */ |
TERMP_UNDER, /* TTYPE_LINK */ |
TERMP_BOLD, /* TTYPE_SSECTION */ |
TERMP_BOLD, /* TTYPE_SSECTION */ |
TERMP_UNDER, /* TTYPE_FILE */ |
0, /* TTYPE_FILE */ |
TERMP_UNDER, /* TTYPE_EMPH */ |
TERMP_UNDER, /* TTYPE_EMPH */ |
TERMP_BOLD, /* TTYPE_CONFIG */ |
TERMP_BOLD, /* TTYPE_CONFIG */ |
TERMP_BOLD, /* TTYPE_CMD */ |
TERMP_BOLD, /* TTYPE_CMD */ |
Line 76 const int ttypes[TTYPE_NMAX] = { |
|
Line 77 const int ttypes[TTYPE_NMAX] = { |
|
TERMP_UNDER, /* TTYPE_LINK_ANCHOR */ |
TERMP_UNDER, /* TTYPE_LINK_ANCHOR */ |
TERMP_BOLD, /* TTYPE_LINK_TEXT */ |
TERMP_BOLD, /* TTYPE_LINK_TEXT */ |
TERMP_UNDER, /* TTYPE_REF_JOURNAL */ |
TERMP_UNDER, /* TTYPE_REF_JOURNAL */ |
|
TERMP_UNDER, /* TTYPE_REF_TITLE */ |
TERMP_BOLD /* TTYPE_LIST */ |
TERMP_BOLD /* TTYPE_LIST */ |
}; |
}; |
|
|
|
|
}; |
}; |
|
|
static void termp____post(DECL_ARGS); |
static void termp____post(DECL_ARGS); |
static void termp__t_post(DECL_ARGS); |
|
static void termp_aq_post(DECL_ARGS); |
static void termp_aq_post(DECL_ARGS); |
static void termp_bd_post(DECL_ARGS); |
static void termp_bd_post(DECL_ARGS); |
static void termp_bl_post(DECL_ARGS); |
static void termp_bl_post(DECL_ARGS); |
Line 154 static int termp_nd_pre(DECL_ARGS); |
|
Line 155 static int termp_nd_pre(DECL_ARGS); |
|
static int termp_nm_pre(DECL_ARGS); |
static int termp_nm_pre(DECL_ARGS); |
static int termp_ns_pre(DECL_ARGS); |
static int termp_ns_pre(DECL_ARGS); |
static int termp_op_pre(DECL_ARGS); |
static int termp_op_pre(DECL_ARGS); |
static int termp_pa_pre(DECL_ARGS); |
|
static int termp_pf_pre(DECL_ARGS); |
static int termp_pf_pre(DECL_ARGS); |
static int termp_pp_pre(DECL_ARGS); |
static int termp_pp_pre(DECL_ARGS); |
static int termp_pq_pre(DECL_ARGS); |
static int termp_pq_pre(DECL_ARGS); |
Line 210 static const struct termact termacts[MDOC_MAX] = { |
|
Line 210 static const struct termact termacts[MDOC_MAX] = { |
|
{ termp_nm_pre, NULL }, /* Nm */ |
{ termp_nm_pre, NULL }, /* Nm */ |
{ termp_op_pre, termp_op_post }, /* Op */ |
{ termp_op_pre, termp_op_post }, /* Op */ |
{ NULL, NULL }, /* Ot */ |
{ NULL, NULL }, /* Ot */ |
{ termp_pa_pre, NULL }, /* Pa */ |
{ NULL, NULL }, /* Pa */ |
{ termp_rv_pre, NULL }, /* Rv */ |
{ termp_rv_pre, NULL }, /* Rv */ |
{ NULL, NULL }, /* St */ |
{ NULL, NULL }, /* St */ |
{ termp_va_pre, NULL }, /* Va */ |
{ termp_va_pre, NULL }, /* Va */ |
Line 225 static const struct termact termacts[MDOC_MAX] = { |
|
Line 225 static const struct termact termacts[MDOC_MAX] = { |
|
{ NULL, termp____post }, /* %O */ |
{ NULL, termp____post }, /* %O */ |
{ NULL, termp____post }, /* %P */ |
{ NULL, termp____post }, /* %P */ |
{ NULL, termp____post }, /* %R */ |
{ NULL, termp____post }, /* %R */ |
{ termp__t_pre, termp__t_post }, /* %T */ |
{ termp__t_pre, termp____post }, /* %T */ |
{ NULL, termp____post }, /* %V */ |
{ NULL, termp____post }, /* %V */ |
{ NULL, NULL }, /* Ac */ |
{ NULL, NULL }, /* Ac */ |
{ termp_aq_pre, termp_aq_post }, /* Ao */ |
{ termp_aq_pre, termp_aq_post }, /* Ao */ |
Line 309 static int arg_getattr(int, const struct mdoc_node * |
|
Line 309 static int arg_getattr(int, const struct mdoc_node * |
|
static size_t arg_offset(const struct mdoc_argv *); |
static size_t arg_offset(const struct mdoc_argv *); |
static size_t arg_width(const struct mdoc_argv *, int); |
static size_t arg_width(const struct mdoc_argv *, int); |
static int arg_listtype(const struct mdoc_node *); |
static int arg_listtype(const struct mdoc_node *); |
static int fmt_block_vspace(struct termp *, |
static void fmt_block_vspace(struct termp *, |
const struct mdoc_node *, |
const struct mdoc_node *, |
const struct mdoc_node *); |
const struct mdoc_node *); |
static void print_node(DECL_ARGS); |
static void print_node(DECL_ARGS); |
Line 660 arg_getattrs(const int *keys, int *vals, |
|
Line 660 arg_getattrs(const int *keys, int *vals, |
|
|
|
|
|
/* ARGSUSED */ |
/* ARGSUSED */ |
static int |
static void |
fmt_block_vspace(struct termp *p, |
fmt_block_vspace(struct termp *p, |
const struct mdoc_node *bl, |
const struct mdoc_node *bl, |
const struct mdoc_node *node) |
const struct mdoc_node *node) |
Line 670 fmt_block_vspace(struct termp *p, |
|
Line 670 fmt_block_vspace(struct termp *p, |
|
term_newln(p); |
term_newln(p); |
|
|
if (arg_hasattr(MDOC_Compact, bl)) |
if (arg_hasattr(MDOC_Compact, bl)) |
return(1); |
return; |
/* XXX - not documented! */ |
|
else if (arg_hasattr(MDOC_Column, bl)) |
|
return(1); |
|
|
|
|
/* |
|
* Search through our prior nodes. If we follow a `Ss' or `Sh', |
|
* then don't vspace. |
|
*/ |
|
|
for (n = node; n; n = n->parent) { |
for (n = node; n; n = n->parent) { |
if (MDOC_BLOCK != n->type) |
if (MDOC_BLOCK != n->type) |
continue; |
continue; |
if (MDOC_Ss == n->tok) |
if (MDOC_Ss == n->tok) |
break; |
return; |
if (MDOC_Sh == n->tok) |
if (MDOC_Sh == n->tok) |
break; |
return; |
if (NULL == n->prev) |
if (NULL == n->prev) |
continue; |
continue; |
term_vspace(p); |
|
break; |
break; |
} |
} |
|
|
return(1); |
/* |
|
* XXX - not documented: a `-column' does not ever assert vspace |
|
* within the list. |
|
*/ |
|
|
|
if (arg_hasattr(MDOC_Column, bl)) |
|
if (node->prev && MDOC_It == node->prev->tok) |
|
return; |
|
|
|
/* |
|
* XXX - not documented: a `-diag' without a body does not |
|
* assert a vspace prior to the next element. |
|
*/ |
|
if (arg_hasattr(MDOC_Diag, bl)) |
|
if (node->prev && MDOC_It == node->prev->tok) { |
|
assert(node->prev->body); |
|
if (NULL == node->prev->body->child) |
|
return; |
|
} |
|
|
|
term_vspace(p); |
} |
} |
|
|
|
|
Line 728 termp_it_pre(DECL_ARGS) |
|
Line 749 termp_it_pre(DECL_ARGS) |
|
int i, type, keys[3], vals[3]; |
int i, type, keys[3], vals[3]; |
size_t width, offset; |
size_t width, offset; |
|
|
if (MDOC_BLOCK == node->type) |
if (MDOC_BLOCK == node->type) { |
return(fmt_block_vspace(p, node->parent->parent, node)); |
fmt_block_vspace(p, node->parent->parent, node); |
|
return(1); |
|
} |
|
|
bl = node->parent->parent->parent; |
bl = node->parent->parent->parent; |
|
|
Line 812 termp_it_pre(DECL_ARGS) |
|
Line 835 termp_it_pre(DECL_ARGS) |
|
* while diagonal bodies need two. |
* while diagonal bodies need two. |
*/ |
*/ |
|
|
|
p->flags |= TERMP_NOSPACE; |
|
|
switch (type) { |
switch (type) { |
|
case (MDOC_Diag): |
|
term_word(p, "\\ \\ "); |
|
break; |
case (MDOC_Inset): |
case (MDOC_Inset): |
if (MDOC_BODY == node->type) |
if (MDOC_BODY == node->type) |
p->flags &= ~TERMP_NOSPACE; |
term_word(p, "\\ "); |
else |
|
p->flags |= TERMP_NOSPACE; |
|
break; |
break; |
default: |
default: |
p->flags |= TERMP_NOSPACE; |
|
break; |
break; |
} |
} |
|
|
|
p->flags |= TERMP_NOSPACE; |
|
|
/* |
/* |
* Style flags. Diagnostic heads need TTYPE_DIAG. |
* Style flags. Diagnostic heads need TTYPE_DIAG. |
*/ |
*/ |
Line 869 termp_it_pre(DECL_ARGS) |
|
Line 896 termp_it_pre(DECL_ARGS) |
|
break; |
break; |
case (MDOC_Tag): |
case (MDOC_Tag): |
if (MDOC_HEAD == node->type) |
if (MDOC_HEAD == node->type) |
p->flags |= TERMP_NOBREAK; |
p->flags |= TERMP_NOBREAK | TERMP_TWOSPACE; |
else |
else |
p->flags |= TERMP_NOLPAD; |
p->flags |= TERMP_NOLPAD; |
|
|
Line 1009 termp_it_post(DECL_ARGS) |
|
Line 1036 termp_it_post(DECL_ARGS) |
|
assert(-1 != type); |
assert(-1 != type); |
|
|
switch (type) { |
switch (type) { |
case (MDOC_Diag): |
|
term_word(p, "\\ "); |
|
/* FALLTHROUGH */ |
|
case (MDOC_Item): |
case (MDOC_Item): |
/* FALLTHROUGH */ |
/* FALLTHROUGH */ |
|
case (MDOC_Diag): |
|
/* FALLTHROUGH */ |
case (MDOC_Inset): |
case (MDOC_Inset): |
if (MDOC_BODY == node->type) |
if (MDOC_BODY == node->type) |
term_flushln(p); |
term_flushln(p); |
Line 1529 termp_bd_pre(DECL_ARGS) |
|
Line 1555 termp_bd_pre(DECL_ARGS) |
|
* line. Blank lines are allowed. |
* line. Blank lines are allowed. |
*/ |
*/ |
|
|
if (MDOC_BLOCK == node->type) |
if (MDOC_BLOCK == node->type) { |
return(fmt_block_vspace(p, node, node)); |
fmt_block_vspace(p, node, node); |
else if (MDOC_BODY != node->type) |
|
return(1); |
return(1); |
|
} else if (MDOC_BODY != node->type) |
|
return(1); |
|
|
/* FIXME: display type should be mandated by parser. */ |
/* FIXME: display type should be mandated by parser. */ |
|
|
Line 1760 termp_ss_post(DECL_ARGS) |
|
Line 1787 termp_ss_post(DECL_ARGS) |
|
|
|
/* ARGSUSED */ |
/* ARGSUSED */ |
static int |
static int |
termp_pa_pre(DECL_ARGS) |
|
{ |
|
|
|
pair->flag |= ttypes[TTYPE_FILE]; |
|
return(1); |
|
} |
|
|
|
|
|
/* ARGSUSED */ |
|
static int |
|
termp_em_pre(DECL_ARGS) |
termp_em_pre(DECL_ARGS) |
{ |
{ |
|
|
|
|
termp__t_pre(DECL_ARGS) |
termp__t_pre(DECL_ARGS) |
{ |
{ |
|
|
term_word(p, "\""); |
pair->flag |= ttypes[TTYPE_REF_TITLE]; |
p->flags |= TERMP_NOSPACE; |
|
return(1); |
return(1); |
} |
|
|
|
|
|
/* ARGSUSED */ |
|
static void |
|
termp__t_post(DECL_ARGS) |
|
{ |
|
|
|
p->flags |= TERMP_NOSPACE; |
|
term_word(p, "\""); |
|
termp____post(p, pair, meta, node); |
|
} |
} |
|
|
|
|