mirror of
https://github.com/friendica/friendica
synced 2025-04-27 12:30:11 +00:00
Require whitespace around smilies and normalize federating text
This commit is contained in:
parent
2cb0027f56
commit
d45e9d6af2
9 changed files with 458 additions and 57 deletions
|
@ -34,28 +34,18 @@ 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, bool $extract_url = true): Emojis
|
||||
public function createCollectionFromArray(array $smilies): Emojis
|
||||
{
|
||||
$prototype = null;
|
||||
|
||||
$emojis = [];
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
if ($shortcode !== '' && $url !== '') {
|
||||
$shortcode = trim($shortcode, ':');
|
||||
|
||||
if ($prototype === null) {
|
||||
|
@ -71,12 +61,20 @@ class Emoji extends BaseFactory
|
|||
}
|
||||
|
||||
/**
|
||||
* @param array $smilies
|
||||
* @param array $smilies as is returned by Smilies::getList()
|
||||
*
|
||||
* @return Emojis
|
||||
*/
|
||||
public function createCollectionFromSmilies(array $smilies): Emojis
|
||||
{
|
||||
return self::createCollectionFromArray(array_combine($smilies['texts'], $smilies['icons']));
|
||||
$emojis = [];
|
||||
$icons = $smilies['icons'];
|
||||
foreach ($smilies['texts'] as $i => $name) {
|
||||
$url = $icons[$i];
|
||||
if (preg_match('/src="(.+?)"/', $url, $matches)) {
|
||||
$emojis[$name] = $matches[1];
|
||||
}
|
||||
}
|
||||
return self::createCollectionFromArray($emojis);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -290,11 +290,18 @@ class Status extends BaseFactory
|
|||
|
||||
$emojis = null;
|
||||
if (DI::baseUrl()->isLocalUrl($item['uri'])) {
|
||||
$used_smilies = Smilies::extractUsedSmilies($item['body'] ?: $item['raw-body']);
|
||||
$used_smilies = Smilies::extractUsedSmilies($item['raw-body'] ?: $item['body']);
|
||||
// $used_smilies contains normalized texts
|
||||
if ($item['raw-body']) {
|
||||
$item['raw-body'] = $used_smilies[''];
|
||||
} elseif ($item['body']) {
|
||||
$item['body'] = $used_smilies[''];
|
||||
}
|
||||
unset($used_smilies['']);
|
||||
$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);
|
||||
$emojis = $this->mstdnEmojiFactory->createCollectionFromArray(array_combine($matches[2], $matches[1]))->getArrayCopy(true);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue