Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public static string GetMarkupMessage(this string plainText, MessageEntity[] entities, ParseMode parseMode)
- {
- var dict = new Dictionary<(MessageEntityType, ParseMode), (string open, string close)>
- {
- [(MessageEntityType.Bold, ParseMode.Html)] = ("<b>", "</b>"),
- [(MessageEntityType.Italic, ParseMode.Html)] = ("<i>", "</i>"),
- [(MessageEntityType.Underline, ParseMode.Html)] = ("<u>", "</u>"),
- [(MessageEntityType.Strikethrough, ParseMode.Html)] = ("<s>", "</s>"),
- [(MessageEntityType.Code, ParseMode.Html)] = ("<code>", "</code>"),
- [(MessageEntityType.Pre, ParseMode.Html)] = ("<pre>", "</pre>"),
- [(MessageEntityType.TextLink, ParseMode.Html)] = ("<a href='{{url}}'>", "</a>"),
- [(MessageEntityType.TextLink, ParseMode.MarkdownV2)] = ("[", "]({{url}})"),
- };
- var formatEntities = entities
- .Where(e => e.Type.In(MessageEntityType.Code, MessageEntityType.Pre,
- MessageEntityType.Bold, MessageEntityType.Italic,
- MessageEntityType.Underline, MessageEntityType.Strikethrough,
- MessageEntityType.Url, MessageEntityType.TextLink))
- .Select(e => new
- {
- StartIndex = e.Offset,
- EndIndex = e.Offset + e.Length - 1,
- OpenBrace = dict[(e.Type, parseMode)].open,
- CloseBrace = dict[(e.Type, parseMode)].close
- })
- .ToArray();
- var insertBefore = formatEntities.ToLookup(e => e.StartIndex, e => e.OpenBrace);
- var insertAfter = formatEntities.Reverse().ToLookup(e => e.EndIndex, e => e.CloseBrace);
- var markupText = new StringBuilder();
- for (int i = 0; i < plainText.Length; i++)
- {
- var currentInsertBefore = insertBefore[i].ToArray();
- var currentInsertAfter = insertAfter[i].ToArray();
- if (currentInsertBefore.Any())
- {
- markupText.Append(string.Join("", currentInsertBefore));
- }
- markupText.Append(plainText[i]);
- if (currentInsertAfter.Any())
- {
- markupText.Append(string.Join("", currentInsertAfter));
- }
- }
- return markupText.ToString();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement