-/* $Id: mandoc.c,v 1.8 2009/11/05 10:16:01 kristaps Exp $ */
+/* $Id: mandoc.c,v 1.15 2010/05/15 07:01:51 kristaps Exp $ */
/*
* Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se>
*
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-#if defined(__linux__) || defined(__MINT__)
-# define _GNU_SOURCE /* strptime() */
+#ifdef HAVE_CONFIG_H
+#include "config.h"
#endif
#include <sys/types.h>
return(0);
switch (*p) {
- case ('\\'):
- /* FALLTHROUGH */
case ('\''):
/* FALLTHROUGH */
case ('`'):
return(2);
case ('e'):
return(2);
- case ('f'):
- if ('\0' == *++p || ! isgraph((u_char)*p))
- return(0);
- return(3);
case ('s'):
if ('\0' == *++p)
return(2);
}
return(c);
+ case ('f'):
+ /* FALLTHROUGH */
+ case ('F'):
+ /* FALLTHROUGH */
case ('*'):
if (0 == *++p || ! isgraph((u_char)*p))
return(0);
return(0);
}
+
+int
+mandoc_eos(const char *p, size_t sz)
+{
+
+ if (0 == sz)
+ return(0);
+
+ /*
+ * 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 (']'):
+ /* FALLTHROUGH */
+ case (')'):
+ break;
+ case ('.'):
+ /* Escaped periods. */
+ if (sz > 1 && '\\' == p[(int)sz - 2])
+ return(0);
+ /* FALLTHROUGH */
+ case ('!'):
+ /* FALLTHROUGH */
+ case ('?'):
+ return(1);
+ default:
+ return(0);
+ }
+ }
+
+ return(0);
+}