summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2017-06-27 12:18:00 +0000
committerIngo Schwarze <schwarze@openbsd.org>2017-06-27 12:18:00 +0000
commite9817d1eee252f2a60704c140932abd01803441b (patch)
treecbeb21eb9bd60a58cd0da3b9275fbc86284fda68
parent7a652daded74f9e8becb34e9dca1d6202eae46fe (diff)
downloadmandoc-e9817d1eee252f2a60704c140932abd01803441b.tar.gz
warn about .Ns macros that have no effect because they are followed
by an isolated closing delimiter; inspired by mdoclint
-rw-r--r--mandoc.14
-rw-r--r--mdoc_validate.c7
-rw-r--r--regress/mdoc/Ns/position.in8
-rw-r--r--regress/mdoc/Ns/position.out_ascii6
-rw-r--r--regress/mdoc/Ns/position.out_lint3
-rw-r--r--regress/mdoc/Ns/position.out_markdown8
6 files changed, 29 insertions, 7 deletions
diff --git a/mandoc.1 b/mandoc.1
index 1d731558..4d5eeb94 100644
--- a/mandoc.1
+++ b/mandoc.1
@@ -1175,7 +1175,9 @@ The paragraph macro is moved after the end of the list.
.Pq mdoc
An input line begins with an
.Ic \&Ns
-macro.
+macro, or the next argument after an
+.Ic \&Ns
+macro is an isolated closing delimiter.
The macro is ignored.
.It Sy "blocks badly nested"
.Pq mdoc
diff --git a/mdoc_validate.c b/mdoc_validate.c
index 42a51afd..5be54f6b 100644
--- a/mdoc_validate.c
+++ b/mdoc_validate.c
@@ -1983,10 +1983,13 @@ post_hyph(POST_ARGS)
static void
post_ns(POST_ARGS)
{
+ struct roff_node *n;
- if (mdoc->last->flags & NODE_LINE)
+ n = mdoc->last;
+ if (n->flags & NODE_LINE ||
+ (n->next != NULL && n->next->flags & NODE_DELIMC))
mandoc_msg(MANDOCERR_NS_SKIP, mdoc->parse,
- mdoc->last->line, mdoc->last->pos, NULL);
+ n->line, n->pos, NULL);
}
static void
diff --git a/regress/mdoc/Ns/position.in b/regress/mdoc/Ns/position.in
index 1325df25..56fc5de6 100644
--- a/regress/mdoc/Ns/position.in
+++ b/regress/mdoc/Ns/position.in
@@ -1,4 +1,4 @@
-.Dd September 15, 2013
+.Dd June 27, 2017
.Dt NS-POSITION 1
.Os OpenBSD
.Sh NAME
@@ -20,6 +20,12 @@ After some macro and a block closing:
In the middle of a macro line:
.Oo before Oc Ns Op after
.Pp
+After closing punctuation:
+.Oo before Oc : Ns Op after
+.Pp
+Before closing punctuation:
+.Oo before Oc Ns : Op after
+.Pp
At the end of a macro line:
.Oo before Oc Ns
.Op after
diff --git a/regress/mdoc/Ns/position.out_ascii b/regress/mdoc/Ns/position.out_ascii
index a2bd6c45..26de0562 100644
--- a/regress/mdoc/Ns/position.out_ascii
+++ b/regress/mdoc/Ns/position.out_ascii
@@ -12,8 +12,12 @@ DDEESSCCRRIIPPTTIIOONN
In the middle of a macro line: [before][after]
+ After closing punctuation: [before]:[after]
+
+ Before closing punctuation: [before]: [after]
+
At the end of a macro line: [before][after]
At the end of partial implicit: [before][after]
-OpenBSD September 15, 2013 OpenBSD
+OpenBSD June 27, 2017 OpenBSD
diff --git a/regress/mdoc/Ns/position.out_lint b/regress/mdoc/Ns/position.out_lint
index 91695895..aa1f3275 100644
--- a/regress/mdoc/Ns/position.out_lint
+++ b/regress/mdoc/Ns/position.out_lint
@@ -1,4 +1,5 @@
mandoc: position.in:3:5: BASE: operating system explicitly specified: Os OpenBSD (OpenBSD)
-mandoc: position.in:1:5: BASE: Mdocdate missing: Dd September (OpenBSD)
+mandoc: position.in:1:5: BASE: Mdocdate missing: Dd June (OpenBSD)
mandoc: position.in:10:2: WARNING: skipping no-space macro
+mandoc: position.in:27:15: WARNING: skipping no-space macro
mandoc: position.in: BASE: RCS id missing: (OpenBSD)
diff --git a/regress/mdoc/Ns/position.out_markdown b/regress/mdoc/Ns/position.out_markdown
index 14414a3e..8b6c509c 100644
--- a/regress/mdoc/Ns/position.out_markdown
+++ b/regress/mdoc/Ns/position.out_markdown
@@ -20,10 +20,16 @@ still before]\[after]
In the middle of a macro line:
\[before]\[after]
+After closing punctuation:
+\[before]:\[after]
+
+Before closing punctuation:
+\[before]: \[after]
+
At the end of a macro line:
\[before]\[after]
At the end of partial implicit:
\[before]\[after]
-OpenBSD - September 15, 2013
+OpenBSD - June 27, 2017