summaryrefslogtreecommitdiffstats
path: root/mdoc_term.c
diff options
context:
space:
mode:
Diffstat (limited to 'mdoc_term.c')
-rw-r--r--mdoc_term.c325
1 files changed, 63 insertions, 262 deletions
diff --git a/mdoc_term.c b/mdoc_term.c
index 99792503..8e2efd6d 100644
--- a/mdoc_term.c
+++ b/mdoc_term.c
@@ -29,59 +29,6 @@
#define INDENT 5
#define HALFINDENT 3
-#define TTYPE_PROG 0
-#define TTYPE_CMD_FLAG 1
-#define TTYPE_CMD_ARG 2
-#define TTYPE_SECTION 3
-#define TTYPE_FUNC_DECL 4
-#define TTYPE_VAR_DECL 5
-#define TTYPE_FUNC_TYPE 6
-#define TTYPE_FUNC_NAME 7
-#define TTYPE_FUNC_ARG 8
-#define TTYPE_LINK 9
-#define TTYPE_SSECTION 10
-#define TTYPE_FILE 11
-#define TTYPE_EMPH 12
-#define TTYPE_CONFIG 13
-#define TTYPE_CMD 14
-#define TTYPE_INCLUDE 15
-#define TTYPE_SYMB 16
-#define TTYPE_SYMBOL 17
-#define TTYPE_DIAG 18
-#define TTYPE_LINK_ANCHOR 19
-#define TTYPE_LINK_TEXT 20
-#define TTYPE_REF_JOURNAL 21
-#define TTYPE_REF_TITLE 22
-#define TTYPE_LIST 23
-#define TTYPE_NMAX 24
-
-const int ttypes[TTYPE_NMAX] = {
- TERMP_BOLD, /* TTYPE_PROG */
- TERMP_BOLD, /* TTYPE_CMD_FLAG */
- TERMP_UNDER, /* TTYPE_CMD_ARG */
- TERMP_BOLD, /* TTYPE_SECTION */
- TERMP_BOLD, /* TTYPE_FUNC_DECL */
- TERMP_UNDER, /* TTYPE_VAR_DECL */
- TERMP_UNDER, /* TTYPE_FUNC_TYPE */
- TERMP_BOLD, /* TTYPE_FUNC_NAME */
- TERMP_UNDER, /* TTYPE_FUNC_ARG */
- TERMP_UNDER, /* TTYPE_LINK */
- TERMP_BOLD, /* TTYPE_SSECTION */
- TERMP_UNDER, /* TTYPE_FILE */
- TERMP_UNDER, /* TTYPE_EMPH */
- TERMP_BOLD, /* TTYPE_CONFIG */
- TERMP_BOLD, /* TTYPE_CMD */
- TERMP_BOLD, /* TTYPE_INCLUDE */
- TERMP_BOLD, /* TTYPE_SYMB */
- TERMP_BOLD, /* TTYPE_SYMBOL */
- TERMP_BOLD, /* TTYPE_DIAG */
- TERMP_UNDER, /* TTYPE_LINK_ANCHOR */
- TERMP_BOLD, /* TTYPE_LINK_TEXT */
- TERMP_UNDER, /* TTYPE_REF_JOURNAL */
- TERMP_UNDER, /* TTYPE_REF_TITLE */
- TERMP_BOLD /* TTYPE_LIST */
-};
-
struct termpair {
struct termpair *ppair;
int flag;
@@ -124,41 +71,32 @@ static void termp_sq_post(DECL_ARGS);
static void termp_ss_post(DECL_ARGS);
static void termp_vt_post(DECL_ARGS);
-static int termp__j_pre(DECL_ARGS);
-static int termp__t_pre(DECL_ARGS);
static int termp_an_pre(DECL_ARGS);
static int termp_ap_pre(DECL_ARGS);
static int termp_aq_pre(DECL_ARGS);
-static int termp_ar_pre(DECL_ARGS);
static int termp_bd_pre(DECL_ARGS);
static int termp_bf_pre(DECL_ARGS);
+static int termp_bold_pre(DECL_ARGS);
static int termp_bq_pre(DECL_ARGS);
static int termp_br_pre(DECL_ARGS);
static int termp_brq_pre(DECL_ARGS);
static int termp_bt_pre(DECL_ARGS);
static int termp_cd_pre(DECL_ARGS);
-static int termp_cm_pre(DECL_ARGS);
static int termp_d1_pre(DECL_ARGS);
static int termp_dq_pre(DECL_ARGS);
-static int termp_em_pre(DECL_ARGS);
static int termp_ex_pre(DECL_ARGS);
static int termp_fa_pre(DECL_ARGS);
-static int termp_fd_pre(DECL_ARGS);
static int termp_fl_pre(DECL_ARGS);
static int termp_fn_pre(DECL_ARGS);
static int termp_fo_pre(DECL_ARGS);
static int termp_ft_pre(DECL_ARGS);
-static int termp_ic_pre(DECL_ARGS);
static int termp_in_pre(DECL_ARGS);
static int termp_it_pre(DECL_ARGS);
static int termp_lk_pre(DECL_ARGS);
-static int termp_ms_pre(DECL_ARGS);
-static int termp_mt_pre(DECL_ARGS);
static int termp_nd_pre(DECL_ARGS);
static int termp_nm_pre(DECL_ARGS);
static int termp_ns_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_pp_pre(DECL_ARGS);
static int termp_pq_pre(DECL_ARGS);
@@ -170,11 +108,8 @@ static int termp_sm_pre(DECL_ARGS);
static int termp_sp_pre(DECL_ARGS);
static int termp_sq_pre(DECL_ARGS);
static int termp_ss_pre(DECL_ARGS);
-static int termp_sx_pre(DECL_ARGS);
-static int termp_sy_pre(DECL_ARGS);
+static int termp_under_pre(DECL_ARGS);
static int termp_ud_pre(DECL_ARGS);
-static int termp_va_pre(DECL_ARGS);
-static int termp_vt_pre(DECL_ARGS);
static int termp_xr_pre(DECL_ARGS);
static int termp_xx_pre(DECL_ARGS);
@@ -195,41 +130,41 @@ static const struct termact termacts[MDOC_MAX] = {
{ termp_it_pre, termp_it_post }, /* It */
{ NULL, NULL }, /* Ad */
{ termp_an_pre, termp_an_post }, /* An */
- { termp_ar_pre, NULL }, /* Ar */
+ { termp_under_pre, NULL }, /* Ar */
{ termp_cd_pre, NULL }, /* Cd */
- { termp_cm_pre, NULL }, /* Cm */
+ { termp_bold_pre, NULL }, /* Cm */
{ NULL, NULL }, /* Dv */
{ NULL, NULL }, /* Er */
{ NULL, NULL }, /* Ev */
{ termp_ex_pre, NULL }, /* Ex */
{ termp_fa_pre, NULL }, /* Fa */
- { termp_fd_pre, termp_fd_post }, /* Fd */
+ { termp_bold_pre, termp_fd_post }, /* Fd */
{ termp_fl_pre, NULL }, /* Fl */
{ termp_fn_pre, termp_fn_post }, /* Fn */
{ termp_ft_pre, termp_ft_post }, /* Ft */
- { termp_ic_pre, NULL }, /* Ic */
+ { termp_bold_pre, NULL }, /* Ic */
{ termp_in_pre, termp_in_post }, /* In */
{ NULL, NULL }, /* Li */
{ termp_nd_pre, NULL }, /* Nd */
{ termp_nm_pre, NULL }, /* Nm */
{ termp_op_pre, termp_op_post }, /* Op */
{ NULL, NULL }, /* Ot */
- { termp_pa_pre, NULL }, /* Pa */
+ { termp_under_pre, NULL }, /* Pa */
{ termp_rv_pre, NULL }, /* Rv */
{ NULL, NULL }, /* St */
- { termp_va_pre, NULL }, /* Va */
- { termp_vt_pre, termp_vt_post }, /* Vt */
+ { termp_under_pre, NULL }, /* Va */
+ { termp_under_pre, termp_vt_post }, /* Vt */ /* FIXME: type name */
{ termp_xr_pre, NULL }, /* Xr */
{ NULL, termp____post }, /* %A */
{ NULL, termp____post }, /* %B */
{ NULL, termp____post }, /* %D */
{ NULL, termp____post }, /* %I */
- { termp__j_pre, termp____post }, /* %J */
+ { termp_under_pre, termp____post }, /* %J */
{ NULL, termp____post }, /* %N */
{ NULL, termp____post }, /* %O */
{ NULL, termp____post }, /* %P */
{ NULL, termp____post }, /* %R */
- { termp__t_pre, termp____post }, /* %T */
+ { termp_under_pre, termp____post }, /* %T */
{ NULL, termp____post }, /* %V */
{ NULL, NULL }, /* Ac */
{ termp_aq_pre, termp_aq_post }, /* Ao */
@@ -247,10 +182,10 @@ static const struct termact termacts[MDOC_MAX] = {
{ termp_dq_pre, termp_dq_post }, /* Dq */
{ NULL, NULL }, /* Ec */
{ NULL, NULL }, /* Ef */
- { termp_em_pre, NULL }, /* Em */
+ { termp_under_pre, NULL }, /* Em */
{ NULL, NULL }, /* Eo */
{ termp_xx_pre, NULL }, /* Fx */
- { termp_ms_pre, NULL }, /* Ms */
+ { termp_bold_pre, NULL }, /* Ms */
{ NULL, NULL }, /* No */
{ termp_ns_pre, NULL }, /* Ns */
{ termp_xx_pre, NULL }, /* Nx */
@@ -269,8 +204,8 @@ static const struct termact termacts[MDOC_MAX] = {
{ termp_sq_pre, termp_sq_post }, /* So */
{ termp_sq_pre, termp_sq_post }, /* Sq */
{ termp_sm_pre, NULL }, /* Sm */
- { termp_sx_pre, NULL }, /* Sx */
- { termp_sy_pre, NULL }, /* Sy */
+ { termp_under_pre, NULL }, /* Sx */
+ { termp_bold_pre, NULL }, /* Sy */
{ NULL, NULL }, /* Tn */
{ termp_xx_pre, NULL }, /* Ux */
{ NULL, NULL }, /* Xc */
@@ -288,7 +223,7 @@ static const struct termact termacts[MDOC_MAX] = {
{ NULL, termp_lb_post }, /* Lb */
{ termp_pp_pre, NULL }, /* Lp */
{ termp_lk_pre, NULL }, /* Lk */
- { termp_mt_pre, NULL }, /* Mt */
+ { termp_under_pre, NULL }, /* Mt */
{ termp_brq_pre, termp_brq_post }, /* Brq */
{ termp_brq_pre, termp_brq_post }, /* Bro */
{ NULL, NULL }, /* Brc */
@@ -355,13 +290,15 @@ print_body(DECL_ARGS)
static void
print_node(DECL_ARGS)
{
- int dochild;
+ int dochild, bold, under;
struct termpair npair;
size_t offset, rmargin;
dochild = 1;
offset = p->offset;
rmargin = p->rmargin;
+ bold = p->bold;
+ under = p->under;
npair.ppair = pair;
npair.flag = 0;
@@ -383,12 +320,11 @@ print_node(DECL_ARGS)
/* Children. */
- p->flags |= npair.flag;
-
if (dochild && node->child)
print_body(p, &npair, meta, node->child);
- p->flags &= ~npair.flag;
+ p->bold = bold;
+ p->under = under;
/* Post-processing. */
@@ -873,14 +809,10 @@ termp_it_pre(DECL_ARGS)
p->flags |= TERMP_NOSPACE;
- /*
- * Style flags. Diagnostic heads need TTYPE_DIAG.
- */
-
switch (type) {
case (MDOC_Diag):
if (MDOC_HEAD == node->type)
- p->flags |= ttypes[TTYPE_DIAG];
+ p->bold++;
break;
default:
break;
@@ -1018,16 +950,16 @@ termp_it_pre(DECL_ARGS)
if (MDOC_HEAD == node->type)
switch (type) {
case (MDOC_Bullet):
- p->flags |= TERMP_BOLD;
+ p->bold++;
term_word(p, "\\[bu]");
- p->flags &= ~TERMP_BOLD;
+ p->bold--;
break;
case (MDOC_Dash):
/* FALLTHROUGH */
case (MDOC_Hyphen):
- p->flags |= TERMP_BOLD;
+ p->bold++;
term_word(p, "\\(hy");
- p->flags &= ~TERMP_BOLD;
+ p->bold--;
break;
case (MDOC_Enum):
(pair->ppair->ppair->count)++;
@@ -1109,13 +1041,9 @@ termp_nm_pre(DECL_ARGS)
if (SEC_SYNOPSIS == node->sec)
term_newln(p);
-
- pair->flag |= ttypes[TTYPE_PROG];
- p->flags |= ttypes[TTYPE_PROG];
-
+ p->bold++;
if (NULL == node->child)
term_word(p, meta->name);
-
return(1);
}
@@ -1125,8 +1053,7 @@ static int
termp_fl_pre(DECL_ARGS)
{
- pair->flag |= ttypes[TTYPE_CMD_FLAG];
- p->flags |= ttypes[TTYPE_CMD_FLAG];
+ p->bold++;
term_word(p, "\\-");
p->flags |= TERMP_NOSPACE;
return(1);
@@ -1194,16 +1121,6 @@ termp_an_post(DECL_ARGS)
/* ARGSUSED */
static int
-termp_ar_pre(DECL_ARGS)
-{
-
- pair->flag |= ttypes[TTYPE_CMD_ARG];
- return(1);
-}
-
-
-/* ARGSUSED */
-static int
termp_ns_pre(DECL_ARGS)
{
@@ -1245,9 +1162,9 @@ termp_rv_pre(DECL_ARGS)
nn = node->child;
assert(nn);
for ( ; nn; nn = nn->next) {
- p->flags |= ttypes[TTYPE_FUNC_NAME];
+ p->bold++;
term_word(p, nn->string);
- p->flags &= ~ttypes[TTYPE_FUNC_NAME];
+ p->bold--;
p->flags |= TERMP_NOSPACE;
if (nn->next && NULL == nn->next->next)
term_word(p, "(), and");
@@ -1265,9 +1182,9 @@ termp_rv_pre(DECL_ARGS)
term_word(p, "the value 0 if successful; otherwise the value "
"-1 is returned and the global variable");
- p->flags |= ttypes[TTYPE_VAR_DECL];
+ p->under++;
term_word(p, "errno");
- p->flags &= ~ttypes[TTYPE_VAR_DECL];
+ p->under--;
term_word(p, "is set to indicate the error.");
@@ -1286,9 +1203,9 @@ termp_ex_pre(DECL_ARGS)
nn = node->child;
assert(nn);
for ( ; nn; nn = nn->next) {
- p->flags |= ttypes[TTYPE_PROG];
+ p->bold++;
term_word(p, nn->string);
- p->flags &= ~ttypes[TTYPE_PROG];
+ p->bold--;
p->flags |= TERMP_NOSPACE;
if (nn->next && NULL == nn->next->next)
term_word(p, ", and");
@@ -1371,17 +1288,6 @@ termp_xr_pre(DECL_ARGS)
/* ARGSUSED */
-static int
-termp_vt_pre(DECL_ARGS)
-{
-
- /* FIXME: this can be "type name". */
- pair->flag |= ttypes[TTYPE_VAR_DECL];
- return(1);
-}
-
-
-/* ARGSUSED */
static void
termp_vt_post(DECL_ARGS)
{
@@ -1397,10 +1303,10 @@ termp_vt_post(DECL_ARGS)
/* ARGSUSED */
static int
-termp_fd_pre(DECL_ARGS)
+termp_bold_pre(DECL_ARGS)
{
- pair->flag |= ttypes[TTYPE_FUNC_DECL];
+ p->bold++;
return(1);
}
@@ -1435,7 +1341,7 @@ termp_sh_pre(DECL_ARGS)
term_vspace(p);
break;
case (MDOC_HEAD):
- pair->flag |= ttypes[TTYPE_SECTION];
+ p->bold++;
break;
case (MDOC_BODY):
p->offset = INDENT;
@@ -1569,7 +1475,7 @@ termp_ft_pre(DECL_ARGS)
if (SEC_SYNOPSIS == node->sec)
if (node->prev && MDOC_Fo == node->prev->tok)
term_vspace(p);
- pair->flag |= ttypes[TTYPE_FUNC_TYPE];
+ p->under++;
return(1);
}
@@ -1594,17 +1500,17 @@ termp_fn_pre(DECL_ARGS)
/* FIXME: can be "type funcname" "type varname"... */
- p->flags |= ttypes[TTYPE_FUNC_NAME];
+ p->bold++;
term_word(p, node->child->string);
- p->flags &= ~ttypes[TTYPE_FUNC_NAME];
+ p->bold--;
p->flags |= TERMP_NOSPACE;
term_word(p, "(");
for (n = node->child->next; n; n = n->next) {
- p->flags |= ttypes[TTYPE_FUNC_ARG];
+ p->under++;
term_word(p, n->string);
- p->flags &= ~ttypes[TTYPE_FUNC_ARG];
+ p->under--;
if (n->next)
term_word(p, ",");
}
@@ -1630,29 +1536,19 @@ termp_fn_post(DECL_ARGS)
/* ARGSUSED */
static int
-termp_sx_pre(DECL_ARGS)
-{
-
- pair->flag |= ttypes[TTYPE_LINK];
- return(1);
-}
-
-
-/* ARGSUSED */
-static int
termp_fa_pre(DECL_ARGS)
{
struct mdoc_node *n;
if (node->parent->tok != MDOC_Fo) {
- pair->flag |= ttypes[TTYPE_FUNC_ARG];
+ p->under++;
return(1);
}
for (n = node->child; n; n = n->next) {
- p->flags |= ttypes[TTYPE_FUNC_ARG];
+ p->under++;
term_word(p, n->string);
- p->flags &= ~ttypes[TTYPE_FUNC_ARG];
+ p->under--;
if (n->next)
term_word(p, ",");
}
@@ -1666,16 +1562,6 @@ termp_fa_pre(DECL_ARGS)
/* ARGSUSED */
static int
-termp_va_pre(DECL_ARGS)
-{
-
- pair->flag |= ttypes[TTYPE_VAR_DECL];
- return(1);
-}
-
-
-/* ARGSUSED */
-static int
termp_bd_pre(DECL_ARGS)
{
int i, type;
@@ -1853,16 +1739,6 @@ termp_sq_post(DECL_ARGS)
/* ARGSUSED */
static int
-termp_pa_pre(DECL_ARGS)
-{
-
- pair->flag |= ttypes[TTYPE_FILE];
- return(1);
-}
-
-
-/* ARGSUSED */
-static int
termp_pf_pre(DECL_ARGS)
{
@@ -1893,7 +1769,7 @@ termp_ss_pre(DECL_ARGS)
term_vspace(p);
break;
case (MDOC_HEAD):
- pair->flag |= ttypes[TTYPE_SSECTION];
+ p->bold++;
p->offset = HALFINDENT;
break;
default:
@@ -1916,20 +1792,10 @@ termp_ss_post(DECL_ARGS)
/* ARGSUSED */
static int
-termp_em_pre(DECL_ARGS)
-{
-
- pair->flag |= ttypes[TTYPE_EMPH];
- return(1);
-}
-
-
-/* ARGSUSED */
-static int
termp_cd_pre(DECL_ARGS)
{
- pair->flag |= ttypes[TTYPE_CONFIG];
+ p->bold++;
term_newln(p);
return(1);
}
@@ -1937,32 +1803,10 @@ termp_cd_pre(DECL_ARGS)
/* ARGSUSED */
static int
-termp_cm_pre(DECL_ARGS)
-{
-
- pair->flag |= ttypes[TTYPE_CMD_FLAG];
- return(1);
-}
-
-
-/* ARGSUSED */
-static int
-termp_ic_pre(DECL_ARGS)
-{
-
- pair->flag |= ttypes[TTYPE_CMD];
- return(1);
-}
-
-
-/* ARGSUSED */
-static int
termp_in_pre(DECL_ARGS)
{
- pair->flag |= ttypes[TTYPE_INCLUDE];
- p->flags |= ttypes[TTYPE_INCLUDE];
-
+ p->bold++;
if (SEC_SYNOPSIS == node->sec)
term_word(p, "#include");
@@ -1977,9 +1821,9 @@ static void
termp_in_post(DECL_ARGS)
{
- p->flags |= TERMP_NOSPACE | ttypes[TTYPE_INCLUDE];
+ p->bold++;
term_word(p, ">");
- p->flags &= ~ttypes[TTYPE_INCLUDE];
+ p->bold--;
if (SEC_SYNOPSIS != node->sec)
return;
@@ -2115,12 +1959,12 @@ termp_fo_pre(DECL_ARGS)
} else if (MDOC_HEAD != node->type)
return(1);
- p->flags |= ttypes[TTYPE_FUNC_NAME];
+ p->bold++;
for (n = node->child; n; n = n->next) {
assert(MDOC_TEXT == n->type);
term_word(p, n->string);
}
- p->flags &= ~ttypes[TTYPE_FUNC_NAME];
+ p->bold--;
return(0);
}
@@ -2154,46 +1998,25 @@ termp_bf_pre(DECL_ARGS)
if (NULL == (n = node->head->child)) {
if (arg_hasattr(MDOC_Emphasis, node))
- pair->flag |= ttypes[TTYPE_EMPH];
+ p->under++;
else if (arg_hasattr(MDOC_Symbolic, node))
- pair->flag |= ttypes[TTYPE_SYMB];
+ p->bold++;
return(1);
}
assert(MDOC_TEXT == n->type);
if (0 == strcmp("Em", n->string))
- pair->flag |= ttypes[TTYPE_EMPH];
+ p->under++;
else if (0 == strcmp("Sy", n->string))
- pair->flag |= ttypes[TTYPE_SYMB];
-
- return(1);
-}
-
-
-/* ARGSUSED */
-static int
-termp_sy_pre(DECL_ARGS)
-{
+ p->bold++;
- pair->flag |= ttypes[TTYPE_SYMB];
return(1);
}
/* ARGSUSED */
static int
-termp_ms_pre(DECL_ARGS)
-{
-
- pair->flag |= ttypes[TTYPE_SYMBOL];
- return(1);
-}
-
-
-
-/* ARGSUSED */
-static int
termp_sm_pre(DECL_ARGS)
{
@@ -2221,26 +2044,6 @@ termp_ap_pre(DECL_ARGS)
/* ARGSUSED */
-static int
-termp__j_pre(DECL_ARGS)
-{
-
- pair->flag |= ttypes[TTYPE_REF_JOURNAL];
- return(1);
-}
-
-
-/* ARGSUSED */
-static int
-termp__t_pre(DECL_ARGS)
-{
-
- pair->flag |= ttypes[TTYPE_REF_TITLE];
- return(1);
-}
-
-
-/* ARGSUSED */
static void
termp____post(DECL_ARGS)
{
@@ -2260,32 +2063,30 @@ termp_lk_pre(DECL_ARGS)
n = node->child;
if (NULL == n->next) {
- pair->flag |= ttypes[TTYPE_LINK_ANCHOR];
+ p->under++;
return(1);
}
- p->flags |= ttypes[TTYPE_LINK_ANCHOR];
+ p->under++;
term_word(p, n->string);
p->flags |= TERMP_NOSPACE;
term_word(p, ":");
- p->flags &= ~ttypes[TTYPE_LINK_ANCHOR];
+ p->under--;
- p->flags |= ttypes[TTYPE_LINK_TEXT];
+ p->bold++;
for (n = n->next; n; n = n->next)
term_word(p, n->string);
+ p->bold--;
- p->flags &= ~ttypes[TTYPE_LINK_TEXT];
return(0);
}
/* ARGSUSED */
static int
-termp_mt_pre(DECL_ARGS)
+termp_under_pre(DECL_ARGS)
{
- pair->flag |= ttypes[TTYPE_LINK_ANCHOR];
+ p->under++;
return(1);
}
-
-