=================================================================== RCS file: /cvs/mandoc/mandoc.c,v retrieving revision 1.56 retrieving revision 1.57 diff -u -p -r1.56 -r1.57 --- mandoc/mandoc.c 2011/07/24 18:15:14 1.56 +++ mandoc/mandoc.c 2011/07/27 07:06:29 1.57 @@ -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 * Copyright (c) 2011 Ingo Schwarze @@ -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);