blob: 322a9c833f2304b1c2fb1c1450f780ae975692c3 [file] [log] [blame]
Jeff Laytond49ffb02013-09-05 08:38:12 -04001#!/usr/bin/perl -w
2#
3# winucase_convert.pl -- convert "Windows 8 Upper Case Mapping Table.txt" to
4# a two-level set of C arrays.
5#
6# Copyright 2013: Jeff Layton <jlayton@redhat.com>
7#
8# This program is free software: you can redistribute it and/or modify
9# it under the terms of the GNU General Public License as published by
10# the Free Software Foundation, either version 3 of the License, or
11# (at your option) any later version.
12#
13# This program is distributed in the hope that it will be useful,
14# but WITHOUT ANY WARRANTY; without even the implied warranty of
15# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16# GNU General Public License for more details.
17#
18# You should have received a copy of the GNU General Public License
19# along with this program. If not, see <http://www.gnu.org/licenses/>.
20#
21
22while(<>) {
23 next if (!/^0x(..)(..)\t0x(....)\t/);
24 $firstchar = hex($1);
25 $secondchar = hex($2);
26 $uppercase = hex($3);
27
28 $top[$firstchar][$secondchar] = $uppercase;
29}
30
31for ($i = 0; $i < 256; $i++) {
32 next if (!$top[$i]);
33
34 printf("static const wchar_t t2_%2.2x[256] = {", $i);
35 for ($j = 0; $j < 256; $j++) {
36 if (($j % 8) == 0) {
37 print "\n\t";
38 } else {
39 print " ";
40 }
41 printf("0x%4.4x,", $top[$i][$j] ? $top[$i][$j] : 0);
42 }
43 print "\n};\n\n";
44}
45
46printf("static const wchar_t *const toplevel[256] = {", $i);
47for ($i = 0; $i < 256; $i++) {
48 if (($i % 8) == 0) {
49 print "\n\t";
50 } elsif ($top[$i]) {
51 print " ";
52 } else {
53 print " ";
54 }
55
56 if ($top[$i]) {
57 printf("t2_%2.2x,", $i);
58 } else {
59 print "NULL,";
60 }
61}
62print "\n};\n\n";