Hard breaks
This commit is contained in:
@@ -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 writelink(char *data, int i, size_t len, FILE *out);
|
||||||
static int writeimage(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 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,
|
static int getlinkinfo(char *data, int i, size_t len,
|
||||||
int *textstart, int *textend,
|
int *textstart, int *textend,
|
||||||
int *titlestart, int *titleend,
|
int *titlestart, int *titleend,
|
||||||
@@ -60,6 +61,8 @@ void writedata(char *data, size_t len, FILE *out) {
|
|||||||
goto special;
|
goto special;
|
||||||
if ((newi = writeautolink(data, i, len, out)) >= 0)
|
if ((newi = writeautolink(data, i, len, out)) >= 0)
|
||||||
goto special;
|
goto special;
|
||||||
|
if ((newi = writehardbreak(data, i, len, out)) >= 0)
|
||||||
|
goto special;
|
||||||
if (data[i] == '\\') {
|
if (data[i] == '\\') {
|
||||||
if (strchr(punctuation, data[i + 1]) == NULL)
|
if (strchr(punctuation, data[i + 1]) == NULL)
|
||||||
writechescape('\\', out);
|
writechescape('\\', out);
|
||||||
@@ -180,6 +183,25 @@ static int writeautolink(char *data, int i, size_t len, FILE *out) {
|
|||||||
return i;
|
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,
|
static int getlinkinfo(char *data, int i, size_t len,
|
||||||
int *textstart, int *textend,
|
int *textstart, int *textend,
|
||||||
int *titlestart, int *titleend,
|
int *titlestart, int *titleend,
|
||||||
|
|||||||
@@ -147,7 +147,7 @@ static int parseline(char *line, struct parsestate *currstate, FILE *out) {
|
|||||||
currstate->prev.type = PLAIN;
|
currstate->prev.type = PLAIN;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
appendcharstring(currstate->para, ' ');
|
appendcharstring(currstate->para, '\n');
|
||||||
appendstrstring(currstate->para, realcontent(line, &type));
|
appendstrstring(currstate->para, realcontent(line, &type));
|
||||||
break;
|
break;
|
||||||
/* According to the commonmark spec, this markdown:
|
/* According to the commonmark spec, this markdown:
|
||||||
|
|||||||
Reference in New Issue
Block a user