winucase_convert.pl (1614B)
1#!/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 <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";