Annotation of docbook2mdoc/main.c, Revision 1.8
1.8 ! schwarze 1: /* $Id: main.c,v 1.7 2019/04/28 15:03:29 schwarze Exp $ */
1.1 schwarze 2: /*
3: * Copyright (c) 2014 Kristaps Dzonsons <kristaps@bsd.lv>
4: * Copyright (c) 2019 Ingo Schwarze <schwarze@openbsd.org>
5: *
6: * Permission to use, copy, modify, and distribute this software for any
7: * purpose with or without fee is hereby granted, provided that the above
8: * copyright notice and this permission notice appear in all copies.
9: *
10: * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES
11: * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12: * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR
13: * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14: * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15: * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16: * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17: */
18: #include <getopt.h>
19: #include <stdio.h>
20: #include <string.h>
21: #include <unistd.h>
22:
23: #include "node.h"
24: #include "parse.h"
1.8 ! schwarze 25: #include "reorg.h"
1.1 schwarze 26: #include "format.h"
27:
28: /*
29: * The steering function of the docbook2mdoc(1) program.
30: */
31:
1.6 schwarze 32: enum outt {
33: OUTT_MDOC = 0,
34: OUTT_TREE,
35: OUTT_LINT
36: };
37:
1.1 schwarze 38: int
39: main(int argc, char *argv[])
40: {
41: struct parse *parser;
42: struct ptree *tree;
43: const char *progname;
44: const char *fname;
45: int ch, fd, rc, warn;
1.6 schwarze 46: enum outt outtype;
1.1 schwarze 47:
48: if ((progname = strrchr(argv[0], '/')) == NULL)
49: progname = argv[0];
50: else
51: progname++;
52:
53: warn = 0;
1.6 schwarze 54: outtype = OUTT_MDOC;
55: while ((ch = getopt(argc, argv, "T:W")) != -1) {
1.1 schwarze 56: switch (ch) {
1.6 schwarze 57: case 'T':
58: if (strcmp(optarg, "mdoc") == 0)
59: outtype = OUTT_MDOC;
60: else if (strcmp(optarg, "tree") == 0)
61: outtype = OUTT_TREE;
62: else if (strcmp(optarg, "lint") == 0)
63: outtype = OUTT_LINT;
64: else {
65: fprintf(stderr, "%s: Bad argument\n",
66: optarg);
67: goto usage;
68: }
69: break;
1.1 schwarze 70: case 'W':
71: warn = 1;
72: break;
73: default:
74: goto usage;
75: }
76: }
77: argc -= optind;
78: argv += optind;
79:
80: /*
81: * Argument processing:
82: * Open file or use standard input.
83: */
84:
85: if (argc > 1) {
86: fprintf(stderr, "%s: Too many arguments\n", argv[1]);
87: goto usage;
1.4 schwarze 88: } else if (argc == 1) {
89: fname = argv[0];
90: fd = -1;
91: } else {
92: fname = "<stdin>";
93: fd = STDIN_FILENO;
94: }
1.1 schwarze 95:
1.4 schwarze 96: /* Parse. */
1.1 schwarze 97:
1.7 schwarze 98: parser = parse_alloc(warn);
1.4 schwarze 99: tree = parse_file(parser, fd, fname);
1.8 ! schwarze 100: ptree_reorg(tree);
1.5 schwarze 101: rc = tree->flags & TREE_ERROR ? 3 : tree->flags & TREE_WARN ? 2 : 0;
1.1 schwarze 102:
1.4 schwarze 103: /* Format. */
1.1 schwarze 104:
1.6 schwarze 105: if (outtype != OUTT_LINT && tree->root != NULL) {
1.5 schwarze 106: if (rc > 2)
1.4 schwarze 107: fputc('\n', stderr);
1.6 schwarze 108: if (outtype == OUTT_MDOC)
109: ptree_print_mdoc(tree);
110: else
111: ptree_print_tree(tree);
1.5 schwarze 112: if (rc > 2)
1.4 schwarze 113: fputs("\nThe output may be incomplete, see the "
114: "parse error reported above.\n\n", stderr);
115: }
116: parse_free(parser);
1.1 schwarze 117: return rc;
118:
119: usage:
1.6 schwarze 120: fprintf(stderr, "usage: %s [-W] [-T mdoc | tree | lint] "
121: "[input_filename]\n", progname);
1.5 schwarze 122: return 5;
1.1 schwarze 123: }
CVSweb