version 1.37, 2011/03/07 01:35:51 |
version 1.40, 2011/03/17 09:16:38 |
Line 354 mandoc_getarg(char **cpp, mandocmsg msg, void *data, i |
|
Line 354 mandoc_getarg(char **cpp, mandocmsg msg, void *data, i |
|
while (' ' == *cp) |
while (' ' == *cp) |
cp++; |
cp++; |
} |
} |
*pos += (cp - start) + (quoted ? 1 : 0); |
*pos += (int)(cp - start) + (quoted ? 1 : 0); |
*cpp = cp; |
*cpp = cp; |
|
|
if ('\0' == *cp && msg && (white || ' ' == cp[-1])) |
if ('\0' == *cp && msg && (white || ' ' == cp[-1])) |
Line 363 mandoc_getarg(char **cpp, mandocmsg msg, void *data, i |
|
Line 363 mandoc_getarg(char **cpp, mandocmsg msg, void *data, i |
|
return(start); |
return(start); |
} |
} |
|
|
|
|
static int |
static int |
a2time(time_t *t, const char *fmt, const char *p) |
a2time(time_t *t, const char *fmt, const char *p) |
{ |
{ |
Line 381 a2time(time_t *t, const char *fmt, const char *p) |
|
Line 380 a2time(time_t *t, const char *fmt, const char *p) |
|
return(0); |
return(0); |
} |
} |
|
|
|
|
static char * |
static char * |
time2a(time_t t) |
time2a(time_t t) |
{ |
{ |
struct tm tm; |
struct tm tm; |
char buf[DATESIZE]; |
char *buf, *p; |
char *p; |
size_t ssz; |
size_t nsz, rsz; |
|
int isz; |
int isz; |
|
|
localtime_r(&t, &tm); |
localtime_r(&t, &tm); |
|
|
p = buf; |
/* |
rsz = DATESIZE; |
* Reserve space: |
|
* up to 9 characters for the month (September) + blank |
|
* up to 2 characters for the day + comma + blank |
|
* 4 characters for the year and a terminating '\0' |
|
*/ |
|
p = buf = mandoc_malloc(10 + 4 + 4 + 1); |
|
|
if (0 == (nsz = strftime(p, rsz, "%B ", &tm))) |
if (0 == (ssz = strftime(p, 10 + 1, "%B ", &tm))) |
return(NULL); |
goto fail; |
|
p += (int)ssz; |
|
|
p += (int)nsz; |
if (-1 == (isz = snprintf(p, 4 + 1, "%d, ", tm.tm_mday))) |
rsz -= nsz; |
goto fail; |
|
|
if (-1 == (isz = snprintf(p, rsz, "%d, ", tm.tm_mday))) |
|
return(NULL); |
|
|
|
p += isz; |
p += isz; |
rsz -= isz; |
|
|
|
return(strftime(p, rsz, "%Y", &tm) ? buf : NULL); |
if (0 == strftime(p, 4 + 1, "%Y", &tm)) |
|
goto fail; |
|
return(buf); |
|
|
|
fail: |
|
free(buf); |
|
return(NULL); |
} |
} |
|
|
|
|
char * |
char * |
mandoc_normdate(char *in, mandocmsg msg, void *data, int ln, int pos) |
mandoc_normdate(char *in, mandocmsg msg, void *data, int ln, int pos) |
{ |
{ |
Line 430 mandoc_normdate(char *in, mandocmsg msg, void *data, i |
|
Line 433 mandoc_normdate(char *in, mandocmsg msg, void *data, i |
|
t = 0; |
t = 0; |
} |
} |
out = t ? time2a(t) : NULL; |
out = t ? time2a(t) : NULL; |
return(mandoc_strdup(out ? out : in)); |
return(out ? out : mandoc_strdup(in)); |
} |
} |
|
|
|
|
int |
int |
mandoc_eos(const char *p, size_t sz, int enclosed) |
mandoc_eos(const char *p, size_t sz, int enclosed) |
{ |
{ |
Line 477 mandoc_eos(const char *p, size_t sz, int enclosed) |
|
Line 479 mandoc_eos(const char *p, size_t sz, int enclosed) |
|
return(found && !enclosed); |
return(found && !enclosed); |
} |
} |
|
|
|
|
int |
int |
mandoc_hyph(const char *start, const char *c) |
mandoc_hyph(const char *start, const char *c) |
{ |
{ |
Line 503 mandoc_hyph(const char *start, const char *c) |
|
Line 504 mandoc_hyph(const char *start, const char *c) |
|
return(0); |
return(0); |
|
|
return(1); |
return(1); |
|
} |
|
|
|
/* |
|
* Check if a string is a punctuation delimiter. This only applies to |
|
* mdoc(7) documents, but as it's used in both front-ends and back-ends, |
|
* it needs to go here (instead of, say, in libmdoc.h). |
|
*/ |
|
enum mdelim |
|
mandoc_isdelim(const char *p) |
|
{ |
|
|
|
if ('\0' == p[0]) |
|
return(DELIM_NONE); |
|
|
|
if ('\0' == p[1]) |
|
switch (p[0]) { |
|
case('('): |
|
/* FALLTHROUGH */ |
|
case('['): |
|
return(DELIM_OPEN); |
|
case('|'): |
|
return(DELIM_MIDDLE); |
|
case('.'): |
|
/* FALLTHROUGH */ |
|
case(','): |
|
/* FALLTHROUGH */ |
|
case(';'): |
|
/* FALLTHROUGH */ |
|
case(':'): |
|
/* FALLTHROUGH */ |
|
case('?'): |
|
/* FALLTHROUGH */ |
|
case('!'): |
|
/* FALLTHROUGH */ |
|
case(')'): |
|
/* FALLTHROUGH */ |
|
case(']'): |
|
return(DELIM_CLOSE); |
|
default: |
|
return(DELIM_NONE); |
|
} |
|
|
|
if ('\\' != p[0]) |
|
return(DELIM_NONE); |
|
|
|
if (0 == strcmp(p, "\\.")) |
|
return(DELIM_CLOSE); |
|
if (0 == strcmp(p, "\\*(Ba")) |
|
return(DELIM_MIDDLE); |
|
|
|
return(DELIM_NONE); |
} |
} |