=================================================================== RCS file: /cvs/docbook2mdoc/main.c,v retrieving revision 1.4 retrieving revision 1.8 diff -u -p -r1.4 -r1.8 --- docbook2mdoc/main.c 2019/04/08 22:47:34 1.4 +++ docbook2mdoc/main.c 2019/04/28 17:10:06 1.8 @@ -1,4 +1,4 @@ -/* $Id: main.c,v 1.4 2019/04/08 22:47:34 schwarze Exp $ */ +/* $Id: main.c,v 1.8 2019/04/28 17:10:06 schwarze Exp $ */ /* * Copyright (c) 2014 Kristaps Dzonsons * Copyright (c) 2019 Ingo Schwarze @@ -22,12 +22,19 @@ #include "node.h" #include "parse.h" +#include "reorg.h" #include "format.h" /* * The steering function of the docbook2mdoc(1) program. */ +enum outt { + OUTT_MDOC = 0, + OUTT_TREE, + OUTT_LINT +}; + int main(int argc, char *argv[]) { @@ -36,6 +43,7 @@ main(int argc, char *argv[]) const char *progname; const char *fname; int ch, fd, rc, warn; + enum outt outtype; if ((progname = strrchr(argv[0], '/')) == NULL) progname = argv[0]; @@ -43,8 +51,22 @@ main(int argc, char *argv[]) progname++; warn = 0; - while ((ch = getopt(argc, argv, "W")) != -1) { + outtype = OUTT_MDOC; + while ((ch = getopt(argc, argv, "T:W")) != -1) { switch (ch) { + case 'T': + if (strcmp(optarg, "mdoc") == 0) + outtype = OUTT_MDOC; + else if (strcmp(optarg, "tree") == 0) + outtype = OUTT_TREE; + else if (strcmp(optarg, "lint") == 0) + outtype = OUTT_LINT; + else { + fprintf(stderr, "%s: Bad argument\n", + optarg); + goto usage; + } + break; case 'W': warn = 1; break; @@ -73,20 +95,21 @@ main(int argc, char *argv[]) /* Parse. */ - if ((parser = parse_alloc(warn)) == NULL) { - perror(NULL); - return 1; - } + parser = parse_alloc(warn); tree = parse_file(parser, fd, fname); - rc = tree->flags & TREE_FAIL ? 1 : 0; + ptree_reorg(tree); + rc = tree->flags & TREE_ERROR ? 3 : tree->flags & TREE_WARN ? 2 : 0; /* Format. */ - if (tree->root != NULL) { - if (rc) + if (outtype != OUTT_LINT && tree->root != NULL) { + if (rc > 2) fputc('\n', stderr); - ptree_print(tree); - if (rc) + if (outtype == OUTT_MDOC) + ptree_print_mdoc(tree); + else + ptree_print_tree(tree); + if (rc > 2) fputs("\nThe output may be incomplete, see the " "parse error reported above.\n\n", stderr); } @@ -94,6 +117,7 @@ main(int argc, char *argv[]) return rc; usage: - fprintf(stderr, "usage: %s [-W] [input_filename]\n", progname); - return 1; + fprintf(stderr, "usage: %s [-W] [-T mdoc | tree | lint] " + "[input_filename]\n", progname); + return 5; }