#!/usr/bin/perl -w
#
# winucase_convert.pl -- convert "Windows 8 Upper Case Mapping Table.txt" to
#                        a two-level set of C arrays.
#
#   Copyright 2013: Jeff Layton <jlayton@redhat.com>
#
#   This program is free software: you can redistribute it and/or modify
#   it under the terms of the GNU General Public License as published by
#   the Free Software Foundation, either version 3 of the License, or
#   (at your option) any later version.
#
#   This program is distributed in the hope that it will be useful,
#   but WITHOUT ANY WARRANTY; without even the implied warranty of
#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#   GNU General Public License for more details.
#
#   You should have received a copy of the GNU General Public License
#   along with this program.  If not, see <https://www.gnu.org/licenses/>.
#

while(<>) {
	next if (!/^0x(..)(..)\t0x(....)\t/);
	$firstchar = hex($1);
	$secondchar = hex($2);
	$uppercase = hex($3);

	$top[$firstchar][$secondchar] = $uppercase;
}

for ($i = 0; $i < 256; $i++) {
	next if (!$top[$i]);

	printf("static const wchar_t t2_%2.2x[256] = {", $i);
	for ($j = 0; $j < 256; $j++) {
		if (($j % 8) == 0) {
			print "\n\t";
		} else {
			print " ";
		}
		printf("0x%4.4x,", $top[$i][$j] ? $top[$i][$j] : 0);
	}
	print "\n};\n\n";
}

printf("static const wchar_t *const toplevel[256] = {", $i);
for ($i = 0; $i < 256; $i++) {
	if (($i % 8) == 0) {
		print "\n\t";
	} elsif ($top[$i]) {
		print " ";
	} else {
		print "  ";
	}

	if ($top[$i]) {
		printf("t2_%2.2x,", $i);
	} else {
		print "NULL,";
	}
}
print "\n};\n\n";
