summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mdoc.791
-rw-r--r--mdoc_html.c126
-rw-r--r--mdoc_term.c166
-rw-r--r--regress/mdoc/Cd/cd.in14
-rw-r--r--regress/mdoc/Fd/fd.in22
-rw-r--r--regress/mdoc/Fn/fn1.in21
-rw-r--r--regress/mdoc/Fo/fo0.in32
-rw-r--r--regress/mdoc/Ft/ft0.in25
-rw-r--r--regress/mdoc/In/in.in24
9 files changed, 216 insertions, 305 deletions
diff --git a/mdoc.7 b/mdoc.7
index 9ac577d5..51a12df0 100644
--- a/mdoc.7
+++ b/mdoc.7
@@ -333,8 +333,11 @@ must be the NAME section, consisting of at least one
followed by
.Sx \&Nd .
.Pp
-Following that, convention dictates specifying at least the SYNOPSIS and
-DESCRIPTION sections, although this varies between manual sections.
+Following that, convention dictates specifying at least the
+.Em SYNOPSIS
+and
+.Em DESCRIPTION
+sections, although this varies between manual sections.
.Pp
The following is a well-formed skeleton
.Nm
@@ -450,13 +453,31 @@ And for the third, configurations (section 4):
Manuals not in these sections generally don't need a
.Em SYNOPSIS .
.Pp
-See
-.Sx \&Op ,
+Some macros are displayed differently in the
+.Em SYNOPSIS
+section, particularly
+.Sx \&Nm ,
.Sx \&Cd ,
+.Sx \&Fd ,
.Sx \&Fn ,
-.Sx \&Ft ,
+.Sx \&Fo ,
+.Sx \&In ,
+.Sx \&Vt ,
and
-.Sx \&Vt .
+.Sx \&Ft .
+All of these macros are output on their own line. If two such
+dissimilar macros are pair-wise invoked (except for
+.Sx \&Ft
+before
+.Sx \&Fo
+or
+.Sx \&Fn ) ,
+they are separated by a vertical space, unless in the case of
+.Sx \&Fo ,
+.Sx \&Fn ,
+and
+.Sx \&Ft ,
+which are always separated by vertical space.
.It Em DESCRIPTION
This expands upon the brief, one-line description in
.Em NAME .
@@ -1656,6 +1677,8 @@ This usage has been deprecated in favour of
Do not use this macro.
.Pp
See also
+.Sx MANUAL STRUCTURE
+and
.Sx \&In .
.Ss \&Fl
Command-line flag.
@@ -1685,10 +1708,7 @@ Its syntax is as follows:
.Op Oo Cm argtype Oc Cm argname
.Ed
.Pp
-If invoked in the
-.Em SYNOPSIS
-section, vertical space is asserted before and after the macro.
-In all cases, the function arguments are surrounded in parenthesis and
+Function arguments are surrounded in parenthesis and
are delimited by commas.
If no arguments are specified, blank parenthesis are output.
.Pp
@@ -1702,9 +1722,7 @@ Examples:
.Ed
.Pp
See also
-.Sx \&Fa ,
-.Sx \&Fo ,
-.Sx \&Fc ,
+.Sx MANUAL STRUCTURE
and
.Sx \&Ft .
.Ss \&Fo
@@ -1728,42 +1746,21 @@ Invocations usually occur in the following context:
.Pf \. Sx \&Fc
.Ed
.Pp
-In the
-.Em SYNOPSIS
-section, a
-.Sx \&Fo
-block is surrounded by vertical space unless
-.Sx \&Ft
-is the prior macro, in which case it is preceded by only a newline.
-.Pp
A
.Sx \&Fo
scope is closed by
.Pp
See also
+.Sx MANUAL STRUCTURE ,
.Sx \&Fa ,
.Sx \&Fc ,
and
-.Sx \&Fn .
-.Sx \&Fc .
-.Ss \&Fr
.Ss \&Ft
A function type.
Its syntax is as follows:
.Pp
.D1 Pf \. Sx \&Ft Cm functype
.Pp
-If invoked before a
-.Sx \&Fo
-or
-.Sx \&Fn
-in the
-.Em SYNOPSIS
-section, a line-break will follow.
-Furthermore, if invoked in the
-.Em SYNOPSIS
-section, it will assert vertical space prior to its arguments.
-.Pp
Examples:
.D1 \&.Ft int
.Bd -literal -offset indent -compact
@@ -1772,10 +1769,10 @@ Examples:
.Ed
.Pp
See also
-.Sx \&Fo ,
-.Sx \&Fc ,
+.Sx MANUAL STRUCTURE ,
+.Sx \&Fn ,
and
-.Sx \&Fn .
+.Sx \&Fo .
.Ss \&Fx
Format the FreeBSD version provided as an argument, or a default value
if no argument is provided.
@@ -1804,11 +1801,13 @@ In the
section (only if invoked as the line macro), the first argument is
preceded by
.Qq #include ,
-the arguments is enclosed in angled braces, and a newline is asserted.
-In all other invocations, only angled braces will enclose the argument.
+the arguments is enclosed in angled braces.
.Pp
-Examples
+Examples:
.D1 \&.In sys/types
+.Pp
+See also
+.Sx MANUAL STRUCTURE .
.Ss \&It
A list item.
The syntax of this macro depends on the list type.
@@ -2098,12 +2097,14 @@ and
.Ss \&Va
.Ss \&Vt
A variable type.
-This is also used for indicating global variables in the SYNOPSIS
+This is also used for indicating global variables in the
+.Em SYNOPSIS
section, in which case a variable name is also specified.
Note that it accepts
.Sx Block partial-implicit
-syntax when invoked as the first macro in the SYNOPSIS section, else it
-accepts ordinary
+syntax when invoked as the first macro in the
+.Em SYNOPSIS
+section, else it accepts ordinary
.Sx In-line
syntax.
.Pp
@@ -2116,7 +2117,7 @@ Examples:
.D1 \&.Vt extern const char * const sys_signame[] \&;
.Pp
See also
-.Sx \&Ft
+.Sx MANUAL STRUCTURE
and
.Sx \&Va .
.Ss \&Xc
diff --git a/mdoc_html.c b/mdoc_html.c
index b2d075e4..1c8bb832 100644
--- a/mdoc_html.c
+++ b/mdoc_html.c
@@ -53,6 +53,8 @@ static void print_mdoc(MDOC_ARGS);
static void print_mdoc_head(MDOC_ARGS);
static void print_mdoc_node(MDOC_ARGS);
static void print_mdoc_nodelist(MDOC_ARGS);
+static void synopsis_pre(struct html *,
+ const struct mdoc_node *);
static void a2width(const char *, struct roffsu *);
static void a2offs(const char *, struct roffsu *);
@@ -84,7 +86,6 @@ static void mdoc_dq_post(MDOC_ARGS);
static int mdoc_dq_pre(MDOC_ARGS);
static int mdoc_dv_pre(MDOC_ARGS);
static int mdoc_fa_pre(MDOC_ARGS);
-static void mdoc_fd_post(MDOC_ARGS);
static int mdoc_fd_pre(MDOC_ARGS);
static int mdoc_fl_pre(MDOC_ARGS);
static int mdoc_fn_pre(MDOC_ARGS);
@@ -159,7 +160,7 @@ static const struct htmlmdoc mdocs[MDOC_MAX] = {
{mdoc_ev_pre, NULL}, /* Ev */
{mdoc_ex_pre, NULL}, /* Ex */
{mdoc_fa_pre, NULL}, /* Fa */
- {mdoc_fd_pre, mdoc_fd_post}, /* Fd */
+ {mdoc_fd_pre, NULL}, /* Fd */
{mdoc_fl_pre, NULL}, /* Fl */
{mdoc_fn_pre, NULL}, /* Fn */
{mdoc_ft_pre, NULL}, /* Ft */
@@ -294,6 +295,55 @@ a2width(const char *p, struct roffsu *su)
/*
+ * See the same function in mdoc_term.c for documentation.
+ */
+static void
+synopsis_pre(struct html *h, const struct mdoc_node *n)
+{
+ struct roffsu su;
+ struct htmlpair tag;
+
+ if (NULL == n->prev || SEC_SYNOPSIS != n->sec)
+ return;
+
+ SCALE_VS_INIT(&su, 1);
+ bufcat_su(h, "margin-top", &su);
+ PAIR_STYLE_INIT(&tag, h);
+
+ if (n->prev->tok == n->tok &&
+ MDOC_Fo != n->tok &&
+ MDOC_Ft != n->tok &&
+ MDOC_Fn != n->tok) {
+ print_otag(h, TAG_DIV, 0, NULL);
+ return;
+ }
+
+ switch (n->prev->tok) {
+ case (MDOC_Fd):
+ /* FALLTHROUGH */
+ case (MDOC_Fn):
+ /* FALLTHROUGH */
+ case (MDOC_Fo):
+ /* FALLTHROUGH */
+ case (MDOC_In):
+ /* FALLTHROUGH */
+ case (MDOC_Vt):
+ print_otag(h, TAG_DIV, 1, &tag);
+ break;
+ case (MDOC_Ft):
+ if (MDOC_Fn != n->tok && MDOC_Fo != n->tok) {
+ print_otag(h, TAG_DIV, 1, &tag);
+ break;
+ }
+ /* FALLTHROUGH */
+ default:
+ print_otag(h, TAG_DIV, 0, NULL);
+ break;
+ }
+}
+
+
+/*
* Calculate the scaling unit passed in an `-offset' argument. This
* uses either a native scaling unit (e.g., 1i, 2m), one of a set of
* predefined strings (indent, etc.), or the string length of the value.
@@ -690,18 +740,12 @@ mdoc_nm_pre(MDOC_ARGS)
if (NULL == n->child && NULL == m->name)
return(1);
- if (SEC_SYNOPSIS == n->sec &&
- n->prev && MDOC_LINE & n->flags) {
- bufcat_style(h, "clear", "both");
- PAIR_STYLE_INIT(&tag, h);
- print_otag(h, TAG_BR, 1, &tag);
- }
+ synopsis_pre(h, n);
PAIR_CLASS_INIT(&tag, "name");
print_otag(h, TAG_SPAN, 1, &tag);
if (NULL == n->child)
print_text(h, m->name);
-
return(1);
}
@@ -1438,7 +1482,7 @@ mdoc_cd_pre(MDOC_ARGS)
{
struct htmlpair tag;
- print_otag(h, TAG_DIV, 0, NULL);
+ synopsis_pre(h, n);
PAIR_CLASS_INIT(&tag, "config");
print_otag(h, TAG_SPAN, 1, &tag);
return(1);
@@ -1511,20 +1555,13 @@ mdoc_fa_pre(MDOC_ARGS)
/* ARGSUSED */
-static void
-mdoc_fd_post(MDOC_ARGS)
-{
-
- print_otag(h, TAG_BR, 0, NULL);
-}
-
-
-/* ARGSUSED */
static int
mdoc_fd_pre(MDOC_ARGS)
{
struct htmlpair tag;
+ synopsis_pre(h, n);
+
PAIR_CLASS_INIT(&tag, "macro");
print_otag(h, TAG_SPAN, 1, &tag);
return(1);
@@ -1536,18 +1573,12 @@ static int
mdoc_vt_pre(MDOC_ARGS)
{
struct htmlpair tag;
- struct roffsu su;
- if (SEC_SYNOPSIS == n->sec && MDOC_BLOCK == n->type) {
- if (n->next && MDOC_Vt != n->next->tok) {
- SCALE_VS_INIT(&su, 1);
- bufcat_su(h, "margin-bottom", &su);
- PAIR_STYLE_INIT(&tag, h);
- print_otag(h, TAG_DIV, 1, &tag);
- } else
- print_otag(h, TAG_DIV, 0, NULL);
-
+ if (MDOC_BLOCK == n->type) {
+ synopsis_pre(h, n);
return(1);
+ } else if (MDOC_ELEM == n->type) {
+ synopsis_pre(h, n);
} else if (MDOC_HEAD == n->type)
return(0);
@@ -1563,9 +1594,7 @@ mdoc_ft_pre(MDOC_ARGS)
{
struct htmlpair tag;
- if (SEC_SYNOPSIS == n->sec && n->prev)
- print_otag(h, TAG_BR, 0, NULL);
-
+ synopsis_pre(h, n);
PAIR_CLASS_INIT(&tag, "ftype");
print_otag(h, TAG_SPAN, 1, &tag);
return(1);
@@ -1582,21 +1611,8 @@ mdoc_fn_pre(MDOC_ARGS)
char nbuf[BUFSIZ];
const char *sp, *ep;
int sz, i;
- struct roffsu su;
- /* NB: MDOC_LINE has no effect on this macro! */
- if (SEC_SYNOPSIS == n->sec) {
- SCALE_HS_INIT(&su, INDENT);
- bufcat_su(h, "margin-left", &su);
- su.scale = -su.scale;
- bufcat_su(h, "text-indent", &su);
- if (n->prev && MDOC_Ft != n->prev->tok) {
- SCALE_VS_INIT(&su, 1);
- bufcat_su(h, "margin-top", &su);
- }
- PAIR_STYLE_INIT(&tag[0], h);
- print_otag(h, TAG_DIV, 1, tag);
- }
+ synopsis_pre(h, n);
/* Split apart into type and name. */
assert(n->child->string);
@@ -1782,7 +1798,6 @@ static int
mdoc_fo_pre(MDOC_ARGS)
{
struct htmlpair tag;
- struct roffsu su;
struct tag *t;
if (MDOC_BODY == n->type) {
@@ -1791,16 +1806,7 @@ mdoc_fo_pre(MDOC_ARGS)
h->flags |= HTML_NOSPACE;
return(1);
} else if (MDOC_BLOCK == n->type) {
- if (SEC_SYNOPSIS != n->sec)
- return(1);
- if (NULL == n->prev || MDOC_Ft == n->prev->tok) {
- print_otag(h, TAG_DIV, 0, NULL);
- return(1);
- }
- SCALE_VS_INIT(&su, 1);
- bufcat_su(h, "margin-top", &su);
- PAIR_STYLE_INIT(&tag, h);
- print_otag(h, TAG_DIV, 1, &tag);
+ synopsis_pre(h, n);
return(1);
}
@@ -1821,6 +1827,7 @@ mdoc_fo_pre(MDOC_ARGS)
static void
mdoc_fo_post(MDOC_ARGS)
{
+
if (MDOC_BODY != n->type)
return;
h->flags |= HTML_NOSPACE;
@@ -1839,6 +1846,8 @@ mdoc_in_pre(MDOC_ARGS)
struct htmlpair tag[2];
int i;
+ synopsis_pre(h, n);
+
PAIR_CLASS_INIT(&tag[0], "includes");
print_otag(h, TAG_SPAN, 1, tag);
@@ -1865,9 +1874,6 @@ mdoc_in_pre(MDOC_ARGS)
h->flags |= HTML_NOSPACE;
print_text(h, ">");
- if (SEC_SYNOPSIS == n->sec && MDOC_LINE & n->flags)
- print_otag(h, TAG_BR, 0, NULL);
-
return(0);
}
diff --git a/mdoc_term.c b/mdoc_term.c
index e62d7219..84583caf 100644
--- a/mdoc_term.c
+++ b/mdoc_term.c
@@ -68,6 +68,8 @@ static void print_mdoc_node(DECL_ARGS);
static void print_mdoc_head(DECL_ARGS);
static void print_mdoc_nodelist(DECL_ARGS);
static void print_foot(DECL_ARGS);
+static void synopsis_pre(struct termp *,
+ const struct mdoc_node *);
static void termp____post(DECL_ARGS);
static void termp_an_post(DECL_ARGS);
@@ -79,8 +81,7 @@ static void termp_brq_post(DECL_ARGS);
static void termp_bx_post(DECL_ARGS);
static void termp_d1_post(DECL_ARGS);
static void termp_dq_post(DECL_ARGS);
-static void termp_fd_post(DECL_ARGS);
-static void termp_fn_post(DECL_ARGS);
+static int termp_fd_pre(DECL_ARGS);
static void termp_fo_post(DECL_ARGS);
static void termp_in_post(DECL_ARGS);
static void termp_it_post(DECL_ARGS);
@@ -92,7 +93,6 @@ static void termp_qq_post(DECL_ARGS);
static void termp_sh_post(DECL_ARGS);
static void termp_sq_post(DECL_ARGS);
static void termp_ss_post(DECL_ARGS);
-static void termp_vt_post(DECL_ARGS);
static int termp_an_pre(DECL_ARGS);
static int termp_ap_pre(DECL_ARGS);
@@ -162,9 +162,9 @@ static const struct termact termacts[MDOC_MAX] = {
{ NULL, NULL }, /* Ev */
{ termp_ex_pre, NULL }, /* Ex */
{ termp_fa_pre, NULL }, /* Fa */
- { termp_bold_pre, termp_fd_post }, /* Fd */
+ { termp_fd_pre, NULL }, /* Fd */
{ termp_fl_pre, NULL }, /* Fl */
- { termp_fn_pre, termp_fn_post }, /* Fn */
+ { termp_fn_pre, NULL }, /* Fn */
{ termp_ft_pre, NULL }, /* Ft */
{ termp_bold_pre, NULL }, /* Ic */
{ termp_in_pre, termp_in_post }, /* In */
@@ -177,7 +177,7 @@ static const struct termact termacts[MDOC_MAX] = {
{ termp_rv_pre, NULL }, /* Rv */
{ NULL, NULL }, /* St */
{ termp_under_pre, NULL }, /* Va */
- { termp_vt_pre, termp_vt_post }, /* Vt */
+ { termp_vt_pre, NULL }, /* Vt */
{ termp_xr_pre, NULL }, /* Xr */
{ NULL, termp____post }, /* %A */
{ termp_under_pre, termp____post }, /* %B */
@@ -1055,14 +1055,11 @@ termp_nm_pre(DECL_ARGS)
if (NULL == n->child && NULL == m->name)
return(1);
- if (SEC_SYNOPSIS == n->sec && MDOC_LINE & n->flags)
- term_newln(p);
+ synopsis_pre(p, n);
term_fontpush(p, TERMFONT_BOLD);
-
if (NULL == n->child)
term_word(p, m->name);
-
return(1);
}
@@ -1313,32 +1310,78 @@ termp_xr_pre(DECL_ARGS)
}
-static int
-termp_vt_pre(DECL_ARGS)
+/*
+ * This decides how to assert whitespace before any of the SYNOPSIS set
+ * of macros (which, as in the case of Ft/Fo and Ft/Fn, may contain
+ * macro combos).
+ */
+static void
+synopsis_pre(struct termp *p, const struct mdoc_node *n)
{
+ /*
+ * Obviously, if we're not in a SYNOPSIS or no prior macros
+ * exist, do nothing.
+ */
+ if (NULL == n->prev || SEC_SYNOPSIS != n->sec)
+ return;
- if (MDOC_ELEM == n->type)
- return(termp_under_pre(p, pair, m, n));
- else if (MDOC_HEAD == n->type)
- return(0);
- else if (MDOC_BLOCK == n->type)
- return(1);
+ /*
+ * If we're the second in a pair of like elements, emit our
+ * newline and return. UNLESS we're `Fo', `Fn', `Fn', in which
+ * case we soldier on.
+ */
+ if (n->prev->tok == n->tok &&
+ MDOC_Ft != n->tok &&
+ MDOC_Fo != n->tok &&
+ MDOC_Fn != n->tok) {
+ term_newln(p);
+ return;
+ }
- return(termp_under_pre(p, pair, m, n));
+ /*
+ * If we're one of the SYNOPSIS set and non-like pair-wise after
+ * another (or Fn/Fo, which we've let slip through) then assert
+ * vertical space, else only newline and move on.
+ */
+ switch (n->prev->tok) {
+ case (MDOC_Fd):
+ /* FALLTHROUGH */
+ case (MDOC_Fn):
+ /* FALLTHROUGH */
+ case (MDOC_Fo):
+ /* FALLTHROUGH */
+ case (MDOC_In):
+ /* FALLTHROUGH */
+ case (MDOC_Vt):
+ term_vspace(p);
+ break;
+ case (MDOC_Ft):
+ if (MDOC_Fn != n->tok && MDOC_Fo != n->tok) {
+ term_vspace(p);
+ break;
+ }
+ /* FALLTHROUGH */
+ default:
+ term_newln(p);
+ break;
+ }
}
-/* ARGSUSED */
-static void
-termp_vt_post(DECL_ARGS)
+static int
+termp_vt_pre(DECL_ARGS)
{
- if (MDOC_BLOCK != n->type)
- return;
- if (n->next && MDOC_Vt == n->next->tok)
- term_newln(p);
- else if (n->next)
- term_vspace(p);
+ if (MDOC_ELEM == n->type) {
+ synopsis_pre(p, n);
+ return(termp_under_pre(p, pair, m, n));
+ } else if (MDOC_BLOCK == n->type) {
+ synopsis_pre(p, n);
+ return(1);
+ } else if (MDOC_HEAD == n->type)
+ return(0);
+
+ return(termp_under_pre(p, pair, m, n));
}
@@ -1353,11 +1396,12 @@ termp_bold_pre(DECL_ARGS)
/* ARGSUSED */
-static void
-termp_fd_post(DECL_ARGS)
+static int
+termp_fd_pre(DECL_ARGS)
{
- term_newln(p);
+ synopsis_pre(p, n);
+ return(termp_bold_pre(p, pair, m, n));
}
@@ -1511,9 +1555,7 @@ termp_ft_pre(DECL_ARGS)
{
/* NB: MDOC_LINE does not effect this! */
- if (SEC_SYNOPSIS == n->sec && n->prev)
- term_vspace(p);
-
+ synopsis_pre(p, n);
term_fontpush(p, TERMFONT_UNDER);
return(1);
}
@@ -1525,13 +1567,7 @@ termp_fn_pre(DECL_ARGS)
{
const struct mdoc_node *nn;
- /* NB: MDOC_LINE has no effect on this macro! */
- if (SEC_SYNOPSIS == n->sec) {
- if (n->prev && MDOC_Ft == n->prev->tok)
- term_newln(p);
- else if (n->prev)
- term_vspace(p);
- }
+ synopsis_pre(p, n);
term_fontpush(p, TERMFONT_BOLD);
term_word(p, n->child->string);
@@ -1559,17 +1595,6 @@ termp_fn_pre(DECL_ARGS)
/* ARGSUSED */
-static void
-termp_fn_post(DECL_ARGS)
-{
-
- /* NB: MDOC_LINE has no effect on this macro! */
- if (SEC_SYNOPSIS == n->sec)
- term_newln(p);
-}
-
-
-/* ARGSUSED */
static int
termp_fa_pre(DECL_ARGS)
{
@@ -1834,8 +1859,8 @@ static int
termp_cd_pre(DECL_ARGS)
{
+ synopsis_pre(p, n);
term_fontpush(p, TERMFONT_BOLD);
- term_newln(p);
return(1);
}
@@ -1845,8 +1870,7 @@ static int
termp_in_pre(DECL_ARGS)
{
- if (SEC_SYNOPSIS == n->sec && n->prev && MDOC_In != n->prev->tok)
- term_vspace(p);
+ synopsis_pre(p, n);
if (SEC_SYNOPSIS == n->sec && MDOC_LINE & n->flags) {
term_fontpush(p, TERMFONT_BOLD);
@@ -1867,16 +1891,14 @@ static void
termp_in_post(DECL_ARGS)
{
- if (SEC_SYNOPSIS == n->sec && MDOC_LINE & n->flags)
+ if (SEC_SYNOPSIS == n->sec)
term_fontpush(p, TERMFONT_BOLD);
p->flags |= TERMP_NOSPACE;
term_word(p, ">");
- if (SEC_SYNOPSIS == n->sec && MDOC_LINE & n->flags) {
+ if (SEC_SYNOPSIS == n->sec)
term_fontpop(p);
- term_newln(p);
- }
}
@@ -1987,13 +2009,7 @@ termp_fo_pre(DECL_ARGS)
{
if (MDOC_BLOCK == n->type) {
- /* NB: MDOC_LINE has no effect on this macro! */
- if (SEC_SYNOPSIS != n->sec)
- return(1);
- if (n->prev && MDOC_Ft == n->prev->tok)
- term_newln(p);
- else if (n->prev)
- term_vspace(p);
+ synopsis_pre(p, n);
return(1);
} else if (MDOC_BODY == n->type) {
p->flags |= TERMP_NOSPACE;
@@ -2017,17 +2033,15 @@ static void
termp_fo_post(DECL_ARGS)
{
- if (MDOC_BLOCK == n->type) {
- /* NB: MDOC_LINE has no effect on this macro! */
- if (SEC_SYNOPSIS == n->sec)
- term_newln(p);
- } else if (MDOC_BODY == n->type) {
+ if (MDOC_BODY != n->type)
+ return;
+
+ p->flags |= TERMP_NOSPACE;
+ term_word(p, ")");
+
+ if (SEC_SYNOPSIS == n->sec) {
p->flags |= TERMP_NOSPACE;
- term_word(p, ")");
- if (SEC_SYNOPSIS == n->sec) {
- p->flags |= TERMP_NOSPACE;
- term_word(p, ";");
- }
+ term_word(p, ";");
}
}
diff --git a/regress/mdoc/Cd/cd.in b/regress/mdoc/Cd/cd.in
new file mode 100644
index 00000000..82e6b0a8
--- /dev/null
+++ b/regress/mdoc/Cd/cd.in
@@ -0,0 +1,14 @@
+.Dd $Mdocdate$
+.Dt FOO 1
+.Os
+.Sh NAME
+.Nm foo
+.Nd bar
+.Sh SYNOPSIS
+.Cd "it* at isa? port 0x2e"
+.Cd "it* at isa? port 0x2e"
+.Cd "it* at isa? port 0x2e"
+.Sh DESCRIPTION
+.Cd "it* at isa? port 0x2e"
+.Cd "it* at isa? port 0x2e"
+.Cd "it* at isa? port 0x2e"
diff --git a/regress/mdoc/Fd/fd.in b/regress/mdoc/Fd/fd.in
deleted file mode 100644
index a4a5e0ac..00000000
--- a/regress/mdoc/Fd/fd.in
+++ /dev/null
@@ -1,22 +0,0 @@
-.Dd $Mdocdate$
-.Dt FOO
-.Os
-.Sh NAME
-.Nm foo
-.Nd bar
-.Sh SYNOPSIS
-1
-.Fl
-.Fd 2 3 4
-.Fd 3
-4
-.Sh DESCRIPTION
-1
-.Fd 2
-.Fd 3
-4
-.Sh BLAH
-1
-.Fd 2
-.Fd 3
-4
diff --git a/regress/mdoc/Fn/fn1.in b/regress/mdoc/Fn/fn1.in
deleted file mode 100644
index 02a17aca..00000000
--- a/regress/mdoc/Fn/fn1.in
+++ /dev/null
@@ -1,21 +0,0 @@
-.Dd $Mdocdate$
-.Dt FOO 1
-.Os
-.Sh NAME
-.Nm foo
-.Nd bar
-.Sh SYNOPSIS
-1
-.In 2
-a
-.Fn 3
-.Fn 4 5 6
-.Ar a Fn 4
-5
-.Sh DESCRIPTION
-1
-.In 2
-.Fn 3
-.Fn 3 4 5
-.Ar a Fn 6
-4
diff --git a/regress/mdoc/Fo/fo0.in b/regress/mdoc/Fo/fo0.in
deleted file mode 100644
index 4ff66510..00000000
--- a/regress/mdoc/Fo/fo0.in
+++ /dev/null
@@ -1,32 +0,0 @@
-.Dd $Mdocdate$
-.Dt FOO 1
-.Os
-.Sh NAME
-.Nm foo
-.Nd bar
-.Sh SYNOPSIS
-.Fn b
-a
-.Fo b
-.Fc
-.Fo "a b c"
-.Fc
-.Ft "a"
-.Fo "b c"
-.Fc
-.Ft "a b"
-.Fo "b c" "d e"
-.Fc
-.Sh DESCRIPTION
-.Fn b
-a
-.Fo b
-.Fc
-.Fo "a b c"
-.Fc
-.Ft "a"
-.Fo "b c"
-.Fc
-.Ft "a b"
-.Fo "b c" "d e"
-.Fc
diff --git a/regress/mdoc/Ft/ft0.in b/regress/mdoc/Ft/ft0.in
deleted file mode 100644
index d7f6cc68..00000000
--- a/regress/mdoc/Ft/ft0.in
+++ /dev/null
@@ -1,25 +0,0 @@
-.Dd $Mdocdate$
-.Dt FOO 1
-.Os
-.Sh NAME
-.Nm foo
-.Nd bar
-.Sh SYNOPSIS
-.Fn b \" Get this out of the way.
-.Ft a
-.Ft b
-a
-.Ft "c d"
-b
-.Ar foo
-.Ft "c d"
-.Ar bar
-.Sh DESCRIPTION
-.Ft a
-.Ft b
-a
-.Ft "c d"
-b
-.Ar foo
-.Ft "c d"
-.Ar bar
diff --git a/regress/mdoc/In/in.in b/regress/mdoc/In/in.in
deleted file mode 100644
index 28831768..00000000
--- a/regress/mdoc/In/in.in
+++ /dev/null
@@ -1,24 +0,0 @@
-.\" THIS WILL PUKE HORRIBLY ON OLD GROFF, WHICH HAS COMPLETELY
-.\" DIFFERENT ("BAD") BEHAVIOUR.
-.Dd $Mdocdate$
-.Dt FOO 1
-.Os
-.Sh NAME
-.Nm foo
-.Nd bar
-.Sh SYNOPSIS
-1
-.In 2 3
-6
-.In 2 3
-.Qq In 2
-.Fd a
-6
-.In 4
-5
-.Sh DESCRIPTION
-1
-.In 2 3
-6
-.In 4
-5