+#include <errno.h>
+#include <getopt.h>
#include <stdio.h>
#include <stdlib.h>
-#include <errno.h>
+#include <string.h>
#include "include/markdown.h"
+void usage() {
+ fprintf(stderr, "Usage: tmp [OPTION]... [FILE]\n");
+ fprintf(stderr, "A command-line based markdown presentation tool.\n\n");
+ fprintf(stderr, " -d, --debug enable debug messages on STDERR\n");
+ fprintf(stderr, " -h, --help display this help and exit\n");
+ fprintf(stderr, "\nWith no FILE, or when FILE is -, read standard input.\n\n");
+ exit(EXIT_FAILURE);
+}
+
int main(int argc, char *argv[]) {
+ // define command-line options
+ struct option longopts[] = {
+ { "debug", no_argument, 0, 'd' },
+ { "help", no_argument, 0, 'h' },
+ { 0, 0, 0, 0 }
+ };
+
+ // parse command-line options
+ int opt, debug = 0;
+ while ((opt = getopt_long(argc, argv, ":dh", longopts, NULL)) != -1) {
+ switch(opt) {
+ case 'd': debug = 1; break;
+ case 'h': usage(); break;
+ case ':': fprintf(stderr, "%s: '%c' requires an argument\n", argv[0], optopt); usage(); break;
+ case '?':
+ default : fprintf(stderr, "%s: option '%c' is invalid\n", argv[0], optopt); usage(); break;
+ }
+ }
+
+ // open file or set input to STDIN
+ char *file;
FILE *input;
- document_t *doc;
+ if (optind < argc) {
+ do {
+ file = argv[optind];
+ } while(++optind < argc);
- if (argc > 1) {
- if(!strcmp(argv[1], "-")) {
+ if(!strcmp(file, "-")) {
input = stdin;
} else {
- input = fopen(argv[1],"r");
+ input = fopen(file,"r");
if(!input) {
- fprintf(stderr, "Unable to open '%s': %s\n",
- argv[1], strerror(errno));
+ fprintf(stderr, "%s: %s: %s\n", argv[0], file, strerror(errno));
exit(EXIT_FAILURE);
}
}
input = stdin;
}
+ // load document object from input
+ document_t *doc;
doc = markdown_load(input);
- // test line/page load
- int offset;
- line_t *header;
- if(doc->header) {
- header = doc->header;
- while(header &&
- header->text->size > 0 &&
- header->text->text[0] == '%') {
-
- offset = next_blank(header->text, 0) + 1;
- printf("header: %s\n", &header->text->text[offset]);
- header = header->next;
+ if(debug) {
+ // print header to STDERR
+ int offset;
+ line_t *header;
+ if(doc->header) {
+ header = doc->header;
+ while(header &&
+ header->text->size > 0 &&
+ header->text->text[0] == '%') {
+
+ offset = next_blank(header->text, 0) + 1;
+ printf("header: %s\n", &header->text->text[offset]);
+ header = header->next;
+ }
}
- }
- int cp = 0, cl = 0;
- page_t *page = doc->page;
- line_t *line;
- while(page) {
- cp++;
- line = page->line;
- cl = 0;
- while(line) {
- cl++;
- line = line->next;
+
+ // print page/line count to STDERR
+ int cp = 0, cl = 0;
+ page_t *page = doc->page;
+ line_t *line;
+ while(page) {
+ cp++;
+ line = page->line;
+ cl = 0;
+ while(line) {
+ cl++;
+ line = line->next;
+ }
+ printf("page %i: %i lines\n", cp, cl);
+ page = page->next;
}
- printf("page %i: %i lines\n", cp, cl);
- page = page->next;
}
}