// ReSharper disable once ReturnTypeCanBeEnumerable.Global
        public static EmojiRenderResult[] RenderEmojiAsStringList(EmojiPackType pack, IList <long> activeEmoji)
        {
            var result     = new List <EmojiRenderResult>();
            var dictionary = emojiList[pack];

            for (int i = 0; i < activeEmoji.Count; i++)
            {
                bool u   = false;
                int  max = Math.Min(i + 3, activeEmoji.Count - 1);
                int  j   = max;
                for (; j >= i; j--)
                {
                    var a = new List <long>();
                    for (int n = i; n <= j; n++)
                    {
                        a.Add(activeEmoji[n]);
                    }

                    var emojiString = GetStringForCodes(a);
                    if (dictionary.Contains(emojiString))
                    {
                        u = true;
                        result.Add(new EmojiRenderResult()
                        {
                            emojiCode = emojiString
                        });
                        break;
                    }
                }

                if (u)
                {
                    // Такой сиквенс, который начинается на activeEmoji[i] есть в словаре
                    i = j;
                }
                else
                {
                    // Такого сиквенса не существует
                    result.Add(new EmojiRenderResult()
                    {
                        isSuccess = false,
                        rawText   = Utf8ToUnicode.UnicodeCodeToString(activeEmoji[i])
                    });
                }
            }

            return(result.ToArray());
        }
        /// <summary>
        /// Парсинг эмодзи из дополнительных plain'ов в Unicode
        /// </summary>
        /// <param name="text">Текст с сырым Markdown</param>
        /// <param name="chatOption">Опции чата, заданные стримером для виджета</param>
        /// <param name="waitDictionary">Dictionary для саб-блоков</param>
        /// <returns></returns>
        public static string MarkEmojiUnicode(
            string text,
            ChatDrawOption chatOption,
            Dictionary <string, string> waitDictionary
            )
        {
            if (!UnicodeEmojiEngine.emojiList[chatOption.unicode_emoji_displaying].Any())
            {
                return(text);
            }

            var activeEmoji = new List <long>();

            var longs        = Utf8ToUnicode.ToUnicodeCode(text);
            var textAfter    = "";
            var containEmoji = false;

            foreach (var code in longs)
            {
                if (!UnicodeEmojiEngine.IsInIntervalEmoji(code, chatOption.unicode_emoji_displaying))
                {
                    // Этот символ НЕ является unicode emoji
                    if (activeEmoji.Any())
                    {
                        // У нас непустой буффер emoji символов, надо их записать в строку
                        var localEmojiList = UnicodeEmojiEngine.RenderEmojiAsStringList(
                            chatOption.unicode_emoji_displaying, activeEmoji);
                        textAfter += RenderEmojiStringListAsHtml(
                            localEmojiList,
                            chatOption.unicode_emoji_displaying,
                            waitDictionary,
                            chatOption.emoji_relative
                            );
                        activeEmoji = new List <long>();
                    }

                    textAfter += Utf8ToUnicode.UnicodeCodeToString(code);

                    continue;
                }

                // Этот символ ЯВЛЯЕТСЯ unicode emoji
                containEmoji = true;
                activeEmoji.Add(code);
            } // foreach

            if (activeEmoji.Any())
            {
                // У нас не пустой буффер emoji символов, надо их записать в строку
                var localEmojiList = UnicodeEmojiEngine.RenderEmojiAsStringList(
                    chatOption.unicode_emoji_displaying, activeEmoji);
                textAfter += RenderEmojiStringListAsHtml(
                    localEmojiList,
                    chatOption.unicode_emoji_displaying,
                    waitDictionary,
                    chatOption.emoji_relative
                    );
            }

            if (containEmoji)
            {
                text = textAfter;
            }

            return(text);
        }