md4c

C Markdown parser. Fast. SAX-like interface. Compliant to CommonMark specification.
git clone https://noulin.net/git/md4c.git
Log | Files | Refs | README | LICENSE

commit de2338ece88ef2bb1a890b00d2592255ca880732
parent c217261d291f37357615db9e016cf7fee202cc46
Author: Martin Mitas <mity@morous.org>
Date:   Sun,  9 Oct 2016 00:42:30 +0200

Fix: By default, do not collapse whitespace.

Diffstat:
Mmd2html/md2html.c | 3+++
Mmd4c/md4c.c | 2+-
Mmd4c/md4c.h | 11++++++-----
3 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/md2html/md2html.c b/md2html/md2html.c @@ -424,6 +424,7 @@ static const option cmdline_options[] = { { "fpermissive-atx-headers", 0, 'A', OPTION_ARG_NONE }, { "fno-indented-code", 0, 'I', OPTION_ARG_NONE }, { "fno-html-blocks", 0, 'H', OPTION_ARG_NONE }, + { "fcollapse-whitespace", 0, 'W', OPTION_ARG_NONE }, { 0 } }; @@ -441,6 +442,7 @@ usage(void) " -h, --help display this help and exit\n" "\n" "Markdown dialect options:\n" + " --fcollapse-whitespace collapse non-trivial whitespace\n" " --fverbatim-entities do not translate entities\n" " --fpermissive-atx-headers allow ATX headers without delimiting space\n" " --fno-indented-code disable indented code blocks\n" @@ -473,6 +475,7 @@ cmdline_callback(int opt, char const* value, void* data) case 'A': renderer_flags |= MD_FLAG_PERMISSIVEATXHEADERS; break; case 'I': renderer_flags |= MD_FLAG_NOINDENTEDCODEBLOCKS; break; case 'H': renderer_flags |= MD_FLAG_NOHTMLBLOCKS; break; + case 'W': renderer_flags |= MD_FLAG_COLLAPSEWHITESPACE; break; default: fprintf(stderr, "Illegal option: %s\n", value); diff --git a/md4c/md4c.c b/md4c/md4c.c @@ -702,7 +702,7 @@ md_collect_marks(MD_CTX* ctx, const MD_LINE* lines, int n_lines) } /* Turn non-trivial whitespace into single space. */ - if(ISWHITESPACE_(ch)) { + if(ISWHITESPACE_(ch) && (ctx->r.flags & MD_FLAG_COLLAPSEWHITESPACE)) { OFF tmp = off+1; while(tmp < end && ISWHITESPACE(tmp)) diff --git a/md4c/md4c.h b/md4c/md4c.h @@ -147,13 +147,14 @@ struct MD_BLOCK_CODE_DETAIL_tag { /* Flags specifying Markdown dialect. * - * By default (when MD_RENDERER::flags == 0), we follow CommMark specification. + * By default (when MD_RENDERER::flags == 0), we follow CommonMark specification. * The following flags may allow some extensions or deviations from it. */ -#define MD_FLAG_PERMISSIVEATXHEADERS 0x0001 /* Do not require space in ATX headers ( ###header ) */ -#define MD_FLAG_NOINDENTEDCODEBLOCKS 0x0002 /* Disable indented code blocks. (Only fenced code works.) */ -#define MD_FLAG_NOHTMLBLOCKS 0x0004 /* Disable raw HTML blocks. */ -#define MD_FLAG_NOHTMLSPANS 0x0008 /* Disable raw HTML (inline). */ +#define MD_FLAG_COLLAPSEWHITESPACE 0x0001 /* In MD_TEXT_NORMAL, collapse non-trivial whitespace into single ' ' */ +#define MD_FLAG_PERMISSIVEATXHEADERS 0x0002 /* Do not require space in ATX headers ( ###header ) */ +#define MD_FLAG_NOINDENTEDCODEBLOCKS 0x0004 /* Disable indented code blocks. (Only fenced code works.) */ +#define MD_FLAG_NOHTMLBLOCKS 0x0010 /* Disable raw HTML blocks. */ +#define MD_FLAG_NOHTMLSPANS 0x0020 /* Disable raw HTML (inline). */ #define MD_FLAG_NOHTML (MD_FLAG_NOHTMLBLOCKS | MD_FLAG_NOHTMLSPANS) /* Caller-provided callbacks.