summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mdoc_state.c48
-rw-r--r--regress/mdoc/Rs/break.in4
-rw-r--r--regress/mdoc/Rs/break.out_ascii6
-rw-r--r--regress/mdoc/Rs/break.out_markdown5
-rw-r--r--regress/mdoc/Rs/break.out_utf86
5 files changed, 33 insertions, 36 deletions
diff --git a/mdoc_state.c b/mdoc_state.c
index eca7a0d4..81e76334 100644
--- a/mdoc_state.c
+++ b/mdoc_state.c
@@ -1,6 +1,6 @@
/* $Id$ */
/*
- * Copyright (c) 2014, 2015, 2017, 2021 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2014,2015,2017,2018,2022 Ingo Schwarze <schwarze@openbsd.org>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -37,6 +37,7 @@
typedef void (*state_handler)(STATE_ARGS);
+static void setsec(struct roff_node *, enum roff_sec);
static void state_bl(STATE_ARGS);
static void state_sh(STATE_ARGS);
static void state_sm(STATE_ARGS);
@@ -208,35 +209,36 @@ state_bl(STATE_ARGS)
}
static void
-state_sh(STATE_ARGS)
+setsec(struct roff_node *n, enum roff_sec sec)
{
struct roff_node *nch;
- char *secname;
- if (n->type != ROFFT_HEAD)
- return;
+ n->sec = sec;
+ for (nch = n->child; nch != NULL; nch = nch->next)
+ setsec(nch, sec);
+}
- if ( ! (n->flags & NODE_VALID)) {
- secname = NULL;
- deroff(&secname, n);
+/*
+ * Set the section attribute for the BLOCK, HEAD, and HEAD children.
+ * For other nodes, including the .Sh BODY, this is done when allocating
+ * the node data structures, but for .Sh BLOCK and HEAD, the section is
+ * still unknown at that time.
+ */
+static void
+state_sh(STATE_ARGS)
+{
+ enum roff_sec sec;
- /*
- * Set the section attribute for the BLOCK, HEAD,
- * and HEAD children; the latter can only be TEXT
- * nodes, so no recursion is needed. For other
- * nodes, including the .Sh BODY, this is done
- * when allocating the node data structures, but
- * for .Sh BLOCK and HEAD, the section is still
- * unknown at that time.
- */
+ if (n->type != ROFFT_HEAD)
+ return;
- n->sec = n->parent->sec = secname == NULL ?
- SEC_CUSTOM : mdoc_a2sec(secname);
- for (nch = n->child; nch != NULL; nch = nch->next)
- nch->sec = n->sec;
- free(secname);
+ if ((n->flags & NODE_VALID) == 0) {
+ sec = n->child != NULL && n->child->type == ROFFT_TEXT &&
+ n->child->next == NULL ? mdoc_a2sec(n->child->string) :
+ SEC_CUSTOM;
+ n->parent->sec = sec;
+ setsec(n, sec);
}
-
if ((mdoc->lastsec = n->sec) == SEC_SYNOPSIS) {
roff_setreg(mdoc->roff, "nS", 1, '=');
mdoc->flags |= MDOC_SYNOPSIS;
diff --git a/regress/mdoc/Rs/break.in b/regress/mdoc/Rs/break.in
index bdae33fe..ebeac4be 100644
--- a/regress/mdoc/Rs/break.in
+++ b/regress/mdoc/Rs/break.in
@@ -1,4 +1,4 @@
-.\" $OpenBSD: break.in,v 1.5 2017/07/04 14:53:26 schwarze Exp $
+.\" $OpenBSD: break.in,v 1.6 2022/08/19 12:49:36 schwarze Exp $
.Dd $Mdocdate$
.Dt RS-BREAK 1
.Os
@@ -20,7 +20,7 @@ reference after a blank line:
.%N 42
.Re
.Sh SEE Em ALSO
-reference after a blank line:
+reference on the same line:
.Rs
.%A author
.%J journal
diff --git a/regress/mdoc/Rs/break.out_ascii b/regress/mdoc/Rs/break.out_ascii
index 0c962583..8426cef1 100644
--- a/regress/mdoc/Rs/break.out_ascii
+++ b/regress/mdoc/Rs/break.out_ascii
@@ -12,8 +12,6 @@ SSEEEE AALLSSOO
author, _j_o_u_r_n_a_l, 42.
SSEEEE _A_L_S_O
- reference after a blank line:
-
- author, _j_o_u_r_n_a_l, 42.
+ reference on the same line: author, _j_o_u_r_n_a_l, 42.
-OpenBSD July 4, 2017 OpenBSD
+OpenBSD August 19, 2022 OpenBSD
diff --git a/regress/mdoc/Rs/break.out_markdown b/regress/mdoc/Rs/break.out_markdown
index ad6adfb3..00b7d01b 100644
--- a/regress/mdoc/Rs/break.out_markdown
+++ b/regress/mdoc/Rs/break.out_markdown
@@ -21,10 +21,9 @@ author,
# SEE *ALSO*
-reference after a blank line:
-
+reference on the same line:
author,
*journal*,
42\.
-OpenBSD - July 4, 2017
+OpenBSD - August 19, 2022
diff --git a/regress/mdoc/Rs/break.out_utf8 b/regress/mdoc/Rs/break.out_utf8
index 9cd3bb59..63400749 100644
--- a/regress/mdoc/Rs/break.out_utf8
+++ b/regress/mdoc/Rs/break.out_utf8
@@ -12,8 +12,6 @@ SSEEEE AALLSSOO
author, _j_o_u_r_n_a_l, 42.
SSEEEE _A_L_S_O
- reference after a blank line:
-
- author, _j_o_u_r_n_a_l, 42.
+ reference on the same line: author, _j_o_u_r_n_a_l, 42.
-OpenBSD July 4, 2017 OpenBSD
+OpenBSD August 19, 2022 OpenBSD