version 1.7, 2009/11/02 06:22:45 |
version 1.11, 2010/04/07 11:25:38 |
|
|
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
*/ |
*/ |
#if defined(__linux__) || defined(__MINT__) |
#ifdef HAVE_CONFIG_H |
# define _GNU_SOURCE /* strptime() */ |
#include "config.h" |
#endif |
#endif |
|
|
#include <sys/types.h> |
#include <sys/types.h> |
Line 35 static int a2time(time_t *, const char *, const char |
|
Line 35 static int a2time(time_t *, const char *, const char |
|
int |
int |
mandoc_special(const char *p) |
mandoc_special(const char *p) |
{ |
{ |
int c; |
int terminator; /* Terminator for \s. */ |
|
int lim; /* Limit for N in \s. */ |
|
int c, i; |
|
|
if ('\\' != *p++) |
if ('\\' != *p++) |
return(0); |
return(0); |
|
|
switch (*p) { |
switch (*p) { |
case ('\\'): |
|
/* FALLTHROUGH */ |
|
case ('\''): |
case ('\''): |
/* FALLTHROUGH */ |
/* FALLTHROUGH */ |
case ('`'): |
case ('`'): |
Line 73 mandoc_special(const char *p) |
|
Line 73 mandoc_special(const char *p) |
|
return(2); |
return(2); |
case ('e'): |
case ('e'): |
return(2); |
return(2); |
case ('f'): |
case ('s'): |
if (0 == *++p || ! isgraph((u_char)*p)) |
if ('\0' == *++p) |
|
return(2); |
|
|
|
c = 2; |
|
terminator = 0; |
|
lim = 1; |
|
|
|
if (*p == '\'') { |
|
lim = 0; |
|
terminator = 1; |
|
++p; |
|
++c; |
|
} else if (*p == '[') { |
|
lim = 0; |
|
terminator = 2; |
|
++p; |
|
++c; |
|
} else if (*p == '(') { |
|
lim = 2; |
|
terminator = 3; |
|
++p; |
|
++c; |
|
} |
|
|
|
if (*p == '+' || *p == '-') { |
|
++p; |
|
++c; |
|
} |
|
|
|
if (*p == '\'') { |
|
if (terminator) |
|
return(0); |
|
lim = 0; |
|
terminator = 1; |
|
++p; |
|
++c; |
|
} else if (*p == '[') { |
|
if (terminator) |
|
return(0); |
|
lim = 0; |
|
terminator = 2; |
|
++p; |
|
++c; |
|
} else if (*p == '(') { |
|
if (terminator) |
|
return(0); |
|
lim = 2; |
|
terminator = 3; |
|
++p; |
|
++c; |
|
} |
|
|
|
/* TODO: needs to handle floating point. */ |
|
|
|
if ( ! isdigit((u_char)*p)) |
return(0); |
return(0); |
return(3); |
|
|
for (i = 0; isdigit((u_char)*p); i++) { |
|
if (lim && i >= lim) |
|
break; |
|
++p; |
|
++c; |
|
} |
|
|
|
if (terminator && terminator < 3) { |
|
if (1 == terminator && *p != '\'') |
|
return(0); |
|
if (2 == terminator && *p != ']') |
|
return(0); |
|
++p; |
|
++c; |
|
} |
|
|
|
return(c); |
|
case ('f'): |
|
/* FALLTHROUGH */ |
|
case ('F'): |
|
/* FALLTHROUGH */ |
case ('*'): |
case ('*'): |
if (0 == *++p || ! isgraph((u_char)*p)) |
if (0 == *++p || ! isgraph((u_char)*p)) |
return(0); |
return(0); |