summaryrefslogtreecommitdiffstats
path: root/mandoc.c
diff options
context:
space:
mode:
Diffstat (limited to 'mandoc.c')
-rw-r--r--mandoc.c29
1 files changed, 20 insertions, 9 deletions
diff --git a/mandoc.c b/mandoc.c
index c08465ff..e3e95a31 100644
--- a/mandoc.c
+++ b/mandoc.c
@@ -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);