summaryrefslogtreecommitdiffstatshomepage
path: root/mdoc_term.c
diff options
context:
space:
mode:
authorKristaps Dzonsons <kristaps@bsd.lv>2009-09-16 09:41:24 +0000
committerKristaps Dzonsons <kristaps@bsd.lv>2009-09-16 09:41:24 +0000
commit6cbefd50d90dc947c06ea2212c4d3552c4a36c84 (patch)
treed619d6d32e6db6da1019b07c4b26c1cb7c294016 /mdoc_term.c
parent5e3756471dbadb7858086a17760f20e36e105612 (diff)
downloadmandoc-6cbefd50d90dc947c06ea2212c4d3552c4a36c84.tar.gz
mandoc-6cbefd50d90dc947c06ea2212c4d3552c4a36c84.tar.zst
mandoc-6cbefd50d90dc947c06ea2212c4d3552c4a36c84.zip
Made tree/term/out() functions return void.
Put err() functions back into front-ends (no use making it needlessly complex).
Diffstat (limited to 'mdoc_term.c')
-rw-r--r--mdoc_term.c97
1 files changed, 45 insertions, 52 deletions
diff --git a/mdoc_term.c b/mdoc_term.c
index d1ed5135..44dfcd4a 100644
--- a/mdoc_term.c
+++ b/mdoc_term.c
@@ -1,4 +1,4 @@
-/* $Id: mdoc_term.c,v 1.69 2009/09/15 08:16:20 kristaps Exp $ */
+/* $Id: mdoc_term.c,v 1.70 2009/09/16 09:41:24 kristaps Exp $ */
/*
* Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se>
*
@@ -113,7 +113,7 @@ static int termp_ud_pre(DECL_ARGS);
static int termp_xr_pre(DECL_ARGS);
static int termp_xx_pre(DECL_ARGS);
-static const struct termact termacts[MDOC_MAX] = {
+static const struct termact termacts[MDOC_MAX] = {
{ termp_ap_pre, NULL }, /* Ap */
{ NULL, NULL }, /* Dd */
{ NULL, NULL }, /* Dt */
@@ -153,7 +153,7 @@ static const struct termact termacts[MDOC_MAX] = {
{ termp_rv_pre, NULL }, /* Rv */
{ NULL, NULL }, /* St */
{ termp_under_pre, NULL }, /* Va */
- { termp_under_pre, termp_vt_post }, /* Vt */ /* FIXME: type name */
+ { termp_under_pre, termp_vt_post }, /* Vt */
{ termp_xr_pre, NULL }, /* Xr */
{ NULL, termp____post }, /* %A */
{ NULL, termp____post }, /* %B */
@@ -252,27 +252,24 @@ static void fmt_block_vspace(struct termp *,
const struct mdoc_node *,
const struct mdoc_node *);
static void print_node(DECL_ARGS);
-static void print_head(struct termp *,
- const struct mdoc_meta *);
+static void print_head(DECL_ARGS);
static void print_body(DECL_ARGS);
-static void print_foot(struct termp *,
- const struct mdoc_meta *);
+static void print_foot(DECL_ARGS);
-int
-mdoc_run(struct termp *p, const struct mdoc *m)
+void
+mdoc_run(struct termp *p, const struct mdoc *mdoc)
{
- /*
- * Main output function. When this is called, assume that the
- * tree is properly formed.
- */
- print_head(p, mdoc_meta(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));
- return(1);
+ const struct mdoc_node *n;
+ const struct mdoc_meta *m;
+
+ n = mdoc_node(mdoc);
+ m = mdoc_meta(mdoc);
+
+ print_head(p, NULL, m, n);
+ if (n->child)
+ print_body(p, NULL, m, n->child);
+ print_foot(p, NULL, m, n);
}
@@ -281,64 +278,60 @@ print_body(DECL_ARGS)
{
print_node(p, pair, meta, node);
- if ( ! node->next)
- return;
- print_body(p, pair, meta, node->next);
+ if (node->next)
+ print_body(p, pair, meta, node->next);
}
+/* ARGSUSED */
static void
print_node(DECL_ARGS)
{
- int dochild, bold, under;
+ int chld, bold, under;
struct termpair npair;
size_t offset, rmargin;
- dochild = 1;
+ chld = 1;
offset = p->offset;
rmargin = p->rmargin;
bold = p->bold;
under = p->under;
+ bzero(&npair, sizeof(struct termpair));
npair.ppair = pair;
- npair.flag = 0;
- npair.count = 0;
-
- /*
- * Note on termpair. This allows a pre function to set a termp
- * flag that is automatically unset after the body, but before
- * the post function. Thus, if a pre uses a termpair flag, it
- * must be reapplied in the post for use.
- */
if (MDOC_TEXT != node->type) {
if (termacts[node->tok].pre)
- if ( ! (*termacts[node->tok].pre)(p, &npair, meta, node))
- dochild = 0;
- } else /* MDOC_TEXT == node->type */
+ chld = (*termacts[node->tok].pre)
+ (p, &npair, meta, node);
+ } else
term_word(p, node->string);
- /* Children. */
-
- if (dochild && node->child)
+ if (chld && node->child)
print_body(p, &npair, meta, node->child);
+ /*
+ * XXX - if bold/under were to span scopes, this wouldn't be
+ * possible, but because decoration is always in-scope, we can
+ * get away with this.
+ */
+
p->bold = bold;
p->under = under;
- /* Post-processing. */
-
if (MDOC_TEXT != node->type)
if (termacts[node->tok].post)
- (*termacts[node->tok].post)(p, &npair, meta, node);
+ (*termacts[node->tok].post)
+ (p, &npair, meta, node);
p->offset = offset;
p->rmargin = rmargin;
}
+/* ARGSUSED */
static void
-print_foot(struct termp *p, const struct mdoc_meta *meta)
+print_foot(DECL_ARGS)
{
struct tm *tm;
char *buf, *os;
@@ -352,14 +345,14 @@ print_foot(struct termp *p, const struct mdoc_meta *meta)
*/
if (NULL == (buf = malloc(p->rmargin)))
- err(1, "malloc");
+ err(EXIT_FAILURE, "malloc");
if (NULL == (os = malloc(p->rmargin)))
- err(1, "malloc");
+ err(EXIT_FAILURE, "malloc");
tm = localtime(&meta->date);
if (0 == strftime(buf, p->rmargin, "%B %e, %Y", tm))
- err(1, "strftime");
+ err(EXIT_FAILURE, "strftime");
(void)strlcpy(os, meta->os, p->rmargin);
@@ -396,8 +389,9 @@ print_foot(struct termp *p, const struct mdoc_meta *meta)
}
+/* ARGSUSED */
static void
-print_head(struct termp *p, const struct mdoc_meta *meta)
+print_head(DECL_ARGS)
{
char *buf, *title;
@@ -405,9 +399,9 @@ print_head(struct termp *p, const struct mdoc_meta *meta)
p->offset = 0;
if (NULL == (buf = malloc(p->rmargin)))
- err(1, "malloc");
+ err(EXIT_FAILURE, "malloc");
if (NULL == (title = malloc(p->rmargin)))
- err(1, "malloc");
+ err(EXIT_FAILURE, "malloc");
/*
* The header is strange. It has three components, which are
@@ -431,8 +425,7 @@ print_head(struct termp *p, const struct mdoc_meta *meta)
(void)strlcat(buf, ")", p->rmargin);
}
- (void)snprintf(title, p->rmargin, "%s(%d)",
- meta->title, meta->msec);
+ snprintf(title, p->rmargin, "%s(%d)", meta->title, meta->msec);
p->offset = 0;
p->rmargin = (p->maxrmargin - strlen(buf) + 1) / 2;