aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMax Horn2004-12-24 00:59:56 +0000
committerMax Horn2004-12-24 00:59:56 +0000
commitda9b64e4cabd7db8706e1f04b2b476cc02da66ac (patch)
treece422d42e40783a3a38ac729489d9c08d486d623
parentf6dd5125d1fd82ac01d16aeaf452881f78379dcc (diff)
downloadscummvm-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-xtools/credits.pl306
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>&nbsp;</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>[&nbsp;".$nick."&nbsp;]</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">&nbsp;</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&ouml;rn Andersson", "eriktorbjorn", "Engine: SCUMM, Broken Sword II");
+ add_person("David Eriksson", "twogood", "Engine: Flight of the Amazon Queen");
+ add_person("Robert G&ouml;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 &amp; 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&aacute;cs Endre J&aacute;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&eacute; 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&oslash;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();