=================================================================== RCS file: /cvs/mandoc/Attic/mmain.c,v retrieving revision 1.4 retrieving revision 1.7 diff -u -p -r1.4 -r1.7 --- mandoc/Attic/mmain.c 2009/02/23 15:38:20 1.4 +++ mandoc/Attic/mmain.c 2009/03/08 18:02:36 1.7 @@ -1,4 +1,4 @@ - /* $Id: mmain.c,v 1.4 2009/02/23 15:38:20 kristaps Exp $ */ + /* $Id: mmain.c,v 1.7 2009/03/08 18:02:36 kristaps Exp $ */ /* * Copyright (c) 2008 Kristaps Dzonsons * @@ -44,11 +44,13 @@ struct mmain { u_long bufsz; /* Input buffer size. */ char *in; /* Input file name. */ int fdin; /* Input file desc. */ + int pflags; /* Parse flags. */ }; extern char *__progname; -static int getsopts(struct mmain *, char *); +static int optswarn(struct mmain *, char *); +static int optsopt(struct mmain *, char *); static int parse(struct mmain *); static void msg_msg(void *, int, int, const char *); static int msg_err(void *, int, int, const char *); @@ -69,7 +71,7 @@ void mmain_usage(const char *help) { - warnx("usage: %s %s%s[-v] [-Wwarn...] [infile]", __progname, + warnx("usage: %s %s%s[-v] [-foption...] [-Wwarn...] [infile]", __progname, help ? help : "", help ? " " : ""); } @@ -109,7 +111,7 @@ mmain_getopt(struct mmain *p, int argc, char *argv[], extern int optind; - sz = strlcpy(opts, "vW:", 32); + sz = strlcpy(opts, "VvW:f:", 32); assert(sz < 32); if (u) { @@ -122,21 +124,28 @@ mmain_getopt(struct mmain *p, int argc, char *argv[], /* LINTED */ while (-1 != (c = getopt(argc, argv, opts))) switch (c) { + case ('f'): + if ( ! optsopt(p, optarg)) + return(-1); + break; case ('v'): p->dbg++; break; + case ('V'): + (void)printf("%s %s\n", __progname, VERSION); + return(0); case ('W'): - if ( ! getsopts(p, optarg)) - return(0); + if ( ! optswarn(p, optarg)) + return(-1); break; case ('?'): mmain_usage(help); - return(0); + return(-1); default: assert(getopt_cb); if ((*getopt_cb)(arg, c, optarg)) break; - return(0); + return(-1); } argv += optind; @@ -189,7 +198,7 @@ mmain_mdoc(struct mmain *p) /* Allocate the parser. */ - p->mdoc = mdoc_alloc(p, &cb); + p->mdoc = mdoc_alloc(p, p->pflags, &cb); /* Parse the input file. */ @@ -205,9 +214,32 @@ mmain_mdoc(struct mmain *p) static int -getsopts(struct mmain *p, char *arg) +optsopt(struct mmain *p, char *arg) { char *v; + char *toks[] = { "ign-scope", "ign-escape", NULL }; + + while (*arg) + switch (getsubopt(&arg, toks, &v)) { + case (0): + p->pflags |= MDOC_IGN_SCOPE; + break; + case (1): + p->pflags |= MDOC_IGN_ESCAPE; + break; + default: + /* FIXME: report? */ + return(0); + } + + return(1); +} + + +static int +optswarn(struct mmain *p, char *arg) +{ + char *v; char *toks[] = { "all", "compat", "syntax", "error", NULL }; @@ -226,6 +258,7 @@ getsopts(struct mmain *p, char *arg) p->warn |= MD_WARN_ERR; break; default: + /* FIXME: report? */ return(0); }