]> git.cameronkatri.com Git - mandoc.git/commitdiff
Support for maxrmargin-breaking with TERMP_NOBREAK.
authorKristaps Dzonsons <kristaps@bsd.lv>
Mon, 2 Mar 2009 12:09:32 +0000 (12:09 +0000)
committerKristaps Dzonsons <kristaps@bsd.lv>
Mon, 2 Mar 2009 12:09:32 +0000 (12:09 +0000)
Tabs auto-converted to spaces.

mdoc.h
mdocterm.c
strings.c
term.c
term.h

diff --git a/mdoc.h b/mdoc.h
index 96f55de91f30b25570a7f19675ff1f8d49ef766f..6ec0e467d246216ff3ac381a0ae7c18a4802aeec 100644 (file)
--- a/mdoc.h
+++ b/mdoc.h
@@ -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,
index 499c4da18d21b86ddf13050beed7a02b23ac2c89..7a0e1230af49bd0223eb1b85e09061e9f712bb5e 100644 (file)
@@ -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
@@ -424,6 +430,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)
 {
@@ -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]);
        }
 
index 896971a9e56eeea28b3394d1a22646bd33e8a10e..4910e308c7f077e3d720a333a444e835a3a3595d 100644 (file)
--- a/strings.c
+++ b/strings.c
@@ -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;
diff --git a/term.c b/term.c
index 2f10c0a53dcc6b5bfd21fdc810dc683e7e137d02..e1fa44da23f3308da1146805af1fab906b44ec40 100644 (file)
--- a/term.c
+++ b/term.c
@@ -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");
 }
 
diff --git a/term.h b/term.h
index 95e75d2af55fd7f32d8c5c8f5265529efe4ec864..48162221aafeb61349fbcdc77735b4d2ac54e3dc 100644 (file)
--- a/term.h
+++ b/term.h
@@ -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 {