diff --git a/src/Content/Text/BBCode.php b/src/Content/Text/BBCode.php index 88df9511d4..fab4fba023 100644 --- a/src/Content/Text/BBCode.php +++ b/src/Content/Text/BBCode.php @@ -1234,7 +1234,7 @@ class BBCode } /** - * Expand Youtube and Vimeo links to + * Expand Youtube and Vimeo links to * * @param string $text * @return string @@ -1387,7 +1387,7 @@ class BBCode "\n[hr]", "[hr]\n", " [hr]", "[hr] ", "\n[attachment ", " [attachment ", "\n[/attachment]", "[/attachment]\n", " [/attachment]", "[/attachment] ", "[table]\n", "[table] ", " [table]", "\n[/table]", " [/table]", "[/table] ", - " \n", "\t\n", "[/li]\n", "\n[li]", "\n[*]", + " \n", "\t\n", "[/li]\n", "\n[li]", "\n[*]", ]; $replace = [ "[th]", "[th]", "[th]", "[/th]", "[/th]", "[/th]", @@ -1480,14 +1480,14 @@ class BBCode if ($simple_html == self::INTERNAL) { //Ensure to always start with
", $text);
$heading--;
@@ -1548,7 +1548,11 @@ class BBCode
$text = preg_replace("(\[style=(.*?)\](.*?)\[\/style\])ism", '$2', $text);
// Mastodon Emoji (internal tag, do not document for users)
- $text = preg_replace("(\[emoji=(.*?)](.*?)\[/emoji])ism", '', $text);
+ if ($simple_html == self::MASTODON_API) {
+ $text = preg_replace("(\[emoji=(.*?)](.*?)\[/emoji])ism", '$2', $text);
+ } else {
+ $text = preg_replace("(\[emoji=(.*?)](.*?)\[/emoji])ism", '
', $text);
+ }
// Check for CSS classes
// @deprecated since 2021.12, left for backward-compatibility reasons
diff --git a/src/Factory/Api/Mastodon/Emoji.php b/src/Factory/Api/Mastodon/Emoji.php
index b7f4ee6ead..712bddb48d 100644
--- a/src/Factory/Api/Mastodon/Emoji.php
+++ b/src/Factory/Api/Mastodon/Emoji.php
@@ -34,19 +34,28 @@ class Emoji extends BaseFactory
/**
* Creates an emoji collection from shortcode => image mappings.
*
+ * Only emojis with shortcodes of the form of ':shortcode:' are passed in the collection.
+ *
* @param array $smilies
+ * @param bool $extract_url
*
* @return Emojis
*/
- public function createCollectionFromArray(array $smilies): Emojis
+ public function createCollectionFromArray(array $smilies, bool $extract_url = true): Emojis
{
$prototype = null;
$emojis = [];
- foreach ($smilies as $shortcode => $icon) {
- if (preg_match('/src="(.+?)"/', $icon, $matches)) {
- $url = $matches[1];
+ foreach ($smilies as $shortcode => $url) {
+ if (substr($shortcode, 0, 1) == ':' && substr($shortcode, -1) == ':') {
+ if ($extract_url) {
+ if (preg_match('/src="(.+?)"/', $url, $matches)) {
+ $url = $matches[1];
+ } else {
+ continue;
+ }
+ }
$shortcode = trim($shortcode, ':');
if ($prototype === null) {
diff --git a/src/Factory/Api/Mastodon/Status.php b/src/Factory/Api/Mastodon/Status.php
index 4cdc8a78fc..fb73432f03 100644
--- a/src/Factory/Api/Mastodon/Status.php
+++ b/src/Factory/Api/Mastodon/Status.php
@@ -292,6 +292,10 @@ class Status extends BaseFactory
if (DI::baseUrl()->isLocalUrl($item['uri'])) {
$used_smilies = Smilies::extractUsedSmilies($item['body'] ?: $item['raw-body']);
$emojis = $this->mstdnEmojiFactory->createCollectionFromArray($used_smilies)->getArrayCopy(true);
+ } else {
+ if (preg_match_all("(\[emoji=(.*?)](.*?)\[/emoji])ism", $item['body'] ?: $item['raw-body'], $matches)) {
+ $emojis = $this->mstdnEmojiFactory->createCollectionFromArray(array_combine($matches[2], $matches[1]), false)->getArrayCopy(true);
+ }
}
if ($is_reshare) {