=================================================================== RCS file: /cvs/mandoc/mandoc.c,v retrieving revision 1.59 retrieving revision 1.60 diff -u -p -r1.59 -r1.60 --- mandoc/mandoc.c 2011/09/18 14:14:15 1.59 +++ mandoc/mandoc.c 2011/10/24 20:30:57 1.60 @@ -1,4 +1,4 @@ -/* $Id: mandoc.c,v 1.59 2011/09/18 14:14:15 schwarze Exp $ */ +/* $Id: mandoc.c,v 1.60 2011/10/24 20:30:57 schwarze Exp $ */ /* * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons * Copyright (c) 2011 Ingo Schwarze @@ -161,8 +161,7 @@ mandoc_escape(const char **end, const char **start, in case ('V'): /* FALLTHROUGH */ case ('Y'): - if (ESCAPE_ERROR == gly) - gly = ESCAPE_IGNORE; + gly = ESCAPE_IGNORE; /* FALLTHROUGH */ case ('f'): if (ESCAPE_ERROR == gly) @@ -222,11 +221,8 @@ mandoc_escape(const char **end, const char **start, in case ('L'): /* FALLTHROUGH */ case ('l'): + gly = ESCAPE_NUMBERED; /* FALLTHROUGH */ - case ('N'): - if (ESCAPE_ERROR == gly) - gly = ESCAPE_NUMBERED; - /* FALLTHROUGH */ case ('S'): /* FALLTHROUGH */ case ('v'): @@ -240,6 +236,26 @@ mandoc_escape(const char **end, const char **start, in return(ESCAPE_ERROR); term = numeric = '\''; break; + + /* + * Special handling for the numbered character escape. + * XXX Do any other escapes need similar handling? + */ + case ('N'): + if ('\0' == cp[i]) + return(ESCAPE_ERROR); + *end = &cp[++i]; + if (isdigit((unsigned char)cp[i-1])) + return(ESCAPE_IGNORE); + while (isdigit((unsigned char)**end)) + (*end)++; + if (start) + *start = &cp[i]; + if (sz) + *sz = *end - &cp[i]; + if ('\0' != **end) + (*end)++; + return(ESCAPE_NUMBERED); /* * Sizes get a special category of their own.