diff options
-rw-r--r-- | dummy.c | 31 | ||||
-rw-r--r-- | libmdocml.h | 4 | ||||
-rw-r--r-- | mdocml.1 | 9 | ||||
-rw-r--r-- | mdocml.c | 10 | ||||
-rw-r--r-- | private.h | 8 | ||||
-rw-r--r-- | roff.c | 22 |
6 files changed, 55 insertions, 29 deletions
@@ -29,10 +29,11 @@ #define strlcat strncat #endif -static int md_dummy_blk_in(int); -static int md_dummy_blk_out(int); -static int md_dummy_text_in(int, int *, char **); -static int md_dummy_text_out(int); +static int md_dummy_blk_in(const struct md_args *, int); +static int md_dummy_blk_out(const struct md_args *, int); +static int md_dummy_text_in(const struct md_args *, int, + int *, char **); +static int md_dummy_text_out(const struct md_args *, int); static int md_dummy_special(int); static int md_dummy_head(void); static int md_dummy_tail(void); @@ -159,9 +160,12 @@ md_dummy_special(int tok) static int -md_dummy_blk_in(int tok) +md_dummy_blk_in(const struct md_args *args, int tok) { + if (args->verbosity < 1) + return(1); + dbg_prologue("blk"); (void)strlcat(dbg_line, toknames[tok], sizeof(dbg_line) - 1); dbg_epilogue(); @@ -172,19 +176,25 @@ md_dummy_blk_in(int tok) static int -md_dummy_blk_out(int tok) +md_dummy_blk_out(const struct md_args *args, int tok) { + if (args->verbosity < 1) + return(1); + dbg_lvl--; return(1); } -/* ARGSUSED */ static int -md_dummy_text_in(int tok, int *argcp, char **argvp) +md_dummy_text_in(const struct md_args *args, + int tok, int *argcp, char **argvp) { + if (args->verbosity < 1) + return(1); + dbg_prologue("text"); (void)strlcat(dbg_line, toknames[tok], sizeof(dbg_line) - 1); (void)strlcat(dbg_line, " ", sizeof(dbg_line) - 1); @@ -210,7 +220,7 @@ md_dummy_text_in(int tok, int *argcp, char **argvp) static int -md_dummy_text_out(int tok) +md_dummy_text_out(const struct md_args *args, int tok) { return(1); @@ -226,6 +236,8 @@ md_dummy_msg(const struct md_args *args, enum roffmsg lvl, switch (lvl) { case (ROFF_WARN): + if ( ! (MD_WARN_ALL & args->warnings)) + return; p = "warning"; break; case (ROFF_ERROR): @@ -236,3 +248,4 @@ md_dummy_msg(const struct md_args *args, enum roffmsg lvl, assert(pos >= buf); (void)fprintf(stderr, "%s:%d: %s: %s\n", name, line, p, msg); } + diff --git a/libmdocml.h b/libmdocml.h index 5d7e9727..52bd3324 100644 --- a/libmdocml.h +++ b/libmdocml.h @@ -42,6 +42,10 @@ enum md_type { struct md_args { union md_params params;/* Parameters for parser. */ enum md_type type; /* Type of parser. */ + + int warnings; +#define MD_WARN_ALL (1 << 0) + int verbosity; }; struct md_buf { @@ -14,6 +14,7 @@ .\" .Sh SYNOPSIS .Nm mdocml +.Op Fl W .Op Fl o Ar outfile .Op Ar infile .\" @@ -22,19 +23,21 @@ The .Nm utility compiles manpage source into a mark-up language. Its arguments are as follows: -.Bl -tag -width "-o outfile" +.Bl -tag -width "\-o outfile" .It Fl o Ar outfile Place output in .Ar outfile , which may be -.Qq - +.Qq \- for standard output. The default is standard output. .It Ar infile Read input from .Ar infile , which may be -.Qq - +.Qq \- for standard input. The default is standard input. +.It Fl W +Print warnings. .El .\" The following requests should be uncommented and used where appropriate. .\" This next request is for sections 2, 3, and 9 function return values only. @@ -58,11 +58,17 @@ main(int argc, char *argv[]) (void)memset(&args, 0, sizeof(struct md_args)); - while (-1 != (c = getopt(argc, argv, "o:"))) + while (-1 != (c = getopt(argc, argv, "o:vW"))) switch (c) { case ('o'): out = optarg; break; + case ('v'): + args.verbosity++; + break; + case ('W'): + args.warnings |= MD_WARN_ALL; + break; default: usage(); return(1); @@ -213,5 +219,5 @@ usage(void) { extern char *__progname; - (void)printf("usage: %s [-o outfile] [infile]\n", __progname); + (void)printf("usage: %s [-vW] [-o outfile] [infile]\n", __progname); } @@ -214,10 +214,10 @@ struct roffcb { int, char *); int (*roffhead)(void); int (*rofftail)(void); - int (*roffin)(int, int *, char **); - int (*roffout)(int); - int (*roffblkin)(int); - int (*roffblkout)(int); + int (*roffin)(const struct md_args *, int, int *, char **); + int (*roffout)(const struct md_args *, int); + int (*roffblkin)(const struct md_args *, int); + int (*roffblkout)(const struct md_args *, int); int (*roffspecial)(int); }; @@ -451,7 +451,7 @@ roffargs(const struct rofftree *tree, while (*buf && '\"' != *buf) buf++; if (0 == *buf) { - roff_err(tree, p, argv[i], "unclosed " + roff_err(tree, argv[i], "unclosed " "quote in argument " "list for `%s'", toknames[tok]); @@ -471,7 +471,7 @@ roffargs(const struct rofftree *tree, assert(i > 0); if (ROFF_MAXARG == i && *buf) { - roff_err(tree, p, p, "too many arguments for `%s'", toknames + roff_err(tree, p, "too many arguments for `%s'", toknames [tok]); return(0); } @@ -898,7 +898,7 @@ roff_layout(ROFFCALL_ARGS) if (ROFF_EXIT == type) { roffnode_free(tok, tree); - return((*tree->cb->roffblkout)(tok)); + return((*tree->cb->roffblkout)(tree->args, tok)); } i = 0; @@ -920,16 +920,16 @@ roff_layout(ROFFCALL_ARGS) if (NULL == roffnode_new(tok, tree)) return(0); - if ( ! (*tree->cb->roffin)(tok, argcp, argvp)) + if ( ! (*tree->cb->roffin)(tree->args, tok, argcp, argvp)) return(0); if ( ! (ROFF_PARSED & tokens[tok].flags)) { /* TODO: print all tokens. */ - if ( ! ((*tree->cb->roffout)(tok))) + if ( ! ((*tree->cb->roffout)(tree->args, tok))) return(0); - return((*tree->cb->roffblkin)(tok)); + return((*tree->cb->roffblkin)(tree->args, tok)); } while (*argv) { @@ -950,10 +950,10 @@ roff_layout(ROFFCALL_ARGS) argv++; } - if ( ! ((*tree->cb->roffout)(tok))) + if ( ! ((*tree->cb->roffout)(tree->args, tok))) return(0); - return((*tree->cb->roffblkin)(tok)); + return((*tree->cb->roffblkin)(tree->args, tok)); } @@ -986,14 +986,14 @@ roff_text(ROFFCALL_ARGS) argcp[i] = ROFF_ARGMAX; argvp[i] = NULL; - if ( ! (*tree->cb->roffin)(tok, argcp, argvp)) + if ( ! (*tree->cb->roffin)(tree->args, tok, argcp, argvp)) return(0); if ( ! (ROFF_PARSED & tokens[tok].flags)) { /* TODO: print all tokens. */ - return((*tree->cb->roffout)(tok)); + return((*tree->cb->roffout)(tree->args, tok)); } while (*argv) { @@ -1014,7 +1014,7 @@ roff_text(ROFFCALL_ARGS) argv++; } - return((*tree->cb->roffout)(tok)); + return((*tree->cb->roffout)(tree->args, tok)); } |