AdvancedLauncher.UI.Controls.NewsBlock.ParseTextBlock C# (CSharp) Method

ParseTextBlock() private method

private ParseTextBlock ( object sender, RoutedEventArgs e ) : void
sender object
e System.Windows.RoutedEventArgs
return void
        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;
                        }
                }
            }
        }