User:Keller999/projects/gamepageupdate: Difference between revisions

From Dolphin Emulator Wiki
Jump to navigation Jump to search
(Revised test regexps+code to: trim whitespace around params; appropriately handle optional parameters (please double check, I didn't test my recodes and it's been a while since I've written perl))
m (Script update -- version 1.01 (see Version History))
Line 17: Line 17:


--[[User:Keller999|Keller999]] 13:15, 18 August 2011 (CEST)
--[[User:Keller999|Keller999]] 13:15, 18 August 2011 (CEST)


====dolphinpageupdate.pl====
====dolphinpageupdate.pl====
Runs great on my Linux box, uses no special modules.  I know for a fact that system('clear') does NOT work in Windows, but you could probably replace it with system('cls') and get the same effect.
Runs great on my Linux box, uses no special modules.  I know for a fact that system('clear') does NOT work in Windows, but you could probably replace it with system('cls') and get the same effect.
====Version History====
'''''1.0'''''
* Initial release
'''''1.01'''''
* Image is now always parsed, and will set the size based on platforms detected.  Defaults to Wii (300px)
* If no Wikipedia Infobox is supplied, re-use the one from the Dolphin wiki page
* If no Infobox is supplied at all, generate a generic one
* Better supports not providing information (for example, if you don't supply a Wikipedia entry, the description from the Dolphin page will be reused)
* Added shortcut to just generate a generic template
<pre>
<pre>
#!/usr/bin/perl
#!/usr/bin/perl


my (@wikipedia, @originalPage);
my (@wikipedia, @originalPage);
my (@problemSection, @configurationSection, @versionCompatSection, @testingSection, @videoSection, @categorySection);
my (@infoboxSection, @descriptionSection, @problemSection, @configurationSection, @versionCompatSection, @testingSection, @videoSection, @categorySection);
my @finalResult;
my @finalResult;


$imageSize = 300;
$imageSize = 300; # Assuming Wii by default


my ($savedImageLine, $savedSizeLine);
my ($image, $savedSizeLine);


#######
#######
Line 37: Line 50:


print "*********************************\n";
print "*********************************\n";
print "* Dolphin Wiki Page Update v1.0 *\n";
print "* Dolphin Wiki Page Update v1.01 *\n";
print "*********************************\n\n";
print "*********************************\n\n";


print "First, copy and paste the game's Wikipedia article from the top to wherever you'd like to end the new description.  Enter \'-1\' to indicate the end.\n\n";
print "First, copy and paste the game's Wikipedia article from the top to wherever you'd like to end the new description.  Zero input is fine.  Enter \'-1\' to indicate the end, or -2 to just get a blank template.\n\n";


# Wikipedia input
# Wikipedia input
while ($line ne "-1") {
while (($line ne "-1") and ($line ne "-2")) {
         $line = <STDIN>;
         $line = <STDIN>;
         chomp($line);
         chomp($line);


         if (($line ne "-1") and ($line ne "")) {
         if (($line ne "-1") and ($line ne "") and ($line ne "-2")) {
                 push (@wikipedia,$line);
                 push (@wikipedia,$line);
         }
         }
}
}


$line = "";
if ($line eq "-2") {
$line = "-1";
} else {
$line = "";
}


system('clear');
system('clear');
Line 60: Line 77:
print "*********************************\n\n";
print "*********************************\n\n";


print "Now, copy and paste the existing Dolphin wiki article to import existing information.  No input is fine.  Enter \'-1\' to indicate the end.\n\n";
print "Now, copy and paste the existing Dolphin wiki article to import existing information.  Zero input is fine.  Enter \'-1\' to indicate the end.\n\n";


# Dolphin page input
# Dolphin page input
Line 76: Line 93:
#############################
#############################


# (@problemSection, @configurationSection, @versionCompatSection, @testingSection, @videoSection, @categorySection);
# (@infoboxSection, @descriptionSection, @problemSection, @configurationSection, @versionCompatSection, @testingSection, @videoSection, @categorySection);
$currentSection = "none";
$currentSection = "none";
$foundDolphinInfobox = 0;


foreach (@originalArticle) {
foreach (@originalArticle) {
Line 83: Line 101:
$checkLine = $_;
$checkLine = $_;


if ($newLine =~ /^\ *\={1,4}\ *Problems\ *\=*$/i) { $currentSection = "problems"; }
if   ($newLine =~ /^\{\{\ *Infobox.*/i) { $currentSection = "infobox"; $foundDolphinInfobox = 1; }
elsif ($newLine =~ /^\ *\={1,4}\ *Problems\ *\=*$/i) { $currentSection = "problems"; }
elsif ($newLine =~ /^\ *\={1,4}\ *Configuration\ *\=*$/i) { $currentSection = "configuration"; }
elsif ($newLine =~ /^\ *\={1,4}\ *Configuration\ *\=*$/i) { $currentSection = "configuration"; }
elsif ($newLine =~ /^\ *\={1,4}\ *Version Compatibility\ *\=*$/i) { $currentSection = "versionCompat"; }
elsif ($newLine =~ /^\ *\={1,4}\ *Version Compatibility\ *\=*$/i) { $currentSection = "versionCompat"; }
Line 91: Line 110:
elsif ($newLine =~ /^\ *\{\{Navigation\ .*\}\}$/i) { $currentSection = "categories"; }
elsif ($newLine =~ /^\ *\{\{Navigation\ .*\}\}$/i) { $currentSection = "categories"; }


if ($currentSection eq "none") {
if ($currentSection eq "infobox") {
# Information is outside of the defined sections, and is purged.  Infobox/summary will be re-generated from Wikipedia
if ($newLine =~ /^\{\{\ *Infobox.*/i) {  # This is the start of the Infobox, ignore
# The ONLY two exceptions are the image (which we prefer over the Wikipedia image name) and the size
# ignore
if ($newLine =~ /^\|\ *image\ *=\ *.+/gi) {
} elsif ($newLine =~ /^\}\}$/) {  # This is the end of the Infobox, change section and ignore
$savedImageLine = $newLine; # saved for later
$currentSection = "description";
} elsif ($newLine =~ /^\|\ *size\ *=\ *.+/gi) {
} else {  # We want to keep anything else in the infobox.  This is in case the user didn't give us a wikipedia article to generate a new one from
$savedSizeLine = $newLine; # saved for later
push (@infoboxSection, $newLine);
 
# Now we save the image filename and size to be added onto wikipedia's infobox, if its provided
if ($newLine =~ /^\|\ *image\ *=\ *.+/gi) {
$image = $newLine;
# just keep the filename, and format
$image =~ s/\|image\ *\=\ *\[\[(?:File|Image)\ *\:\ *(.*?)(?:\||\]).*/$1/i; #
} elsif ($newLine =~ /^\|\ *size\ *=\ *.+/gi) {
$savedSizeLine = $newLine; # saved for later
}
}
}
} elsif ($currentSection eq "description") {
# We're pretty much going to assume that if it's in this section, we want to keep it all as-is
push (@descriptionSection, $newLine);
} elsif ($currentSection eq "problems") {
} elsif ($currentSection eq "problems") {
if ($newLine =~ /^\ *\={1,4}\ *Problems\ *\=*$/i) {  # Matches the section heading, ignore
if ($newLine =~ /^\ *\={1,4}\ *Problems\ *\=*$/i) {  # Matches the section heading, ignore
Line 144: Line 175:
######################
######################


$foundInfobox = 0;
$foundWikipediaInfobox = 0;
$foundImage = 0;
$insideInfobox = 0;
$insideInfobox = 0;


my @autoCategory;
my @autoCategory;
push (@autoCategory, '<!-- Categories below this line were automatically generated -->');


system('clear');
system('clear');
Line 164: Line 192:
if ($newLine =~ /^\{\{\ *Infobox.*/i) {
if ($newLine =~ /^\{\{\ *Infobox.*/i) {
push (@finalResult, '{{Infobox VG');
push (@finalResult, '{{Infobox VG');
$foundInfobox = 1;
$foundWikipediaInfobox = 1;
$insideInfobox = 1;
$insideInfobox = 1;
$skip = 1;
$skip = 1;
Line 177: Line 205:
push (@autoCategory, "[[Category:Wii games]]");
push (@autoCategory, "[[Category:Wii games]]");
$platformAltered = 1;
$platformAltered = 1;
$imageSize = 300;
}
}


Line 184: Line 213:
push (@autoCategory, "[[Category:GameCube games]]");
push (@autoCategory, "[[Category:GameCube games]]");
$platformAltered = 1;
$platformAltered = 1;
$imageSize = 300;
      }
      }


Line 191: Line 221:
push (@autoCategory, "[[Category:WiiWare games]]");
push (@autoCategory, "[[Category:WiiWare games]]");
$platformAltered = 1;
$platformAltered = 1;
$imageSize = 175;
       }
       }


Line 198: Line 229:
push (@autoCategory, "[[Category:Triforce games]]");
push (@autoCategory, "[[Category:Triforce games]]");
$platformAltered = 1;
$platformAltered = 1;
$imageSize = 300;
         }
         }


Line 207: Line 239:
#Purge un-used parameters
#Purge un-used parameters
if ($insideInfobox) {
if ($insideInfobox) {
#Replace whatever title Wikipedia is using with our own
#If there was already an image listed in the original page, keep it
if ($newLine =~ /^\|\ *title\ *=\ *.+/gi) {
if (($newLine =~ /^\|\ *image\ *=\ *.+/gi) and ($savedImageLine ne "")) {
$newLine = '|title = {{SUBPAGENAME}}';
$foundImage = 1;
$skipUnWiki = 1;
$newLine = $savedImageLine;
}
}


if ($newLine =~ /^\|\ *(title|developer|publisher|distributor|director|producer|designer|programmer|artist|composer|license|series|engine|resolution|released|genre|mode|ratings|input|size|fps|dspcode|dtkadpcm|channeltype|image|mode|modes)\ *=\ *.+/gi) {
if ($newLine =~ /^\|\ *(title|developer|publisher|distributor|director|producer|designer|programmer|artist|composer|license|series|engine|resolution|released|genre|mode|ratings|input|size|fps|dspcode|dtkadpcm|channeltype|mode|modes)\ *=\ *.+/gi) {
$skip = 0;
$skip = 0;
} else {
} else {
Line 225: Line 254:
         if ($skipUnWiki eq 0) {
         if ($skipUnWiki eq 0) {
$newLine =~ s/\<ref.+?\/.{0,3}\>//gi; # remove citations references
$newLine =~ s/\<ref.+?\/.{0,3}\>//gi; # remove citations references
$newLine =~ s/\{\{vgy\|([0-9]{4})\}\}/$1/gi; # we don't do Template:vgy, removing
$newLine =~ s/\{\{cite.*?\}\}//gi; # remove references
$newLine =~ s/\{\{cite.*?\}\}//gi; # remove references
$newLine =~ s/\[\[(([.]|[^\|])+?)\]\]/$1/g; # un-wiki-fy wiki links in the format [[link]]
$newLine =~ s/\[\[(([.]|[^\|])+?)\]\]/$1/g; # un-wiki-fy wiki links in the format [[link]]
Line 236: Line 266:
@genres = split (/\,|\<br.*?\>/,$genreLine);
@genres = split (/\,|\<br.*?\>/,$genreLine);
foreach (@genres) {
foreach (@genres) {
if (@autoCategory eq 0) {
push (@autoCategory, '<!-- Categories below this line were automatically generated -->');
}
$line = $_;
$line = $_;
$line =~ s/^\ *//;
$line =~ s/^\ *//;
Line 249: Line 282:
@modes = split (/\,|\<br.*?\>/,$modeLine);
@modes = split (/\,|\<br.*?\>/,$modeLine);
foreach (@modes) {
foreach (@modes) {
if (@autoCategory eq 0) {
push (@autoCategory, '<!-- Categories below this line were automatically generated -->');
}
$line = $_;
$line = $_;
$line =~ s/^\ *//;
$line =~ s/^\ *//;
Line 259: Line 295:
if ($newLine =~ /^\}\}$/) {
if ($newLine =~ /^\}\}$/) {
if ($savedSizeLine ne "") { push (@finalResult, $savedSizeLine); }  # Saved size
if ($savedSizeLine ne "") { push (@finalResult, $savedSizeLine); }  # Saved size
if (($foundImage eq 0) and ($savedImageLine ne "")) { # Saved image line, if wikipedia doesn't have one
if ($image ne "") { # Saved image line
push (@finalResult, $savedImageLine);  
push (@finalResult, '|image = [[File:' . $image . '|' . $imageSize . 'px]]');  
} elsif (($foundImage eq 0) and ($savedImageLine eq "")) {
} elsif ($image eq "") {
push (@finalResult, '|image = [[File:{{SUBPAGENAME}}.png|' . $imageSize . 'px]]');
push (@finalResult, '|image = [[File:{{SUBPAGENAME}}.png|' . $imageSize . 'px]]');
}
}


push (@finalResult, $newLine);
push (@finalResult, $newLine);
Line 272: Line 307:
}
}


if (($foundInfobox eq 1) and ($skip eq 0)) {
if (($foundWikipediaInfobox eq 1) and ($skip eq 0)) {
push (@finalResult,$newLine);
push (@finalResult,$newLine);
}
}
Line 283: Line 318:
# At this point, the Infobox and the summary are in place.  Now, time to add our checked and re-formatted content sections.
# At this point, the Infobox and the summary are in place.  Now, time to add our checked and re-formatted content sections.


# CATEOGRY PROCESSING
# Need to combine our categories and make sure there are no duplicates
# Need to combine our categories and make sure there are no duplicates
foreach (@autoCategory) {
foreach (@autoCategory) {
Line 311: Line 347:
}
}


# Problem Section
#INFOBOX PROCESSING
if (($foundWikipediaInfobox eq 1) and ($foundDolphinInfobox eq 1)) {
# If a Wikipedia Infobox was received, it was already pushed into @finalResult.
# TODO: Wikipedia parsing should push into its own array, which is then added in this section
} elsif (($foundWikipediaInfobox eq 0) and ($foundDolphinInfobox eq 1)) {  # We didn't get a Wikipedia Infobox, so use the one from Dolphin
push (@finalResult, '{{Infobox VG');
push (@finalResult, @infoboxSection);
push (@finalResult, '}}');
} elsif (($foundWikipediaInfobox eq 0) and ($foundDolphinInfobox eq 0)) { # We didn't get ANY infoboxes, create a generic one
push (@finalResult, '{{Infobox VG');
push (@finalResult, '|title = {{SUBPAGENAME}}');
push (@finalResult, '|image = [[File:{{SUBPAGENAME}}.png|');
push (@finalResult, '}}');
}
 
#DESCRIPTION PROCESSING
if ((@descriptionSection) and ($foundWikipediaInfobox eq 0)) {  # Only re-use the original description if there was one and we didn't get Wikipedia data
push (@finalResult, "\n");
push (@finalResult, @descriptionSection);
}
 
push (@finalResult, "\n\=\= Problems \=\=");
push (@finalResult, "\n\=\= Problems \=\=");
push (@finalResult, @problemSection);
push (@finalResult, @problemSection);
Line 353: Line 409:
print $_ . "\n";
print $_ . "\n";
}
}
print "\n\n";
</pre>
</pre>

Revision as of 06:46, 20 August 2011

I am working on doing several things for all existing game pages:

  • If it's not already in place, copy/paste a cleaned-up Infobox from Wikipedia into the game page
  • Update templates to use the most recent versions, rather than redirected versions
  • Ensure that all sections that need user updates have a template to copy-paste, or a link to further documentation
  • Update pages to conform to the standard game page -- Problems, Configuration, Version Compatibility, Testing, Gameplay Videos
  • Remove existing non-used config variables if they are present in the page

Scripts

Hooray for programming mini-project! I put together a script that takes the Infobox and summary from Wikipedia, then the existing Dolphin Wiki article, and creates a standards-compliant merge of the two. For an example of what this script does, please see Call of Duty: Black Ops/sandbox. Revision 23655 is before, Revision 23677 is after. I did NOT do any additional touchup between these revs, as I wanted to show exactly what the script was doing.

I have updated the page to match what I believe to be current standard. I intend to start running this script for many pages starting tomorrow evening, so PLEASE review the newest revision of Call of Duty: Black Ops/sandbox to ensure that I'm not missing anything! I would hate to do a bunch of mass changes and then have to go repair them all.

Also, expect this script to have a bug or two until I can get it working and find out the issues with it.

Let me know your thoughts!

--Keller999 13:15, 18 August 2011 (CEST)


dolphinpageupdate.pl

Runs great on my Linux box, uses no special modules. I know for a fact that system('clear') does NOT work in Windows, but you could probably replace it with system('cls') and get the same effect.

Version History

1.0

  • Initial release

1.01

  • Image is now always parsed, and will set the size based on platforms detected. Defaults to Wii (300px)
  • If no Wikipedia Infobox is supplied, re-use the one from the Dolphin wiki page
  • If no Infobox is supplied at all, generate a generic one
  • Better supports not providing information (for example, if you don't supply a Wikipedia entry, the description from the Dolphin page will be reused)
  • Added shortcut to just generate a generic template
#!/usr/bin/perl

my (@wikipedia, @originalPage);
my (@infoboxSection, @descriptionSection, @problemSection, @configurationSection, @versionCompatSection, @testingSection, @videoSection, @categorySection);
my @finalResult;

$imageSize = 300; # Assuming Wii by default

my ($image, $savedSizeLine);

#######
#INPUT#
#######
system('clear');

print "*********************************\n";
print "* Dolphin Wiki Page Update v1.01 *\n";
print "*********************************\n\n";

print "First, copy and paste the game's Wikipedia article from the top to wherever you'd like to end the new description.  Zero input is fine.  Enter \'-1\' to indicate the end, or -2 to just get a blank template.\n\n";

# Wikipedia input
while (($line ne "-1") and ($line ne "-2")) {
        $line = <STDIN>;
        chomp($line);

        if (($line ne "-1") and ($line ne "") and ($line ne "-2")) {
                push (@wikipedia,$line);
        }
}

if ($line eq "-2") {
	$line = "-1";
} else {
	$line = "";
}

system('clear');

print "*********************************\n";
print "* Dolphin Wiki Page Update v1.0 *\n";
print "*********************************\n\n";

print "Now, copy and paste the existing Dolphin wiki article to import existing information.  Zero input is fine.  Enter \'-1\' to indicate the end.\n\n";

# Dolphin page input
while ($line ne "-1") {
        $line = <STDIN>;
        chomp($line);

        if (($line ne "-1") and ($line ne "")) {
                push (@originalArticle,$line);
        }
}

#############################
#EXISTING ARTICLE PROCESSING#
#############################

# (@infoboxSection, @descriptionSection, @problemSection, @configurationSection, @versionCompatSection, @testingSection, @videoSection, @categorySection);
$currentSection = "none";
$foundDolphinInfobox = 0;

foreach (@originalArticle) {
	$newLine = $_;
	$checkLine = $_;

	if    ($newLine =~ /^\{\{\ *Infobox.*/i) { $currentSection = "infobox"; $foundDolphinInfobox = 1; }	
	elsif ($newLine =~ /^\ *\={1,4}\ *Problems\ *\=*$/i) { $currentSection = "problems"; }
	elsif ($newLine =~ /^\ *\={1,4}\ *Configuration\ *\=*$/i) { $currentSection = "configuration"; }
	elsif ($newLine =~ /^\ *\={1,4}\ *Version Compatibility\ *\=*$/i) { $currentSection = "versionCompat"; }
	elsif ($newLine =~ /^\ *\={1,4}\ *Testing\ *\=*$/i) { $currentSection = "testing"; }
	elsif ($newLine =~ /^\ *\={1,4}\ *.*Videos\ *\=*$/i) { $currentSection = "videos"; }
	elsif ($newLine =~ /^\ *\[\[Category\:.*\]\]$/i) { $currentSection = "categories"; }
	elsif ($newLine =~ /^\ *\{\{Navigation\ .*\}\}$/i) { $currentSection = "categories"; }

	if ($currentSection eq "infobox") {
		if ($newLine =~ /^\{\{\ *Infobox.*/i) {   # This is the start of the Infobox, ignore
			# ignore
		} elsif ($newLine =~ /^\}\}$/) {   # This is the end of the Infobox, change section and ignore
			$currentSection = "description";
		} else {   # We want to keep anything else in the infobox.  This is in case the user didn't give us a wikipedia article to generate a new one from
			push (@infoboxSection, $newLine);

			# Now we save the image filename and size to be added onto wikipedia's infobox, if its provided
			if ($newLine =~ /^\|\ *image\ *=\ *.+/gi) {
				$image = $newLine;
				# just keep the filename, and format 
				$image =~ s/\|image\ *\=\ *\[\[(?:File|Image)\ *\:\ *(.*?)(?:\||\]).*/$1/i; #
			} elsif ($newLine =~ /^\|\ *size\ *=\ *.+/gi) {
				$savedSizeLine = $newLine; # saved for later
			}
		}
	} elsif ($currentSection eq "description") {
		# We're pretty much going to assume that if it's in this section, we want to keep it all as-is
		push (@descriptionSection, $newLine);
	} elsif ($currentSection eq "problems") {
		if ($newLine =~ /^\ *\={1,4}\ *Problems\ *\=*$/i) {   # Matches the section heading, ignore
			# ignore
		} elsif ($newLine =~ /^\ *\={1,4}\ *(.*?)\ *\=*\ *$/gm) {   # This is a sub-heading.  Reformat it
			push (@problemSection, "\=\=\= $1 \=\=\=");
		} else {   # This is something else in the problem section, like user input.  Keep it
			push (@problemSection, $newLine);
		}
	} elsif ($currentSection eq "configuration") {
		if ($newLine =~ /\|\ *.*\=\ *\S+.*$/gi) {   # This is a config entry that has been filled out
			push (@configurationSection, $newLine);
		} # Anything besides filled-out config params are not needed, the rest will be regenerated
	} elsif ($currentSection eq "versionCompat") {
		if ($newLine =~ /^\{\{VersionCompatibilityVersion\|\s*(.+)\s*\|\s*(.+)\s*(\|\s*(.+)\s*)?\}\}$/gi) {   # Version compat report that's been filled out
			$versionCompatEntry = "\{\{VersionCompatibilityVersion\|$1\|$2".(($3)?"\|$3":"")."\}\}";
			push (@versionCompatSection, $versionCompatEntry);
		} # Anything besides filled-out compat reports are not needed, the rest will be regenerated
	} elsif ($currentSection eq "testing") {
		if ($newLine =~ /^\{\{.+?\|revision\=\s*(.*?)\s*\|os\=\s*(.*?)\s*\|cpu\=\s*(.*?)\s*\|gpu\=\s*(.*?)\s*\|result\=\s*(.*?)\s*(\|tester\=\s*(.*?)\s*)?\}\}/i) {
			# Matches test reports with all variables set (tester is optional) and dissects for reassembly (muahahaha!)
			$testResult = "\{\{testing\/entry\|revision\=$1\|OS\=$2\|CPU\=$3\|GPU\=$4\|result\=$5\|tester\=".(($6)?"$6":"")."\}\}";
			push (@testingSection, $testResult);
		}
	} elsif ($currentSection eq "videos") {
		if ($newLine =~ /^\ *\={1,4}\ *.*Videos\ *\=*$/i) {   # Matches the section heading, ignore
			# ignore
		} else {   # Keep everything else
			push (@videoSection, $newLine);
		}
	} elsif ($currentSection eq "categories") {   # We keep all existing categories, and add some new auto-generated ones!
		if ($newLine =~ /^\[\[Category\:\ *(.*)\ *\]\]/i) {   # This is a category entry
			push (@categorySection, "\[\[Category:" . $1 . "\]\]");
		} elsif ($newLine =~ /^\{\{Navigation\ *(.*)\ *\}\}/i) {   # This is a navigation entry
			push (@categorySection, "\{\{Navigation " . $1 . "\}\}");
		}
	}	
}




######################
#WIKIPEDIA PROCESSING#
######################

$foundWikipediaInfobox = 0;
$insideInfobox = 0;

my @autoCategory;

system('clear');

foreach (@wikipedia) {
	$newLine = $_;

	$platforms  = "\|platforms \= ";
	$platformAltered = 0;
	$skip = 0;
	$skipUnWiki = 0;

	if ($newLine =~ /^\{\{\ *Infobox.*/i) {
		push (@finalResult, '{{Infobox VG');
		$foundWikipediaInfobox = 1;
		$insideInfobox = 1;
		$skip = 1;
		
	}

	#Platforms
	if ($newLine =~ /\|\ *platforms/gi) {
		#Wii
		if ($newLine =~ /.*Wii.*/i) {
			$platforms .= '[[Wii]] ';
			push (@autoCategory, "[[Category:Wii games]]");
			$platformAltered = 1;
			$imageSize = 300;
		}			

		#GameCube
                if ($newLine =~ /GameCube/i) {
			$platforms .= '[[GameCube]] ';
			push (@autoCategory, "[[Category:GameCube games]]");
			$platformAltered = 1;
			$imageSize = 300;
	       	 }	

		#WiiWare
                if ($newLine =~ /WiiWare/i) {
       	        	$platforms .= '[[WiiWare]] ';
			push (@autoCategory, "[[Category:WiiWare games]]");
			$platformAltered = 1;
			$imageSize = 175;
       	 	}

		#TriForce
                if ($newLine =~ /TriForce/i) {
               		$platforms .= '[[Triforce]] ';
			push (@autoCategory, "[[Category:Triforce games]]");
			$platformAltered = 1;
			$imageSize = 300;
        	}

		push (@finalResult,$platforms);
		$skip = 1;
		$skipUnWiki = 1;
	}

	#Purge un-used parameters
	if ($insideInfobox) {
		#Replace whatever title Wikipedia is using with our own
		if ($newLine =~ /^\|\ *title\ *=\ *.+/gi) {
			$newLine = '|title = {{SUBPAGENAME}}';
		}

		if ($newLine =~ /^\|\ *(title|developer|publisher|distributor|director|producer|designer|programmer|artist|composer|license|series|engine|resolution|released|genre|mode|ratings|input|size|fps|dspcode|dtkadpcm|channeltype|mode|modes)\ *=\ *.+/gi) {
			$skip = 0;
		} else {
			$skip = 1;
		}
	}

	#Un-wiki-fy everything
        if ($skipUnWiki eq 0) {
		$newLine =~ s/\<ref.+?\/.{0,3}\>//gi; # remove citations references
		$newLine =~ s/\{\{vgy\|([0-9]{4})\}\}/$1/gi; # we don't do Template:vgy, removing
		$newLine =~ s/\{\{cite.*?\}\}//gi; # remove references
		$newLine =~ s/\[\[(([.]|[^\|])+?)\]\]/$1/g; # un-wiki-fy wiki links in the format [[link]]
                $newLine =~ s/\[\[.+?\|(.+?)\]\]/$1/g; # un-wiki-fy wiki links in the format [[link|name]]
        }

	#Set genre categories
	if ($newLine =~ /^\|\ *genre/ ne "") {
		$genreLine = $newLine;
		$genreLine =~ s/^\|\ *genre\ *\=\ *//i;
		@genres = split (/\,|\<br.*?\>/,$genreLine);
		foreach (@genres) {
			if (@autoCategory eq 0) {
				push (@autoCategory, '<!-- Categories below this line were automatically generated -->');
			}
			$line = $_;
			$line =~ s/^\ *//;
			$line =~ s/\ +$//;
			push (@autoCategory, "\[\[Category:" . $line . " games\]\]");
		}
	}
	
	#Set mode categories
	if ($newLine =~ /^\|\ *mode/ ne "") {
		$modeLine = $newLine;
		$modeLine =~ s/^\|\ *modes{0,1}\ *\=\ *//i;
		@modes = split (/\,|\<br.*?\>/,$modeLine);
		foreach (@modes) {
			if (@autoCategory eq 0) {
				push (@autoCategory, '<!-- Categories below this line were automatically generated -->');
			}
			$line = $_;
			$line =~ s/^\ *//;
			$line =~ s/\ +$//;
			push (@autoCategory, "\[\[Category:" . $line . " games\]\]");
		}
	}		

	#New-line if this is the end of the Infobox
	if ($newLine =~ /^\}\}$/) {
		if ($savedSizeLine ne "") { push (@finalResult, $savedSizeLine); }  # Saved size
		if ($image ne "") { # Saved image line
			push (@finalResult, '|image = [[File:' . $image . '|' . $imageSize . 'px]]'); 
		} elsif ($image eq "") {
			push (@finalResult, '|image = [[File:{{SUBPAGENAME}}.png|' . $imageSize . 'px]]');
		}

		push (@finalResult, $newLine);
		push (@finalResult, " ");
		$skip = 1;
		$insideInfobox = 0;
	}

	if (($foundWikipediaInfobox eq 1) and ($skip eq 0)) {
		push (@finalResult,$newLine);
	}
}

######################
#COMPILE FINAL RESULT#
######################

# At this point, the Infobox and the summary are in place.  Now, time to add our checked and re-formatted content sections.

# CATEOGRY PROCESSING
# Need to combine our categories and make sure there are no duplicates
foreach (@autoCategory) {
	$fullCat = $_;
	my $shortCat;
	$dupe = 0;

	if (($fullCat =~ /^\[\[Category\:\ *(.*)\ *\]\]/i) or ($fullCat =~ /^\{\{Navigation\ *(.*)\ *\}\}/i)) {
		$shortCat = $1;
	}

	foreach (@categorySection) {
		$compareCatLong = $_;
		my $compareCatShort;

		if (($compareCatLong =~ /^\[\[Category\:\ *(.*)\ *\]\]/i) or ($compareCatLong =~ /^\{\{Navigation\ *(.*)\ *\}\}/i)) {
			$compareCatShort = $1;
		}

		if ($compareCatShort eq $shortCat) {
			$dupe = 1;
		}		
	}

	if ($dupe eq 0) {
		push (@categorySection, $_);
	}	
}

#INFOBOX PROCESSING
if (($foundWikipediaInfobox eq 1) and ($foundDolphinInfobox eq 1)) {
	# If a Wikipedia Infobox was received, it was already pushed into @finalResult.
	# TODO: Wikipedia parsing should push into its own array, which is then added in this section
} elsif (($foundWikipediaInfobox eq 0) and ($foundDolphinInfobox eq 1)) {  # We didn't get a Wikipedia Infobox, so use the one from Dolphin
	push (@finalResult, '{{Infobox VG');
	push (@finalResult, @infoboxSection);
	push (@finalResult, '}}');	
} elsif (($foundWikipediaInfobox eq 0) and ($foundDolphinInfobox eq 0)) { # We didn't get ANY infoboxes, create a generic one
	push (@finalResult, '{{Infobox VG');
	push (@finalResult, '|title = {{SUBPAGENAME}}');
	push (@finalResult, '|image = [[File:{{SUBPAGENAME}}.png|');
	push (@finalResult, '}}');	
}

#DESCRIPTION PROCESSING
if ((@descriptionSection) and ($foundWikipediaInfobox eq 0)) {   # Only re-use the original description if there was one and we didn't get Wikipedia data
	push (@finalResult, "\n");
	push (@finalResult, @descriptionSection);
}

push (@finalResult, "\n\=\= Problems \=\=");
push (@finalResult, @problemSection);

push (@finalResult, "\n\=\= Configuration \=\=");
push (@finalResult, '<!--A full list of options is available at Template:Config/doc-->');
push (@finalResult, "\{\{Config");
push (@finalResult, @configurationSection);
push (@finalResult, "\}\}");

push (@finalResult, "\n\=\= Version Compatibility \=\=");
push (@finalResult, "\{\{VersionCompatibility\}\}");
push (@finalResult, '<!--Use this template for compatibility entries: {{VersionCompatibilityVersion|7617|****}}-->');
push (@finalResult, @versionCompatSection);
push (@finalResult, "\{\{VersionCompatibilityClose\}\}");

push (@finalResult, "\n\=\= Testing \=\=");
push (@finalResult, "\{\{testing\/start\}\}");
push (@finalResult, '<!--Use this template for test entries: {{Test Entry|revision=|OS=|CPU=|GPU=|result=|tester=}}-->');
push (@finalResult, @testingSection);
push (@finalResult, "\{\{testing\/end\}\}");

push (@finalResult, "\n\=\= Gameplay Videos \=\=");
push (@finalResult, @videoSection);

push (@finalResult, "\n");
push (@finalResult, @categorySection);


##############
#FINAL OUTPUT#
##############

system ('clear');

print "****************\n";
print "* FINAL OUTPUT *\n";
print "****************\n";

foreach (@finalResult) {
	print $_ . "\n";
}

print "\n\n";