AutoWikiBrowser.MainForm.ArticleInfo C# (CSharp) Method

ArticleInfo() private method

private ArticleInfo ( bool reset ) : void
reset bool
return void
        private void ArticleInfo(bool reset)
        {
            lbDuplicateWikilinks.Items.Clear();
            lbAlerts.Items.Clear();
            ambigCiteDates.Clear();
            badCiteParameters.Clear();
            deadLinks.Clear();
            doublepipeLinks.Clear();
            dupeBanerShellParameters.Clear();
            targetlessLinks.Clear();
            unclosedTags.Clear();
            wikilinkedHeaders.Clear();
            unbalancedBracket.Clear();
            otherErrors.Clear();
            userSignature.Clear();

            if (reset)
            {
                //Resets all the alerts.
                lblWords.Text = Words;
                lblCats.Text = Cats;
                lblImages.Text = Imgs;
                lblLinks.Text = Links;
                lblInterLinks.Text = IWLinks;
                lblDates.Text = Dates;
            }
            else
            {
                string articleText = txtEdit.Text;
                string templates = string.Join("", Parsers.GetAllTemplateDetail(articleText).ToArray());

                int wordCount = Tools.WordCount(articleText);
                int catCount = WikiRegexes.Category.Matches(articleText).Count;
                
                bool hasAlertsOn = !alertPreferences.Any();

                if ((hasAlertsOn || alertPreferences.Contains(12)) && TheArticle.NameSpaceKey == Namespace.Article  && wordCount > Parsers.StubMaxWordCount && WikiRegexes.Stub.IsMatch(templates))
                    lbAlerts.Items.Add("Long article with a stub tag.");

                if ((hasAlertsOn || alertPreferences.Contains(14)) && catCount == 0 && !Namespace.IsTalk(TheArticle.Name))
                    lbAlerts.Items.Add("No category (may be one in a template)");

                // https://en.wikipedia.org/wiki/Wikipedia_talk:AutoWikiBrowser/Feature_requests/Archive_5#Replace_nofootnotes_with_morefootnote_if_references_exists
                if ((hasAlertsOn || alertPreferences.Contains(7)) && TheArticle.NameSpaceKey == Namespace.Article && TheArticle.HasMorefootnotesAndManyReferences)
                    lbAlerts.Items.Add("Has 'No/More footnotes' template yet many references");

                // https://en.wikipedia.org/wiki/Wikipedia_talk:AutoWikiBrowser/Feature_requests/Archive_5#.28Yet.29_more_reference_related_changes.
                if ((hasAlertsOn || alertPreferences.Contains(6)) && TheArticle.HasRefAfterReflist)
                    lbAlerts.Items.Add(@"Has a <ref> after <references/>");

                if ((hasAlertsOn || alertPreferences.Contains(3)) && TheArticle.IsDisambiguationPageWithRefs)
                    lbAlerts.Items.Add(@"DAB page with <ref>s");

                if ((hasAlertsOn || alertPreferences.Contains(16)) && TheArticle.NameSpaceKey == Namespace.Article && articleText.StartsWith("=="))
                    lbAlerts.Items.Add("Starts with heading");

                // https://en.wikipedia.org/wiki/Wikipedia_talk:AutoWikiBrowser/Feature_requests/Archive_5#Format_references
                if ((hasAlertsOn || alertPreferences.Contains(19)) && TheArticle.HasBareReferences)
                    lbAlerts.Items.Add("Unformatted references");

                // https://en.wikipedia.org/wiki/Wikipedia_talk:AutoWikiBrowser/Feature_requests/Archive_5#Detect_multiple_DEFAULTSORT
                if ((hasAlertsOn || alertPreferences.Contains(13)) && WikiRegexes.Defaultsort.Matches(templates).Count > 1)
                    lbAlerts.Items.Add("Multiple DEFAULTSORTs");

                // https://en.wikipedia.org/wiki/Wikipedia_talk:AutoWikiBrowser/Feature_requests/Archive_5#Some_additional_edits
                if (hasAlertsOn || alertPreferences.Contains(4))
                {
                    deadLinks = TheArticle.DeadLinks();
                    if (deadLinks.Any())
                        lbAlerts.Items.Add("Dead links" + " (" + deadLinks.Count + ")");
                }

                if (hasAlertsOn || alertPreferences.Contains(1))
                {
                    ambigCiteDates = TheArticle.AmbiguousCiteTemplateDates();
                    if (ambigCiteDates.Any())
                        lbAlerts.Items.Add("Ambiguous citation dates" + " (" + ambigCiteDates.Count + ")");
                }

                if (hasAlertsOn || alertPreferences.Contains(17))
                {
                    unbalancedBracket = TheArticle.UnbalancedBrackets();
                    if (unbalancedBracket.Any())
                        lbAlerts.Items.Add("Unbalanced brackets" + " (" + unbalancedBracket.Count + ")");
                }

                if (hasAlertsOn || alertPreferences.Contains(9))
                {
                    badCiteParameters = TheArticle.BadCiteParameters();
                    if (badCiteParameters.Any())
                        lbAlerts.Items.Add("Invalid citation parameter(s)" + " (" + badCiteParameters.Count + ")");
                }

                if (hasAlertsOn || alertPreferences.Contains(11))
                {
                    targetlessLinks = TheArticle.TargetlessLinks();
                    if (targetlessLinks.Any())
                        lbAlerts.Items.Add("Links with no target" + " (" + targetlessLinks.Count + ")");
                }

                if (hasAlertsOn || alertPreferences.Contains(10))
                {
                    doublepipeLinks = TheArticle.DoublepipeLinks();
                    if (doublepipeLinks.Any())
                        lbAlerts.Items.Add("Links with double pipes" + " (" + doublepipeLinks.Count + ")");
                }

                if (hasAlertsOn || alertPreferences.Contains(5))
                {
                    dupeBanerShellParameters = TheArticle.DuplicateWikiProjectBannerShellParameters();
                    if (dupeBanerShellParameters.Any())
                        lbAlerts.Items.Add("Duplicate parameter(s) in WPBannerShell" + " (" + dupeBanerShellParameters.Count + ")");
                }

                if (hasAlertsOn || alertPreferences.Contains(21))
                {
                    UnknownWikiProjectBannerShellParameters = TheArticle.UnknownWikiProjectBannerShellParameters();
                    if (UnknownWikiProjectBannerShellParameters.Any())
                    {
                        string warn = "Unknown parameters in WPBannerShell: " + " (" +
                            UnknownWikiProjectBannerShellParameters.Count + ") "
                            + string.Join(",", UnknownWikiProjectBannerShellParameters.ToArray());
                        lbAlerts.Items.Add(warn);
                    }
                }

                if (hasAlertsOn || alertPreferences.Contains(20))
                {
                    UnknownMultipleIssuesParameters = TheArticle.UnknownMultipleIssuesParameters();
                    if (UnknownMultipleIssuesParameters.Any())
                    {
                        string warn = "Unknown parameters in Multiple issues: " + " (" +
                            UnknownMultipleIssuesParameters.Count + ") "
                            + string.Join(", ", UnknownMultipleIssuesParameters.ToArray());
                        lbAlerts.Items.Add(warn);
                    }
                }

                if (hasAlertsOn || alertPreferences.Contains(8))
                {
                    wikilinkedHeaders = TheArticle.WikiLinkedHeaders();
                    if (wikilinkedHeaders.Any())
                        lbAlerts.Items.Add("Header(s) with wikilinks" + " (" + wikilinkedHeaders.Count + ")");
                }

                if (hasAlertsOn || alertPreferences.Contains(18))
                {
                    unclosedTags = TheArticle.UnclosedTags();
                    if (unclosedTags.Any())
                        lbAlerts.Items.Add("Unclosed tag(s)" + " (" + unclosedTags.Count + ")");
                }

                if ((hasAlertsOn || alertPreferences.Contains(15)) && TheArticle.HasSeeAlsoAfterNotesReferencesOrExternalLinks)
                {
                    lbAlerts.Items.Add("See also section out of place");

                    // Performance: faster to fetch all headings and filter than apply WikiRegexes.SeeAlso directly
                    Match m = (from Match h in WikiRegexes.Headings.Matches(articleText)
                                              where WikiRegexes.SeeAlso.IsMatch(h.Value)
                                              select h).FirstOrDefault();

                    if (m != null && !otherErrors.ContainsKey(m.Index))
                        otherErrors.Add(m.Index, m.Length);
                }

                // check for {{sic}} tags etc. when doing typo fixes
                if ((hasAlertsOn || alertPreferences.Contains(2) || chkRegExTypo.Checked) && TheArticle.HasSicTag)
                    lbAlerts.Items.Add(@"Contains 'sic' tag");

                // check for [[User: or [[[User talk:
                if ((hasAlertsOn || alertPreferences.Contains(22)) && TheArticle.NameSpaceKey == Namespace.Article)
                {
                    userSignature = TheArticle.UserSignature();
                    if (userSignature.Any())
                        lbAlerts.Items.Add("Editor's signature or link to user space" + " (" + userSignature.Count + ")");
                }

                MatchCollection imagesMC = WikiRegexes.ImagesCountOnly.Matches(articleText);
                lblWords.Text = Words + wordCount;
                lblCats.Text = Cats + catCount;
                lblImages.Text = Imgs + imagesMC.Count;
                lblLinks.Text = Links + Tools.LinkCount(articleText);
                lblInterLinks.Text = IWLinks + Tools.InterwikiCount(articleText);

                // for date types count ignore images and URLs
                string articleTextNoImagesURLs = WikiRegexes.ExternalLinksHTTPOnlyQuick.Replace(Tools.ReplaceWithSpaces(articleText, imagesMC), "");
                Dictionary<Parsers.DateLocale, int> results = Tools.DatesCount(articleTextNoImagesURLs);

                lblDates.Text = Dates + results[Parsers.DateLocale.ISO] + "/" + results[Parsers.DateLocale.International] + "/" + results[Parsers.DateLocale.American];

                // Find multiple wikilinks
                //get all the links, ignore commented out text etc.
                lbDuplicateWikilinks.Items.AddRange(Tools.DuplicateWikiLinks(articleText).ToArray());
            }
            lblDuplicateWikilinks.Visible = lbDuplicateWikilinks.Visible = btnRemove.Visible = (lbDuplicateWikilinks.Items.Count > 0);
        }
MainForm