]> git.cameronkatri.com Git - mandoc.git/blobdiff - mdoc_term.c
Add all rendered symbols used by eqn. I use the Second-Edition User's
[mandoc.git] / mdoc_term.c
index d48e2396d8979bb3d323edf5aba9edc0e368248d..0603b72160a1cc6690710ec4c31693ccafd6ea60 100644 (file)
@@ -1,4 +1,4 @@
-/*     $Id: mdoc_term.c,v 1.223 2011/04/04 16:05:36 kristaps Exp $ */
+/*     $Id: mdoc_term.c,v 1.233 2011/07/22 10:50:46 kristaps Exp $ */
 /*
  * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010 Ingo Schwarze <schwarze@openbsd.org>
 /*
  * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010 Ingo Schwarze <schwarze@openbsd.org>
@@ -264,14 +264,7 @@ terminal_mdoc(void *arg, const struct mdoc *mdoc)
        p->tabwidth = term_len(p, 5);
 
        if (NULL == p->symtab)
        p->tabwidth = term_len(p, 5);
 
        if (NULL == p->symtab)
-               switch (p->enc) {
-               case (TERMENC_ASCII):
-                       p->symtab = chars_init(CHARS_ASCII);
-                       break;
-               default:
-                       abort();
-                       /* NOTREACHED */
-               }
+               p->symtab = mchars_alloc();
 
        n = mdoc_node(mdoc);
        m = mdoc_meta(mdoc);
 
        n = mdoc_node(mdoc);
        m = mdoc_meta(mdoc);
@@ -358,7 +351,7 @@ print_mdoc_node(DECL_ARGS)
                        p->flags |= TERMP_NOSPACE;
                break;
        case (MDOC_EQN):
                        p->flags |= TERMP_NOSPACE;
                break;
        case (MDOC_EQN):
-               term_word(p, n->eqn->data);
+               term_eqn(p, n->eqn);
                break;
        case (MDOC_TBL):
                term_tbl(p, n->span);
                break;
        case (MDOC_TBL):
                term_tbl(p, n->span);
@@ -530,9 +523,10 @@ a2height(const struct termp *p, const char *v)
 {
        struct roffsu    su;
 
 {
        struct roffsu    su;
 
+
        assert(v);
        if ( ! a2roffsu(v, &su, SCALE_VS))
        assert(v);
        if ( ! a2roffsu(v, &su, SCALE_VS))
-               SCALE_VS_INIT(&su, term_len(p, 1));
+               SCALE_VS_INIT(&su, atoi(v));
 
        return(term_vspan(p, &su));
 }
 
        return(term_vspan(p, &su));
 }
@@ -1189,11 +1183,11 @@ termp_rv_pre(DECL_ARGS)
        term_word(p, "The");
 
        nchild = n->nchild;
        term_word(p, "The");
 
        nchild = n->nchild;
-
        for (n = n->child; n; n = n->next) {
                term_fontpush(p, TERMFONT_BOLD);
                term_word(p, n->string);
                term_fontpop(p);
        for (n = n->child; n; n = n->next) {
                term_fontpush(p, TERMFONT_BOLD);
                term_word(p, n->string);
                term_fontpop(p);
+
                p->flags |= TERMP_NOSPACE;
                term_word(p, "()");
 
                p->flags |= TERMP_NOSPACE;
                term_word(p, "()");
 
@@ -1229,31 +1223,34 @@ termp_rv_pre(DECL_ARGS)
 static int
 termp_ex_pre(DECL_ARGS)
 {
 static int
 termp_ex_pre(DECL_ARGS)
 {
-       const struct mdoc_node  *nn;
+       int              nchild;
 
 
+       term_newln(p);
        term_word(p, "The");
 
        term_word(p, "The");
 
-       for (nn = n->child; nn; nn = nn->next) {
+       nchild = n->nchild;
+       for (n = n->child; n; n = n->next) {
                term_fontpush(p, TERMFONT_BOLD);
                term_fontpush(p, TERMFONT_BOLD);
-               term_word(p, nn->string);
+               term_word(p, n->string);
                term_fontpop(p);
                term_fontpop(p);
-               p->flags |= TERMP_NOSPACE;
-               if (nn->next && NULL == nn->next->next)
-                       term_word(p, ", and");
-               else if (nn->next)
+
+               if (nchild > 2 && n->next) {
+                       p->flags |= TERMP_NOSPACE;
                        term_word(p, ",");
                        term_word(p, ",");
-               else
-                       p->flags &= ~TERMP_NOSPACE;
+               }
+
+               if (n->next && NULL == n->next->next)
+                       term_word(p, "and");
        }
 
        }
 
-       if (n->child && n->child->next)
+       if (nchild > 1)
                term_word(p, "utilities exit");
        else
                term_word(p, "utility exits");
 
                term_word(p, "0 on success, and >0 if an error occurs.");
                term_word(p, "utilities exit");
        else
                term_word(p, "utility exits");
 
                term_word(p, "0 on success, and >0 if an error occurs.");
-       p->flags |= TERMP_SENTENCE;
 
 
+       p->flags |= TERMP_SENTENCE;
        return(0);
 }
 
        return(0);
 }
 
@@ -1293,33 +1290,33 @@ termp_bl_post(DECL_ARGS)
                term_newln(p);
 }
 
                term_newln(p);
 }
 
-
 /* ARGSUSED */
 static int
 termp_xr_pre(DECL_ARGS)
 {
 /* ARGSUSED */
 static int
 termp_xr_pre(DECL_ARGS)
 {
-       const struct mdoc_node *nn;
 
 
-       if (NULL == n->child)
+       if (NULL == (n = n->child))
                return(0);
 
                return(0);
 
-       assert(MDOC_TEXT == n->child->type);
-       nn = n->child;
+       assert(MDOC_TEXT == n->type);
+       term_word(p, n->string);
 
 
-       term_word(p, nn->string);
-       if (NULL == (nn = nn->next)) 
+       if (NULL == (n = n->next)) 
                return(0);
                return(0);
+
        p->flags |= TERMP_NOSPACE;
        term_word(p, "(");
        p->flags |= TERMP_NOSPACE;
        p->flags |= TERMP_NOSPACE;
        term_word(p, "(");
        p->flags |= TERMP_NOSPACE;
-       term_word(p, nn->string);
+
+       assert(MDOC_TEXT == n->type);
+       term_word(p, n->string);
+
        p->flags |= TERMP_NOSPACE;
        term_word(p, ")");
 
        return(0);
 }
 
        p->flags |= TERMP_NOSPACE;
        term_word(p, ")");
 
        return(0);
 }
 
-
 /*
  * This decides how to assert whitespace before any of the SYNOPSIS set
  * of macros (which, as in the case of Ft/Fo and Ft/Fn, may contain
 /*
  * This decides how to assert whitespace before any of the SYNOPSIS set
  * of macros (which, as in the case of Ft/Fo and Ft/Fn, may contain
@@ -1533,24 +1530,31 @@ termp_ft_pre(DECL_ARGS)
 static int
 termp_fn_pre(DECL_ARGS)
 {
 static int
 termp_fn_pre(DECL_ARGS)
 {
-       const struct mdoc_node  *nn;
+       int              pretty;
+
+       pretty = MDOC_SYNPRETTY & n->flags;
 
        synopsis_pre(p, n);
 
 
        synopsis_pre(p, n);
 
+       if (NULL == (n = n->child))
+               return(0);
+
+       assert(MDOC_TEXT == n->type);
        term_fontpush(p, TERMFONT_BOLD);
        term_fontpush(p, TERMFONT_BOLD);
-       term_word(p, n->child->string);
+       term_word(p, n->string);
        term_fontpop(p);
 
        p->flags |= TERMP_NOSPACE;
        term_word(p, "(");
        p->flags |= TERMP_NOSPACE;
 
        term_fontpop(p);
 
        p->flags |= TERMP_NOSPACE;
        term_word(p, "(");
        p->flags |= TERMP_NOSPACE;
 
-       for (nn = n->child->next; nn; nn = nn->next) {
+       for (n = n->next; n; n = n->next) {
+               assert(MDOC_TEXT == n->type);
                term_fontpush(p, TERMFONT_UNDER);
                term_fontpush(p, TERMFONT_UNDER);
-               term_word(p, nn->string);
+               term_word(p, n->string);
                term_fontpop(p);
 
                term_fontpop(p);
 
-               if (nn->next) {
+               if (n->next) {
                        p->flags |= TERMP_NOSPACE;
                        term_word(p, ",");
                }
                        p->flags |= TERMP_NOSPACE;
                        term_word(p, ",");
                }
@@ -1559,7 +1563,7 @@ termp_fn_pre(DECL_ARGS)
        p->flags |= TERMP_NOSPACE;
        term_word(p, ")");
 
        p->flags |= TERMP_NOSPACE;
        term_word(p, ")");
 
-       if (MDOC_SYNPRETTY & n->flags) {
+       if (pretty) {
                p->flags |= TERMP_NOSPACE;
                term_word(p, ";");
        }
                p->flags |= TERMP_NOSPACE;
                term_word(p, ";");
        }