snac2

Fork of https://codeberg.org/grunfink/snac2
git clone https://git.inz.fi/snac2
Log | Files | Refs | README | LICENSE

commit ad4fccd60d30f175650e7ab6ca711e9595787b82
parent a940d146ae0193745f1ee6ca48d37aeac62e391e
Author: grunfink <grunfink@noreply.codeberg.org>
Date:   Mon, 24 Jul 2023 10:49:18 +0000

Merge pull request 'Allow several tags & fix video element width, and more.' (#74) from yonle/snac2:master into master

Reviewed-on: https://codeberg.org/grunfink/snac2/pulls/74

Diffstat:
Mdoc/style.css | 5+++--
Mformat.c | 30++++++++++++++++++++++++------
2 files changed, 27 insertions(+), 8 deletions(-)

diff --git a/doc/style.css b/doc/style.css @@ -1,5 +1,6 @@ -body { max-width: 48em; margin: auto; line-height: 1.5; padding: 0.8em } -img { max-width: 100% } +body { max-width: 48em; margin: auto; line-height: 1.5; padding: 0.8em; word-wrap: break-word; } +pre { overflow-x: scroll; } +.snac-embedded-video, img { max-width: 100% } .snac-origin { font-size: 85% } .snac-score { float: right; font-size: 85% } .snac-top-user { text-align: center; padding-bottom: 2em } diff --git a/format.c b/format.c @@ -56,7 +56,8 @@ static xs_str *format_line(const char *line, xs_list **attach) /* markup */ if (xs_startswith(v, "`")) { xs *s1 = xs_crop_i(xs_dup(v), 1, -1); - xs *s2 = xs_fmt("<code>%s</code>", s1); + xs *e1 = encode_html(s1); + xs *s2 = xs_fmt("<code>%s</code>", e1); s = xs_str_cat(s, s2); } else @@ -134,11 +135,28 @@ xs_str *not_really_markdown(const char *content, xs_list **attach) continue; } - if (in_pre) - ss = xs_dup(v); + if (in_pre) { + // Encode all HTML characters when we're in pre element until we are out. + ss = encode_html(xs_dup(v)); + + s = xs_str_cat(s, ss); + s = xs_str_cat(s, "<br>"); + continue; + } + else ss = xs_strip_i(format_line(v, attach)); + if (xs_startswith(ss, "---")) { + /* delete the --- */ + ss = xs_strip_i(xs_crop_i(ss, 3, 0)); + s = xs_str_cat(s, "<hr>"); + + s = xs_str_cat(s, ss); + + continue; + } + if (xs_startswith(ss, ">")) { /* delete the > and subsequent spaces */ ss = xs_strip_i(xs_crop_i(ss, 1, 0)); @@ -186,8 +204,8 @@ xs_str *not_really_markdown(const char *content, xs_list **attach) const char *valid_tags[] = { - "a", "p", "br", "br/", "blockquote", "ul", "ol", "li", "cite", - "span", "i", "b", "u", "pre", "code", "em", "strong", NULL + "a", "p", "br", "br/", "blockquote", "ul", "ol", "li", "cite", "small", + "span", "i", "b", "u", "pre", "code", "em", "strong", "hr", "img", "del", NULL }; xs_str *sanitize(const char *content) @@ -219,7 +237,7 @@ xs_str *sanitize(const char *content) if (valid_tags[i]) { /* accepted tag: rebuild it with only the accepted elements */ - xs *el = xs_regex_match(v, "(href|rel|class|target)=\"[^\"]*\""); + xs *el = xs_regex_match(v, "(src|href|rel|class|target)=\"[^\"]*\""); xs *s3 = xs_join(el, " "); s2 = xs_fmt("<%s%s%s%s>",