]> git.cameronkatri.com Git - mandoc.git/blobdiff - mdocterm.c
More fixes (hard-escapes, etc.).
[mandoc.git] / mdocterm.c
index d7fbc69ad2694664838c19d0d50f847e2b2dc368..dd52e2874023f6382c90d5257455efbaa74a9d7a 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: mdocterm.c,v 1.17 2009/02/27 09:14:02 kristaps Exp $ */
+/* $Id: mdocterm.c,v 1.20 2009/02/28 20:13:06 kristaps Exp $ */
 /*
  * Copyright (c) 2008 Kristaps Dzonsons <kristaps@kth.se>
  *
@@ -16,6 +16,8 @@
  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
  * PERFORMANCE OF THIS SOFTWARE.
  */
+#include <sys/utsname.h>
+
 #include <assert.h>
 #include <ctype.h>
 #include <err.h>
@@ -110,7 +112,7 @@ main(int argc, char *argv[])
        if (NULL == (mdoc = mmain_mdoc(p)))
                mmain_exit(p, 1);
 
-       termp.maxrmargin = 80; /* XXX */
+       termp.maxrmargin = 78; /* XXX */
        termp.rmargin = termp.maxrmargin;
        termp.maxcols = 1024;
        termp.offset = termp.col = 0;
@@ -552,7 +554,14 @@ word(struct termp *p, const char *word)
                if ( ! xisspace(word[i])) {
                        j++;
                        continue;
+               } 
+               
+               /* Escaped spaces don't delimit... */
+               if (i > 0 && xisspace(word[i]) && '\\' == word[i - 1]) {
+                       j++;
+                       continue;
                }
+
                if (0 == j)
                        continue;
                assert(i >= j);
@@ -674,15 +683,21 @@ footer(struct termp *p, const struct mdoc_meta *meta)
 static void
 header(struct termp *p, const struct mdoc_meta *meta)
 {
-       char            *buf, *title, *bufp;
+       char            *buf, *title, *bufp, *vbuf;
        const char      *pp;
+       struct utsname   uts;
+
+       p->rmargin = p->maxrmargin;
+       p->offset = 0;
 
        if (NULL == (buf = malloc(p->rmargin)))
                err(1, "malloc");
        if (NULL == (title = malloc(p->rmargin)))
                err(1, "malloc");
+       if (NULL == (vbuf = malloc(p->rmargin)))
+               err(1, "malloc");
 
-       if (NULL == (pp = mdoc_vol2a(meta->vol)))
+       if (NULL == (pp = mdoc_vol2a(meta->vol))) {
                switch (meta->msec) {
                case (MSEC_1):
                        /* FALLTHROUGH */
@@ -707,11 +722,20 @@ header(struct termp *p, const struct mdoc_meta *meta)
                        pp = mdoc_vol2a(VOL_KM);
                        break;
                default:
-                       /* FIXME: capitalise. */
-                       if (NULL == (pp = mdoc_msec2a(meta->msec)))
-                               pp = mdoc_msec2a(MSEC_local);
                        break;
                }
+       }
+       vbuf[0] = 0;
+
+       if (pp) {
+               if (-1 == uname(&uts)) 
+                       err(1, "uname");
+               (void)strlcat(vbuf, uts.sysname, p->rmargin);
+               (void)strlcat(vbuf, " ", p->rmargin);
+       } else if (NULL == (pp = mdoc_msec2a(meta->msec)))
+               pp = mdoc_msec2a(MSEC_local);
+
+       (void)strlcat(vbuf, pp, p->rmargin);
 
        /*
         * The header is strange.  It has three components, which are
@@ -728,9 +752,9 @@ header(struct termp *p, const struct mdoc_meta *meta)
 
        if (mdoc_arch2a(meta->arch))
                (void)snprintf(buf, p->rmargin, "%s (%s)",
-                               pp, mdoc_arch2a(meta->arch));
+                               vbuf, mdoc_arch2a(meta->arch));
        else
-               (void)strlcpy(buf, pp, p->rmargin);
+               (void)strlcpy(buf, vbuf, p->rmargin);
 
        pp = mdoc_msec2a(meta->msec);
 
@@ -767,5 +791,6 @@ header(struct termp *p, const struct mdoc_meta *meta)
        p->flags &= ~TERMP_NOSPACE;
 
        free(title);
+       free(vbuf);
        free(buf);
 }