version 1.47, 2009/01/16 15:58:50 |
version 1.50, 2009/01/20 12:51:28 |
|
|
/* $Id$ */ |
/* $Id$ */ |
/* |
/* |
* Copyright (c) 2008 Kristaps Dzonsons <kristaps@kth.se> |
* Copyright (c) 2008 Kristaps Dzonsons <kristaps@kth.se> |
* |
* |
|
|
#include "mdoc.h" |
#include "mdoc.h" |
|
|
#define xfprintf (void)fprintf |
#define xfprintf (void)fprintf |
#define xprintf (void)printf |
|
#define xvfprintf (void)fvprintf |
|
|
|
#define MD_LINE_SZ (256) /* Max input line size. */ |
#define MD_LINE_SZ (256) /* Max input line size. */ |
|
|
|
/* TODO: have a struct for each transformer. */ |
|
|
|
typedef int (*mdocprint)(const struct mdoc_node *); |
|
|
|
|
struct md_parse { |
struct md_parse { |
int warn; /* Warning flags. */ |
int warn; /* Warning flags. */ |
#define MD_WARN_SYNTAX (1 << 0) /* Show syntax warnings. */ |
#define MD_WARN_SYNTAX (1 << 0) /* Show syntax warnings. */ |
Line 49 struct md_parse { |
|
Line 51 struct md_parse { |
|
u_long bufsz; /* Input buffer size. */ |
u_long bufsz; /* Input buffer size. */ |
char *name; /* Input file name. */ |
char *name; /* Input file name. */ |
int fd; /* Input file desc. */ |
int fd; /* Input file desc. */ |
int (*fp)(const struct mdoc_node *, const char *); |
mdocprint print; /* Node-print function. */ |
}; |
}; |
|
|
extern char *__progname; |
extern char *__progname; |
|
|
extern int |
extern int treeprint(const struct mdoc_node *); |
|
|
static void usage(void); |
static void usage(void); |
|
|
Line 79 main(int argc, char *argv[]) |
|
Line 81 main(int argc, char *argv[]) |
|
{ |
{ |
int c; |
int c; |
struct md_parse parser; |
struct md_parse parser; |
char *opts, *v, *filter, *output; |
char *opts, *v, *filter; |
#define ALL 0 |
#define ALL 0 |
#define COMPAT 1 |
#define COMPAT 1 |
#define SYNTAX 2 |
#define SYNTAX 2 |
Line 90 main(int argc, char *argv[]) |
|
Line 92 main(int argc, char *argv[]) |
|
extern char *optarg; |
extern char *optarg; |
extern int optind; |
extern int optind; |
|
|
output = filter = NULL; |
filter = NULL; |
|
|
(void)memset(&parser, 0, sizeof(struct md_parse)); |
(void)memset(&parser, 0, sizeof(struct md_parse)); |
|
|
while (-1 != (c = getopt(argc, argv, "f:vW:o:"))) |
while (-1 != (c = getopt(argc, argv, "f:vW:"))) |
switch (c) { |
switch (c) { |
case ('f'): |
case ('f'): |
filter = optarg; |
filter = optarg; |
break; |
break; |
case ('o'): |
|
output = optarg; |
|
break; |
|
case ('v'): |
case ('v'): |
parser.dbg++; |
parser.dbg++; |
break; |
break; |
Line 138 main(int argc, char *argv[]) |
|
Line 137 main(int argc, char *argv[]) |
|
if (1 == argc) |
if (1 == argc) |
parser.name = *argv++; |
parser.name = *argv++; |
|
|
|
if (filter) { |
|
if (0 == strcmp(filter, "tree")) |
|
parser.print = treeprint; |
|
} |
|
|
if ( ! io_begin(&parser)) |
if ( ! io_begin(&parser)) |
return(EXIT_FAILURE); |
return(EXIT_FAILURE); |
|
|
Line 216 parse_leave(struct md_parse *p, int code) |
|
Line 220 parse_leave(struct md_parse *p, int code) |
|
|
|
if ( ! mdoc_endparse(p->mdoc)) |
if ( ! mdoc_endparse(p->mdoc)) |
code = 0; |
code = 0; |
if (p->fp && (n = mdoc_result(p->mdoc))) |
if (p->print && (n = mdoc_node(p->mdoc))) |
(*p->fp)(n, NULL); |
(*p->print)(n); |
|
|
mdoc_free(p->mdoc); |
mdoc_free(p->mdoc); |
|
|
|
|
{ |
{ |
|
|
xfprintf(stderr, "usage: %s [-v] [-Wwarn...] [-ffilter] " |
xfprintf(stderr, "usage: %s [-v] [-Wwarn...] [-ffilter] " |
"[-o outfile] [infile]\n", __progname); |
"[infile]\n", __progname); |
} |
} |
|
|