summaryrefslogtreecommitdiff
path: root/format.c
diff options
context:
space:
mode:
authorgrunfink <grunfink@noreply.codeberg.org>2023-07-24 10:49:18 +0000
committergrunfink <grunfink@noreply.codeberg.org>2023-07-24 10:49:18 +0000
commitad4fccd60d30f175650e7ab6ca711e9595787b82 (patch)
tree363966ad1eeafe833b727a164f4349da7e9a4f9d /format.c
parenta940d146ae0193745f1ee6ca48d37aeac62e391e (diff)
parentae1f0ac334e3e978183cf75feaa8bfc2f12df4c5 (diff)
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 (limited to 'format.c')
-rw-r--r--format.c30
1 files changed, 24 insertions, 6 deletions
diff --git a/format.c b/format.c
index 8c6c02a..fe71996 100644
--- 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>",