version 1.24, 2014/04/07 11:58:35 |
version 1.29, 2014/07/11 20:45:55 |
Line 181 trylink(const char *buf, size_t *start, size_t end, si |
|
Line 181 trylink(const char *buf, size_t *start, size_t end, si |
|
{ |
{ |
size_t linkstart, realend, linkend, |
size_t linkstart, realend, linkend, |
i, j, textsz, stack; |
i, j, textsz, stack; |
const char *text; |
|
|
|
/* |
/* |
* Scan to the start of the terminus. |
* Scan to the start of the terminus. |
Line 218 trylink(const char *buf, size_t *start, size_t end, si |
|
Line 217 trylink(const char *buf, size_t *start, size_t end, si |
|
linkend = dsz > 1 ? realend - 1 : realend; |
linkend = dsz > 1 ? realend - 1 : realend; |
|
|
/* Re-scan to see if we have a title or section. */ |
/* Re-scan to see if we have a title or section. */ |
text = &buf[*start]; |
|
for (textsz = *start; textsz < linkend; textsz++) |
for (textsz = *start; textsz < linkend; textsz++) |
if ('|' == buf[textsz] || '/' == buf[textsz]) |
if ('|' == buf[textsz] || '/' == buf[textsz]) |
break; |
break; |
Line 511 formatcode(struct state *st, const char *buf, size_t * |
|
Line 509 formatcode(struct state *st, const char *buf, size_t * |
|
printf("Ar "); |
printf("Ar "); |
break; |
break; |
} |
} |
printf("Sy "); |
if (0 == strncmp(buf + *start, "NULL", 4) && |
|
('=' == buf[*start + 4] || |
|
'>' == buf[*start + 4])) |
|
printf("Dv "); |
|
else |
|
printf("Sy "); |
break; |
break; |
case (FMT_CODE): |
case (FMT_CODE): |
printf("Qo Li "); |
printf("Qo Li "); |
|
|
dofile(const struct args *args, const char *fname, |
dofile(const struct args *args, const char *fname, |
const struct tm *tm, const char *buf, size_t sz) |
const struct tm *tm, const char *buf, size_t sz) |
{ |
{ |
size_t sup, end, i, cur = 0; |
|
struct state st; |
|
const char *section, *date; |
|
char datebuf[64]; |
char datebuf[64]; |
|
struct state st; |
|
const char *fbase, *fext, *section, *date; |
char *title, *cp; |
char *title, *cp; |
|
size_t sup, end, i, cur = 0; |
|
|
if (0 == sz) |
if (0 == sz) |
return; |
return; |
|
|
/* Title is last path component of the filename. */ |
/* |
|
* Parsing the filename is almost always required, |
|
* except when both the title and the section |
|
* are provided on the command line. |
|
*/ |
|
|
if (NULL != args->title) |
if (NULL == args->title || NULL == args->section) { |
title = strdup(args->title); |
fbase = strrchr(fname, '/'); |
else if (NULL != (cp = strrchr(fname, '/'))) |
if (NULL == fbase) |
title = strdup(cp + 1); |
fbase = fname; |
else |
else |
title = strdup(fname); |
fbase++; |
|
fext = strrchr(fbase, '.'); |
|
} else |
|
fext = NULL; |
|
|
|
/* |
|
* The title will be converted to uppercase, |
|
* so it needs to be copied. |
|
*/ |
|
|
|
title = (NULL != args->title) ? strdup(args->title) : |
|
(NULL != fext) ? strndup(fbase, fext - fbase) : |
|
strdup(fbase); |
|
|
if (NULL == title) { |
if (NULL == title) { |
perror(NULL); |
perror(NULL); |
exit(EXIT_FAILURE); |
exit(EXIT_FAILURE); |
Line 1200 dofile(const struct args *args, const char *fname, |
|
Line 1219 dofile(const struct args *args, const char *fname, |
|
|
|
/* Section is 1 unless suffix is "pm". */ |
/* Section is 1 unless suffix is "pm". */ |
|
|
if (NULL == (section = args->section)) { |
section = (NULL != args->section) ? args->section : |
section = "1"; |
(NULL == fext || strcmp(fext + 1, "pm")) ? "1" : |
if (NULL != (cp = strrchr(title, '.'))) { |
PERL_SECTION; |
*cp++ = '\0'; |
|
if (0 == strcmp(cp, "pm")) |
|
section = PERL_SECTION; |
|
} |
|
} |
|
|
|
/* Date. Or the given "tm" if not supplied. */ |
/* Date. Or the given "tm" if not supplied. */ |
|
|
Line 1270 readfile(const struct args *args, const char *fname) |
|
Line 1284 readfile(const struct args *args, const char *fname) |
|
time_t ttm; |
time_t ttm; |
struct stat st; |
struct stat st; |
|
|
assert(NULL != fname); |
|
|
|
fd = 0 != strcmp("-", fname) ? |
fd = 0 != strcmp("-", fname) ? |
open(fname, O_RDONLY, 0) : STDIN_FILENO; |
open(fname, O_RDONLY, 0) : STDIN_FILENO; |
|
|
Line 1377 main(int argc, char *argv[]) |
|
Line 1389 main(int argc, char *argv[]) |
|
|
|
/* Accept only a single input file. */ |
/* Accept only a single input file. */ |
|
|
if (argc > 2) |
if (argc > 1) |
return(EXIT_FAILURE); |
goto usage; |
else if (1 == argc) |
else if (1 == argc) |
fname = *argv; |
fname = *argv; |
|
|
Line 1387 main(int argc, char *argv[]) |
|
Line 1399 main(int argc, char *argv[]) |
|
|
|
usage: |
usage: |
fprintf(stderr, "usage: %s [-d date] " |
fprintf(stderr, "usage: %s [-d date] " |
"[-n title] [-s section]\n", name); |
"[-n title] [-s section] [file]\n", name); |
|
|
return(EXIT_FAILURE); |
return(EXIT_FAILURE); |
} |
} |