mirror of
https://codeberg.org/grunfink/snac2.git
synced 2024-11-25 06:25:04 +00:00
Added support for Markdown ~~strikethrough text~~.
This commit is contained in:
parent
f3b392e06a
commit
6e3b621f7b
2 changed files with 17 additions and 7 deletions
|
@ -25,6 +25,8 @@ A special subset of Markdown is allowed, including:
|
||||||
**text between two pairs of asterisks**
|
**text between two pairs of asterisks**
|
||||||
.It italic
|
.It italic
|
||||||
*text between a pair of asterisks*
|
*text between a pair of asterisks*
|
||||||
|
.It strikethrough text
|
||||||
|
~~text between a pair of tildes~~
|
||||||
.It code
|
.It code
|
||||||
Text `between backticks` is formatted as code.
|
Text `between backticks` is formatted as code.
|
||||||
.Bd -literal
|
.Bd -literal
|
||||||
|
@ -41,16 +43,16 @@ int main(int argc, char *argv[])
|
||||||
Standalone URLs are converted to links. Also, from version 2.54,
|
Standalone URLs are converted to links. Also, from version 2.54,
|
||||||
markdown-style links in the form of [link label](url) are also
|
markdown-style links in the form of [link label](url) are also
|
||||||
supported.
|
supported.
|
||||||
.It Line separators
|
.It line separators
|
||||||
Horizonal rules can be inserted by typing three minus symbols
|
Horizonal rules can be inserted by typing three minus symbols
|
||||||
alone in a line.
|
alone in a line.
|
||||||
.It quoted text
|
.It quoted text
|
||||||
Lines starting with >.
|
Lines starting with >.
|
||||||
.It User Mentions
|
.It user mentions
|
||||||
Strings in the format @user@host are requested using the Webfinger
|
Strings in the format @user@host are requested using the Webfinger
|
||||||
protocol and converted to links and mentions if something reasonable
|
protocol and converted to links and mentions if something reasonable
|
||||||
is found.
|
is found.
|
||||||
.It Emoticons / Smileys / Silly Symbols
|
.It emoticons /emojis / smileys / silly symbols
|
||||||
(Note: from version 2.51, these symbols are configurable by the
|
(Note: from version 2.51, these symbols are configurable by the
|
||||||
instance administrator, so the available ones may differ).
|
instance administrator, so the available ones may differ).
|
||||||
.Pp
|
.Pp
|
||||||
|
|
16
format.c
16
format.c
|
@ -89,6 +89,7 @@ static xs_str *format_line(const char *line, xs_list **attach)
|
||||||
xs *sm = xs_regex_split(line,
|
xs *sm = xs_regex_split(line,
|
||||||
"("
|
"("
|
||||||
"`[^`]+`" "|"
|
"`[^`]+`" "|"
|
||||||
|
"~~[^~]+~~" "|"
|
||||||
"\\*\\*?\\*?[^\\*]+\\*?\\*?\\*" "|"
|
"\\*\\*?\\*?[^\\*]+\\*?\\*?\\*" "|"
|
||||||
"\\[[^]]+\\]\\([^\\)]+\\)" "|"
|
"\\[[^]]+\\]\\([^\\)]+\\)" "|"
|
||||||
"https?:/" "/[^[:space:]]+"
|
"https?:/" "/[^[:space:]]+"
|
||||||
|
@ -100,30 +101,37 @@ static xs_str *format_line(const char *line, xs_list **attach)
|
||||||
if ((n & 0x1)) {
|
if ((n & 0x1)) {
|
||||||
/* markup */
|
/* markup */
|
||||||
if (xs_startswith(v, "`")) {
|
if (xs_startswith(v, "`")) {
|
||||||
xs *s1 = xs_crop_i(xs_dup(v), 1, -1);
|
xs *s1 = xs_strip_chars_i(xs_dup(v), "`");
|
||||||
xs *e1 = encode_html(s1);
|
xs *e1 = encode_html(s1);
|
||||||
xs *s2 = xs_fmt("<code>%s</code>", e1);
|
xs *s2 = xs_fmt("<code>%s</code>", e1);
|
||||||
s = xs_str_cat(s, s2);
|
s = xs_str_cat(s, s2);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
if (xs_startswith(v, "***")) {
|
if (xs_startswith(v, "***")) {
|
||||||
xs *s1 = xs_crop_i(xs_dup(v), 3, -3);
|
xs *s1 = xs_strip_chars_i(xs_dup(v), "*");
|
||||||
xs *s2 = xs_fmt("<b><i>%s</i></b>", s1);
|
xs *s2 = xs_fmt("<b><i>%s</i></b>", s1);
|
||||||
s = xs_str_cat(s, s2);
|
s = xs_str_cat(s, s2);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
if (xs_startswith(v, "**")) {
|
if (xs_startswith(v, "**")) {
|
||||||
xs *s1 = xs_crop_i(xs_dup(v), 2, -2);
|
xs *s1 = xs_strip_chars_i(xs_dup(v), "*");
|
||||||
xs *s2 = xs_fmt("<b>%s</b>", s1);
|
xs *s2 = xs_fmt("<b>%s</b>", s1);
|
||||||
s = xs_str_cat(s, s2);
|
s = xs_str_cat(s, s2);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
if (xs_startswith(v, "*")) {
|
if (xs_startswith(v, "*")) {
|
||||||
xs *s1 = xs_crop_i(xs_dup(v), 1, -1);
|
xs *s1 = xs_strip_chars_i(xs_dup(v), "*");
|
||||||
xs *s2 = xs_fmt("<i>%s</i>", s1);
|
xs *s2 = xs_fmt("<i>%s</i>", s1);
|
||||||
s = xs_str_cat(s, s2);
|
s = xs_str_cat(s, s2);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
if (xs_startswith(v, "~~")) {
|
||||||
|
xs *s1 = xs_strip_chars_i(xs_dup(v), "~");
|
||||||
|
xs *e1 = encode_html(s1);
|
||||||
|
xs *s2 = xs_fmt("<s>%s</s>", e1);
|
||||||
|
s = xs_str_cat(s, s2);
|
||||||
|
}
|
||||||
|
else
|
||||||
if (xs_startswith(v, "http")) {
|
if (xs_startswith(v, "http")) {
|
||||||
xs *u = xs_replace(v, "#", "#");
|
xs *u = xs_replace(v, "#", "#");
|
||||||
xs *v2 = xs_strip_chars_i(xs_dup(u), ".,)");
|
xs *v2 = xs_strip_chars_i(xs_dup(u), ".,)");
|
||||||
|
|
Loading…
Reference in a new issue