Commit | Line | Data |
---|---|---|
64ffdd5e | 1 | #!/usr/bin/perl |
037b88d6 | 2 | # $Id: ucm2table,v 1.0 2002/03/28 23:26:29 dankogai Exp $ |
67d7b5ef | 3 | # |
64ffdd5e JH |
4 | |
5 | use 5.006; | |
6 | use strict; | |
7 | use Getopt::Std; | |
8 | my %Opt; | |
9 | getopts("eu", \%Opt); | |
10 | my @Chartab; | |
11 | ||
12 | my $Hex = '[0-9A-Fa-f]'; | |
13 | while(<>){ | |
14 | chomp; | |
15 | my ($uni, $enc, $fb, $comment) = | |
16 | /^<U($Hex+)>\s+(\S+)\s+\|(\d)\s+#\s+(.*)$/o or next; | |
64ffdd5e JH |
17 | # print "$uni $enc $fb $comment\n"; |
18 | my @byte = (); | |
19 | my $ord = 0; | |
20 | while($enc =~ /\G\\x($Hex+)/iog){ | |
21 | my $byte = hex($1); | |
22 | push @byte, $byte; | |
23 | $ord <<= 8; $ord += $byte; | |
24 | }; | |
25 | # print join('', @byte), " => $ord \n"; | |
26 | if ($Opt{u}){ | |
27 | $Chartab[$ord] = pack("U", hex($uni)); | |
28 | }else{ | |
29 | $Chartab[$ord] = pack("C*", @byte); | |
30 | } | |
31 | } | |
32 | ||
33 | for (my $x = 0x20; $x <= 0xffff; $ x+= 32) { | |
34 | my $line = ''; | |
35 | for my $i (0..31){ | |
67d7b5ef JH |
36 | my $num = $x+$i; $num eq 0x7f and next; # skip delete |
37 | my $char = $Chartab[$num]; | |
64ffdd5e | 38 | $line .= !$char ? " " : |
67d7b5ef | 39 | ($num < 0x7f ) ? " $char" : $char ; |
64ffdd5e JH |
40 | } |
41 | $line =~ /^\s+$/o and next; | |
42 | printf "0x%04x: $line\n", $x; | |
43 | } |