/** * Translate all emoji aliases to their corresponding Html image tags. * * Thanks to punbb 1.3.5 (GPL License) for function, which was largely * inspired from their do_smilies function. * * @param string $Text The actual user-submitted post * @return string Return the emoji-formatted post */ public function translateToHtml($Text) { if (!$this->enabled) { return $Text; } $Text = ' ' . $Text . ' '; // First, translate all aliases. Canonical emoji will get translated // out of a loop. $emojiAliasList = $this->aliases; // Loop through and apply changes to all visible aliases from dropdown foreach ($emojiAliasList as $emojiAlias => $emojiCanonical) { $emojiFilePath = $this->getEmojiPath($emojiCanonical); if (strpos($Text, htmlentities($emojiAlias)) !== false) { $Text = Gdn_Format::ReplaceButProtectCodeBlocks('`(?<=[>\\s]|( ))' . preg_quote(htmlentities($emojiAlias), '`') . '(?=\\W)`m', $this->img($emojiFilePath, $emojiAlias), $Text); } } // Second, translate canonical list, without looping. $ldelim = preg_quote($this->ldelim, '`'); $rdelim = preg_quote($this->rdelim, '`'); $emoji = $this; $Text = Gdn_Format::replaceButProtectCodeBlocks("`({$ldelim}[a-z0-9_+-]+{$rdelim})`i", function ($m) use($emoji) { $emoji_name = trim($m[1], ':'); $emoji_path = $emoji->getEmojiPath($emoji_name); if ($emoji_path) { return $emoji->img($emoji_path, $emoji->ldelim . $emoji_name . $emoji->rdelim); } else { return $m[0]; } }, $Text, true); return substr($Text, 1, -1); }