diff options
| author | Max Horn | 2004-12-24 00:59:56 +0000 | 
|---|---|---|
| committer | Max Horn | 2004-12-24 00:59:56 +0000 | 
| commit | da9b64e4cabd7db8706e1f04b2b476cc02da66ac (patch) | |
| tree | ce422d42e40783a3a38ac729489d9c08d486d623 | |
| parent | f6dd5125d1fd82ac01d16aeaf452881f78379dcc (diff) | |
| download | scummvm-rg350-da9b64e4cabd7db8706e1f04b2b476cc02da66ac.tar.gz scummvm-rg350-da9b64e4cabd7db8706e1f04b2b476cc02da66ac.tar.bz2 scummvm-rg350-da9b64e4cabd7db8706e1f04b2b476cc02da66ac.zip | |
This hack is used to create AUTHORS, credits.h, credits.inc, credits.xml
svn-id: r16285
| -rwxr-xr-x | tools/credits.pl | 306 | 
1 files changed, 306 insertions, 0 deletions
| diff --git a/tools/credits.pl b/tools/credits.pl new file mode 100755 index 0000000000..92e1852b03 --- /dev/null +++ b/tools/credits.pl @@ -0,0 +1,306 @@ +#!/usr/bin/perl +# +# This tools is kind of a hack to be able to maintain the credits list of +# ScummVM in a single central location. We then generate the various versions +# of the credits in other places from this source. In particular: +# - The AUTHORS file +# - The gui/credits.h header file +# - The credits.xml file, part of the DocBook manual +# - Finally, credits.inc, from the website +# And maybe in the future, also "doc/10.tex", the LaTeX version of the README. +# Although that might soon be obsolete, if the manual evolves enough. +# +# Initial version written by Fingolfin in December 2004. +# + + +use strict; +use Text::Wrap; + +my $mode = ""; +my $max_name_width; +my $indent; +my $tab; + +if ($#ARGV >= 0) { +	$mode = "TEXT" if ($ARGV[0] eq "--text");	# AUTHROS +	$mode = "HTML" if ($ARGV[0] eq "--html");	# credits.inc (for use on the website) +	$mode = "CPP" if ($ARGV[0] eq "--cpp");		# credits.h (for use by about.cpp) +	$mode = "XML" if ($ARGV[0] eq "--xml");		# credits.xml (DocBook) +	#$mode = "TEX" if ($ARGV[0] eq "--tex");		# 10.tex (LaTeX) +} + +if ($mode eq "") { +	print STDERR "Usage: credits.pl [--text | --html | --cpp | --xml]\n"; +	print STDERR " Just pass --text / --html / --cpp / --xml as parameter, and credits.pl\n"; +	print STDERR " will print out the corresponding version of the credits to stdout.\n"; +	exit 1; +} + +$Text::Wrap::unexpand = 0; +if ($mode eq "TEXT") { +	$Text::Wrap::columns = 78; +	$max_name_width = 21; # The maximal width of a name. +	$indent = 7; +	$tab = " " x $indent; +} elsif ($mode eq "CPP") { +	$Text::Wrap::columns = 48;	# Approx. +} + +# Convert HTML entities to ASCII for the plain text mode +sub convert_html_entities { +	my $text = shift; +	 +	# For now we hardcode these mappings +	# á  -> a +	# é  -> e +	# ø  -> o +	# ö    -> o / oe +	# &     -> & +	$text =~ s/á/a/g; +	$text =~ s/é/e/g; +	$text =~ s/ø/o/g; + +	# HACK: Torbj*o*rn but G*oe*ffringmann +	$text =~ s/ör/or/g; +	$text =~ s/öf/oef/g; + +	$text =~ s/&/&/g; +	 +	return $text; +} + +sub begin_credits { +	my $title = shift; + +	if ($mode eq "TEXT") { +		#print convert_html_entities($title)."\n"; +	} elsif ($mode eq "CPP") { +		print "// This file was generated by credits.pl. Do not edit by hand!\n"; +		print "static const char *credits[] = {\n"; +	} elsif ($mode eq "XML") { +		print "<!-- This file was generated by credits.pl. Do not edit by hand! -->\n"; +		print "<appendix>\n"; +		print "  <title>" . $title . "</title>\n"; +		print "  <informaltable frame='none'>\n"; +		print "  <tgroup cols='3' align='left' colsep='0' rowsep='0'>\n"; +		print "  <colspec colname='start' colwidth='0.5cm'/>\n"; +		print "  <colspec colname='name' colwidth='4cm'/>\n"; +		print "  <colspec colname='job'/>\n"; +		print "  <tbody>\n"; +	} else { +		print "<!-- This file was generated by credits.pl. Do not edit by hand! -->\n"; +		print "<h1>$title</h1>\n"; +		print "<table border='0' cellpadding='5' cellspacing='0' style='margin-left: 3em;'>\n"; +	} +} + +sub end_credits { +	if ($mode eq "TEXT") { +	} elsif ($mode eq "CPP") { +		print "};\n"; +	} elsif ($mode eq "XML") { +		print "  </tbody>\n"; +		print "  </tgroup>\n"; +		print "  </informaltable>\n"; +		print "</appendix>\n"; +	} else { +		print "</table>\n"; +	} +} + +sub begin_section { +	my $title = shift; +	if ($mode eq "TEXT") { +		$title = convert_html_entities($title); +		print $title.":\n"; +	} elsif ($mode eq "CPP") { +		$title = convert_html_entities($title); +		print '"\\\\C\\\\c1""'.$title.':",' . "\n"; +	} elsif ($mode eq "XML") { +		print "  <row><entry namest='start' nameend='job'>"; +		print "<emphasis role='bold'>" . $title . ":</emphasis>"; +		print "</entry></row>\n"; +	} else { +		print "<tr><td colspan=3><h2>$title:</h2></td></tr>\n"; +	} +} + +sub end_section { +	if ($mode eq "TEXT") { +		print "\n"; +	} elsif ($mode eq "CPP") { +		print '"\\\\L\\\\c0""",' . "\n"; +	} elsif ($mode eq "XML") { +		print "  <row><entry namest='start' nameend='job'> </entry></row>\n\n"; +	} else { +		print "<tr><td colspan=3> </td></tr>\n"; +	} +} + +sub add_person { +	my $name = shift; +	my $nick = shift; +	my $desc = shift; +	 +	if ($mode eq "TEXT") { +		$name = $nick if $name eq ""; +		$name = convert_html_entities($name); +		$desc = convert_html_entities($desc); +		 +		printf $tab."%-".$max_name_width.".".$max_name_width."s - ", $name; +		 +		# Print desc wrapped +		my $inner_indent = $indent + $max_name_width + 3; +		my $multitab = " " x $inner_indent; +		print substr(wrap($multitab, $multitab, $desc), $inner_indent)."\n" +	} elsif ($mode eq "CPP") { +		$name = $nick if $name eq ""; +		$name = convert_html_entities($name); +		$desc = convert_html_entities($desc); + +		print '"\\\\L\\\\c0""  '.$name.'",' . "\n"; + +		# Print desc wrapped +		my $line_start = '"\\\\L\\\\c2""'; +		my $line_end = '",'; +		$Text::Wrap::separator = $line_end . "\n" .$line_start ; +		print $line_start . wrap("    ", "    ", $desc) . $line_end . "\n"; +		$Text::Wrap::separator = "\n"; + +	} elsif ($mode eq "XML") { +		$name = $nick if $name eq ""; +		print "  <row><entry namest='name'>" . $name . "</entry>"; +		print "<entry>" . $desc . "</entry></row>\n"; +	} else { +		$name = "???" if $name eq ""; +		print "<tr>"; +		print "<td>".$name."</td>"; +		if ($nick ne "") { +			print "<td>[ ".$nick." ]</td>"; +		} else { +			print "<td></td>"; +		} +		print "<td>".$desc."</td>\n"; +	} +} + +sub add_paragraph { +	my $text = shift; +	 +	if ($mode eq "TEXT") { +		print wrap($tab, $tab, convert_html_entities($text))."\n"; +		print "\n"; +	} elsif ($mode eq "CPP") { +		my $line_start = '"\\\\L\\\\c0""'; +		my $line_end = '",'; +		$Text::Wrap::separator = $line_end . "\n" . $line_start; +		print $line_start . wrap("", "", $text) . $line_end . "\n"; +		print $line_start . $line_end . "\n"; +		$Text::Wrap::separator = "\n"; +	} elsif ($mode eq "XML") { +		print "  <row><entry namest='start' nameend='job'>" . $text . "</entry></row>\n"; +		print "  <row><entry namest='start' nameend='job'> </entry></row>\n\n"; +	} else { +		print '<tr><td colspan="3">'; +		print $text; +		print '</td></tr>'."\n"; +		print '<tr><td colspan="3"> </td></tr>'."\n"; +	} +} + +# +# Now follows the actual credits data! The format should be clear, I hope. +# + +begin_credits("Credits"); +  begin_section("The ScummVM team"); +	add_person('James Brown', 'endy', "Lead developer"); +	add_person('Max Horn', 'fingolfin', "Lead developer"); +	add_person("Torbjörn Andersson", "eriktorbjorn", "Engine: SCUMM, Broken Sword II"); +	add_person("David Eriksson", "twogood", "Engine: Flight of the Amazon Queen"); +	add_person("Robert Göffringmann", "lavosspawn", "Engine: Beneath a Steel Sky, Broken Sword I"); +	add_person("Jonathan Gray", "khalek", "Engine: SCUMM, Broken Sword II"); +	add_person("Travis Howell", "Kirben", "Engine: SCUMM, Simon the Sorcerer"); +	add_person("Oliver Kiehl", "olki", "Engine: Beneath a Steel Sky, Simon"); +	add_person("Pawel Kolodziejski", "aquadran", "Engine: SCUMM (Codecs, iMUSE, Smush, etc.)"); +	add_person("Gregory Montoir", "cyx", "Engine: Flight of the Amazon Queen"); +	add_person("Joost Peters", "joostp", "Engine: Beneath a Steel Sky, Flight of the Amazon Queen"); +	add_person("Eugene Sandulenko", "_sev", "Engine: SCUMM (FT INSANE, bugfixes)"); +	add_person("Chris Apers", "chrilith ", "Port: PalmOS"); +	add_person("Nicolas Bacca", "arisme", "Port: PocketPC/WinCE"); +	add_person("Marcus Comstedt", "", "Port: Dreamcast"); +	add_person("Ruediger Hanke", "", "Port: MorphOS"); +	add_person("Jamieson Christian", "jamieson630", "iMUSE, MIDI, all things musical"); +	add_person("Jerome Fisher", "KingGuppy", "MT-32 emulator"); +	add_person("Jochen Hoenicke", "hoenicke", "Speaker & PCjr sound support, Adlib work"); +  end_section(); +   +   +  begin_section("Retired Team Members"); +	add_person("Ralph Brorsen", "painelf", "Help with GUI implementation"); +	add_person('Vincent Hamm', 'yazoo', "Co-Founder"); +	add_person("Felix Jakschitsch", "yot", "Zak256 reverse engineering"); +	add_person("Mutwin Kraus", "mutle", "Original MacOS porter"); +	add_person("Peter Moraliyski", "ph0x", "Port: GP32"); +	add_person('Jeremy Newman', 'laxdragon', "Former webmaster"); +	add_person('Ludvig Strigeus', 'ludde', "Original ScummVM and SimonVM author"); +	add_person("Lionel Ulmer", "bbrox", "Port: X11"); +  end_section(); +   +   +  begin_section("Contributors"); +	add_person("Tore Anderson", "tore", "Packaging for Debian GNU/Linux"); +	add_person("Stuart Caie", "", "Decoders for Simon 1 Amiga data files"); +	add_person("Janne Huttunen", "", "V3 actor mask support, Dig/FT SMUSH audio"); +	add_person("Kovács Endre János", "", "Several fixes for Simon1"); +	add_person("Jeroen Janssen", "", "Numerous readability and bugfix patches"); +	add_person("Claudio Matsuoka", "", 'Daily Linux/BeOS builds'); +	add_person("Mikesch Nepomuk", "", "MI1 VGA floppy patches"); +	add_person("Nicolas Noble", "pixels", "Config file and ALSA support"); +	add_person("Willem Jan Palenstijn", "wjp", "Packaging for Fedora/RedHat"); +	add_person("", "Quietust", "Sound support for Amiga SCUMM V2/V3 games"); +	add_person("Andreas Roever", "", "Broken Sword 1/2 MPEG2 cutscene support"); +	add_person("Edward Rudd", "", "Fixes for playing MP3 versions of MI1/Loom audio"); +	add_person("Daniel Schepler", "", "Final MI1 CD music support, initial Ogg Vorbis support"); +	add_person("André Souza", "", "SDL-based OpenGL renderer"); +	add_person("Tim ???", "realmz", "Initial MI1 CD music support"); +  end_section(); + +   +  add_paragraph("And to all the contributors, users, and beta testers we've missed. Thanks!"); +   +  # HACK! +  $max_name_width = 15; +   +  begin_section("Special thanks to"); +	add_person("Sander Buskens", "", "For his work on the initial reversing of Monkey2"); +	add_person("", "Canadacow", "For the original MT-32 emulator"); +	add_person("Kevin Carnes", "", "For Scumm16, the basis of ScummVM's older gfx codecs"); +	add_person("", "Jezar", "For his freeverb filter implementation"); +	add_person("Jim Leiterman", "", "Various info on his FM-TOWNS/Marty SCUMM ports"); +	add_person("Jimmi Thøgersen", "", "For ScummRev, and much obscure code/documentation"); +	add_person("", "Tristan", "For additional work on the original MT-32 emulator"); +  end_section(); +   +  # HACK! +  $Text::Wrap::columns = 46 if $mode eq "CPP"; +   +  add_paragraph( +  "Tony Warriner and everyone at Revolution Software Ltd. for sharing ". +  "with us the source of some of their brilliant games, allowing us to ". +  "release Beneath a Steel Sky as freeware... and generally being ". +  "supportive above and beyond the call of duty."); +   +  add_paragraph( +  "John Passfield and Steve Stamatiadis for sharing the source of their ". +  "classic title, Flight of the Amazon Queen and also being incredibly ". +  "supportive."); +   +  add_paragraph( +  "Aric Wilmunder, Ron Gilbert, David Fox, Vince Lee, and all those at ". +  "LucasFilm/LucasArts who made SCUMM the insane mess to reimplement ". +  "that it is today. Feel free to drop us a line and tell us what you ". +  "think, guys!"); + +end_credits(); | 
