]> git.cameronkatri.com Git - mandoc.git/blobdiff - man_term.c
Backed-out warning messages (lots).
[mandoc.git] / man_term.c
index 2e7397e074ff0f84ad2bb13807b3121188adf1e9..0f6b4c03113379836951ee63b698c878d1fc7b1b 100644 (file)
@@ -1,4 +1,4 @@
-/*     $Id: man_term.c,v 1.58 2010/03/23 12:42:22 kristaps Exp $ */
+/*     $Id: man_term.c,v 1.67 2010/05/15 20:51:40 kristaps Exp $ */
 /*
  * Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se>
  *
@@ -142,6 +142,11 @@ static     const struct termact termacts[MAN_MAX] = {
        { pre_sp, NULL, MAN_NOTEXT }, /* Sp */
        { pre_nf, NULL, 0 }, /* Vb */
        { pre_fi, NULL, 0 }, /* Ve */
+       { pre_ign, NULL, MAN_NOTEXT }, /* de */
+       { pre_ign, NULL, MAN_NOTEXT }, /* dei */
+       { pre_ign, NULL, MAN_NOTEXT }, /* am */
+       { pre_ign, NULL, MAN_NOTEXT }, /* ami */
+       { NULL, NULL, 0 }, /* . */
 };
 
 
@@ -157,7 +162,7 @@ terminal_man(void *arg, const struct man *man)
        p = (struct termp *)arg;
 
        p->overstep = 0;
-       p->maxrmargin = 65;
+       p->maxrmargin = p->defrmargin;
 
        if (NULL == p->symtab)
                switch (p->enc) {
@@ -254,7 +259,6 @@ static int
 pre_fi(DECL_ARGS)
 {
 
-       p->rmargin = p->maxrmargin = 65;
        mt->fl &= ~MANT_LITERAL;
        return(1);
 }
@@ -265,10 +269,7 @@ static int
 pre_nf(DECL_ARGS)
 {
 
-       p->rmargin = p->maxrmargin = 78;
-       term_newln(p);
        mt->fl |= MANT_LITERAL;
-
        return(MAN_Vb != n->tok);
 }
 
@@ -367,7 +368,7 @@ pre_sp(DECL_ARGS)
 
        if (0 == len)
                term_newln(p);
-       for (i = 0; i < len; i++)
+       for (i = 0; i <= len; i++)
                term_vspace(p);
 
        return(0);
@@ -482,7 +483,6 @@ pre_IP(DECL_ARGS)
                break;
        case (MAN_HEAD):
                p->flags |= TERMP_NOBREAK;
-               p->flags |= TERMP_TWOSPACE;
                break;
        case (MAN_BLOCK):
                print_bvspace(p, n);
@@ -543,7 +543,6 @@ post_IP(DECL_ARGS)
        case (MAN_HEAD):
                term_flushln(p);
                p->flags &= ~TERMP_NOBREAK;
-               p->flags &= ~TERMP_TWOSPACE;
                p->rmargin = p->maxrmargin;
                break;
        case (MAN_BODY):
@@ -708,6 +707,9 @@ pre_SH(DECL_ARGS)
                if (n->prev && MAN_SH == n->prev->tok)
                        if (NULL == n->prev->body->child)
                                break;
+               /* If the first macro, no vspae. */
+               if (NULL == n->prev)
+                       break;
                term_vspace(p);
                break;
        case (MAN_HEAD):
@@ -785,6 +787,8 @@ post_RS(DECL_ARGS)
        case (MAN_BLOCK):
                mt->offset = mt->lmargin = INDENT;
                break;
+       case (MAN_HEAD):
+               break;
        default:
                term_newln(p);
                p->offset = INDENT;
@@ -796,6 +800,7 @@ post_RS(DECL_ARGS)
 static void
 print_man_node(DECL_ARGS)
 {
+       size_t           rm, rmax;
        int              c;
 
        c = 1;
@@ -812,8 +817,13 @@ print_man_node(DECL_ARGS)
                /* FIXME: this means that macro lines are munged!  */
 
                if (MANT_LITERAL & mt->fl) {
+                       rm = p->rmargin;
+                       rmax = p->maxrmargin;
+                       p->rmargin = p->maxrmargin = TERM_MAXMARGIN;
                        p->flags |= TERMP_NOSPACE;
                        term_flushln(p);
+                       p->rmargin = rm;
+                       p->maxrmargin = rmax;
                }
                break;
        default:
@@ -833,6 +843,9 @@ print_man_node(DECL_ARGS)
                if ( ! (MAN_NOTEXT & termacts[n->tok].flags))
                        term_fontrepl(p, TERMFONT_NONE);
        }
+
+       if (MAN_EOS & n->flags)
+               p->flags |= TERMP_SENTENCE;
 }
 
 
@@ -884,6 +897,12 @@ print_man_head(struct termp *p, const struct man_meta *m)
        char            buf[BUFSIZ], title[BUFSIZ];
        size_t          buflen, titlen;
 
+       /*
+        * Note that old groff would spit out some spaces before the
+        * header.  We discontinue this strange behaviour, but at one
+        * point we did so here.
+        */
+
        p->rmargin = p->maxrmargin;
 
        p->offset = 0;
@@ -893,7 +912,7 @@ print_man_head(struct termp *p, const struct man_meta *m)
                strlcpy(buf, m->vol, BUFSIZ);
        buflen = strlen(buf);
 
-       snprintf(title, BUFSIZ, "%s(%d)", m->title, m->msec);
+       snprintf(title, BUFSIZ, "%s(%s)", m->title, m->msec);
        titlen = strlen(title);
 
        p->offset = 0;
@@ -925,4 +944,13 @@ print_man_head(struct termp *p, const struct man_meta *m)
        p->rmargin = p->maxrmargin;
        p->offset = 0;
        p->flags &= ~TERMP_NOSPACE;
+
+       /* 
+        * Groff likes to have some leading spaces before content.  Well
+        * that's fine by me.
+        */
+
+       term_vspace(p);
+       term_vspace(p);
+       term_vspace(p);
 }