version 1.39, 2011/03/15 16:23:51 |
version 1.42, 2011/03/20 16:02:05 |
Line 296 mandoc_strdup(const char *ptr) |
|
Line 296 mandoc_strdup(const char *ptr) |
|
* or to the null byte terminating the argument line. |
* or to the null byte terminating the argument line. |
*/ |
*/ |
char * |
char * |
mandoc_getarg(char **cpp, mandocmsg msg, void *data, int ln, int *pos) |
mandoc_getarg(struct mparse *parse, char **cpp, int ln, int *pos) |
{ |
{ |
char *start, *cp; |
char *start, *cp; |
int quoted, pairs, white; |
int quoted, pairs, white; |
Line 343 mandoc_getarg(char **cpp, mandocmsg msg, void *data, i |
|
Line 343 mandoc_getarg(char **cpp, mandocmsg msg, void *data, i |
|
} |
} |
|
|
/* Quoted argument without a closing quote. */ |
/* Quoted argument without a closing quote. */ |
if (1 == quoted && msg) |
if (1 == quoted) |
(*msg)(MANDOCERR_BADQUOTE, data, ln, *pos, NULL); |
mandoc_msg(MANDOCERR_BADQUOTE, parse, ln, *pos, NULL); |
|
|
/* Null-terminate this argument and move to the next one. */ |
/* Null-terminate this argument and move to the next one. */ |
if (pairs) |
if (pairs) |
Line 357 mandoc_getarg(char **cpp, mandocmsg msg, void *data, i |
|
Line 357 mandoc_getarg(char **cpp, mandocmsg msg, void *data, i |
|
*pos += (int)(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 && (white || ' ' == cp[-1])) |
(*msg)(MANDOCERR_EOLNSPACE, data, ln, *pos, NULL); |
mandoc_msg(MANDOCERR_EOLNSPACE, parse, ln, *pos, NULL); |
|
|
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) |
{ |
{ |
|
|
return(NULL); |
return(NULL); |
} |
} |
|
|
|
|
char * |
char * |
mandoc_normdate(char *in, mandocmsg msg, void *data, int ln, int pos) |
mandoc_normdate(struct mparse *parse, char *in, int ln, int pos) |
{ |
{ |
char *out; |
char *out; |
time_t t; |
time_t t; |
|
|
if (NULL == in || '\0' == *in || |
if (NULL == in || '\0' == *in || |
0 == strcmp(in, "$" "Mdocdate$")) { |
0 == strcmp(in, "$" "Mdocdate$")) { |
(*msg)(MANDOCERR_NODATE, data, ln, pos, NULL); |
mandoc_msg(MANDOCERR_NODATE, parse, ln, pos, NULL); |
time(&t); |
time(&t); |
} |
} |
else if (!a2time(&t, "$" "Mdocdate: %b %d %Y $", in) && |
else if (!a2time(&t, "$" "Mdocdate: %b %d %Y $", in) && |
!a2time(&t, "%b %d, %Y", in) && |
!a2time(&t, "%b %d, %Y", in) && |
!a2time(&t, "%Y-%m-%d", in)) { |
!a2time(&t, "%Y-%m-%d", in)) { |
(*msg)(MANDOCERR_BADDATE, data, ln, pos, NULL); |
mandoc_msg(MANDOCERR_BADDATE, parse, ln, pos, NULL); |
t = 0; |
t = 0; |
} |
} |
out = t ? time2a(t) : NULL; |
out = t ? time2a(t) : NULL; |
return(out ? out : mandoc_strdup(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 483 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 509 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 + 1, ".")) |
|
return(DELIM_CLOSE); |
|
if (0 == strcmp(p + 1, "*(Ba")) |
|
return(DELIM_MIDDLE); |
|
|
|
return(DELIM_NONE); |
} |
} |