summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--regress/usr.bin/mandoc/mdoc/An/Makefile3
-rw-r--r--regress/usr.bin/mandoc/mdoc/An/break.out_markdown47
-rw-r--r--regress/usr.bin/mandoc/mdoc/Aq/Makefile4
-rw-r--r--regress/usr.bin/mandoc/mdoc/Aq/author.out_markdown16
-rw-r--r--usr.bin/mandoc/mdoc_markdown.c33
5 files changed, 98 insertions, 5 deletions
diff --git a/regress/usr.bin/mandoc/mdoc/An/Makefile b/regress/usr.bin/mandoc/mdoc/An/Makefile
index b061bf761bf..f9d0b72e4eb 100644
--- a/regress/usr.bin/mandoc/mdoc/An/Makefile
+++ b/regress/usr.bin/mandoc/mdoc/An/Makefile
@@ -1,6 +1,7 @@
-# $OpenBSD: Makefile,v 1.2 2014/08/14 02:00:52 schwarze Exp $
+# $OpenBSD: Makefile,v 1.3 2017/03/07 13:09:08 schwarze Exp $
REGRESS_TARGETS = break
LINT_TARGETS = break
+MARKDOWN_TARGETS = break
.include <bsd.regress.mk>
diff --git a/regress/usr.bin/mandoc/mdoc/An/break.out_markdown b/regress/usr.bin/mandoc/mdoc/An/break.out_markdown
new file mode 100644
index 00000000000..8605f693974
--- /dev/null
+++ b/regress/usr.bin/mandoc/mdoc/An/break.out_markdown
@@ -0,0 +1,47 @@
+AN-BREAK(1) - General Commands Manual
+
+# NAME
+
+**An-break** - line breaking of the author macro
+
+# DESCRIPTION
+
+inline is the default:
+Kristaps,
+Ingo,
+and
+Joerg.
+empty
+trailing
+.
+
+split mode:
+Kristaps
+Ingo
+Joerg
+
+empty
+trailing
+.
+
+# AUTHORS
+
+split mode is the default:
+Kristaps
+Ingo
+Joerg
+
+empty
+trailing
+.
+
+inline:
+Kristaps,
+Ingo,
+and
+Joerg.
+empty
+trailing
+.
+
+OpenBSD - February 5, 2015
diff --git a/regress/usr.bin/mandoc/mdoc/Aq/Makefile b/regress/usr.bin/mandoc/mdoc/Aq/Makefile
index b20e59641c6..1d524cffadc 100644
--- a/regress/usr.bin/mandoc/mdoc/Aq/Makefile
+++ b/regress/usr.bin/mandoc/mdoc/Aq/Makefile
@@ -1,7 +1,7 @@
-# $OpenBSD: Makefile,v 1.3 2017/03/05 19:59:25 schwarze Exp $
+# $OpenBSD: Makefile,v 1.4 2017/03/07 13:09:08 schwarze Exp $
REGRESS_TARGETS = author empty
UTF8_TARGETS = author empty
-MARKDOWN_TARGETS = empty
+MARKDOWN_TARGETS = author empty
.include <bsd.regress.mk>
diff --git a/regress/usr.bin/mandoc/mdoc/Aq/author.out_markdown b/regress/usr.bin/mandoc/mdoc/Aq/author.out_markdown
new file mode 100644
index 00000000000..292eb5c573a
--- /dev/null
+++ b/regress/usr.bin/mandoc/mdoc/Aq/author.out_markdown
@@ -0,0 +1,16 @@
+AQ-AUTHOR(1) - General Commands Manual
+
+# NAME
+
+**Aq-author** - angle brackets after an author name macro
+
+# DESCRIPTION
+
+Name &lt;<addr>&gt; Name &lt;<addr>&gt;
+
+# AUTHORS
+
+Name &lt;<addr>&gt;
+Name &lt;<addr>&gt;
+
+OpenBSD - November 19, 2014
diff --git a/usr.bin/mandoc/mdoc_markdown.c b/usr.bin/mandoc/mdoc_markdown.c
index 929c2efa632..eccce86b2ad 100644
--- a/usr.bin/mandoc/mdoc_markdown.c
+++ b/usr.bin/mandoc/mdoc_markdown.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: mdoc_markdown.c,v 1.4 2017/03/07 12:38:25 schwarze Exp $ */
+/* $OpenBSD: mdoc_markdown.c,v 1.5 2017/03/07 13:09:08 schwarze Exp $ */
/*
* Copyright (c) 2017 Ingo Schwarze <schwarze@openbsd.org>
*
@@ -51,6 +51,7 @@ static int md_pre_raw(struct roff_node *);
static int md_pre_word(struct roff_node *);
static int md_pre_skip(struct roff_node *);
static void md_pre_syn(struct roff_node *);
+static int md_pre_An(struct roff_node *);
static int md_pre_Ap(struct roff_node *);
static int md_pre_Bd(struct roff_node *);
static int md_pre_Bk(struct roff_node *);
@@ -115,7 +116,7 @@ static const struct md_act md_acts[MDOC_MAX + 1] = {
{ NULL, NULL, NULL, NULL, NULL }, /* El */
{ NULL, md_pre_It, md_post_It, NULL, NULL }, /* It */
{ NULL, md_pre_raw, md_post_raw, "*", "*" }, /* Ad */
- { NULL, NULL, NULL, NULL, NULL }, /* An */
+ { NULL, md_pre_An, NULL, NULL, NULL }, /* An */
{ NULL, md_pre_raw, md_post_raw, "*", "*" }, /* Ar */
{ NULL, md_pre_raw, md_post_raw, "**", "**" }, /* Cd */
{ NULL, md_pre_raw, md_post_raw, "**", "**" }, /* Cm */
@@ -235,6 +236,8 @@ static int outflags;
#define MD_sp (1 << 5) /* Insert a paragraph break. */
#define MD_Sm (1 << 6) /* Horizontal spacing mode. */
#define MD_Bk (1 << 7) /* Word keep mode. */
+#define MD_An_split (1 << 8) /* Author mode is "split". */
+#define MD_An_nosplit (1 << 9) /* Author mode is "nosplit". */
static int escflags; /* Escape in generated markdown code: */
#define ESC_BOL (1 << 0) /* "#*+-" near the beginning of a line. */
@@ -782,6 +785,28 @@ md_pre_syn(struct roff_node *n)
}
static int
+md_pre_An(struct roff_node *n)
+{
+ switch (n->norm->An.auth) {
+ case AUTH_split:
+ outflags &= ~MD_An_nosplit;
+ outflags |= MD_An_split;
+ return 0;
+ case AUTH_nosplit:
+ outflags &= ~MD_An_split;
+ outflags |= MD_An_nosplit;
+ return 0;
+ default:
+ if (outflags & MD_An_split)
+ outflags |= MD_br;
+ else if (n->sec == SEC_AUTHORS &&
+ ! (outflags & MD_An_nosplit))
+ outflags |= MD_An_split;
+ return 1;
+ }
+}
+
+static int
md_pre_Ap(struct roff_node *n)
{
outflags &= ~MD_spc;
@@ -1347,6 +1372,10 @@ static int
md_pre_Sh(struct roff_node *n)
{
switch (n->type) {
+ case ROFFT_BLOCK:
+ if (n->sec == SEC_AUTHORS)
+ outflags &= ~(MD_An_split | MD_An_nosplit);
+ break;
case ROFFT_HEAD:
outflags |= MD_sp;
md_rawword(n->tok == MDOC_Sh ? "#" : "##");