#!/usr/bin/perl # $Id: ucm2table,v 1.0 2002/03/28 23:26:29 dankogai Exp $ # use 5.006; use strict; use Getopt::Std; my %Opt; getopts("eu", \%Opt); my @Chartab; my $Hex = '[0-9A-Fa-f]'; while(<>){ chomp; my ($uni, $enc, $fb, $comment) = /^\s+(\S+)\s+\|(\d)\s+#\s+(.*)$/o or next; # print "$uni $enc $fb $comment\n"; my @byte = (); my $ord = 0; while($enc =~ /\G\\x($Hex+)/iog){ my $byte = hex($1); push @byte, $byte; $ord <<= 8; $ord += $byte; }; # print join('', @byte), " => $ord \n"; if ($Opt{u}){ $Chartab[$ord] = pack("U", hex($uni)); }else{ $Chartab[$ord] = pack("C*", @byte); } } for (my $x = 0x20; $x <= 0xffff; $ x+= 32) { my $line = ''; for my $i (0..31){ my $num = $x+$i; $num eq 0x7f and next; # skip delete my $char = $Chartab[$num]; $line .= !$char ? " " : ($num < 0x7f ) ? " $char" : $char ; } $line =~ /^\s+$/o and next; printf "0x%04x: $line\n", $x; }