summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--regress/mdoc/Tg/Makefile8
-rw-r--r--regress/mdoc/Tg/implicit.in14
-rw-r--r--regress/mdoc/Tg/implicit.out_ascii13
-rw-r--r--regress/mdoc/Tg/implicit.out_html2
-rw-r--r--regress/mdoc/Tg/implicit.out_markdown15
-rw-r--r--regress/mdoc/Tg/implicit.out_tag3
-rw-r--r--tag.c19
7 files changed, 67 insertions, 7 deletions
diff --git a/regress/mdoc/Tg/Makefile b/regress/mdoc/Tg/Makefile
index d67ec5af..83ae4160 100644
--- a/regress/mdoc/Tg/Makefile
+++ b/regress/mdoc/Tg/Makefile
@@ -1,9 +1,9 @@
-# $OpenBSD: Makefile,v 1.2 2020/04/06 09:55:50 schwarze Exp $
+# $OpenBSD: Makefile,v 1.3 2022/04/26 11:28:35 schwarze Exp $
-REGRESS_TARGETS = column list warn
-TAG_TARGETS = column list warn
+REGRESS_TARGETS = column implicit list warn
+TAG_TARGETS = column implicit list warn
LINT_TARGETS = warn
-HTML_TARGETS = column list warn
+HTML_TARGETS = column implicit list warn
SKIP_TMAN = column
diff --git a/regress/mdoc/Tg/implicit.in b/regress/mdoc/Tg/implicit.in
new file mode 100644
index 00000000..1f89f3e5
--- /dev/null
+++ b/regress/mdoc/Tg/implicit.in
@@ -0,0 +1,14 @@
+.\" $OpenBSD: implicit.in,v 1.1 2022/04/26 11:28:35 schwarze Exp $
+.Dd $Mdocdate$
+.Dt TG-IMPLICIT 1
+.Os
+.Sh NAME
+.Nm Tg-implicit
+.Nd overriding implicit tagging
+.Sh DESCRIPTION
+BEGINTEST
+.Pp
+.Tg explicit
+.Sy implicit is unsused
+.Pp
+ENDTEST
diff --git a/regress/mdoc/Tg/implicit.out_ascii b/regress/mdoc/Tg/implicit.out_ascii
new file mode 100644
index 00000000..e3618686
--- /dev/null
+++ b/regress/mdoc/Tg/implicit.out_ascii
@@ -0,0 +1,13 @@
+TG-IMPLICIT(1) General Commands Manual TG-IMPLICIT(1)
+
+NNAAMMEE
+ TTgg--iimmpplliicciitt - overriding implicit tagging
+
+DDEESSCCRRIIPPTTIIOONN
+ BEGINTEST
+
+ iimmpplliicciitt iiss uunnssuusseedd
+
+ ENDTEST
+
+OpenBSD April 26, 2022 OpenBSD
diff --git a/regress/mdoc/Tg/implicit.out_html b/regress/mdoc/Tg/implicit.out_html
new file mode 100644
index 00000000..93df918d
--- /dev/null
+++ b/regress/mdoc/Tg/implicit.out_html
@@ -0,0 +1,2 @@
+<p class="Pp" id="explicit"><a class="permalink" href="#explicit"><b class="Sy">implicit
+ is unsused</b></a></p>
diff --git a/regress/mdoc/Tg/implicit.out_markdown b/regress/mdoc/Tg/implicit.out_markdown
new file mode 100644
index 00000000..6511e441
--- /dev/null
+++ b/regress/mdoc/Tg/implicit.out_markdown
@@ -0,0 +1,15 @@
+TG-IMPLICIT(1) - General Commands Manual
+
+# NAME
+
+**Tg-implicit** - overriding implicit tagging
+
+# DESCRIPTION
+
+BEGINTEST
+
+**implicit is unsused**
+
+ENDTEST
+
+OpenBSD - April 26, 2022
diff --git a/regress/mdoc/Tg/implicit.out_tag b/regress/mdoc/Tg/implicit.out_tag
new file mode 100644
index 00000000..b7b9a927
--- /dev/null
+++ b/regress/mdoc/Tg/implicit.out_tag
@@ -0,0 +1,3 @@
+NAME implicit.mandoc_ascii 3
+DESCRIPTION implicit.mandoc_ascii 6
+explicit implicit.mandoc_ascii 9
diff --git a/tag.c b/tag.c
index abc935ae..40a41eac 100644
--- a/tag.c
+++ b/tag.c
@@ -1,6 +1,7 @@
/* $Id$ */
/*
- * Copyright (c) 2015,2016,2018,2019,2020 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2015, 2016, 2018, 2019, 2020, 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
@@ -80,7 +81,7 @@ tag_free(void)
/*
* Set a node where a term is defined,
- * unless it is already defined at a lower priority.
+ * unless the term is already defined at a lower priority.
*/
void
tag_put(const char *s, int prio, struct roff_node *n)
@@ -93,6 +94,18 @@ tag_put(const char *s, int prio, struct roff_node *n)
assert(prio <= TAG_FALLBACK);
+ /*
+ * If the node is already tagged, the existing tag is
+ * explicit and we are now about to add an implicit tag.
+ * Don't do that; just skip implicit tagging if the author
+ * specified an explicit tag.
+ */
+
+ if (n->flags & NODE_ID)
+ return;
+
+ /* Determine the implicit tag. */
+
if (s == NULL) {
if (n->child == NULL || n->child->type != ROFFT_TEXT)
return;
@@ -150,7 +163,7 @@ tag_put(const char *s, int prio, struct roff_node *n)
*/
else if (entry->prio < prio)
- return;
+ return;
/*
* If the existing entry is worse, clear it.