| #!/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"; |