aboutsummaryrefslogtreecommitdiffstatshomepage
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
commit164c2ced881cacd1340af5361de6bb6bf55b1b51 (patch)
tree426a0365f7adcef91c9e1eb2b7f76d7fe57c50e5 /mandoc.c
parent2f982d9463ec2021851fa038a13f83f1de048de4 (diff)
downloadmandoc-164c2ced881cacd1340af5361de6bb6bf55b1b51.tar.gz
mandoc-164c2ced881cacd1340af5361de6bb6bf55b1b51.tar.zst
mandoc-164c2ced881cacd1340af5361de6bb6bf55b1b51.zip
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.c40
1 files changed, 27 insertions, 13 deletions
diff --git a/mandoc.c b/mandoc.c
index 37216da6..adfafe84 100644
--- a/mandoc.c
+++ b/mandoc.c
@@ -1,4 +1,4 @@
-/* $Id: mandoc.c,v 1.13 2010/05/14 14:09:13 kristaps Exp $ */
+/* $Id: mandoc.c,v 1.14 2010/05/15 06:48:13 kristaps Exp $ */
/*
* Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se>
*
@@ -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);
}