]> git.cameronkatri.com Git - mandoc.git/blobdiff - man_term.c
First check-in of PostScript output. This does not change any logic
[mandoc.git] / man_term.c
index 49ded28276141dea4939e79adb325d8b123f504b..a7a1a652243e3182ca21941cad596a53e3884930 100644 (file)
@@ -1,4 +1,4 @@
-/*     $Id: man_term.c,v 1.68 2010/05/15 22:44:04 kristaps Exp $ */
+/*     $Id: man_term.c,v 1.73 2010/06/07 20:57:09 kristaps Exp $ */
 /*
  * Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se>
  *
@@ -26,6 +26,7 @@
 #include <stdlib.h>
 #include <string.h>
 
+#include "mandoc.h"
 #include "out.h"
 #include "man.h"
 #include "term.h"
@@ -72,12 +73,10 @@ struct      termact {
 static int               a2width(const struct man_node *);
 static int               a2height(const struct man_node *);
 
-static void              print_man_head(struct termp *, 
-                               const struct man_meta *);
+static void              print_man_head(struct termp *, const void *);
 static void              print_man_nodelist(DECL_ARGS);
 static void              print_man_node(DECL_ARGS);
-static void              print_man_foot(struct termp *, 
-                               const struct man_meta *);
+static void              print_man_foot(struct termp *, const void *);
 static void              print_bvspace(struct termp *, 
                                const struct man_node *);
 
@@ -142,6 +141,7 @@ 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, 0 }, /* AT */
 };
 
 
@@ -159,6 +159,8 @@ terminal_man(void *arg, const struct man *man)
        p->overstep = 0;
        p->maxrmargin = p->defrmargin;
 
+       term_begin(p, print_man_head, print_man_foot, man_meta(man));
+
        if (NULL == p->symtab)
                switch (p->enc) {
                case (TERMENC_ASCII):
@@ -172,7 +174,6 @@ terminal_man(void *arg, const struct man *man)
        n = man_node(man);
        m = man_meta(man);
 
-       print_man_head(p, m);
        p->flags |= TERMP_NOSPACE;
 
        mt.fl = 0;
@@ -181,7 +182,8 @@ terminal_man(void *arg, const struct man *man)
 
        if (n->child)
                print_man_nodelist(p, &mt, n->child, m);
-       print_man_foot(p, m);
+
+       term_end(p);
 }
 
 
@@ -856,15 +858,23 @@ print_man_nodelist(DECL_ARGS)
 
 
 static void
-print_man_foot(struct termp *p, const struct man_meta *meta)
+print_man_foot(struct termp *p, const void *arg)
 {
        char            buf[DATESIZ];
+       const struct man_meta *meta;
+
+       meta = (const struct man_meta *)arg;
 
        term_fontrepl(p, TERMFONT_NONE);
 
-       time2a(meta->date, buf, DATESIZ);
+       if (meta->rawdate)
+               strlcpy(buf, meta->rawdate, DATESIZ);
+       else
+               time2a(meta->date, buf, DATESIZ);
 
        term_vspace(p);
+       term_vspace(p);
+       term_vspace(p);
 
        p->flags |= TERMP_NOSPACE | TERMP_NOBREAK;
        p->rmargin = p->maxrmargin - strlen(buf);
@@ -887,10 +897,13 @@ print_man_foot(struct termp *p, const struct man_meta *meta)
 
 
 static void
-print_man_head(struct termp *p, const struct man_meta *m)
+print_man_head(struct termp *p, const void *arg)
 {
        char            buf[BUFSIZ], title[BUFSIZ];
        size_t          buflen, titlen;
+       const struct man_meta *m;
+
+       m = (const struct man_meta *)arg;
 
        /*
         * Note that old groff would spit out some spaces before the