63 lines · plain
1#!/usr/bin/perl -w2#3# winucase_convert.pl -- convert "Windows 8 Upper Case Mapping Table.txt" to4# 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 modify9# it under the terms of the GNU General Public License as published by10# the Free Software Foundation, either version 3 of the License, or11# (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 of15# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the16# GNU General Public License for more details.17#18# You should have received a copy of the GNU General Public License19# along with this program. If not, see <https://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";63