Commit | Line | Data |
64ffdd5e |
1 | #!/usr/bin/perl |
ef175861 |
2 | # $Id: ucm2table,v 1.1 2002/04/22 23:57:10 dankogai Exp $ |
67d7b5ef |
3 | # |
64ffdd5e |
4 | |
5 | use 5.006; |
6 | use strict; |
7 | use Getopt::Std; |
8 | my %Opt; |
ef175861 |
9 | getopts("aeu", \%Opt); |
10 | my %Chartab; |
64ffdd5e |
11 | |
12 | my $Hex = '[0-9A-Fa-f]'; |
13 | while(<>){ |
14 | chomp; |
ef175861 |
15 | my ($uni, $enc, $fb) = |
16 | /^<U($Hex+)>\s+(\S+)\s+\|(\d)$/o or next; |
17 | $fb eq '0' or next; |
64ffdd5e |
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}){ |
ef175861 |
27 | $Chartab{$ord} = pack("U", hex($uni)); |
64ffdd5e |
28 | }else{ |
ef175861 |
29 | $Chartab{$ord} = pack("C*", @byte); |
64ffdd5e |
30 | } |
31 | } |
32 | |
ef175861 |
33 | my $start = $Opt{a} ? 0x20 : 0xa0; |
34 | |
35 | for (my $x = $start; $x <= 0xffff; $ x+= 32) { |
64ffdd5e |
36 | my $line = ''; |
37 | for my $i (0..31){ |
67d7b5ef |
38 | my $num = $x+$i; $num eq 0x7f and next; # skip delete |
ef175861 |
39 | my $char = $Chartab{$num}; |
64ffdd5e |
40 | $line .= !$char ? " " : |
67d7b5ef |
41 | ($num < 0x7f ) ? " $char" : $char ; |
64ffdd5e |
42 | } |
43 | $line =~ /^\s+$/o and next; |
44 | printf "0x%04x: $line\n", $x; |
45 | } |