X-Git-Url: https://git.cameronkatri.com/mandoc.git/blobdiff_plain/51107dc1cd95fee0ae88f16a4ba8d45f505414d0..9218837d42d6c576873031ee11dae96fb83325ef:/mdocterm.c?ds=sidebyside diff --git a/mdocterm.c b/mdocterm.c index d7fbc69a..02c80e6c 100644 --- a/mdocterm.c +++ b/mdocterm.c @@ -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 * @@ -16,6 +16,8 @@ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ +#include + #include #include #include @@ -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; @@ -463,6 +465,10 @@ pescape(struct termp *p, const char *word, size_t *i, size_t len) /* FALLTHROUGH */ case ('.'): chara(p, word[*i]); + break; + case ('e'): + chara(p, '\\'); + break; default: break; } @@ -552,7 +558,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 +687,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 +726,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 +756,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 +795,6 @@ header(struct termp *p, const struct mdoc_meta *meta) p->flags &= ~TERMP_NOSPACE; free(title); + free(vbuf); free(buf); }