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