summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mdoc.h1
-rw-r--r--mdoc_term.c12
-rw-r--r--term.c2
3 files changed, 8 insertions, 7 deletions
diff --git a/mdoc.h b/mdoc.h
index a1b51b70..f2c80231 100644
--- a/mdoc.h
+++ b/mdoc.h
@@ -363,6 +363,7 @@ struct mdoc_node {
enum mdoc_type type; /* AST node type */
enum mdoc_sec sec; /* current named section */
union mdoc_data *norm; /* normalised args */
+ const void *prev_font; /* before entering this node */
/* FIXME: these can be union'd to shave a few bytes. */
struct mdoc_arg *args; /* BLOCK/ELEM */
struct mdoc_node *pending; /* BLOCK */
diff --git a/mdoc_term.c b/mdoc_term.c
index 4f5b0ae1..85e659db 100644
--- a/mdoc_term.c
+++ b/mdoc_term.c
@@ -42,7 +42,7 @@ struct termpair {
#define DECL_ARGS struct termp *p, \
struct termpair *pair, \
const struct mdoc_meta *m, \
- const struct mdoc_node *n
+ struct mdoc_node *n
struct termact {
int (*pre)(DECL_ARGS);
@@ -293,14 +293,13 @@ static void
print_mdoc_node(DECL_ARGS)
{
int chld;
- const void *font;
struct termpair npair;
size_t offset, rmargin;
chld = 1;
offset = p->offset;
rmargin = p->rmargin;
- font = term_fontq(p);
+ n->prev_font = term_fontq(p);
memset(&npair, 0, sizeof(struct termpair));
npair.ppair = pair;
@@ -366,7 +365,8 @@ print_mdoc_node(DECL_ARGS)
if (chld && n->child)
print_mdoc_nodelist(p, &npair, m, n->child);
- term_fontpopq(p, font);
+ term_fontpopq(p,
+ (ENDBODY_NOT == n->end ? n : n->pending)->prev_font);
switch (n->type) {
case (MDOC_TEXT):
@@ -1606,7 +1606,7 @@ static int
termp_bd_pre(DECL_ARGS)
{
size_t tabwidth, rm, rmax;
- const struct mdoc_node *nn;
+ struct mdoc_node *nn;
if (MDOC_BLOCK == n->type) {
print_bvspace(p, n, n);
@@ -2075,7 +2075,7 @@ termp_bf_pre(DECL_ARGS)
if (MDOC_HEAD == n->type)
return(0);
- else if (MDOC_BLOCK != n->type)
+ else if (MDOC_BODY != n->type)
return(1);
if (FONT_Em == n->norm->Bf.font)
diff --git a/term.c b/term.c
index 9e28f29c..c59d13df 100644
--- a/term.c
+++ b/term.c
@@ -376,7 +376,7 @@ void
term_fontpopq(struct termp *p, const void *key)
{
- while (p->fonti >= 0 && key != &p->fontq[p->fonti])
+ while (p->fonti >= 0 && key < (void *)(p->fontq + p->fonti))
p->fonti--;
assert(p->fonti >= 0);
}