diff --git a/main.c b/main.c index 54801ed..e9e7013 100644 --- a/main.c +++ b/main.c @@ -40,7 +40,7 @@ main(int argc, char **argv) opterr = 1; - while ( (opt=getopt(argc, argv, "do:V")) != EOF ) { + while ( (opt=getopt(argc, argv, "dF:o:V")) != EOF ) { switch (opt) { case 'd': debug = 1; break; @@ -53,6 +53,8 @@ main(int argc, char **argv) #endif putchar('\n'); exit(0); + case 'F': flags = strtol(optarg, 0, 0); + break; case 'o': if ( ofile ) { fprintf(stderr, "Too many -o options\n"); exit(1); @@ -74,9 +76,9 @@ main(int argc, char **argv) exit(1); } if ( debug ) - rc = mkd_dump(mkd_in(stdin), stdout, 0, + rc = mkd_dump(mkd_in(stdin, flags), stdout, 0, argc ? basename(argv[0]) : "stdin"); else - rc = markdown(mkd_in(stdin), stdout, flags); + rc = markdown(mkd_in(stdin, flags), stdout, flags); exit( (rc == 0) ? 0 : errno ); } diff --git a/markdown.c b/markdown.c index 1f5521a..2fc10fb 100644 --- a/markdown.c +++ b/markdown.c @@ -860,7 +860,7 @@ mkd_compile(Document *doc, FILE *out, int flags, MMIOT *ctx) doc->compiled = 1; bzero(ctx, sizeof *ctx); ctx->out = out; - ctx->flags = flags; + ctx->flags = flags & DENY_MASK; CREATE(ctx->in); CREATE(ctx->footnotes); diff --git a/markdown.h b/markdown.h index 3125098..f409a48 100644 --- a/markdown.h +++ b/markdown.h @@ -65,20 +65,25 @@ typedef struct mmiot { int isp; STRING(Footnote) footnotes; int flags; -#define DENY_A 0x01 -#define DENY_IMG 0x02 -#define DENY_SMARTY 0x04 -#define EXPAND_QUOTE 0x10 +#define DENY_A 0x0001 +#define DENY_IMG 0x0002 +#define DENY_SMARTY 0x0004 +#define DENY_MASK (DENY_A|DENY_IMG|DENY_SMARTY) +#define EXPAND_QUOTE 0x0010 } MMIOT; + extern int mkd_firstnonblank(Line *); extern int mkd_compile(Document *, FILE *, int, MMIOT *); extern void mkd_generatehtml(Document *, MMIOT *); extern void mkd_cleanup(Document *, MMIOT *); extern int mkd_text(char *, int, FILE*, int); -extern Document *mkd_in(FILE *); -extern Document *mkd_string(char*,int); +extern Document *mkd_in(FILE *, int); +extern Document *mkd_string(char*,int, int); + +#define NO_HEADER 0x0100 +#define INPUT_MASK (NO_HEADER) #endif/*_MARKDOWN_D*/ diff --git a/mkdio.c b/mkdio.c index 6336e16..109a245 100644 --- a/mkdio.c +++ b/mkdio.c @@ -66,7 +66,7 @@ queue(Document* a, Cstring *line) typedef unsigned int (*getc_func)(void*); Document * -populate(getc_func getc, void* ctx) +populate(getc_func getc, void* ctx, int flags) { Cstring line; Document *a = new_Document(); @@ -102,7 +102,7 @@ populate(getc_func getc, void* ctx) DELETE(line); #ifdef PANDOC_HEADER - if ( pandoc == 3 ) { + if ( (pandoc == 3) && !(flags & NO_HEADER) ) { /* the first three lines started with %, so we have a header. * clip the first three lines out of content and hang them * off header. @@ -120,9 +120,9 @@ populate(getc_func getc, void* ctx) /* convert a file into a linked list */ Document * -mkd_in(FILE *f) +mkd_in(FILE *f, int flags) { - return populate((getc_func)fgetc, f); + return populate((getc_func)fgetc, f, flags & INPUT_MASK); } @@ -148,12 +148,12 @@ strget(struct string_ctx *in) /* convert a block of text into a linked list */ Document * -mkd_string(char *buf, int len) +mkd_string(char *buf, int len, int flags) { struct string_ctx about; about.data = buf; about.size = len; - return populate((getc_func)strget, &about); + return populate((getc_func)strget, &about, flags & INPUT_MASK); } diff --git a/mkdio.h b/mkdio.h index 4928947..751aa1d 100644 --- a/mkdio.h +++ b/mkdio.h @@ -5,8 +5,8 @@ /* line builder for markdown() */ -void *mkd_in(FILE*); /* assemble input from a file */ -void *mkd_string(char*,int); /* assemble input from a buffer */ +void *mkd_in(FILE*,int); /* assemble input from a file */ +void *mkd_string(char*,int,int); /* assemble input from a buffer */ /* compilation, debugging, cleanup */ @@ -21,8 +21,12 @@ int markdown(void*, FILE*, int); /* special flags for markdown() and mkd_text() */ -#define MKD_NOLINKS 0x01 /* don't do link processing, block tags */ -#define MKD_NOIMAGE 0x02 /* don't do image processing, block */ -#define MKD_NOPANTS 0x04 /* don't run smartypants() */ +#define MKD_NOLINKS 0x0001 /* don't do link processing, block tags */ +#define MKD_NOIMAGE 0x0002 /* don't do image processing, block */ +#define MKD_NOPANTS 0x0004 /* don't run smartypants() */ + +/* special flags for mkd_in() and mkd_string() + */ +#define MKD_NOHEADER 0x0100 /* don't process header blocks */ #endif/*_MKDIO_D*/ diff --git a/tests/code.t b/tests/code.t index 50609f4..3dc447d 100644 --- a/tests/code.t +++ b/tests/code.t @@ -1,6 +1,7 @@ echo "code blocks" rc=0 +MARKDOWN_FLAGS= echo -n ' format for code block html ....... ' diff --git a/tests/crash.t b/tests/crash.t index b04d215..78905fe 100644 --- a/tests/crash.t +++ b/tests/crash.t @@ -1,6 +1,7 @@ echo "crashes" rc=0 +MARKDOWN_FLAGS= echo -n ' zero-length input ................ ' diff --git a/tests/dl.t b/tests/dl.t index 2a09c24..a62fb1e 100644 --- a/tests/dl.t +++ b/tests/dl.t @@ -1,6 +1,7 @@ echo "definition lists" rc=0 +MARKDOWN_FLAGS= SEP=' =this= diff --git a/tests/emphasis.t b/tests/emphasis.t index c0f7370..c4ebc59 100644 --- a/tests/emphasis.t +++ b/tests/emphasis.t @@ -1,6 +1,7 @@ echo "emphasis" rc=0 +MARKDOWN_FLAGS= echo -n ' *hi* -> hi .............. ' diff --git a/tests/flow.t b/tests/flow.t index acff704..32fb450 100644 --- a/tests/flow.t +++ b/tests/flow.t @@ -1,6 +1,7 @@ echo "paragraph flow" rc=0 +MARKDOWN_FLAGS= echo -n ' header followed by paragraph ..... ' diff --git a/tests/html.t b/tests/html.t index 3191b6b..77ab3c8 100644 --- a/tests/html.t +++ b/tests/html.t @@ -1,6 +1,7 @@ echo "html blocks" rc=0 +MARKDOWN_FLAGS= echo -n ' self-closing block tags (hr) ..... ' diff --git a/tests/linkylinky.t b/tests/linkylinky.t index da7e452..9dd8079 100644 --- a/tests/linkylinky.t +++ b/tests/linkylinky.t @@ -1,6 +1,7 @@ echo "embedded links" rc=0 +MARKDOWN_FLAGS= echo -n ' url contains & ................... ' diff --git a/tests/list.t b/tests/list.t index 3f78f17..97cee73 100644 --- a/tests/list.t +++ b/tests/list.t @@ -1,6 +1,7 @@ echo "lists" rc=0 +MARKDOWN_FLAGS= echo -n ' two separated items (1) .......... ' diff --git a/tests/misc.t b/tests/misc.t index fd7efa1..a52cf69 100644 --- a/tests/misc.t +++ b/tests/misc.t @@ -1,6 +1,7 @@ echo "misc" rc=0 +MARKDOWN_FLAGS= echo -n ' single paragraph ................. ' diff --git a/tests/pandoc.t b/tests/pandoc.t index 5daccc7..a4d9825 100644 --- a/tests/pandoc.t +++ b/tests/pandoc.t @@ -1,6 +1,7 @@ echo "pandoc headers" rc=0 +MARKDOWN_FLAGS= if ./markdown -V | grep HEADER > /dev/null; then @@ -18,6 +19,20 @@ if ./markdown -V | grep HEADER > /dev/null; then rc=1 fi + echo -n ' valid header with -F0x0100........ ' + TEXT='% title +% author(s) +% date +' + count=`echo "$TEXT" | ./markdown -F0x0100 | grep title | wc -l` + + if [ "$count" -gt 0 ]; then + echo "ok" + else + echo "FAILED" + rc=1 + fi + echo -n ' invalid header ................... ' TEXT='% title % author(s) diff --git a/tests/smarty.t b/tests/smarty.t index df8a2be..e365a03 100644 --- a/tests/smarty.t +++ b/tests/smarty.t @@ -1,6 +1,7 @@ echo "smarty pants" rc=0 +MARKDOWN_FLAGS= MARKDOWN_FLAGS=0x0; export MARKDOWN_FLAGS