diff --git a/VERSION b/VERSION index 23aa839..0495c4a 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.2.2 +1.2.3 diff --git a/generate.c b/generate.c index a9cddc9..edce39d 100644 --- a/generate.c +++ b/generate.c @@ -1296,7 +1296,10 @@ mkd_text(char *bfr, int size, FILE *output, int flags) reparse(bfr, size, 0, &f); emblock(&f); - fwrite(T(f.out), S(f.out), 1, output); + if ( flags & CDATA_OUTPUT ) + ___mkd_xml(T(f.out), S(f.out), output); + else + fwrite(T(f.out), S(f.out), 1, output); ___mkd_freemmiot(&f, 0); return 0; diff --git a/markdown.h b/markdown.h index c56ae0f..794343d 100644 --- a/markdown.h +++ b/markdown.h @@ -120,5 +120,6 @@ extern void ___mkd_freefootnotes(MMIOT *); extern void ___mkd_initmmiot(MMIOT *, void *); extern void ___mkd_freemmiot(MMIOT *, void *); extern void ___mkd_freeLineRange(Line *, Line *); +extern void ___mkd_xml(char *, int, FILE *); #endif/*_MARKDOWN_D*/ diff --git a/mkdio.c b/mkdio.c index cf5cb1c..b0a5704 100644 --- a/mkdio.c +++ b/mkdio.c @@ -190,22 +190,8 @@ mkd_generatehtml(Document *p, FILE *output) int szdoc; if ( (szdoc = mkd_document(p, &doc)) != EOF ) { - if ( p->ctx->flags & CDATA_OUTPUT ) { - char c; - - while ( szdoc-- > 0 ) { - if ( !isascii(c = *doc++) ) - continue; - switch (c) { - case '<': fputs("<", output); break; - case '>': fputs(">", output); break; - case '&': fputs("&", output); break; - case '"': fputs(""", output); break; - case '\'':fputs("'", output); break; - default: putc(c,output); break; - } - } - } + if ( p->ctx->flags & CDATA_OUTPUT ) + ___mkd_xml(doc, szdoc, output); else fwrite(doc, szdoc, 1, output); putc('\n', output); diff --git a/resource.c b/resource.c index 9ae9b20..c5272ef 100644 --- a/resource.c +++ b/resource.c @@ -143,3 +143,25 @@ mkd_cleanup(Document *doc) free(doc); } } + + +/* write output in XML format + */ +void +___mkd_xml(char *p, int size, FILE *out) +{ + char c; + + while ( size-- > 0 ) { + if ( !isascii(c = *p++) ) + continue; + switch (c) { + case '<': fputs("<", out); break; + case '>': fputs(">", out); break; + case '&': fputs("&", out); break; + case '"': fputs(""", out); break; + case '\'':fputs("'", out); break; + default: putc(c,out); break; + } + } +}