Hard breaks

This commit is contained in:
Nate Choe
2022-05-01 05:25:03 -05:00
parent 373c854908
commit eae807410b
2 changed files with 23 additions and 1 deletions

View File

@@ -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("<br />", out);
return i;
}
if (i + codelen >= len)
return -1;
if (memcmp(data + i, endcode, codelen) != 0)
return -1;
fputs("<br />", out);
return i + codelen;
}
static int getlinkinfo(char *data, int i, size_t len,
int *textstart, int *textend,
int *titlestart, int *titleend,

View File

@@ -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: