Smileys and emoji conflict with each other when parsing text.
Apparently, smileys are given priority over emoji, causing bugs when smileys are part of emoji, like :o in :ox:, rendering the smiley for :o and "x:".
I suggest to either give preference to the longest string (until a space character?), but I am unsure if it is under s9e\TextFormatter domain. This is already being done inside smileys: a custom smiley ":oooh:" will render correctly.
Otherwise, we could very well reverse the priority: smileys can be a substring of emoji (semicolon + a character, usually), like :o, , etc being subsets of :ox:, :pe:; but emoji are not: I find it difficul to imagine a custom emoji string that would continue from :ox:, like... :ox:whatever.