version 1.21, 2015/10/06 18:32:19 |
version 1.33, 2019/03/03 11:01:15 |
|
|
|
|
#include <assert.h> |
#include <assert.h> |
#include <ctype.h> |
#include <ctype.h> |
#include <getopt.h> |
|
#include <stdio.h> |
#include <stdio.h> |
#include <stdlib.h> |
#include <stdlib.h> |
#include <string.h> |
#include <string.h> |
#include <unistd.h> |
#include <unistd.h> |
|
|
|
#include "mandoc.h" |
#include "roff.h" |
#include "roff.h" |
#include "man.h" |
#include "man.h" |
#include "mdoc.h" |
#include "mdoc.h" |
#include "mandoc.h" |
#include "mandoc_parse.h" |
|
|
static void pline(int, int *, int *, int); |
static void pline(int, int *, int *, int); |
static void pman(const struct roff_node *, int *, int *, int); |
static void pman(const struct roff_node *, int *, int *, int); |
|
|
main(int argc, char *argv[]) |
main(int argc, char *argv[]) |
{ |
{ |
struct mparse *mp; |
struct mparse *mp; |
struct mchars *mchars; |
|
int ch, fd, i, list; |
int ch, fd, i, list; |
extern int optind; |
extern int optind; |
|
|
Line 79 main(int argc, char *argv[]) |
|
Line 78 main(int argc, char *argv[]) |
|
argc -= optind; |
argc -= optind; |
argv += optind; |
argv += optind; |
|
|
mchars = mchars_alloc(); |
mchars_alloc(); |
mp = mparse_alloc(MPARSE_SO, MANDOCLEVEL_BADARG, NULL, mchars, NULL); |
mp = mparse_alloc(MPARSE_SO | MPARSE_UTF8 | MPARSE_LATIN1 | |
|
MPARSE_VALIDATE, MANDOC_OS_OTHER, NULL); |
assert(mp); |
assert(mp); |
|
|
if (argc < 1) |
if (argc < 1) |
Line 88 main(int argc, char *argv[]) |
|
Line 88 main(int argc, char *argv[]) |
|
|
|
for (i = 0; i < argc; i++) { |
for (i = 0; i < argc; i++) { |
mparse_reset(mp); |
mparse_reset(mp); |
if (mparse_open(mp, &fd, argv[i]) != MANDOCLEVEL_OK) { |
if ((fd = mparse_open(mp, argv[i])) == -1) { |
perror(argv[i]); |
perror(argv[i]); |
continue; |
continue; |
} |
} |
Line 96 main(int argc, char *argv[]) |
|
Line 96 main(int argc, char *argv[]) |
|
} |
} |
|
|
mparse_free(mp); |
mparse_free(mp); |
mchars_free(mchars); |
mchars_free(); |
return (int)MANDOCLEVEL_OK; |
return (int)MANDOCLEVEL_OK; |
} |
} |
|
|
|
|
static void |
static void |
pmandoc(struct mparse *mp, int fd, const char *fn, int list) |
pmandoc(struct mparse *mp, int fd, const char *fn, int list) |
{ |
{ |
struct roff_man *man; |
struct roff_meta *meta; |
int line, col; |
int line, col; |
|
|
mparse_readfd(mp, fd, fn); |
mparse_readfd(mp, fd, fn); |
mparse_result(mp, &man, NULL); |
close(fd); |
|
meta = mparse_result(mp); |
line = 1; |
line = 1; |
col = 0; |
col = 0; |
|
|
if (man == NULL) |
if (meta->macroset == MACROSET_MDOC) |
return; |
pmdoc(meta->first->child, &line, &col, list); |
if (man->macroset == MACROSET_MDOC) |
|
pmdoc(man->first->child, &line, &col, list); |
|
else |
else |
pman(man->first->child, &line, &col, list); |
pman(meta->first->child, &line, &col, list); |
|
|
if ( ! list) |
if ( ! list) |
putchar('\n'); |
putchar('\n'); |
Line 237 pmdoc(const struct roff_node *p, int *line, int *col, |
|
Line 236 pmdoc(const struct roff_node *p, int *line, int *col, |
|
{ |
{ |
|
|
for ( ; p; p = p->next) { |
for ( ; p; p = p->next) { |
if (MDOC_LINE & p->flags) |
if (NODE_LINE & p->flags) |
pline(p->line, line, col, list); |
pline(p->line, line, col, list); |
if (ROFFT_TEXT == p->type) |
if (ROFFT_TEXT == p->type) |
pstring(p->string, p->pos, col, list); |
pstring(p->string, p->pos, col, list); |
Line 251 pman(const struct roff_node *p, int *line, int *col, i |
|
Line 250 pman(const struct roff_node *p, int *line, int *col, i |
|
{ |
{ |
|
|
for ( ; p; p = p->next) { |
for ( ; p; p = p->next) { |
if (MAN_LINE & p->flags) |
if (NODE_LINE & p->flags) |
pline(p->line, line, col, list); |
pline(p->line, line, col, list); |
if (ROFFT_TEXT == p->type) |
if (ROFFT_TEXT == p->type) |
pstring(p->string, p->pos, col, list); |
pstring(p->string, p->pos, col, list); |