]> git.cameronkatri.com Git - mandoc.git/blobdiff - mdocterm.c
White-space churn.
[mandoc.git] / mdocterm.c
index d7fbc69ad2694664838c19d0d50f847e2b2dc368..02c80e6c1dc17df05b4bf52624bbdc76276e59d1 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.21 2009/02/28 21:31:13 kristaps Exp $ */
 /*
  * Copyright (c) 2008 Kristaps Dzonsons <kristaps@kth.se>
  *
 /*
  * 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.
  */
  * 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>
 #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);
 
        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;
        termp.rmargin = termp.maxrmargin;
        termp.maxcols = 1024;
        termp.offset = termp.col = 0;
@@ -463,6 +465,10 @@ pescape(struct termp *p, const char *word, size_t *i, size_t len)
                        /* FALLTHROUGH */
                case ('.'):
                        chara(p, word[*i]);
                        /* FALLTHROUGH */
                case ('.'):
                        chara(p, word[*i]);
+                       break;
+               case ('e'):
+                       chara(p, '\\');
+                       break;
                default:
                        break;
                }
                default:
                        break;
                }
@@ -552,7 +558,14 @@ word(struct termp *p, const char *word)
                if ( ! xisspace(word[i])) {
                        j++;
                        continue;
                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);
                if (0 == j)
                        continue;
                assert(i >= j);
@@ -674,15 +687,21 @@ footer(struct termp *p, const struct mdoc_meta *meta)
 static void
 header(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;
        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 == (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 */
                switch (meta->msec) {
                case (MSEC_1):
                        /* FALLTHROUGH */
@@ -707,11 +726,20 @@ header(struct termp *p, const struct mdoc_meta *meta)
                        pp = mdoc_vol2a(VOL_KM);
                        break;
                default:
                        pp = mdoc_vol2a(VOL_KM);
                        break;
                default:
-                       /* FIXME: capitalise. */
-                       if (NULL == (pp = mdoc_msec2a(meta->msec)))
-                               pp = mdoc_msec2a(MSEC_local);
                        break;
                }
                        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
 
        /*
         * The header is strange.  It has three components, which are
@@ -728,9 +756,9 @@ header(struct termp *p, const struct mdoc_meta *meta)
 
        if (mdoc_arch2a(meta->arch))
                (void)snprintf(buf, p->rmargin, "%s (%s)",
 
        if (mdoc_arch2a(meta->arch))
                (void)snprintf(buf, p->rmargin, "%s (%s)",
-                               pp, mdoc_arch2a(meta->arch));
+                               vbuf, mdoc_arch2a(meta->arch));
        else
        else
-               (void)strlcpy(buf, pp, p->rmargin);
+               (void)strlcpy(buf, vbuf, p->rmargin);
 
        pp = mdoc_msec2a(meta->msec);
 
 
        pp = mdoc_msec2a(meta->msec);
 
@@ -767,5 +795,6 @@ header(struct termp *p, const struct mdoc_meta *meta)
        p->flags &= ~TERMP_NOSPACE;
 
        free(title);
        p->flags &= ~TERMP_NOSPACE;
 
        free(title);
+       free(vbuf);
        free(buf);
 }
        free(buf);
 }