public string ProcessArticle(string ArticleText, string ArticleTitle, int wikiNamespace, out string Summary, out bool Skip)
{
// global switches //////////////////////////////////////////////////////////
bool SaveSkipSummaries = true;
bool Debug = false;
Skip = false;
// globally-used vars ///////////////////////////////////////////////////////
Summary = @"Fix [[:Category:Pages using deprecated image syntax]]";
string OrigSummary = Summary;
string Infobox = ""; // will contain the key of the infobox found on the page (i.e. "football club")
string Infobox_Regex = ""; // will contain regexes for {{infobox}} aliases
string Image_Regex = ""; // will contain regexes for "image" parameter aliases
string ImageSize_Regex = ""; // will contain regexes for "image_size" parameter aliases
string InfoboxText_Old = ""; // original IB text
string InfoboxText_New = ""; // new & improved IB text
string TempOpenBraces = @"$R3PL4C3_0P3N1N6_8R4C35";
string TempCloseBraces = @"$R3PL4C3_CL051N6_8R4C35";
string ImageTypes_Regex = @"(?:jpe?g|gif|bmp|png|svg|tiff?|xcf)";
string ImageWithSize_Regex = ""; // defined later due to dependent variables
string ImageWithoutSize_Regex = ""; // ""
string LastImageFileWikilink = ""; // used as Summary if no sig changes made
string DupSizesRemoved = ""; // used with int IBImageSize & bool DesiredSize_Eq_IBSize
bool ImageWithSize = false;
bool ImageWithoutSize = false;
bool SigChangesMade = false;
bool RedundantDefaultSize = false; // i.e. for when "|300px]]" specified for ship image
bool DesiredSize_Eq_IBSize = false; // i.e. for when "|###px]]" specified & image_size=### already exists
int IBImageSize = -1; // > 0 if used with bool DesiredSize_Eq_IBSize
// dictionaries /////////////////////////////////////////////////////////////
// {{infobox}} aliases
Dictionary<string, string> dIBAliases = new Dictionary<string, string>(); // [parent infobox, regex aliases copy+pasta'd from Rdcheck]
dIBAliases.Add(@"football club", @"(?:[Ff]ootball[ _]+club[ _]+infobox|[Ii]ndoor[ _]+Football[ _]+League[ _]+team|[Ii]nfobox[ _]+football[ _]+club|[Ii]nfobox[ _]+Football[ _]+Club|[Ii]nfobox[ _]+Football[ _]+club|[Ii]nfobox[ _]+football[ _]+team|[Mm]LS[ _]+Canada)");
dIBAliases.Add(@"military conflict", @"(?:[Bb]attle|[Ii]nfobox[ _]+battle|[Ii]nfobox[ _]+Military[ _]+Conflict[ _]+\(3[ _]+sided\)|[Ii]nfobox[ _]+military[ _]+conflict[ _]+timeline|[Ii]nfobox[ _]+military[ _]+conflict|[Ii]nfobox[ _]+Military[ _]+Conflict|[Ii]nfobox[ _]+Militärischer[ _]+Konflikt|[Ii]nfobox[ _]+Siege|[Ii]nfobox[ _]+War|[Ii]nfobox[ _]+war|[Mm]ultiWarbox|[Ww]arboxNew|[Ww]arbox|(?:[Ww]ikipedia:)?(?:[Ww]ikiProject[ _]+Military[ _]+history/Military[ _]+conflict[ _]+infobox))");
dIBAliases.Add(@"Olympic event", @"(?:Infobox[ _]+Olympic[ _]+event)");
dIBAliases.Add(@"university", @"(?:[Ii]nfobox[ _]+art[ _]+school|[Ii]nfobox[ _]+business[ _]+school|[Ii]nfobox[ _]+College|[Ii]nfobox[ _]+college|[Ii]nfobox[ _]+dental[ _]+school|[Ii]nfobox[ _]+faculty|[Ii]nfobox[ _]+graduate[ _]+school|[Ii]nfobox[ _]+institute[ _]+department|[Ii]nfobox[ _]+medical[ _]+college|[Ii]nfobox[ _]+music[ _]+school|[Ii]nfobox[ _]+seminary[ _]+school|[Ii]nfobox[ _]+university[ _]+faculty|[Ii]nfobox[ _]+University[ _]+School|[Ii]nfobox[ _]+university[ _]+school|[Ii]nfobox[ _]+university|[Ii]nfobox[ _]+University|(?:[Ww]ikipedia:)?UNI/BOX)");
dIBAliases.Add(@"military unit", @"(?:[Ff]AA[ _]+Squadron|[Ii]nfobox[ _]+military[ _]+aviation[ _]+unit|[Ii]nfobox[ _]+military[ _]+unit|[Ii]nfobox[ _]+Military[ _]+Unit|[Rr]AF[ _]+Squadron)");
dIBAliases.Add(@"school", @"(?:[Hh]igh[ _]+school|[Ii]nfobox[ _]+boarding[ _]+school|[Ii]nfobox[ _]+cadet[ _]+college|[Ii]nfobox[ _]+Education[ _]+in[ _]+Canada|[Ii]nfobox[ _]+education[ _]+in[ _]+Canada|[Ii]nfobox[ _]+education[ _]+in[ _]+canada|[Ii]nfobox[ _]+Education[ _]+in[ _]+the[ _]+United[ _]+States|[Ii]nfobox[ _]+education[ _]+in[ _]+the[ _]+United[ _]+States|[Ii]nfobox[ _]+HighSchool|[Ii]nfobox[ _]+High[ _]+School|[Ii]nfobox[ _]+high[ _]+school|[Ii]nfobox[ _]+Hochschule|[Ii]nfobox[ _]+K\-12[ _]+School|[Ii]nfobox[ _]+Malaysia[ _]+School|[Ii]nfobox[ _]+Malaysia[ _]+school|[Ii]nfobox[ _]+middle[ _]+school|[Ii]nfobox[ _]+New[ _]+Zealand[ _]+school|[Ii]nfobox[ _]+NZ[ _]+school|[Ii]nfobox[ _]+OtherEducation|[Ii]nfobox[ _]+Private[ _]+School|[Ii]nfobox[ _]+private[ _]+school|[Ii]nfobox[ _]+Public[ _]+School|[Ii]nfobox[ _]+School2|[Ii]nfobox[ _]+School3|[Ii]nfobox[ _]+School[ _]+IN|[Ii]nfobox[ _]+School[ _]+UK|[Ii]nfobox[ _]+school|[Ii]nfobox[ _]+School|[Ii]nfobox[ _]+Schule|[Ii]nfobox[ _]+scottish[ _]+primary\,[ _]+secondary[ _]+and[ _]+nursery[ _]+school|[Ii]nfobox[ _]+scottish[ _]+primary[ _]+school|[Ii]nfobox[ _]+Secondary[ _]+School|[Ii]nfobox[ _]+Secondary[ _]+school|[Ii]nfobox[ _]+secondary[ _]+school|[Ii]nfobox[ _]+US[ _]+school|[Ii]nfobox[ _]+yeshiva|[Ss]chool[ _]+infobox|[Ss]chool)");
dIBAliases.Add(@"food", @"(?:[Bb]eefbox|[Ii]nfobox[ _]+beef|[Ii]nfobox[ _]+candy[ _]+bar|[Ii]nfobox[ _]+food|[Ii]nfobox[ _]+meat|[Ii]nfobox[ _]+Prepared[ _]+Food|[Ii]nfobox[ _]+prepared[ _]+food)");
dIBAliases.Add(@"venue", @"(?:[Bb]roadway\-theatre|[Ii]nfobox[ _]+cinema|[Ii]nfobox[ _]+Sports[ _]+Centre|[Ii]nfobox[ _]+sports[ _]+centre|[Ii]nfobox[ _]+Sport[ _]+Centre|[Ii]nfobox[ _]+sport[ _]+centre|[Ii]nfobox[ _]+Stadium|[Ii]nfobox[ _]+stadium|[Ii]nfobox[ _]+Theater|[Ii]nfobox[ _]+theater|[Ii]nfobox[ _]+Theatre|[Ii]nfobox[ _]+theatre|[Ii]nfobox[ _]+venue|[Ii]nfobox[ _]+Venue)");
dIBAliases.Add(@"organization", @"(?:[Ii]nfobox[ _]+Association|[Ii]nfobox[ _]+association|[Ii]nfobox[ _]+Charity|[Ii]nfobox[ _]+charity|[Ii]nfobox[ _]+Deutsche[ _]+Behörde|[Ii]nfobox[ _]+foundations|[Ii]nfobox[ _]+foundation|[Ii]nfobox[ _]+gang|[Ii]nfobox[ _]+group|[Ii]nfobox[ _]+intergovernmental[ _]+organization|[Ii]nfobox[ _]+international[ _]+organization|[Ii]nfobox[ _]+LARP[ _]+Group|[Ii]nfobox[ _]+LARP[ _]+group|[Ii]nfobox[ _]+learned[ _]+society|[Ii]nfobox[ _]+NGO|[Ii]nfobox[ _]+non\-profit[ _]+Organisation|[Ii]nfobox[ _]+Non\-Profit|[Ii]nfobox[ _]+Non\-profit|[Ii]nfobox[ _]+non\-profit|[Ii]nfobox[ _]+nonprofit|[Ii]nfobox[ _]+NPO|[Ii]nfobox[ _]+Organisation|[Ii]nfobox[ _]+organisation|[Ii]nfobox[ _]+organization|[Ii]nfobox[ _]+Organization|[Ii]nfobox[ _]+org|[Ii]nfobox[ _]+Professional[ _]+Association|[Ii]nfobox[ _]+professional[ _]+association|[Ii]nfobox[ _]+Societies|[Ii]nfobox[ _]+societies|[Ii]nfobox[ _]+Student[ _]+Group|[Ii]nfobox[ _]+Verband|[Ii]nfobox[ _]+Verein)");
dIBAliases.Add(@"animanga/Header", @"(?:[Ii]nfobox[ _]+animanga/Header2|[Ii]nfobox[ _]+animanga/Header|[Ii]nfobox[ _]+animanga/header)");
dIBAliases.Add(@"Paralympic event", @"(?:[Ii]nfobox[ _]+Paralympic[ _]+event)");
dIBAliases.Add(@"newspaper", @"(?:[Ii]nfobox[ _]+Irish[ _]+Newspaper|[Ii]nfobox[ _]+newsletter|[Ii]nfobox[ _]+newspaper|[Ii]nfobox[ _]+Newspaper|[Ii]nfobox[ _]+papernumbers|[Ii]nfobox[ _]+student[ _]+newspaper)");
dIBAliases.Add(@"character", @"(?:[Cc]haracterInfoBox|[Dd]une[ _]+character[ _]+box|[Ff]irefly[ _]+Character|[Ii]nfobox[ _]+Avatar:[ _]+The[ _]+Last[ _]+Airbender[ _]+character|[Ii]nfobox[ _]+Beano|[Ii]nfobox[ _]+biblical[ _]+character|[Ii]nfobox[ _]+cartoon[ _]+character|[Ii]nfobox[ _]+character|[Ii]nfobox[ _]+Character|[Ii]nfobox[ _]+Charmed[ _]+group|[Ii]nfobox[ _]+Dune[ _]+character|[Ii]nfobox[ _]+epic[ _]+character|[Ii]nfobox[ _]+fictional[ _]+character|[Ii]nfobox[ _]+James[ _]+Bond[ _]+character|[Ii]nfobox[ _]+mythical[ _]+character|[Ii]nfobox[ _]+mythological[ _]+character|[Ii]nfobox[ _]+player|[Ii]nfobox[ _]+religious[ _]+character|[Ii]nfobox[ _]+Sea[ _]+Patrol[ _]+character|[Ii]nfobox[ _]+television[ _]+character|[Jj]ames[ _]+Bond[ _]+Character)");
dIBAliases.Add(@"radio station", @"(?:[Ii]nfobox[ _]+AM[ _]+Radio|[Ii]nfobox[ _]+FM[ _]+Radio|[Ii]nfobox[ _]+NYC[ _]+AM[ _]+Radio|[Ii]nfobox[ _]+NYC[ _]+FM[ _]+Radio|[Ii]nfobox[ _]+radio[ _]+station|[Ii]nfobox[ _]+Radio[ _]+Station|[Ii]nfobox[ _]+Radio[ _]+station|[Ii]RLUK[ _]+radio[ _]+infobox|[Rr]adio[ _]+Station[ _]+Information|[Rr]adio[ _]+station)");
dIBAliases.Add(@"supercluster", @"(?:[Ii]nfobox[ _]+supercluster|[Ii]nfobox[ _]+Supercluster)");
dIBAliases.Add(@"television episode", @"(?:[Ee]pisode[ _]+infobox|[Ii]nfobox[ _]+episode|[Ii]nfobox[ _]+television[ _]+episode|[Ii]nfobox[ _]+Television[ _]+Episode|[Ii]nfobox[ _]+Television[ _]+episode|[Ii]nfobox[ _]+TV[ _]+episode|[Tt]elevision[ _]+Episode|[Tt]elevision[ _]+episode)");
dIBAliases.Add(@"television season", @"(?:[Ii]nfobox[ _]+dancingwiththestarsseason|[Ii]nfobox[ _]+Dancing[ _]+on[ _]+Ice[ _]+series|[Ii]nfobox[ _]+Dancing[ _]+with[ _]+the[ _]+Stars[ _]+season|[Ii]nfobox[ _]+dancing[ _]+with[ _]+the[ _]+stars|[Ii]nfobox[ _]+reality[ _]+dance[ _]+competition|[Ii]nfobox[ _]+Smallville[ _]+season|[Ii]nfobox[ _]+Strictly[ _]+Come[ _]+Dancing[ _]+Series|[Ii]nfobox[ _]+Television[ _]+Project[ _]+Runway|[Ii]nfobox[ _]+television[ _]+Project[ _]+Runway|[Ii]nfobox[ _]+television[ _]+season|[Ii]nfobox[ _]+Television[ _]+Season|[Ii]nfobox[ _]+Television[ _]+season|[Ii]nfobox[ _]+television[ _]+series|[Ii]nfobox[ _]+Television[ _]+Top[ _]+Chef|[Ii]nfobox[ _]+tvseason|[Ii]nfobox[ _]+TV[ _]+series)");
dIBAliases.Add(@"person", @"(?:[Ii]nfobox[ _]+actor[ _]+voice|[Ii]nfobox[ _]+Actor|[Ii]nfobox[ _]+actor|[Ii]nfobox[ _]+Actress|[Ii]nfobox[ _]+actress|[Ii]nfobox[ _]+adult[ _]+biography|[Ii]nfobox[ _]+adult[ _]+female|[Ii]nfobox[ _]+adult[ _]+male|[Ii]nfobox[ _]+Biography|[Ii]nfobox[ _]+biography|[Ii]nfobox[ _]+bio|[Ii]nfobox[ _]+Celebrity|[Ii]nfobox[ _]+director|[Ii]nfobox[ _]+entertainer|[Ii]nfobox[ _]+Fashion[ _]+Designer|[Ii]nfobox[ _]+fashion[ _]+designer|[Ii]nfobox[ _]+film[ _]+actor|[Ii]nfobox[ _]+film[ _]+director|[Ii]nfobox[ _]+human[ _]+being|[Ii]nfobox[ _]+human|[Ii]nfobox[ _]+Indian[ _]+Businessmen|[Ii]nfobox[ _]+Journalist|[Ii]nfobox[ _]+journalist|[Ii]nfobox[ _]+people|[Ii]nfobox[ _]+performer|[Ii]nfobox[ _]+person/measurements|[Ii]nfobox[ _]+person[ _]+ii|[Ii]nfobox[ _]+person|[Ii]nfobox[ _]+Person|[Ii]nfobox[ _]+photographer|[Ii]nfobox[ _]+Real[ _]+Person|[Ii]nfobox[ _]+trade[ _]+unionist|[Ii]nfobox[ _]+victim|[Pp]ersonbox)");
dIBAliases.Add(@"military award", @"(?:[Ii]nfobox[ _]+civilian[ _]+award|[Ii]nfobox[ _]+civilian[ _]+decoration|[Ii]nfobox[ _]+decoration|[Ii]nfobox[ _]+military[ _]+award|[Ii]nfobox[ _]+Military[ _]+Award|[Ii]nfobox[ _]+state[ _]+award)");
dIBAliases.Add(@"comics character", @"(?:[Cc]omiccharacterbox|[Ii]nfobox[ _]+animated[ _]+superhero|[Ii]nfobox[ _]+comics[ _]+character[ _]+alt|[Ii]nfobox[ _]+comics[ _]+character|[Ii]nfobox[ _]+superhero|[Ii]nfobox[ _]+television[ _]+superhero|SHB|[Ss]uperalienbox|[Ss]uperherobox|[Ss]upersupportingbox|[Ss]upervillianbox)");
dIBAliases.Add(@"motorcycle", @"(?:[Ii]nfobox[ _]+motorcycle|[Ii]nfobox[ _]+Motorcycle|[Mm]otorcycle)");
dIBAliases.Add(@"military person", @"(?:[Ii]nfobox[ _]+colonel|[Ii]nfobox[ _]+military[ _]+officer|[Ii]nfobox[ _]+military[ _]+person|[Ii]nfobox[ _]+Military[ _]+Person|[Ii]nfobox[ _]+Military[ _]+person|[Ii]nfobox[ _]+military[ _]+Person|[Ii]nfobox[ _]+Soldier|[Ii]nfobox[ _]+soldier|[Ii]nfobox[ _]+veteran|[Ii]nfobox[ _]+voivod|[Pp]ersonbox[ _]+military)");
dIBAliases.Add(@"company", @"(?:[Cc]ompany[ _]+infobox|[Cc]ompany|[Ii]nfobox[ _]+bank|[Ii]nfobox[ _]+Co\-operative|[Ii]nfobox[ _]+co\-operative|[Ii]nfobox[ _]+companies|[Ii]nfobox[ _]+company|[Ii]nfobox[ _]+Company|[Ii]nfobox[ _]+cooperative|[Ii]nfobox[ _]+Corporation|[Ii]nfobox[ _]+Defunct[ _]+Company|[Ii]nfobox[ _]+Defunct[ _]+company|[Ii]nfobox[ _]+defunct[ _]+company|[Ii]nfobox[ _]+financial|[Ii]nfobox[ _]+Korean[ _]+company|[Ii]nfobox[ _]+manufacturing[ _]+company|[Ii]nfobox[ _]+Verkehrsbetrieb)");
dIBAliases.Add(@"ship image", @"(?:[Ii]nfobox[ _]+ship[ _]+image|[Ii]nfobox[ _]+Ship[ _]+Image)");
dIBAliases.Add(@"uk place", @"(?:[Ii]nfobox[ _]+UK[ _]+place)");
dIBAliases.Add(@"political party", @"(?:[Ii]nfobox[ _]+Belgian[ _]+Political[ _]+Party|[Ii]nfobox[ _]+Belgian[ _]+political[ _]+party|[Ii]nfobox[ _]+British[ _]+Political[ _]+Party|[Ii]nfobox[ _]+French[ _]+Political[ _]+Party|[Ii]nfobox[ _]+Irish[ _]+political[ _]+party|[Ii]nfobox[ _]+Israeli[ _]+Political[ _]+Party|[Ii]nfobox[ _]+Israeli[ _]+political[ _]+party|[Ii]nfobox[ _]+Italian[ _]+former[ _]+political[ _]+party|[Ii]nfobox[ _]+Japanese[ _]+political[ _]+party|[Ii]nfobox[ _]+political[ _]+coalition|[Ii]nfobox[ _]+political[ _]+organization|[Ii]nfobox[ _]+political[ _]+party|[Ii]nfobox[ _]+Political[ _]+Party|[Ii]nfobox[ _]+Political[ _]+party|[Ii]nfobox[ _]+political[ _]+society)");
dIBAliases.Add(@"software", @"(?:[Ii]nfobox[ _]+Software2|[Ii]nfobox[ _]+software2|[Ii]nfobox[ _]+Software3|[Ii]nfobox[ _]+Software[ _]+2|[Ii]nfobox[ _]+software|[Ii]nfobox[ _]+Software|[Ss]oftware[ _]+infobox)");
dIBAliases.Add(@"journal", @"(?:[Ii]nfobox[ _]+Academic[ _]+Journal|[Ii]nfobox[ _]+academic[ _]+journal|[Ii]nfobox[ _]+journal[ _]+series|[Ii]nfobox[ _]+journal|[Ii]nfobox[ _]+Journal|[Ii]nfobox[ _]+serial[ _]+publication|[Jj]ournal[ _]+infobox|[Jj]ournal)");
dIBAliases.Add(@"broadcast", @"(?:[Ii]nfobox[ _]+broadcast|[Ii]nfobox[ _]+Broadcast|[Ii]nfobox[ _]+television[ _]+station)");
dIBAliases.Add(@"website", @"(?:[Dd]otcom[ _]+company|[Ii]nfobox[ _]+blog|[Ii]nfobox[ _]+dot\-com[ _]+company|[Ii]nfobox[ _]+Dotcom[ _]+company|[Ii]nfobox[ _]+dotcom[ _]+company|[Ii]nfobox[ _]+dotcom|[Ii]nfobox[ _]+dot[ _]+com[ _]+company|[Ii]nfobox[ _]+site|[Ii]nfobox[ _]+Website/With[ _]+logo|[Ii]nfobox[ _]+website/With[ _]+logo|[Ii]nfobox[ _]+Website2|[Ii]nfobox[ _]+website[ _]+with[ _]+IPv6|[Ii]nfobox[ _]+website|[Ii]nfobox[ _]+Website|[Ii]nfobox[ _]+web[ _]+company|[Ii]nfobox[ _]+web|[Ii]nfobox[ _]+Wikipedia)");
dIBAliases.Add(@"television", @"(?:[Ii]nfobox[ _]+British[ _]+television|[Ii]nfobox[ _]+cartoon|[Ii]nfobox[ _]+miniseries|[Ii]nfobox[ _]+Minisodes|[Ii]nfobox[ _]+Telenovela|[Ii]nfobox[ _]+telenovela|[Ii]nfobox[ _]+television[ _]+\(animated\)|[Ii]nfobox[ _]+Television[ _]+Film|[Ii]nfobox[ _]+Television[ _]+film|[Ii]nfobox[ _]+Television[ _]+series|[Ii]nfobox[ _]+Television[ _]+show|[Ii]nfobox[ _]+television[ _]+show|[Ii]nfobox[ _]+Television[ _]+Soap[ _]+Operas|[Ii]nfobox[ _]+Television[ _]+Soap[ _]+Opera|[Ii]nfobox[ _]+television[ _]+soap[ _]+opera|[Ii]nfobox[ _]+television[ _]+talkshow|[Ii]nfobox[ _]+television|[Ii]nfobox[ _]+Television|[Ii]nfobox[ _]+TV[ _]+film|[Ii]nfobox[ _]+TV[ _]+Movie|[Ii]nfobox[ _]+TV[ _]+show|[Ii]nfobox[ _]+TV|[Ii]nfobox[ _]+tv|[Ii]nfobox[ _]+UK[ _]+television|[Tt]elenovela)");
dIBAliases.Add(@"pan american games event", @"(?:Infobox[ _]+Pan[ _]+American[ _]+Games[ _]+event)");
dIBAliases.Add(@"galaxy", @"(?:[Ii]nfobox[ _]+galaxy|[Ii]nfobox[ _]+Galaxy)");
dIBAliases.Add(@"video game", @"(?:[Gg]ameInfobox|[Ii]nfobox[ _]+Arcade[ _]+Game|[Ii]nfobox[ _]+Arcade[ _]+game|[Ii]nfobox[ _]+arcade|[Ii]nfobox[ _]+computer[ _]+game|[Ii]nfobox[ _]+console[ _]+game|[Ii]nfobox[ _]+CVG|[Ii]nfobox[ _]+cvg|[Ii]nfobox[ _]+VG|[Ii]nfobox[ _]+vg|[Ii]nfobox[ _]+Videogame|[Ii]nfobox[ _]+videogame|[Ii]nfobox[ _]+video[ _]+games|[Ii]nfobox[ _]+video[ _]+game|[Ii]nfobox[ _]+Video[ _]+Game|[Ii]OS[ _]+App|[Vv]g[ _]+infobox)");
// [1]
// [1] image/image_size (hard-coded defaults)
// [1]
// [1] "image" default [1]
// n/a
// [1] "image"/alias regex [1]
Dictionary<string, string> dImageAliases1 = new Dictionary<string, string>(); // [parent infobox, regex]
dImageAliases1.Add(@"football club", @"(image)");
dImageAliases1.Add(@"military conflict", @"(image)");
dImageAliases1.Add(@"Olympic event", @"(image)");
dImageAliases1.Add(@"university", @"(image|image_name)");
dImageAliases1.Add(@"military unit", @"(image)");
dImageAliases1.Add(@"school", @"(image|image_name|imagewikilink)");
dImageAliases1.Add(@"food", @"(image)");
dImageAliases1.Add(@"venue", @"(image)");
dImageAliases1.Add(@"organization", @"(image)");
dImageAliases1.Add(@"animanga/Header", @"(image)");
dImageAliases1.Add(@"Paralympic event", @"(image)");
dImageAliases1.Add(@"newspaper", @"(image)");
dImageAliases1.Add(@"character", @"(image)");
dImageAliases1.Add(@"radio station", @"(image)");
dImageAliases1.Add(@"supercluster", @"(image)");
dImageAliases1.Add(@"television episode", @"(image)");
dImageAliases1.Add(@"television season", @"(image)");
dImageAliases1.Add(@"person", @"(image)");
dImageAliases1.Add(@"military award", @"(image)");
dImageAliases1.Add(@"comics character", @"(image)");
dImageAliases1.Add(@"motorcycle", @"(image)");
dImageAliases1.Add(@"military person", @"(image)");
dImageAliases1.Add(@"company", @"(image)"); // first proper run with iMaster loop
dImageAliases1.Add(@"journal", @"(image|cover)");
dImageAliases1.Add(@"broadcast", @"(image|hq_photo)");
dImageAliases1.Add(@"television", @"(image)");
dImageAliases1.Add(@"pan american games event", @"(image)");
dImageAliases1.Add(@"galaxy", @"(image)");
dImageAliases1.Add(@"video game", @"(image)");
// [1] "image_size" default [1]
// n/a
// [1] "image_size"/alias regex [1]
Dictionary<string, string> dImageSizeAliases1 = new Dictionary<string, string>(); // [parent infobox, regex]
dImageSizeAliases1.Add(@"football club", @"(?:image_size)");
dImageSizeAliases1.Add(@"military conflict", @"(?:image_size)");
dImageSizeAliases1.Add(@"Olympic event", @"(?:image_size)");
dImageSizeAliases1.Add(@"university", @"(?:image_size)");
dImageSizeAliases1.Add(@"military unit", @"(?:image_size)");
dImageSizeAliases1.Add(@"school", @"(?:image[ _]?size|size)");
dImageSizeAliases1.Add(@"food", @"(?:image_size)");
dImageSizeAliases1.Add(@"venue", @"(?:image_size)");
dImageSizeAliases1.Add(@"organization", @"(?:image_?size|size)");
dImageSizeAliases1.Add(@"animanga/Header", @"(?:image_?size)");
dImageSizeAliases1.Add(@"Paralympic event", @"(?:image_size)");
dImageSizeAliases1.Add(@"newspaper", @"(?:image_size)");
dImageSizeAliases1.Add(@"character", @"(?:image_size)");
dImageSizeAliases1.Add(@"radio station", @"(?:image_size)");
dImageSizeAliases1.Add(@"supercluster", @"(?:image_size)");
dImageSizeAliases1.Add(@"television episode", @"(?:image_size)");
dImageSizeAliases1.Add(@"television season", @"(?:image_?size)");
dImageSizeAliases1.Add(@"person", @"(?:image[ _]?size)");
dImageSizeAliases1.Add(@"military award", @"(?:image_size)");
dImageSizeAliases1.Add(@"comics character", @"(?:image_?size)");
dImageSizeAliases1.Add(@"motorcycle", @"(?:image_size)");
dImageSizeAliases1.Add(@"military person", @"(?:image_size)");
dImageSizeAliases1.Add(@"company", @"(?:image_size)");
dImageSizeAliases1.Add(@"journal", @"(?:image_size)");
dImageSizeAliases1.Add(@"broadcast", @"(?:image_size)");
dImageSizeAliases1.Add(@"television", @"(?:image_size)");
dImageSizeAliases1.Add(@"pan american games event", @"(?:image_size)"); // had to add image_size to template...
dImageSizeAliases1.Add(@"galaxy", @"(?:image_size)");
dImageSizeAliases1.Add(@"video game", @"(?:image[ _]?size)"); // no default specified
// [2]
// [2] logo/logo_size, etc. (variable defaults)
// [2]
// [2] "logo" default [2]
Dictionary<string, string> dImageDefault2 = new Dictionary<string, string>(); // [parent infobox, param]
dImageDefault2.Add(@"newspaper", @"logo");
dImageDefault2.Add(@"venue", @"logo_image");
dImageDefault2.Add(@"company", @"logo");
dImageDefault2.Add(@"ship image", @"Ship image");
dImageDefault2.Add(@"uk place", @"static_image_name");
dImageDefault2.Add(@"school", @"logo");
dImageDefault2.Add(@"political party", @"logo");
dImageDefault2.Add(@"software", @"logo");
dImageDefault2.Add(@"university", @"logo");
dImageDefault2.Add(@"broadcast", @"station_logo");
dImageDefault2.Add(@"military award", @"image2");
dImageDefault2.Add(@"organization", @"logo");
dImageDefault2.Add(@"website", @"logo");
dImageDefault2.Add(@"person", @"signature");
// [2] "logo"/alias regex [2]
Dictionary<string, string> dImageAliases2 = new Dictionary<string, string>(); // [parent infobox, regex]
dImageAliases2.Add(@"newspaper", @"(logo)");
dImageAliases2.Add(@"venue", @"(logo_image)");
dImageAliases2.Add(@"company", @"(logo|company_logo)");
dImageAliases2.Add(@"ship image", @"(Ship image|image)");
dImageAliases2.Add(@"uk place", @"(static_image|static_image_name)"); // static_image deprecated
dImageAliases2.Add(@"school", @"(logo)");
dImageAliases2.Add(@"political party", @"(logo|party[ _]logo)");
dImageAliases2.Add(@"software", @"(logo)");
dImageAliases2.Add(@"university", @"(logo)");
dImageAliases2.Add(@"broadcast", @"(station_logo)");
dImageAliases2.Add(@"military award", @"(image2)");
dImageAliases2.Add(@"organization", @"(logo|organization_logo|Non\-profit_logo)");
dImageAliases2.Add(@"website", @"(logo|company[ _]logo|[Ww]ebsite ?logo)");
dImageAliases2.Add(@"person", @"(signature)");
// [2] "logo_size" default [2]
Dictionary<string, string> dImageSizeDefault2 = new Dictionary<string, string>(); // [parent infobox, param]
dImageSizeDefault2.Add(@"newspaper", @"logo_size");
dImageSizeDefault2.Add(@"venue", @"logo_size");
dImageSizeDefault2.Add(@"company", @"logo_size");
dImageSizeDefault2.Add(@"ship image", @"Ship image size");
dImageSizeDefault2.Add(@"uk place", @"static_image_width");
dImageSizeDefault2.Add(@"school", @"logo_size");
dImageSizeDefault2.Add(@"political party", @"logo_size");
dImageSizeDefault2.Add(@"software", @"logo size");
dImageSizeDefault2.Add(@"university", @"logo_size");
dImageSizeDefault2.Add(@"broadcast", @"logo_size");
dImageSizeDefault2.Add(@"military award", @"image_size2");
dImageSizeDefault2.Add(@"organization", @"logo_size");
dImageSizeDefault2.Add(@"website", @"logo_size");
dImageSizeDefault2.Add(@"person", @"signature_size");
// [2] "logo_size"/alias regex [2]
Dictionary<string, string> dImageSizeAliases2 = new Dictionary<string, string>(); // [parent infobox, regex]
dImageSizeAliases2.Add(@"newspaper", @"(?:logo_size)");
dImageSizeAliases2.Add(@"venue", @"(?:logo_size)");
dImageSizeAliases2.Add(@"company", @"(?:logo_size)");
dImageSizeAliases2.Add(@"ship image", @"(?:Ship image size|image size)");
dImageSizeAliases2.Add(@"uk place", @"(?:static_image_width)");
dImageSizeAliases2.Add(@"school", @"(?:logo_size)");
dImageSizeAliases2.Add(@"political party", @"(?:logo_size)");
dImageSizeAliases2.Add(@"software", @"(?:logo[ _]size)");
dImageSizeAliases2.Add(@"university", @"(?:logo_size)");
dImageSizeAliases2.Add(@"broadcast", @"(?:logo_size)");
dImageSizeAliases2.Add(@"military award", @"(?:image_size2)");
dImageSizeAliases2.Add(@"organization", @"(?:logo_size)");
dImageSizeAliases2.Add(@"website", @"(?:logo[ _]size)");
dImageSizeAliases2.Add(@"person", @"(?:signature_size)");
// [3]
// [3] image3/image3_size, etc. (variable defaults)
// [3]
// [3] "image3" default [3]
Dictionary<string, string> dImageDefault3 = new Dictionary<string, string>(); // [parent infobox, param]
dImageDefault3.Add(@"uk place", @"static_image_2_name");
dImageDefault3.Add(@"school", @"seal_image");
dImageDefault3.Add(@"software", @"screenshot");
dImageDefault3.Add(@"organization", @"map");
dImageDefault3.Add(@"website", @"screenshot");
dImageDefault3.Add(@"venue", @"image_map");
dImageDefault3.Add(@"political party", @"flag"); // but NO associated flag_size
// [3] "image3"/alias regex [3]
Dictionary<string, string> dImageAliases3 = new Dictionary<string, string>(); // [parent infobox, regex]
dImageAliases3.Add(@"uk place", @"(static_image_2|static_image_2_name)"); // static_image_2 deprecated
dImageAliases3.Add(@"school", @"(seal_image)");
dImageAliases3.Add(@"software", @"(screenshot)");
dImageAliases3.Add(@"organization", @"(map)");
dImageAliases3.Add(@"website", @"(screenshot)");
dImageAliases3.Add(@"venue", @"(image_map)");
dImageAliases3.Add(@"political party", @"(flag)"); // but NO associated flag_size
// [3] "image3_size" default [3]
Dictionary<string, string> dImageSizeDefault3 = new Dictionary<string, string>(); // [parent infobox, param]
dImageSizeDefault3.Add(@"uk place", @"static_image_2_width");
dImageSizeDefault3.Add(@"school", @"seal_size");
dImageSizeDefault3.Add(@"software", @"screenshot size");
dImageSizeDefault3.Add(@"organization", @"map_size");
dImageSizeDefault3.Add(@"website", @"screenshot_size");
dImageSizeDefault3.Add(@"venue", @"map_size"); // implied...b/c "image_size" is reused from [2] if DNE
dImageSizeDefault3.Add(@"political party", @"DOES NOT EXIST"); // summarily skipped
// [3] "image3_size"/alias regex [3]
Dictionary<string, string> dImageSizeAliases3 = new Dictionary<string, string>(); // [parent infobox, regex]
dImageSizeAliases3.Add(@"uk place", @"(?:static_image_2_width)");
dImageSizeAliases3.Add(@"school", @"(?:seal_size)");
dImageSizeAliases3.Add(@"software", @"(?:screenshot[ _]size)");
dImageSizeAliases3.Add(@"organization", @"(?:map_size|msize)");
dImageSizeAliases3.Add(@"website", @"(?:screenshot[ _]size)");
dImageSizeAliases3.Add(@"venue", @"(?:map_size|image_size)");
dImageSizeAliases3.Add(@"political party", @"(?:DOES NOT EXIST)"); // summarily skipped
// [4]
// [4] image4/image4_size, etc. (variable defaults)
// [4]
// [4] "image4" default [4]
Dictionary<string, string> dImageDefault4 = new Dictionary<string, string>(); // [parent infobox, param]
dImageDefault4.Add(@"organization", @"map2");
// [4] "image4"/alias regex [4]
Dictionary<string, string> dImageAliases4 = new Dictionary<string, string>(); // [parent infobox, regex]
dImageAliases4.Add(@"organization", @"(map2)"); // static_image_2 deprecated
// [4] "image4_size" default [4]
Dictionary<string, string> dImageSizeDefault4 = new Dictionary<string, string>(); // [parent infobox, param]
dImageSizeDefault4.Add(@"organization", @"map2_size");
// [4] "image4_size"/alias regex [4]
Dictionary<string, string> dImageSizeAliases4 = new Dictionary<string, string>(); // [parent infobox, regex]
dImageSizeAliases4.Add(@"organization", @"(?:map2_size)");
// master loop //////////////////////////////////////////////////////////////
int iMaster = 0;
int iMasterMax = 4;
bool TryNextMaster = false;
string DefaultImageParam = "";
string DefaultImageSizeParam = "";
while ((iMaster + 1) <= iMasterMax)
{
iMaster++; // iMaster = dict. #
int iIBs = 0;
TryNextMaster = false;
bool Local_DesiredSize_Eq_IBSize = false;
foreach (KeyValuePair<string, string> iba in dIBAliases)
{
string IBA_Regex = @"\{\{\s*" + iba.Value + @"\s*\|";
bool IBA = Regex.IsMatch(ArticleText, IBA_Regex, RegexOptions.IgnoreCase);
if (IBA)
{
Infobox = iba.Key;
Infobox_Regex = iba.Value;
if (iMaster == 1)
{ // iMaster = dict. #
bool KeysExist = (dImageAliases1.ContainsKey(Infobox) && dImageSizeAliases1.ContainsKey(Infobox));
if (KeysExist)
{
Image_Regex = dImageAliases1[Infobox];
ImageSize_Regex = dImageSizeAliases1[Infobox];
DefaultImageParam = "image"; // hardcoded for iMaster = 1 only
DefaultImageSizeParam = "image_size"; // hardcoded for iMaster = 1 only
}
else
{
TryNextMaster = true;
break;
}
}
else if (iMaster == 2)
{ // iMaster = dict. #
bool KeysExist = (dImageAliases2.ContainsKey(Infobox) && dImageSizeAliases2.ContainsKey(Infobox));
if (KeysExist)
{
Image_Regex = dImageAliases2[Infobox];
ImageSize_Regex = dImageSizeAliases2[Infobox];
DefaultImageParam = dImageDefault2[Infobox];
DefaultImageSizeParam = dImageSizeDefault2[Infobox];
}
else
{
TryNextMaster = true;
break;
}
}
else if (iMaster == 3)
{ // iMaster = dict. #
bool KeysExist = (dImageAliases3.ContainsKey(Infobox) && dImageSizeAliases3.ContainsKey(Infobox));
if (KeysExist)
{
Image_Regex = dImageAliases3[Infobox];
ImageSize_Regex = dImageSizeAliases3[Infobox];
DefaultImageParam = dImageDefault3[Infobox];
DefaultImageSizeParam = dImageSizeDefault3[Infobox];
}
else
{
TryNextMaster = true;
break;
}
}
else if (iMaster == 4)
{ // iMaster = dict. #
bool KeysExist = (dImageAliases4.ContainsKey(Infobox) && dImageSizeAliases4.ContainsKey(Infobox));
if (KeysExist)
{
Image_Regex = dImageAliases4[Infobox];
ImageSize_Regex = dImageSizeAliases4[Infobox];
DefaultImageParam = dImageDefault4[Infobox];
DefaultImageSizeParam = dImageSizeDefault4[Infobox];
}
else
{
TryNextMaster = true;
break;
}
}
iIBs += Regex.Matches(ArticleText, IBA_Regex, RegexOptions.IgnoreCase).Count;
}
} // end foreach dIBAliases
// try again? ////////////////////////////////////////////////////////////
if (TryNextMaster) continue;
// auto-skip conditions //////////////////////////////////////////////////
if (iIBs != 1)
{
Summary = "Unexpected # of infoboxes: " + iIBs + ". ";
Skip = true;
}
if (!Skip)
{
// collapse non-IB templates
string NonInfobox_Regex = @"\{\{\s*(?!\s*" + Infobox_Regex + @"\s*\|)([^\{\}]*)\}\}";
ArticleText = Regex.Replace(ArticleText, NonInfobox_Regex, TempOpenBraces + @"$1" + TempCloseBraces, RegexOptions.IgnoreCase);
ArticleText = Regex.Replace(ArticleText, NonInfobox_Regex, TempOpenBraces + @"$1" + TempCloseBraces, RegexOptions.IgnoreCase); // again for nested templates
ArticleText = Regex.Replace(ArticleText, NonInfobox_Regex, TempOpenBraces + @"$1" + TempCloseBraces, RegexOptions.IgnoreCase); // again for nested templates, jic
InfoboxText_Old = Regex.Match(ArticleText, @"\{\{\s*" + Infobox_Regex + @"\s*\|[^\{\}]+\}\}", RegexOptions.IgnoreCase).Value;
InfoboxText_New = InfoboxText_Old;
// convert EoL pipes to SoL pipes...
string EoL2SoL_Regex = @"\s*(\|)[ ]*(?:\n|\r\n)([ ]*)([a-z][\w\s\|_-]+\=)";
Match mEoL2SoL = Regex.Match(InfoboxText_New, EoL2SoL_Regex, RegexOptions.IgnoreCase);
string SoLws2 = (mEoL2SoL.Groups[2].Value == " ") ? " " : mEoL2SoL.Groups[2].Value; // to maintain alignment with "{{Infobox"
InfoboxText_New = Regex.Replace(InfoboxText_New, EoL2SoL_Regex, "\n" + @"$1" + SoLws2 + @"$3", RegexOptions.IgnoreCase);
// rem trailing pipe before }}
InfoboxText_New = Regex.Replace(InfoboxText_New, @"\s*\|\s*\}\}$", "\n}}");
string NullOrTrivialParams = @"(?:(?:\s*\|\s*(?:center|centre|thumb)|\s*\|\s*(?:caption|alt)\s*\=?\s*(?=[\|\]]))*)";
// special case(s)
if (Infobox == "ship image")
{ // if size=300px, remove & ignore it; per suggestion by Trappist
// mod'd ImageWithSize_Regex
string ImageWithSize300_Regex = @"([\r\n]+)([ ]*\|\s*)" + Image_Regex + @"(\s*)(=\s*\[\[\s*(?:Image|File):\s*)([^\r\n\[\]\|]+?\." + ImageTypes_Regex + ")" + // grps 1-6
NullOrTrivialParams + @"\s*\|\s*(300)\s*(px)?(" + NullOrTrivialParams + @"[\|\s]*\]\][ ]*)(?=[\r\n]?\s*(?:\|\s*[a-z][\w\s_-]+=|\}\}))"; // grps 7-9
RedundantDefaultSize = Regex.IsMatch(InfoboxText_New, ImageWithSize300_Regex, RegexOptions.IgnoreCase);
InfoboxText_New = Regex.Replace(InfoboxText_New, ImageWithSize300_Regex, @"$1$2$3$4$5$6$9", RegexOptions.IgnoreCase);
}
// do we need to make way for an image_size value?
ImageWithSize_Regex = @"([\r\n]+)([ ]*\|)\s*" + Image_Regex + @"(\s*)(=)\s*\[\[\s*(?:Image|File):\s*([^\r\n\[\]\|]+?\." + ImageTypes_Regex + ")" + // grps 1-6
NullOrTrivialParams + @"\s*\|\s*(\d+)\s*(px)?" + NullOrTrivialParams + @"[\|\s]*\]\][ ]*(?=[\r\n]?\s*(?:\|\s*[a-z][\w\s_-]+=|\}\}))"; // grps 7-8
ImageWithoutSize_Regex = @"([\r\n]+)([ ]*\|\s*)" + Image_Regex + @"(\s*=)\s*\[\[\s*(?:Image|File):\s*([^\r\n\[\]\|]+?\." + ImageTypes_Regex + ")" + // grps 1-5
NullOrTrivialParams + @"[\|\s]*\]\][ ]*(?=[\r\n]?\s*(?:\|\s*[a-z][\w\s_-]+=|\}\}))"; // must find "[[]]": that's what's deprecated
Match mImageWithSize = Regex.Match(InfoboxText_New, ImageWithSize_Regex, RegexOptions.IgnoreCase);
ImageWithSize = mImageWithSize.Success;
ImageWithoutSize = Regex.IsMatch(InfoboxText_New, ImageWithoutSize_Regex, RegexOptions.IgnoreCase);
// special case(s)
if (Infobox == "political party" && iMaster == 3 && ImageWithSize)
{ // "political party" doesn't use "flag_size" or equivalent, and it is the only case so far where no associated size param exists
continue;
}
// search IB for aliases of "image_size"
Match mIBHasImageSize = Regex.Match(InfoboxText_New, @"\|\s*" + ImageSize_Regex + @"\s*=(?:\s*(\d+)\s*(?:px|\|))?", RegexOptions.IgnoreCase); // 1 grp
bool IBHasImageSize = mIBHasImageSize.Success;
if (IBHasImageSize)
{
bool IBHasImageSizeNull = Regex.IsMatch(InfoboxText_New, @"\|\s*" + ImageSize_Regex + @"\s*=\s*[\|\}]", RegexOptions.IgnoreCase);
if (IBHasImageSizeNull)
{ // *if needed*, remove it to make way for the new value
if (ImageWithSize)
{
string RemNullImageSize_Regex = @"[\r\n]+[ ]*\|\s*" + ImageSize_Regex + @"\s*=[ ]*(?=[\r\n]*\s*[\|\}])";
InfoboxText_New = Regex.Replace(InfoboxText_New, RemNullImageSize_Regex, "", RegexOptions.IgnoreCase);
// rerun the check, jtbs
IBHasImageSize = Regex.IsMatch(InfoboxText_New, @"\|\s*" + ImageSize_Regex + @"\s*=", RegexOptions.IgnoreCase);
if (IBHasImageSize)
{ // TODO: there are some weird infobox syntax exceptions out there...
Summary = "IB still contains an " + DefaultImageSizeParam + " param. ";
Skip = true;
}
}
}
else
{
if (ImageWithSize)
{
string sIBImageSize = mIBHasImageSize.Groups[1].Value;
IBImageSize = (string.IsNullOrEmpty(sIBImageSize)) ? -1 : Convert.ToInt32(sIBImageSize);
bool IBImageSizeError = (IBImageSize == -1);
int DesiredImageSize = Convert.ToInt32(mImageWithSize.Groups[7].Value);
Local_DesiredSize_Eq_IBSize = (DesiredImageSize == IBImageSize && DesiredImageSize > 0 && IBImageSize > 0);
if (Local_DesiredSize_Eq_IBSize)
{ // OK to proceed (see final instance of DesiredSize_Eq_IBSize)
DesiredSize_Eq_IBSize = Local_DesiredSize_Eq_IBSize;
if (string.IsNullOrEmpty(DupSizesRemoved)) DupSizesRemoved = IBImageSize.ToString();
else DupSizesRemoved += "px, " + IBImageSize; // "," is required, per DupPlural
}
else if (IBImageSizeError)
{
Summary = "IB " + DefaultImageSizeParam + " error for manual follow up. ";
Skip = true;
}
else
{
Summary = "IB " + DefaultImageSizeParam + @" value != 'desired' size (" + IBImageSize + @" != " + DesiredImageSize + "). ";
Skip = true;
}
}
else if (ImageWithoutSize)
{ // TODO: make sure existing size param isn't too big...
Summary = "TODO: make sure existing size param isn't too big... ";
Skip = true;
}
else
{
Summary = "Manually check IB. ";
Skip = true;
}
}
} // end if (IBHasImageSize)
if (!ImageWithSize && !ImageWithoutSize)
{ // TODO: fix alt text and/or captions too; for now, just output text to Summary for future examination
string ImageFileWikilink_Regex = @"([\r\n]+)([ ]*\|)\s*" + Image_Regex + @"(\s*)(=)\s*(\[\[\s*(?:Image|File):[^\]]+\]\][^\r\n]*)"; // 6 grps
string ImageFileWikilink = Regex.Match(InfoboxText_New, ImageFileWikilink_Regex, RegexOptions.IgnoreCase).Groups[6].Value;
if (!string.IsNullOrEmpty(ImageFileWikilink)) LastImageFileWikilink = ImageFileWikilink;
continue;
}
} // end if (!Skip)
// main //////////////////////////////////////////////////////////////////
if (!Skip)
{
// determine whitespace#3 alignment
//
// image -> image_size image_name -> image_size imagewikilink -> size
// 0 WS -> 0 WS |image= x WS -> x WS |image_name= 0 WS -> 0 WS |imagewikilink=
// |image_size= |image_size= |size=
//
// 1 WS -> 1 WS |image = . . 1 WS -> 1 WS |imagewikilink =
// |image_size = . . |size =
//
// 2 WS -> 1 WS |image = . . 2+ WS -> (2+)9+ |imagewikilink =
// |image_size = . . |size =
//
// 3 WS -> 1 WS |image = . . . .
// |image_size = . . . .
//
// 4 WS -> 1 WS |image = . . . .
// |image_size = . . . .
//
// 5 WS -> 1 WS |image = . . . .
// |image_size = . . . .
//
// 6 WS -> 1 WS |image = . . . .
// |image_size = . . . .
//
// 7+ WS -> (7+)-5 |image = . . . .
// |image_size = . . . .
// generalize the above, most common, forms of alignment for different "image" & "image_size" aliases
// determine "image"/alias characteristics
Match mImageWS = Regex.Match(InfoboxText_New, @"[\r\n]+[ ]*\|(\s*)" + Image_Regex + @"(\s*)=(\s*)\[\[\s*(?:Image|File):", RegexOptions.IgnoreCase); // 4 grps
string ImageWS2 = mImageWS.Groups[1].Value;
string ImageAlias = mImageWS.Groups[2].Value;
string ImageWS3 = mImageWS.Groups[3].Value;
string ImageWS4 = mImageWS.Groups[4].Value;
int ImageLen = ImageAlias.Length;
bool ExtraWS4 = Regex.IsMatch(ImageWS4, @"\s{3,}"); // WS > 2 (1's normal, 2's probably a typo, 3+ means there's some alignment going on)
bool WeirdWS4 = Regex.IsMatch(ImageWS4, @"[ \r\n]+"); // tab/NL
if (ExtraWS4 || WeirdWS4)
{ // TODO: fix some not-too-weird WS4 typos, i.e. [[Warrensburg Junior – Senior High School]]
Summary = "WS4 ";
Summary += (ExtraWS4) ? "extra-long/alignment" : "";
Summary += (ExtraWS4 && WeirdWS4) ? " & " : "";
Summary += (WeirdWS4) ? @"tab/\r\n" : "";
Summary += "; batch later.";
Skip = true;
}
if (!mImageWS.Success)
{
continue; // could do this earlier, but here it doubles as an unknown-error check
}
if (ImageWS4.Length == 1 || ImageWS4.Length == 2) ImageWS4 = " "; // UK place transclusions sometimes align using WS4...
// if "image_size"/alias still exists, then it's needed
string ImageSizeAlias = Regex.Match(InfoboxText_New, @"\|\s*(" + ImageSize_Regex + @")\s*=", RegexOptions.IgnoreCase).Groups[1].Value;
if (string.IsNullOrEmpty(ImageSizeAlias)) ImageSizeAlias = DefaultImageSizeParam; // default
int ImageSizeLen = ImageSizeAlias.Length;
string ImageSizeWS3 = ""; // what this is trying to find
if (ImageLen == ImageSizeLen)
{ // easy
ImageSizeWS3 = ImageWS3;
}
else if (ImageLen < ImageSizeLen)
{ // i.e. "image" & "image_size"
if (ImageWS3.Length <= 1) ImageSizeWS3 = ImageWS3; // no change
else
{
int TotLen = ImageLen + ImageWS3.Length;
if (TotLen <= (ImageSizeLen + 1)) ImageSizeWS3 = " ";
else ImageSizeWS3 = new String(' ', (TotLen - ImageSizeLen));
}
}
else if (ImageLen > ImageSizeLen)
{ // i.e. "imagewikilink" & "size"
if (ImageWS3.Length <= 1) ImageSizeWS3 = ImageWS3; // no change
else
{
int TotLen = ImageLen + ImageWS3.Length;
ImageSizeWS3 = new String(' ', (TotLen - ImageSizeLen));
}
}
else
{
Summary = "Unknown WS 3 error.";
Skip = true;
}
// check for alignment via WS2, i.e.:
// | logo =
// | logo_size =
string ImageSizeWS2 = ImageWS2; // what this is trying to find
bool WS2align = (ImageWS2.Length > 3 && ImageWS3.Length < 2 && ImageWS4.Length < 2);
if (WS2align)
{
if (ImageLen == ImageSizeLen)
{ // easy
ImageSizeWS2 = ImageWS2;
}
else if (ImageLen < ImageSizeLen)
{ // i.e. "image" & "image_size"
int TotLen = ImageLen + ImageWS2.Length;
if (TotLen <= (ImageSizeLen + 1)) ImageSizeWS2 = " ";
else ImageSizeWS2 = new String(' ', (TotLen - ImageSizeLen));
}
else if (ImageLen > ImageSizeLen)
{ // i.e. "imagewikilink" & "size"
int TotLen = ImageLen + ImageWS2.Length;
ImageSizeWS2 = new String(' ', (TotLen - ImageSizeLen));
}
else
{
Summary = "Unknown WS 2 error.";
Skip = true;
}
}
// main main //////////////////////////////////////////////////////////
// [[Image:....jpg|#px]] ->
if (Local_DesiredSize_Eq_IBSize)
{ // [[Image:....jpg|#px]] -> ....jpg
string ImageWithDupSize_Replace = @"$1$2" + ImageWS2 + @"$3$4$5" + ImageWS4 + @"$6";
InfoboxText_New = Regex.Replace(InfoboxText_New, ImageWithSize_Regex, ImageWithDupSize_Replace, RegexOptions.IgnoreCase);
}
else
{ // [[Image:....jpg|#px]] -> ....jpg | image_size = #px
string ImageWithSize_Replace = @"$1$2" + ImageWS2 + @"$3$4$5" + ImageWS4 + @"$6" + "\n" +
@"$2" + ImageSizeWS2 + DefaultImageSizeParam + ImageSizeWS3 + @"$5" + ImageWS4 + @"${7}${8}";
InfoboxText_New = Regex.Replace(InfoboxText_New, ImageWithSize_Regex, ImageWithSize_Replace, RegexOptions.IgnoreCase);
}
// [[Image:....jpg]] -> ....jpg
string ImageWithoutSize_Replace = @"$1$2$3$4" + ImageWS4 + @"$5";
InfoboxText_New = Regex.Replace(InfoboxText_New, ImageWithoutSize_Regex, ImageWithoutSize_Replace, RegexOptions.IgnoreCase);
// special cases...
// remove "px" from comics character's image_size
if (iMaster == 1)
{
if (Infobox == "comics character")
{
string RemPx_Regex = @"(\|\s*" + dImageSizeAliases1["comics character"] + @"\s*=\s*\d+)\s*px";
InfoboxText_New = Regex.Replace(InfoboxText_New, RemPx_Regex, @"$1", RegexOptions.IgnoreCase);
}
}
// validation/error checking
if (string.IsNullOrEmpty(InfoboxText_New))
{
Summary = "Check IB for weird EoL pipes...";
Skip = true;
}
else
{
if (InfoboxText_Old != InfoboxText_New)
{
ArticleText = ArticleText.Replace(InfoboxText_Old, InfoboxText_New);
if (ImageWithSize || ImageWithoutSize)
SigChangesMade = true;
}
else
{
// nothing; not all iMaster loops fire
}
}
} // end main if (!Skip)
} // end while iMaster
// housekeeping/finalize ////////////////////////////////////////////////////
ArticleText = ArticleText.Replace(TempOpenBraces, "{{");
ArticleText = ArticleText.Replace(TempCloseBraces, "}}");
if (!Skip && SigChangesMade)
{
if (RedundantDefaultSize) Summary += " (default size specified)";
string DupPlural = (Regex.IsMatch(DupSizesRemoved, ",")) ? "s" : "";
if (DesiredSize_Eq_IBSize) Summary += " (dup size" + DupPlural + " removed: " + DupSizesRemoved + "px)";
Summary += "; [[WP:GenFixes]] on,";
}
else
{
Summary = Summary.Replace(OrigSummary, "");
if (!string.IsNullOrEmpty(LastImageFileWikilink)) Summary += "No changes made: " + LastImageFileWikilink;
Skip = true;
if (SaveSkipSummaries && !Debug)
{
string Message = ArticleTitle + "\t" + Summary + "\n";
string File = @"Module output - Deprecated image syntax (skip summaries).txt";
string Path = @"F:\"; // desktop
string FullPath = Path + File;
const bool APPEND = true;
Tools.WriteTextFileAbsolutePath(Message, FullPath, APPEND);
}
}
if (Debug) Skip = false;
return ArticleText;
}