From eae807410b510f875b9b1d97db322bc4b240fc1a Mon Sep 17 00:00:00 2001 From: Nate Choe Date: Sun, 1 May 2022 05:25:03 -0500 Subject: [PATCH] Hard breaks --- src/inlines.c | 22 ++++++++++++++++++++++ src/template.c | 2 +- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/inlines.c b/src/inlines.c index db48258..817a9d3 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -37,6 +37,7 @@ static int writecodespan(char *data, int i, size_t len, FILE *out); static int writelink(char *data, int i, size_t len, FILE *out); static int writeimage(char *data, int i, size_t len, FILE *out); static int writeautolink(char *data, int i, size_t len, FILE *out); +static int writehardbreak(char *data, int i, size_t len, FILE *out); static int getlinkinfo(char *data, int i, size_t len, int *textstart, int *textend, int *titlestart, int *titleend, @@ -60,6 +61,8 @@ void writedata(char *data, size_t len, FILE *out) { goto special; if ((newi = writeautolink(data, i, len, out)) >= 0) goto special; + if ((newi = writehardbreak(data, i, len, out)) >= 0) + goto special; if (data[i] == '\\') { if (strchr(punctuation, data[i + 1]) == NULL) writechescape('\\', out); @@ -180,6 +183,25 @@ static int writeautolink(char *data, int i, size_t len, FILE *out) { return i; } +static int writehardbreak(char *data, int i, size_t len, FILE *out) { + const char *endcode = " \n"; + const int codelen = strlen(endcode); + if (data[i] == '\\') { + if (++i >= len) + return -1; + if (data[i++] != '\n') + return -1; + fputs("
", out); + return i; + } + if (i + codelen >= len) + return -1; + if (memcmp(data + i, endcode, codelen) != 0) + return -1; + fputs("
", out); + return i + codelen; +} + static int getlinkinfo(char *data, int i, size_t len, int *textstart, int *textend, int *titlestart, int *titleend, diff --git a/src/template.c b/src/template.c index 39e9b94..efee686 100644 --- a/src/template.c +++ b/src/template.c @@ -147,7 +147,7 @@ static int parseline(char *line, struct parsestate *currstate, FILE *out) { currstate->prev.type = PLAIN; } else - appendcharstring(currstate->para, ' '); + appendcharstring(currstate->para, '\n'); appendstrstring(currstate->para, realcontent(line, &type)); break; /* According to the commonmark spec, this markdown: