private void ParseTextBlock(object sender, RoutedEventArgs e)
{
TextBlock tb = ((TextBlock)sender);
if (tb.Text.Contains(LINK_REPL) || tb.Text.Contains(HASHTAG_REPL)) {
return;
}
string FormatString = URLRegex.Replace(tb.Text, LINK_REPL);
FormatString = HashRegex.Replace(FormatString, HASHTAG_REPL);
FormatString = TUserRegex.Replace(FormatString, USER_REPL);
//Collecting links, hashtags and users in lists
int LinkCounter = 0;
List<string> links = new List<string>();
foreach (Match match in URLRegex.Matches(tb.Text)) {
links.Add(match.Groups[0].Value);
}
int HashCounter = 0;
List<string> tags = new List<string>();
foreach (Match match in HashRegex.Matches(tb.Text)) {
tags.Add(match.Groups[0].Value);
}
int UserCounter = 0;
List<string> users = new List<string>();
foreach (Match match in TUserRegex.Matches(tb.Text)) {
users.Add(match.Groups[0].Value);
}
//Creating list of splitted text by links
List<TwitterTextPart> Parts = GetTwitterParts(ref links, ref LinkCounter, FormatString, LINK_REPL, TwitterTextType.Link, false);
//Creating list of splitted text (from older list) by hashtags
List<TwitterTextPart> TempParts = new List<TwitterTextPart>();
foreach (TwitterTextPart part in Parts) {
if (part.Type == TwitterTextType.Text) {
List<TwitterTextPart> HashParts = GetTwitterParts(ref tags, ref HashCounter, part.Data, HASHTAG_REPL, TwitterTextType.HashTag, false);
TempParts.AddRange(HashParts);
} else {
TempParts.Add(part);
}
}
Parts = TempParts;
//Creating list of splitted text (from older list) by usernames
TempParts = new List<TwitterTextPart>();
foreach (TwitterTextPart part in Parts) {
if (part.Type == TwitterTextType.Text) {
List<TwitterTextPart> HashParts = GetTwitterParts(ref users, ref UserCounter, part.Data, USER_REPL, TwitterTextType.UserName, false);
TempParts.AddRange(HashParts);
} else {
TempParts.Add(part);
}
}
Parts = TempParts;
tb.Inlines.Clear();
foreach (TwitterTextPart part in Parts) {
switch (part.Type) {
case TwitterTextType.Text:
{
tb.Inlines.Add(part.Data);
break;
}
case TwitterTextType.Link:
{
Hyperlink hyperLink = new Hyperlink() {
NavigateUri = new Uri(part.Data)
};
hyperLink.Inlines.Add(part.Data);
hyperLink.RequestNavigate += OnRequestNavigate;
tb.Inlines.Add(hyperLink);
break;
}
case TwitterTextType.HashTag:
{
Hyperlink hyperLink = new Hyperlink() {
NavigateUri = new Uri(string.Format("https://twitter.com/search?q=%23{0}&src=hash", part.Data.Substring(1)))
};
hyperLink.Inlines.Add(part.Data);
hyperLink.RequestNavigate += OnRequestNavigate;
tb.Inlines.Add(hyperLink);
break;
}
case TwitterTextType.UserName:
{
Hyperlink hyperLink = new Hyperlink() {
NavigateUri = new Uri(string.Format("https://twitter.com/{0}/", part.Data.Substring(1)))
};
hyperLink.Inlines.Add(part.Data);
hyperLink.RequestNavigate += OnRequestNavigate;
tb.Inlines.Add(hyperLink);
break;
}
}
}
}