summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorKristaps Dzonsons <kristaps@bsd.lv>2009-03-02 12:09:32 +0000
committerKristaps Dzonsons <kristaps@bsd.lv>2009-03-02 12:09:32 +0000
commitc6e959568733601f6b74e21b18a4243e63f53f3b (patch)
tree40dba3e139e152316fa47d4e0d0e2308077204a5
parent77cb4c746cb1f605faa4b563da216a44b380a6ab (diff)
downloadmandoc-c6e959568733601f6b74e21b18a4243e63f53f3b.tar.gz
mandoc-c6e959568733601f6b74e21b18a4243e63f53f3b.tar.zst
mandoc-c6e959568733601f6b74e21b18a4243e63f53f3b.zip
Support for maxrmargin-breaking with TERMP_NOBREAK.
Tabs auto-converted to spaces.
-rw-r--r--mdoc.h3
-rw-r--r--mdocterm.c38
-rw-r--r--strings.c11
-rw-r--r--term.c12
-rw-r--r--term.h4
5 files changed, 54 insertions, 14 deletions
diff --git a/mdoc.h b/mdoc.h
index 96f55de9..6ec0e467 100644
--- 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,
diff --git a/mdocterm.c b/mdocterm.c
index 499c4da1..7a0e1230 100644
--- a/mdocterm.c
+++ b/mdocterm.c
@@ -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]);
}
diff --git a/strings.c b/strings.c
index 896971a9..4910e308 100644
--- 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 2f10c0a5..e1fa44da 100644
--- 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 95e75d2a..48162221 100644
--- 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 {