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);
}