mirror of
https://codeberg.org/grunfink/snac2.git
synced 2024-11-10 03:50:38 +03:00
Merge remote-tracking branch 'origin/master'
This commit is contained in:
commit
4621a25ba4
@ -1,5 +1,13 @@
|
|||||||
# Release Notes
|
# Release Notes
|
||||||
|
|
||||||
|
## 2.54
|
||||||
|
|
||||||
|
Markdown-style links are now supported.
|
||||||
|
|
||||||
|
The avatar and/or the header images can now be deleted (contributed by louis77).
|
||||||
|
|
||||||
|
The webfinger content-type response header is now RFC-compliant (contributed by steve-bate).
|
||||||
|
|
||||||
## 2.53
|
## 2.53
|
||||||
|
|
||||||
New user feature to search by post content (using regular expressions) or tag.
|
New user feature to search by post content (using regular expressions) or tag.
|
||||||
|
@ -38,7 +38,12 @@ int main(int argc, char *argv[])
|
|||||||
```
|
```
|
||||||
.Ed
|
.Ed
|
||||||
.It links
|
.It links
|
||||||
Standalone URLs.
|
Standalone URLs are converted to links. Also, from version 2.54,
|
||||||
|
markdown-style links in the form of [link label](url) are also
|
||||||
|
supported.
|
||||||
|
.It Line separators
|
||||||
|
Horizonal rules can be inserted by typing three minus symbols
|
||||||
|
alone in a line.
|
||||||
.It quoted text
|
.It quoted text
|
||||||
Lines starting with >.
|
Lines starting with >.
|
||||||
.It User Mentions
|
.It User Mentions
|
||||||
|
31
doc/snac.8
31
doc/snac.8
@ -304,15 +304,25 @@ supports:
|
|||||||
Complete support, on input and output.
|
Complete support, on input and output.
|
||||||
.It Vt Undo
|
.It Vt Undo
|
||||||
For
|
For
|
||||||
.Vt Follow
|
.Vt Follow ,
|
||||||
|
.Vt Like
|
||||||
|
and
|
||||||
|
.Vt Announce
|
||||||
objects, on input and output.
|
objects, on input and output.
|
||||||
.It Vt Create
|
.It Vt Create
|
||||||
For
|
For
|
||||||
.Vt Note ,
|
.Vt Note ,
|
||||||
.Vt Question
|
.Vt Question ,
|
||||||
|
.Vt Page ,
|
||||||
|
.Vt Article ,
|
||||||
|
.Vt Event
|
||||||
and
|
and
|
||||||
.Vt Page
|
.Vt Video
|
||||||
objects, on input and output.
|
objects on input, and for
|
||||||
|
.Vt Note
|
||||||
|
and
|
||||||
|
.Vt Question
|
||||||
|
on output.
|
||||||
.It Vt Accept
|
.It Vt Accept
|
||||||
For
|
For
|
||||||
.Vt Follow
|
.Vt Follow
|
||||||
@ -327,11 +337,16 @@ For
|
|||||||
objects, on input and output.
|
objects, on input and output.
|
||||||
.It Vt Update
|
.It Vt Update
|
||||||
For
|
For
|
||||||
.Vt Person ,
|
.Vt Note ,
|
||||||
.Vt Note
|
.Vt Question ,
|
||||||
|
.Vt Page ,
|
||||||
|
.Vt Article ,
|
||||||
|
.Vt Event
|
||||||
and
|
and
|
||||||
.Vt Question
|
.Vt Video
|
||||||
objects, on input and output.
|
objects on input, and for
|
||||||
|
.Vt Note
|
||||||
|
on output.
|
||||||
.It Vt Delete
|
.It Vt Delete
|
||||||
Supported for
|
Supported for
|
||||||
.Vt Note
|
.Vt Note
|
||||||
|
22
format.c
22
format.c
@ -87,7 +87,12 @@ static xs_str *format_line(const char *line, xs_list **attach)
|
|||||||
|
|
||||||
/* split by markup */
|
/* split by markup */
|
||||||
xs *sm = xs_regex_split(line,
|
xs *sm = xs_regex_split(line,
|
||||||
"(`[^`]+`|\\*\\*?[^\\*]+\\*?\\*|https?:/" "/[^[:space:]]+)");
|
"("
|
||||||
|
"`[^`]+`" "|"
|
||||||
|
"\\*\\*?[^\\*]+\\*?\\*" "|"
|
||||||
|
"\\[[^]]+\\]\\([^\\)]+\\)" "|"
|
||||||
|
"https?:/" "/[^[:space:]]+"
|
||||||
|
")");
|
||||||
int n = 0;
|
int n = 0;
|
||||||
|
|
||||||
p = sm;
|
p = sm;
|
||||||
@ -135,6 +140,21 @@ static xs_str *format_line(const char *line, xs_list **attach)
|
|||||||
s = xs_str_cat(s, s1);
|
s = xs_str_cat(s, s1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
if (*v == '[') {
|
||||||
|
/* markdown-like links [label](url) */
|
||||||
|
xs *w = xs_strip_chars_i(xs_dup(v), "[)");
|
||||||
|
xs *l = xs_split_n(w, "](", 1);
|
||||||
|
|
||||||
|
if (xs_list_len(l) == 2) {
|
||||||
|
xs *link = xs_fmt("<a href=\"%s\">%s</a>",
|
||||||
|
xs_list_get(l, 1), xs_list_get(l, 0));
|
||||||
|
|
||||||
|
s = xs_str_cat(s, link);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
s = xs_str_cat(s, v);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
s = xs_str_cat(s, v);
|
s = xs_str_cat(s, v);
|
||||||
}
|
}
|
||||||
|
6
html.c
6
html.c
@ -1016,7 +1016,7 @@ xs_html *html_top_controls(snac *snac)
|
|||||||
xs_html_sctag("input",
|
xs_html_sctag("input",
|
||||||
xs_html_attr("type", "checkbox"),
|
xs_html_attr("type", "checkbox"),
|
||||||
xs_html_attr("name", "avatar_delete")),
|
xs_html_attr("name", "avatar_delete")),
|
||||||
xs_html_text(L("Delete current avatar"))),
|
xs_html_text(L("Delete current avatar"))),
|
||||||
xs_html_tag("p",
|
xs_html_tag("p",
|
||||||
xs_html_text(L("Header image (banner): ")),
|
xs_html_text(L("Header image (banner): ")),
|
||||||
xs_html_sctag("input",
|
xs_html_sctag("input",
|
||||||
@ -1026,8 +1026,8 @@ xs_html *html_top_controls(snac *snac)
|
|||||||
xs_html_sctag("input",
|
xs_html_sctag("input",
|
||||||
xs_html_attr("type", "checkbox"),
|
xs_html_attr("type", "checkbox"),
|
||||||
xs_html_attr("name", "header_delete")),
|
xs_html_attr("name", "header_delete")),
|
||||||
xs_html_text(L("Delete current header image"))),
|
xs_html_text(L("Delete current header image"))),
|
||||||
xs_html_tag("p",
|
xs_html_tag("p",
|
||||||
xs_html_text(L("Bio:")),
|
xs_html_text(L("Bio:")),
|
||||||
xs_html_sctag("br", NULL),
|
xs_html_sctag("br", NULL),
|
||||||
xs_html_tag("textarea",
|
xs_html_tag("textarea",
|
||||||
|
2
snac.h
2
snac.h
@ -1,7 +1,7 @@
|
|||||||
/* snac - A simple, minimalistic ActivityPub instance */
|
/* snac - A simple, minimalistic ActivityPub instance */
|
||||||
/* copyright (c) 2022 - 2024 grunfink et al. / MIT license */
|
/* copyright (c) 2022 - 2024 grunfink et al. / MIT license */
|
||||||
|
|
||||||
#define VERSION "2.53"
|
#define VERSION "2.54-dev"
|
||||||
|
|
||||||
#define USER_AGENT "snac/" VERSION
|
#define USER_AGENT "snac/" VERSION
|
||||||
|
|
||||||
|
6
xs.h
6
xs.h
@ -277,7 +277,7 @@ int _xs_get_size(const xs_val *ptr)
|
|||||||
/* must match _XS_TYPE_SIZE */
|
/* must match _XS_TYPE_SIZE */
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
memcpy(&i, ptr, sizeof(i));
|
memcpy(&i, ptr + 1, sizeof(i));
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -299,7 +299,7 @@ int xs_size(const xs_val *data)
|
|||||||
case XSTYPE_LIST:
|
case XSTYPE_LIST:
|
||||||
case XSTYPE_DICT:
|
case XSTYPE_DICT:
|
||||||
case XSTYPE_DATA:
|
case XSTYPE_DATA:
|
||||||
len = _xs_get_size(data + 1);
|
len = _xs_get_size(data);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -1286,7 +1286,7 @@ xs_data *xs_data_new(const void *data, int size)
|
|||||||
int xs_data_size(const xs_data *value)
|
int xs_data_size(const xs_data *value)
|
||||||
/* returns the size of the data stored inside value */
|
/* returns the size of the data stored inside value */
|
||||||
{
|
{
|
||||||
return _xs_get_size(value + 1) - (1 + _XS_TYPE_SIZE);
|
return _xs_get_size(value) - (1 + _XS_TYPE_SIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1 +1 @@
|
|||||||
/* 65769f25ed99b886a643522bef21628396cd118d 2024-05-25T08:18:51+02:00 */
|
/* e148ab08d5a55ac7bd30ff900f5eb048a57e21af 2024-05-27T05:33:01+02:00 */
|
||||||
|
Loading…
Reference in New Issue
Block a user