diff options
-rw-r--r-- | mdoc.h | 3 | ||||
-rw-r--r-- | mdocterm.c | 38 | ||||
-rw-r--r-- | strings.c | 11 | ||||
-rw-r--r-- | term.c | 12 | ||||
-rw-r--r-- | term.h | 4 |
5 files changed, 54 insertions, 14 deletions
@@ -1,4 +1,4 @@ -/* $Id: mdoc.h,v 1.35 2009/02/24 14:52:55 kristaps Exp $ */ +/* $Id: mdoc.h,v 1.36 2009/03/02 12:09:32 kristaps Exp $ */ /* * Copyright (c) 2008 Kristaps Dzonsons <kristaps@kth.se> * @@ -220,6 +220,7 @@ enum mdoc_att { ATT_v6, ATT_v7, ATT_32v, + ATT_V, ATT_V1, ATT_V2, ATT_V3, @@ -1,4 +1,4 @@ -/* $Id: mdocterm.c,v 1.23 2009/03/01 23:23:55 kristaps Exp $ */ +/* $Id: mdocterm.c,v 1.24 2009/03/02 12:09:32 kristaps Exp $ */ /* * Copyright (c) 2008 Kristaps Dzonsons <kristaps@kth.se> * @@ -85,6 +85,7 @@ static void footer(struct termp *, static void pword(struct termp *, const char *, size_t); static void pescape(struct termp *, const char *, size_t *, size_t); +static void pgraph(struct termp *, char); static void nescape(struct termp *, const char *, size_t); static void chara(struct termp *, char); @@ -199,7 +200,8 @@ flushln(struct termp *p) * * If we're not breaking... * - * Don't let the visible size exceed the full margin. + * Don't let the visible size exceed the full right + * margin. */ if ( ! (TERMP_NOBREAK & p->flags)) { @@ -210,8 +212,12 @@ flushln(struct termp *p) vis = 0; } else if (vis + vsz > maxvis) errx(1, "word breaks right margin"); - } else if (vis + vsz > p->maxrmargin) - errx(1, "word breaks right margin"); + } else if (vis + vsz > p->maxrmargin - p->offset) { + putchar('\n'); + for (j = 0; j < p->rmargin; j++) + putchar(' '); + vis = p->rmargin; + } /* * Write out the word and a trailing space. Omit the @@ -425,6 +431,26 @@ nescape(struct termp *p, const char *word, size_t len) static void +pgraph(struct termp *p, char byte) +{ + int i; + + switch (byte) { + case (' '): + chara(p, ' '); + break; + case ('\t'): + for (i = 0; i < INDENT; i++) + chara(p, ' '); + break; + default: + warnx("unknown non-graphing character"); + break; + } +} + + +static void pescape(struct termp *p, const char *word, size_t *i, size_t len) { size_t j; @@ -527,6 +553,10 @@ pword(struct termp *p, const char *word, size_t len) pescape(p, word, &i, len); continue; } + if ( ! isgraph((int)word[i])) { + pgraph(p, word[i]); + continue; + } chara(p, word[i]); } @@ -1,4 +1,4 @@ -/* $Id: strings.c,v 1.22 2009/02/27 10:55:16 kristaps Exp $ */ +/* $Id: strings.c,v 1.23 2009/03/02 12:09:32 kristaps Exp $ */ /* * Copyright (c) 2008 Kristaps Dzonsons <kristaps@kth.se> * @@ -190,9 +190,9 @@ mdoc_atotime(const char *p) (void)memset(&tm, 0, sizeof(struct tm)); - if (xstrcmp(p, "$Mdocdate: February 27 2009 $")) + if (xstrcmp(p, "$Mdocdate: March 2 2009 $")) return(time(NULL)); - if ((pp = strptime(p, "$Mdocdate: February 27 2009 $", &tm)) && 0 == *pp) + if ((pp = strptime(p, "$Mdocdate: March 2 2009 $", &tm)) && 0 == *pp) return(mktime(&tm)); /* XXX - this matches "June 1999", which is wrong. */ if ((pp = strptime(p, "%b %d %Y", &tm)) && 0 == *pp) @@ -358,6 +358,8 @@ mdoc_atoatt(const char *p) return(ATT_v7); else if (0 == strcmp(p, "32v")) return(ATT_32v); + else if (0 == strcmp(p, "V")) + return(ATT_V); else if (0 == strcmp(p, "V.1")) return(ATT_V1); else if (0 == strcmp(p, "V.2")) @@ -719,6 +721,9 @@ mdoc_att2a(enum mdoc_att c) case(ATT_32v): p = "Version 32V AT&T UNIX"; break; + case(ATT_V): + p = "AT&T System V UNIX"; + break; case(ATT_V1): p = "AT&T System V.1 UNIX"; break; @@ -1,4 +1,4 @@ -/* $Id: term.c,v 1.33 2009/03/01 23:27:14 kristaps Exp $ */ +/* $Id: term.c,v 1.34 2009/03/02 12:09:32 kristaps Exp $ */ /* * Copyright (c) 2009 Kristaps Dzonsons <kristaps@kth.se> * @@ -25,8 +25,6 @@ #include "term.h" -#define INDENT 6 - /* * Performs actions on nodes of the abstract syntax tree. Both pre- and * post-fix operations are defined here. @@ -934,6 +932,9 @@ static int termp_ft_pre(DECL_ARGS) { + if (SEC_SYNOPSIS == node->sec) + if (node->prev && MDOC_Fo == node->prev->tok) + vspace(p); TERMPAIR_SETFLAG(p, pair, ttypes[TTYPE_FUNC_TYPE]); return(1); } @@ -944,7 +945,7 @@ static void termp_ft_post(DECL_ARGS) { - if (node->sec == SEC_SYNOPSIS) + if (SEC_SYNOPSIS == node->sec) newln(p); } @@ -1141,7 +1142,8 @@ static void termp_bx_post(DECL_ARGS) { - p->flags |= TERMP_NOSPACE; + if (node->child) + p->flags |= TERMP_NOSPACE; word(p, "BSD"); } @@ -1,4 +1,4 @@ -/* $Id: term.h,v 1.12 2009/03/01 13:06:49 kristaps Exp $ */ +/* $Id: term.h,v 1.13 2009/03/02 12:09:32 kristaps Exp $ */ /* * Copyright (c) 2008 Kristaps Dzonsons <kristaps@kth.se> * @@ -21,6 +21,8 @@ #include "mdoc.h" +#define INDENT 6 + __BEGIN_DECLS struct termp { |