summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKristaps Dzonsons <kristaps@bsd.lv>2009-09-15 08:16:20 +0000
committerKristaps Dzonsons <kristaps@bsd.lv>2009-09-15 08:16:20 +0000
commitea228aff6a872a947bb23cd1b1405ab1d72c37e6 (patch)
treefe44491217e8d64d10121d185763d198703ceae0
parent74d68c4f407023d0d2a78e88ae492f13442ba597 (diff)
downloadmandoc-ea228aff6a872a947bb23cd1b1405ab1d72c37e6.tar.gz
Removed TERMP_BOLD, TERMP_UNDER, TERMP_STYLE in favour of recursive-friendly increments.
Cleaned up confusing behaviour of p->flags.
-rw-r--r--Makefile3
-rw-r--r--man_term.c82
-rw-r--r--mandoc.12
-rw-r--r--mdoc_term.c325
-rw-r--r--term.c16
-rw-r--r--term.h5
6 files changed, 125 insertions, 308 deletions
diff --git a/Makefile b/Makefile
index 844cd786..db17bd22 100644
--- a/Makefile
+++ b/Makefile
@@ -156,6 +156,9 @@ compat.o: compat.c
term.ln: term.c term.h man.h mdoc.h
term.o: term.c term.h man.h mdoc.h
+tree.ln: tree.c man.h mdoc.h
+tree.o: tree.c man.h mdoc.h
+
mdoc_argv.ln: mdoc_argv.c libmdoc.h
mdoc_argv.o: mdoc_argv.c libmdoc.h
diff --git a/man_term.c b/man_term.c
index 5bcf6e6f..ed6de75d 100644
--- a/man_term.c
+++ b/man_term.c
@@ -18,7 +18,6 @@
#include <assert.h>
#include <ctype.h>
-#include <err.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -130,11 +129,11 @@ extern size_t strlcpy(char *, const char *, size_t);
extern size_t strlcat(char *, const char *, size_t);
#endif
-static void print_head(struct termp *,
+static int print_head(struct termp *,
const struct man_meta *);
static void print_body(DECL_ARGS);
static void print_node(DECL_ARGS);
-static void print_foot(struct termp *,
+static int print_foot(struct termp *,
const struct man_meta *);
static void fmt_block_vspace(struct termp *,
const struct man_node *);
@@ -146,7 +145,8 @@ man_run(struct termp *p, const struct man *m)
{
struct mtermp mt;
- print_head(p, man_meta(m));
+ if ( ! print_head(p, man_meta(m)))
+ return(0);
p->flags |= TERMP_NOSPACE;
assert(man_node(m));
assert(MAN_ROOT == man_node(m)->type);
@@ -157,7 +157,8 @@ man_run(struct termp *p, const struct man *m)
if (man_node(m)->child)
print_body(p, &mt, man_node(m)->child, man_meta(m));
- print_foot(p, man_meta(m));
+ if ( ! print_foot(p, man_meta(m)))
+ return(0);
return(1);
}
@@ -222,7 +223,7 @@ static int
pre_I(DECL_ARGS)
{
- p->flags |= TERMP_UNDER;
+ p->under++;
return(1);
}
@@ -232,8 +233,7 @@ static int
pre_r(DECL_ARGS)
{
- p->flags &= ~TERMP_UNDER;
- p->flags &= ~TERMP_BOLD;
+ p->bold = p->under = 0;
return(1);
}
@@ -244,7 +244,7 @@ post_i(DECL_ARGS)
{
if (n->nchild)
- p->flags &= ~TERMP_UNDER;
+ p->under--;
}
@@ -253,7 +253,7 @@ static void
post_I(DECL_ARGS)
{
- p->flags &= ~TERMP_UNDER;
+ p->under--;
}
@@ -287,12 +287,12 @@ pre_IR(DECL_ARGS)
for (i = 0, nn = n->child; nn; nn = nn->next, i++) {
if ( ! (i % 2))
- p->flags |= TERMP_UNDER;
+ p->under++;
if (i > 0)
p->flags |= TERMP_NOSPACE;
print_node(p, mt, nn, m);
if ( ! (i % 2))
- p->flags &= ~TERMP_UNDER;
+ p->under--;
}
return(0);
}
@@ -306,11 +306,17 @@ pre_IB(DECL_ARGS)
int i;
for (i = 0, nn = n->child; nn; nn = nn->next, i++) {
- p->flags |= i % 2 ? TERMP_BOLD : TERMP_UNDER;
+ if (i % 2)
+ p->bold++;
+ else
+ p->under++;
if (i > 0)
p->flags |= TERMP_NOSPACE;
print_node(p, mt, nn, m);
- p->flags &= i % 2 ? ~TERMP_BOLD : ~TERMP_UNDER;
+ if (i % 2)
+ p->bold--;
+ else
+ p->under--;
}
return(0);
}
@@ -325,12 +331,12 @@ pre_RB(DECL_ARGS)
for (i = 0, nn = n->child; nn; nn = nn->next, i++) {
if (i % 2)
- p->flags |= TERMP_BOLD;
+ p->bold++;
if (i > 0)
p->flags |= TERMP_NOSPACE;
print_node(p, mt, nn, m);
if (i % 2)
- p->flags &= ~TERMP_BOLD;
+ p->bold--;
}
return(0);
}
@@ -345,12 +351,12 @@ pre_RI(DECL_ARGS)
for (i = 0, nn = n->child; nn; nn = nn->next, i++) {
if ( ! (i % 2))
- p->flags |= TERMP_UNDER;
+ p->under++;
if (i > 0)
p->flags |= TERMP_NOSPACE;
print_node(p, mt, nn, m);
if ( ! (i % 2))
- p->flags &= ~TERMP_UNDER;
+ p->under--;
}
return(0);
}
@@ -365,12 +371,12 @@ pre_BR(DECL_ARGS)
for (i = 0, nn = n->child; nn; nn = nn->next, i++) {
if ( ! (i % 2))
- p->flags |= TERMP_BOLD;
+ p->bold++;
if (i > 0)
p->flags |= TERMP_NOSPACE;
print_node(p, mt, nn, m);
if ( ! (i % 2))
- p->flags &= ~TERMP_BOLD;
+ p->bold--;
}
return(0);
}
@@ -384,11 +390,17 @@ pre_BI(DECL_ARGS)
int i;
for (i = 0, nn = n->child; nn; nn = nn->next, i++) {
- p->flags |= i % 2 ? TERMP_UNDER : TERMP_BOLD;
+ if (i % 2)
+ p->under++;
+ else
+ p->bold++;
if (i > 0)
p->flags |= TERMP_NOSPACE;
print_node(p, mt, nn, m);
- p->flags &= i % 2 ? ~TERMP_UNDER : ~TERMP_BOLD;
+ if (i % 2)
+ p->under--;
+ else
+ p->bold--;
}
return(0);
}
@@ -399,7 +411,7 @@ static int
pre_B(DECL_ARGS)
{
- p->flags |= TERMP_BOLD;
+ p->bold++;
return(1);
}
@@ -409,7 +421,7 @@ static void
post_B(DECL_ARGS)
{
- p->flags &= ~TERMP_BOLD;
+ p->bold--;
}
@@ -720,7 +732,7 @@ pre_SS(DECL_ARGS)
term_vspace(p);
break;
case (MAN_HEAD):
- p->flags |= TERMP_BOLD;
+ p->bold++;
p->offset = HALFINDENT;
break;
case (MAN_BODY):
@@ -742,7 +754,7 @@ post_SS(DECL_ARGS)
switch (n->type) {
case (MAN_HEAD):
term_newln(p);
- p->flags &= ~TERMP_BOLD;
+ p->bold--;
break;
case (MAN_BODY):
term_newln(p);
@@ -769,7 +781,7 @@ pre_SH(DECL_ARGS)
term_vspace(p);
break;
case (MAN_HEAD):
- p->flags |= TERMP_BOLD;
+ p->bold++;
p->offset = 0;
break;
case (MAN_BODY):
@@ -791,7 +803,7 @@ post_SH(DECL_ARGS)
switch (n->type) {
case (MAN_HEAD):
term_newln(p);
- p->flags &= ~TERMP_BOLD;
+ p->bold--;
break;
case (MAN_BODY):
term_newln(p);
@@ -908,19 +920,19 @@ print_body(DECL_ARGS)
}
-static void
+static int
print_foot(struct termp *p, const struct man_meta *meta)
{
struct tm *tm;
char *buf;
if (NULL == (buf = malloc(p->rmargin)))
- err(1, "malloc");
+ return(0);
tm = localtime(&meta->date);
if (0 == strftime(buf, p->rmargin, "%B %d, %Y", tm))
- err(1, "strftime");
+ buf[0] = 0;
term_vspace(p);
@@ -943,10 +955,11 @@ print_foot(struct termp *p, const struct man_meta *meta)
term_flushln(p);
free(buf);
+ return(1);
}
-static void
+static int
print_head(struct termp *p, const struct man_meta *meta)
{
char *buf, *title;
@@ -955,9 +968,9 @@ print_head(struct termp *p, const struct man_meta *meta)
p->offset = 0;
if (NULL == (buf = malloc(p->rmargin)))
- err(1, "malloc");
+ return(0);
if (NULL == (title = malloc(p->rmargin)))
- err(1, "malloc");
+ return(0);
if (meta->vol)
(void)strlcpy(buf, meta->vol, p->rmargin);
@@ -995,5 +1008,6 @@ print_head(struct termp *p, const struct man_meta *meta)
free(title);
free(buf);
+ return(1);
}
diff --git a/mandoc.1 b/mandoc.1
index 53bda82e..936578f5 100644
--- a/mandoc.1
+++ b/mandoc.1
@@ -275,7 +275,7 @@ Each input and output format is separately noted.
.
.
.Ss ASCII output
-.Bl -bullet -compact
+.Bl -bullet -compact -width Ds
.It
The
.Sq \e~
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);
}
-
-
diff --git a/term.c b/term.c
index 04776e4f..6ea5aff0 100644
--- a/term.c
+++ b/term.c
@@ -104,7 +104,7 @@ term_alloc(enum termenc enc)
struct termp *p;
if (NULL == (p = malloc(sizeof(struct termp))))
- err(1, "malloc");
+ return(NULL);
bzero(p, sizeof(struct termp));
p->maxrmargin = 78;
p->enc = enc;
@@ -492,15 +492,15 @@ do_escaped(struct termp *p, const char **word)
switch (*wp) {
case ('B'):
- p->flags |= TERMP_BOLD;
+ p->bold++;
break;
case ('I'):
- p->flags |= TERMP_UNDER;
+ p->under++;
break;
case ('P'):
/* FALLTHROUGH */
case ('R'):
- p->flags &= ~TERMP_STYLE;
+ p->bold = p->under = 0;
break;
default:
break;
@@ -579,7 +579,7 @@ buffer(struct termp *p, char c)
s = p->maxcols * 2;
p->buf = realloc(p->buf, s);
if (NULL == p->buf)
- err(1, "realloc");
+ err(1, "realloc"); /* FIXME: shouldn't be here! */
p->maxcols = s;
}
p->buf[(int)(p->col)++] = c;
@@ -590,12 +590,12 @@ static void
encode(struct termp *p, char c)
{
- if (' ' != c && TERMP_STYLE & p->flags) {
- if (TERMP_BOLD & p->flags) {
+ if (' ' != c) {
+ if (p->bold) {
buffer(p, c);
buffer(p, 8);
}
- if (TERMP_UNDER & p->flags) {
+ if (p->under) {
buffer(p, '_');
buffer(p, 8);
}
diff --git a/term.h b/term.h
index 125a0585..66108260 100644
--- a/term.h
+++ b/term.h
@@ -32,9 +32,6 @@ struct termp {
size_t offset; /* Margin offest. */
size_t col; /* Bytes in buf. */
int flags;
-#define TERMP_STYLE 0x3 /* Style mask. */
-#define TERMP_BOLD (1 << 0) /* Styles... */
-#define TERMP_UNDER (1 << 1)
#define TERMP_NOSPACE (1 << 2) /* No space before words. */
#define TERMP_NOLPAD (1 << 3) /* See term_flushln(). */
#define TERMP_NOBREAK (1 << 4) /* See term_flushln(). */
@@ -46,6 +43,8 @@ struct termp {
#define TERMP_NOSPLIT (1 << 11) /* See termp_an_pre/post(). */
#define TERMP_SPLIT (1 << 12) /* See termp_an_pre/post(). */
#define TERMP_ANPREC (1 << 13) /* See termp_an_pre(). */
+ int bold;
+ int under;
char *buf; /* Output buffer. */
enum termenc enc; /* Type of encoding. */
void *symtab; /* Encoded-symbol table. */