#!/usr/bin/perl

$ITEMFILE="common.h";
$PARMFILE="xml/object.h";

sub printo {
	my $text = shift;
	my $len = shift;
	print sprintf("%.*s", $len, $text);
	if (length($text) < $len) {
		print " " x ($len - length($text));
	}
}

sub printa {
	my $text = shift;
	my $len = shift;

	my @words = split(/\s+/, $text);
	my $offset = $len;
	while (@words) {
		$word = shift(@words);
		if ($offset + length($word) + 1 >= 80) {
			print "\n";
			print " " x $len;
			$offset = $len;
		}
		print "$word ";
		$offset += length($word) + 1;
	}
}

sub i18n {
	my $text = shift;
	if ($lang != 0) {
		return $TRANS{$text}->[$lang - 1];
	}
	return $text;
}

require 'contrib/items.doc';

$lang = "en";
if (defined($ARGV[0])) {
	$lang = $ARGV[0];
}
$lang = $LANGS{$lang};

print $INTRO[$lang];

$where = 0;
$until = "";

open DAT, "<$ITEMFILE" or die "Couldn't open $ITEMFILE: $!";
while (defined($_ = <DAT>)) {
	chomp;

	/^enum\s+eSkinSection/ and do {
		$where = 1;
		$until = "__SECTION_COUNT__";
		print i18n("Known Sections")."\n";
		print "-" x length(i18n("Known Sections"));
		print "\n\n";
		next;
	};

	/^enum\s+eSkinItem/ and do {
		$where = 2;
		$until = "__ITEM_COUNT__";
		print i18n("Known drawable Items")."\n";
		print "-" x length(i18n("Known drawable Items"));
		print "\n\n";
		next;
	};

	/^enum\s+eSkinDisplay/ and do {
		$where = 3;
		$until = "__DISPLAY_COUNT__";
		print i18n("Known Display-Items")."\n";
		print "-" x length(i18n("Known Display-Items"));
		print "\n\n";
		next;
	};

	(length($until) && /$until/) and do {
		$where = 0;
		$until = "";
		print "\n";
		next;
	};

	if ($where == 1) {
		next if /sectionSkin/;
		/section([\w]+)/ and do {
			$what = $1;
			printo i18n("Section:"), 15;
			print "[$what]\n";
			printo i18n("Description:"), 15;
			printa $SECTIONS{$what}->[$lang], 15;
			print "\n\n";
		};
	}

	if ($where == 2) {
		next if /itemUnknown/;
		next if /itemSkin/;
		/item([\w]+)/ and do {
			$what = $1;
			printo i18n("Item:"), 15;
			print "Item=$what\n";
			printo i18n("Description:"), 15;
			printa $ITEMS{$what}->[$lang], 15;
			print "\n";
			printo i18n("Parameters:"), 15;
			printa $ITEMPARAMS{$what}, 15;
			print "\n\n";
		};
	}

	if ($where == 3) {
		next if /displayAlways/;
		/display([\w]+)/ and do {
			$what = $1;
			printo i18n("Display:"), 15;
			print "display=$what\n";
			printo i18n("Description:"), 15;
			printa $DISPLAYS{$what}->[$lang], 15;
			print "\n";
			printo i18n("Parameters:"), 15;
			printa $DISPLAYPARAMS{$what}, 15;
			print "\n";
			printo i18n("Substitutes:"), 15;
			printa $DISPLAYSUBST{$what}, 15;
			print "\n\n";
		};
	}
}
close DAT;

open DAT, "<$PARMFILE" or die "Couldn't open $PARMFILE: $!";
while (defined($_ = <DAT>)) {
	chomp;

	/eSkinItem\s+mItem;/ and do {
		$where = 1;
		$until = "protected:";
		print i18n("Known Parameters")."\n";
		print "-" x length(i18n("Known Parameters"));
		print "\n\n";
		next;
	};

	(length($until) && /$until/) and do {
		$where = 0;
		$until = "";
		next;
	};

	if ($where == 1) {
		next if /mItem;\s*$/;
		/m([\w]+);\s*$/ and do {
			$what = lc($1);
			if ($what eq "pos1") {
				printo i18n("Parameter:"), 15;
				print "x1\n";
				printo i18n("Description:"), 15;
				print "\n";
				printo i18n("Default:"), 15;
				print "\n\n";
				printo i18n("Parameter:"), 15;
				print "y1\n";
				printo i18n("Description:"), 15;
				print "\n";
				printo i18n("Default:"), 15;
				print "\n\n";
			} elsif ($what eq "pos2") {
				printo i18n("Parameter:"), 15;
				print "x2\n";
				printo i18n("Description:"), 15;
				print "\n";
				printo i18n("Default:"), 15;
				print "\n\n";
				printo i18n("Parameter:"), 15;
				print "y2\n";
				printo i18n("Description:"), 15;
				print "\n";
				printo i18n("Default:"), 15;
				print "\n\n";
			} else {
				printo i18n("Parameter:"), 15;
				print "$what\n";
				printo i18n("Description:"), 15;
				print "\n";
				printo i18n("Default:"), 15;
				print "\n\n";
			}
		};
	}
}
close DAT;