summaryrefslogtreecommitdiffstats
path: root/mandoc.c
diff options
context:
space:
mode:
authorKristaps Dzonsons <kristaps@bsd.lv>2010-05-15 06:48:13 +0000
committerKristaps Dzonsons <kristaps@bsd.lv>2010-05-15 06:48:13 +0000
commit63c50855905c3409df3d977f38d5877dc487bde6 (patch)
tree8a1cc509b171c815e9f38e86148c2b10b5160183 /mandoc.c
parentd28c055c917bb340595af7ae9850188b6613e28d (diff)
downloadmandoc-63c50855905c3409df3d977f38d5877dc487bde6.tar.gz
More EOS: append_delims() fitted with EOS detection, so ANY macro with appended delimiters will properly EOS.
Fixed mandoc_eos() to accept sentence punctuation followed by close-delim buffers.
Diffstat (limited to 'mandoc.c')
-rw-r--r--mandoc.c38
1 files changed, 26 insertions, 12 deletions
diff --git a/mandoc.c b/mandoc.c
index ce480a9f..5ed306c6 100644
--- a/mandoc.c
+++ b/mandoc.c
@@ -308,19 +308,33 @@ mandoc_eos(const char *p, size_t sz)
if (0 == sz)
return(0);
- switch (p[(int)sz - 1]) {
- case ('.'):
- /* Escaped periods. */
- if (sz > 1 && '\\' == p[(int)sz - 2])
+ /*
+ * End-of-sentence recognition must include situations where
+ * some symbols, such as `)', allow prior EOS punctuation to
+ * propogate outward.
+ */
+
+ for ( ; sz; sz--) {
+ switch (p[(int)sz - 1]) {
+ case ('\"'):
+ /* FALLTHROUGH */
+ case ('\''):
+ /* FALLTHROUGH */
+ case (')'):
+ break;
+ case ('.'):
+ /* Escaped periods. */
+ if (sz > 1 && '\\' == p[(int)sz - 2])
+ return(0);
+ /* FALLTHROUGH */
+ case ('!'):
+ /* FALLTHROUGH */
+ case ('?'):
+ return(1);
+ default:
return(0);
- /* FALLTHROUGH */
- case ('!'):
- /* FALLTHROUGH */
- case ('?'):
- break;
- default:
- return(0);
+ }
}
- return(1);
+ return(0);
}