/// <summary>
        /// エンティティのコレクションに文字列と絵文字を追加する
        /// </summary>
        /// <param name="entities"></param>
        /// <param name="text"></param>
        /// <param name="emojis"></param>
        private static void AddText(TextEntityCollection entities, string text, SocialApis.Mastodon.Emoji[] emojis)
        {
            if (emojis?.Length == 0)
            {
                entities.AddText(text);
                return;
            }

            var matches = EmojiRegex.Matches(text);

            if (matches.Count == 0)
            {
                entities.AddText(text);
                return;
            }

            if (matches[0].Index != 0)
            {
                var firstText = text.Substring(0, matches[0].Index);

                entities.AddText(firstText);
            }

            for (int i = 0; i < matches.Count; ++i)
            {
                var m = matches[i];

                var shortCode = m.Groups["code"].Value;

                SocialApis.Mastodon.Emoji emoji = default;
                foreach (var e in emojis)
                {
                    if (e.ShortCode == shortCode)
                    {
                        emoji = e;
                        break;
                    }
                }

                if (emoji == default)
                {
                    entities.AddText(m.Value);
                }
                else
                {
                    entities.Add(new EmojiEntity(emoji));
                }

                if (i < matches.Count - 1)
                {
                    var nextMatch = matches[i + 1];
                    var content   = text.Substring(m.Index + m.Value.Length, nextMatch.Index - m.Index - m.Value.Length);

                    entities.AddText(content);
                }
                else if (m.Index + m.Value.Length != text.Length)
                {
                    int offset  = m.Index + m.Value.Length;
                    var content = text[offset..];
示例#2
0
 public EmojiEntity(SocialApis.Mastodon.Emoji emoji)
 {
     this.DisplayText = $":{ emoji.ShortCode }:";
     this.ShortCode   = emoji.ShortCode;
     this.ImageUrl    = emoji.Url;
 }