]> git.cameronkatri.com Git - mandoc.git/blobdiff - eqn_term.c
merge from VERSION_1_12:
[mandoc.git] / eqn_term.c
index 59671e8478882da587a40058c7c2f93ddbeecd17..cfbd8d48f8079ca57704e977dbc8675a1808ea25 100644 (file)
@@ -1,4 +1,4 @@
-/*     $Id: eqn_term.c,v 1.3 2011/07/23 22:57:13 kristaps Exp $ */
+/*     $Id: eqn_term.c,v 1.4 2011/07/24 10:09:03 kristaps Exp $ */
 /*
  * Copyright (c) 2011 Kristaps Dzonsons <kristaps@bsd.lv>
  *
 #include "out.h"
 #include "term.h"
 
+static const enum termfont fontmap[EQNFONT__MAX] = {
+       TERMFONT_NONE, /* EQNFONT_NONE */
+       TERMFONT_NONE, /* EQNFONT_ROMAN */
+       TERMFONT_BOLD, /* EQNFONT_BOLD */
+       TERMFONT_BOLD, /* EQNFONT_FAT */
+       TERMFONT_UNDER /* EQNFONT_ITALIC */
+};
+
 static void    eqn_box(struct termp *, const struct eqn_box *);
-static void    eqn_box_post(struct termp *, const struct eqn_box *);
-static void    eqn_box_pre(struct termp *, const struct eqn_box *);
-static void    eqn_text(struct termp *, const struct eqn_box *);
 
 void
 term_eqn(struct termp *p, const struct eqn *ep)
@@ -38,6 +43,7 @@ term_eqn(struct termp *p, const struct eqn *ep)
 
        p->flags |= TERMP_NONOSPACE;
        eqn_box(p, ep->root);
+       term_word(p, " ");
        p->flags &= ~TERMP_NONOSPACE;
 }
 
@@ -45,38 +51,26 @@ static void
 eqn_box(struct termp *p, const struct eqn_box *bp)
 {
 
-       eqn_box_pre(p, bp);
-       eqn_text(p, bp);
-
-       if (bp->first)
-               eqn_box(p, bp->first);
-
-       eqn_box_post(p, bp);
-
-       if (bp->next)
-               eqn_box(p, bp->next);
-}
-
-static void
-eqn_box_pre(struct termp *p, const struct eqn_box *bp)
-{
-
+       if (EQNFONT_NONE != bp->font)
+               term_fontpush(p, fontmap[(int)bp->font]);
        if (bp->left)
                term_word(p, bp->left);
-}
+       if (EQN_SUBEXPR == bp->type)
+               term_word(p, "(");
 
-static void
-eqn_box_post(struct termp *p, const struct eqn_box *bp)
-{
+       if (bp->text)
+               term_word(p, bp->text);
 
+       if (bp->first)
+               eqn_box(p, bp->first);
+
+       if (EQN_SUBEXPR == bp->type)
+               term_word(p, ")");
        if (bp->right)
                term_word(p, bp->right);
-}
+       if (EQNFONT_NONE != bp->font) 
+               term_fontpop(p);
 
-static void
-eqn_text(struct termp *p, const struct eqn_box *bp)
-{
-
-       if (bp->text)
-               term_word(p, bp->text);
+       if (bp->next)
+               eqn_box(p, bp->next);
 }