From 59cc3c9323dc0b7aa1fd5817e12884ef925461d4 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 12 Dec 2014 23:29:35 -0800 Subject: Added cmark_render_man (man page writer). cmark: Replaced `--man` and `--ast` with generic `--to` option. --- src/main.c | 61 +++++++++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 45 insertions(+), 16 deletions(-) (limited to 'src/main.c') diff --git a/src/main.c b/src/main.c index 6134b13..be3d305 100644 --- a/src/main.c +++ b/src/main.c @@ -7,22 +7,38 @@ #include "debug.h" #include "bench.h" +typedef enum { + FORMAT_NONE, + FORMAT_HTML, + FORMAT_MAN, + FORMAT_AST +} writer_format; + void print_usage() { printf("Usage: cmark [FILE*]\n"); - printf("Options: --help, -h Print usage information\n"); - printf(" --ast Print AST instead of HTML\n"); - printf(" --version Print version\n"); + printf("Options:\n"); + printf(" --to, -t FORMAT Specify output format (html, man, ast)\n"); + printf(" --help, -h Print usage information\n"); + printf(" --version Print version\n"); } -static void print_document(cmark_node *document, bool ast) +static void print_document(cmark_node *document, writer_format writer) { char *result; - if (ast) { + switch (writer) { + case FORMAT_AST: result = cmark_render_ast(document); - } else { - + break; + case FORMAT_HTML: result = cmark_render_html(document); + break; + case FORMAT_MAN: + result = cmark_render_man(document); + break; + default: + fprintf(stderr, "Unknown format %d\n", writer); + exit(1); } printf("%s", result); free(result); @@ -31,12 +47,12 @@ static void print_document(cmark_node *document, bool ast) int main(int argc, char *argv[]) { int i, numfps = 0; - bool ast = false; int *files; char buffer[4096]; cmark_parser *parser; size_t bytes; cmark_node *document; + writer_format writer = FORMAT_HTML; parser = cmark_parser_new(); files = (int *)malloc(argc * sizeof(*files)); @@ -50,8 +66,26 @@ int main(int argc, char *argv[]) (strcmp(argv[i], "-h") == 0)) { print_usage(); exit(0); - } else if (strcmp(argv[i], "--ast") == 0) { - ast = true; + } else if ((strcmp(argv[i], "-t") == 0) || + (strcmp(argv[i], "--to") == 0)) { + i += 1; + if (i < argc) { + if (strcmp(argv[i], "man") == 0) { + writer = FORMAT_MAN; + } else if (strcmp(argv[i], "html") == 0) { + writer = FORMAT_HTML; + } else if (strcmp(argv[i], "ast") == 0) { + writer = FORMAT_AST; + } else { + fprintf(stderr, + "Unknown format %s\n", argv[i]); + exit(1); + } + } else { + fprintf(stderr, "No argument provided for %s\n", + argv[i - 1]); + exit(1); + } } else if (*argv[i] == '-') { print_usage(); exit(1); @@ -81,11 +115,6 @@ int main(int argc, char *argv[]) } if (numfps == 0) { - /* - document = cmark_parse_file(stdin); - print_document(document, ast); - exit(0); - */ while ((bytes = fread(buffer, 1, sizeof(buffer), stdin)) > 0) { cmark_parser_feed(parser, buffer, bytes); @@ -101,7 +130,7 @@ int main(int argc, char *argv[]) cmark_parser_free(parser); start_timer(); - print_document(document, ast); + print_document(document, writer); end_timer("print_document"); start_timer(); -- cgit v1.2.3