version 1.12, 2014/10/28 17:36:19 |
version 1.16, 2015/04/02 21:36:49 |
|
|
#include <string.h> |
#include <string.h> |
#include <unistd.h> |
#include <unistd.h> |
|
|
|
#include "roff.h" |
#include "man.h" |
#include "man.h" |
#include "mdoc.h" |
#include "mdoc.h" |
#include "mandoc.h" |
#include "mandoc.h" |
Line 44 main(int argc, char *argv[]) |
|
Line 45 main(int argc, char *argv[]) |
|
{ |
{ |
struct mparse *mp; |
struct mparse *mp; |
struct mchars *mchars; |
struct mchars *mchars; |
int ch, i, list; |
int ch, fd, i, list; |
extern int optind; |
extern int optind; |
|
|
progname = strrchr(argv[0], '/'); |
if (argc < 1) |
if (progname == NULL) |
progname = "demandoc"; |
|
else if ((progname = strrchr(argv[0], '/')) == NULL) |
progname = argv[0]; |
progname = argv[0]; |
else |
else |
++progname; |
++progname; |
Line 78 main(int argc, char *argv[]) |
|
Line 80 main(int argc, char *argv[]) |
|
argv += optind; |
argv += optind; |
|
|
mchars = mchars_alloc(); |
mchars = mchars_alloc(); |
mp = mparse_alloc(MPARSE_SO, MANDOCLEVEL_FATAL, NULL, mchars, NULL); |
mp = mparse_alloc(MPARSE_SO, MANDOCLEVEL_BADARG, NULL, mchars, NULL); |
assert(mp); |
assert(mp); |
|
|
if (0 == argc) |
if (argc < 1) |
pmandoc(mp, STDIN_FILENO, "<stdin>", list); |
pmandoc(mp, STDIN_FILENO, "<stdin>", list); |
|
|
for (i = 0; i < argc; i++) { |
for (i = 0; i < argc; i++) { |
mparse_reset(mp); |
mparse_reset(mp); |
pmandoc(mp, -1, argv[i], list); |
if (mparse_open(mp, &fd, argv[i]) != MANDOCLEVEL_OK) { |
|
perror(argv[i]); |
|
continue; |
|
} |
|
pmandoc(mp, fd, argv[i], list); |
} |
} |
|
|
mparse_free(mp); |
mparse_free(mp); |
Line 108 pmandoc(struct mparse *mp, int fd, const char *fn, int |
|
Line 114 pmandoc(struct mparse *mp, int fd, const char *fn, int |
|
struct man *man; |
struct man *man; |
int line, col; |
int line, col; |
|
|
if (mparse_readfd(mp, fd, fn) >= MANDOCLEVEL_FATAL) { |
mparse_readfd(mp, fd, fn); |
fprintf(stderr, "%s: Parse failure\n", fn); |
|
return; |
|
} |
|
|
|
mparse_result(mp, &mdoc, &man, NULL); |
mparse_result(mp, &mdoc, &man, NULL); |
line = 1; |
line = 1; |
col = 0; |
col = 0; |
|
|
if (mdoc) |
if (mdoc) |
pmdoc(mdoc_node(mdoc), &line, &col, list); |
pmdoc(mdoc_node(mdoc), &line, &col, list); |
else if (man) |
else if (man) |
pman(man_node(man), &line, &col, list); |
pman(man_node(man), &line, &col, list); |
|
|
end = p - 1; |
end = p - 1; |
|
|
while (end > start) |
while (end > start) |
if ('.' == *end || ',' == *end || |
if ('.' == *end || ',' == *end || |
'\'' == *end || '"' == *end || |
'\'' == *end || '"' == *end || |
')' == *end || '!' == *end || |
')' == *end || '!' == *end || |
'?' == *end || ':' == *end || |
'?' == *end || ':' == *end || |
|
|
/* |
/* |
* Print the input word, skipping any special characters. |
* Print the input word, skipping any special characters. |
*/ |
*/ |
while ('\0' != *p) |
while ('\0' != *p) |
if ('\\' == *p) { |
if ('\\' == *p) { |
p++; |
p++; |
esc = mandoc_escape(&p, NULL, NULL); |
esc = mandoc_escape(&p, NULL, NULL); |
Line 220 pline(int line, int *linep, int *col, int list) |
|
Line 222 pline(int line, int *linep, int *col, int list) |
|
|
|
/* |
/* |
* Print out as many lines as needed to reach parity with the |
* Print out as many lines as needed to reach parity with the |
* original input. |
* original input. |
*/ |
*/ |
|
|
while (*linep < line) { |
while (*linep < line) { |
Line 238 pmdoc(const struct mdoc_node *p, int *line, int *col, |
|
Line 240 pmdoc(const struct mdoc_node *p, int *line, int *col, |
|
for ( ; p; p = p->next) { |
for ( ; p; p = p->next) { |
if (MDOC_LINE & p->flags) |
if (MDOC_LINE & p->flags) |
pline(p->line, line, col, list); |
pline(p->line, line, col, list); |
if (MDOC_TEXT == p->type) |
if (ROFFT_TEXT == p->type) |
pstring(p->string, p->pos, col, list); |
pstring(p->string, p->pos, col, list); |
if (p->child) |
if (p->child) |
pmdoc(p->child, line, col, list); |
pmdoc(p->child, line, col, list); |
} |
} |
} |
} |
Line 252 pman(const struct man_node *p, int *line, int *col, in |
|
Line 254 pman(const struct man_node *p, int *line, int *col, in |
|
for ( ; p; p = p->next) { |
for ( ; p; p = p->next) { |
if (MAN_LINE & p->flags) |
if (MAN_LINE & p->flags) |
pline(p->line, line, col, list); |
pline(p->line, line, col, list); |
if (MAN_TEXT == p->type) |
if (ROFFT_TEXT == p->type) |
pstring(p->string, p->pos, col, list); |
pstring(p->string, p->pos, col, list); |
if (p->child) |
if (p->child) |
pman(p->child, line, col, list); |
pman(p->child, line, col, list); |
} |
} |
} |
} |