@@ -639,7 +639,11 @@ class _ZulipContentParser {
639
639
return RegExp ("^(?:$mentionClass (?: silent)?|silent $mentionClass )\$ " );
640
640
}();
641
641
642
- static final _emojiClassRegexp = RegExp (r"^emoji(?:-[0-9a-f]+)*$" );
642
+ static final _emojiClassNameRegexp = () {
643
+ const specificEmoji = r"emoji(?:-[0-9a-f]+)+" ;
644
+ return RegExp ("^(?:emoji $specificEmoji |$specificEmoji emoji)\$ " );
645
+ }();
646
+ static final _emojiCodeFromClassNameRegexp = RegExp (r"emoji-([^ ]+)" );
643
647
644
648
InlineContentNode parseInlineContent (dom.Node node) {
645
649
assert (_debugParserContext == _ParserContext .inline);
@@ -655,7 +659,6 @@ class _ZulipContentParser {
655
659
656
660
final element = node;
657
661
final localName = element.localName;
658
- final classes = element.classes;
659
662
final className = element.className;
660
663
List <InlineContentNode > nodes () => parseInlineContentList (element.nodes);
661
664
@@ -691,14 +694,9 @@ class _ZulipContentParser {
691
694
}
692
695
693
696
if (localName == 'span'
694
- && classes.length == 2
695
- && classes.contains ('emoji' )
696
- && classes.every (_emojiClassRegexp.hasMatch)) {
697
- final emojiCode = classes
698
- .firstWhere ((className) => className.startsWith ('emoji-' ))
699
- .replaceFirst ('emoji-' , '' );
700
- assert (emojiCode.isNotEmpty);
701
-
697
+ && _emojiClassNameRegexp.hasMatch (className)) {
698
+ final emojiCode = _emojiCodeFromClassNameRegexp.firstMatch (className)!
699
+ .group (1 )! ;
702
700
final unicode = tryParseEmojiCodeToUnicode (emojiCode);
703
701
if (unicode == null ) return unimplemented ();
704
702
return UnicodeEmojiNode (emojiUnicode: unicode, debugHtmlNode: debugHtmlNode);
0 commit comments