aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/mandoc.c
diff options
context:
space:
mode:
authorKristaps Dzonsons <kristaps@bsd.lv>2011-07-27 07:06:29 +0000
committerKristaps Dzonsons <kristaps@bsd.lv>2011-07-27 07:06:29 +0000
commit9b45ea9374c6a536a053d5e474e212ae1bf3b1e1 (patch)
tree847c998ff91c21e8c192f5f7f94c00b3b77756b7 /mandoc.c
parentedfe717a2cde0b31723aaea6e36654db652643c9 (diff)
downloadmandoc-9b45ea9374c6a536a053d5e474e212ae1bf3b1e1.tar.gz
mandoc-9b45ea9374c6a536a053d5e474e212ae1bf3b1e1.tar.zst
mandoc-9b45ea9374c6a536a053d5e474e212ae1bf3b1e1.zip
Update mandoc_hyph() to the extent that numbers on either side of the
hyphen make for a non-breakable hyphen. Found by random testing.
Diffstat (limited to 'mandoc.c')
-rw-r--r--mandoc.c31
1 files changed, 21 insertions, 10 deletions
diff --git a/mandoc.c b/mandoc.c
index 74c47db3..8c470f9c 100644
--- a/mandoc.c
+++ b/mandoc.c
@@ -1,4 +1,4 @@
-/* $Id: mandoc.c,v 1.56 2011/07/24 18:15:14 kristaps Exp $ */
+/* $Id: mandoc.c,v 1.57 2011/07/27 07:06:29 kristaps Exp $ */
/*
* Copyright (c) 2008, 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2011 Ingo Schwarze <schwarze@openbsd.org>
@@ -653,28 +653,39 @@ mandoc_eos(const char *p, size_t sz, int enclosed)
return(found && !enclosed);
}
+/*
+ * Choose whether to break at a hyphenated character (identified by the
+ * ASCII_HYPH value in the input string).
+ */
int
mandoc_hyph(const char *start, const char *c)
{
+ char l, r;
- /*
- * Choose whether to break at a hyphenated character. We only
- * do this if it's free-standing within a word.
- */
+ l = *(c - 1);
+ r = *(c + 1);
/* Skip first/last character of buffer. */
- if (c == start || '\0' == *(c + 1))
+ if (c == start || '\0' == r)
+ return(0);
+
+ /* Skip a number on either side of the hyphen. */
+ if (isdigit((unsigned char)r) || isdigit((unsigned char)l))
return(0);
+
/* Skip first/last character of word. */
- if ('\t' == *(c + 1) || '\t' == *(c - 1))
+ if ('\t' == r || '\t' == l)
return(0);
- if (' ' == *(c + 1) || ' ' == *(c - 1))
+
+ if (' ' == r || ' ' == l)
return(0);
+
/* Skip double invocations. */
- if ('-' == *(c + 1) || '-' == *(c - 1))
+ if ('-' == r || '-' == l)
return(0);
+
/* Skip escapes. */
- if ('\\' == *(c - 1))
+ if ('\\' == l)
return(0);
return(1);