summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--api_test/main.c5
-rw-r--r--src/cmark.h4
-rw-r--r--src/html.c2
3 files changed, 11 insertions, 0 deletions
diff --git a/api_test/main.c b/api_test/main.c
index 8af2e71..8da9ba9 100644
--- a/api_test/main.c
+++ b/api_test/main.c
@@ -791,6 +791,11 @@ static void line_endings(test_batch_runner *runner) {
STR_EQ(runner, html, "<p>line<br />\nline</p>\n",
"crlf endings with CMARK_OPT_HARDBREAKS");
free(html);
+ html = cmark_markdown_to_html(crlf_lines, sizeof(crlf_lines) - 1,
+ CMARK_OPT_DEFAULT | CMARK_OPT_NOBREAKS);
+ STR_EQ(runner, html, "<p>line line</p>\n",
+ "crlf endings with CMARK_OPT_NOBREAKS");
+ free(html);
static const char no_line_ending[] = "```\nline\n```";
html = cmark_markdown_to_html(no_line_ending, sizeof(no_line_ending) - 1,
diff --git a/src/cmark.h b/src/cmark.h
index 3c5d6b6..c98e18e 100644
--- a/src/cmark.h
+++ b/src/cmark.h
@@ -519,6 +519,10 @@ char *cmark_render_latex(cmark_node *root, int options, int width);
*/
#define CMARK_OPT_SAFE (1 << 3)
+/** Render `softbreak` elements as spaces (HTML only).
+ */
+#define CMARK_OPT_NOBREAKS (1 << 4)
+
/**
* ### Options affecting parsing
*/
diff --git a/src/html.c b/src/html.c
index 9ffa08a..c2267cb 100644
--- a/src/html.c
+++ b/src/html.c
@@ -228,6 +228,8 @@ static int S_render_node(cmark_node *node, cmark_event_type ev_type,
case CMARK_NODE_SOFTBREAK:
if (options & CMARK_OPT_HARDBREAKS) {
cmark_strbuf_puts(html, "<br />\n");
+ } else if (options & CMARK_OPT_NOBREAKS) {
+ cmark_strbuf_putc(html, ' ');
} else {
cmark_strbuf_putc(html, '\n');
}