125 lines
2.9 KiB
Perl
Executable file
125 lines
2.9 KiB
Perl
Executable file
#!/usr/bin/perl
|
|
# Written by Alexey Dyachenko <alexd@altlinux.ru> (c) 2002
|
|
# Licensed under GNU GPL
|
|
|
|
require Unicode::Map8;
|
|
my $koi_map = Unicode::Map8->new("koi8-r") || die;
|
|
|
|
my $ipa_map = Unicode::Map8->new();
|
|
|
|
$ipa_map->default_to16( 0x20 );
|
|
|
|
$ipa_map->addpair( 0x61, 0x61 );
|
|
$ipa_map->addpair( 0x62, 0x62 );
|
|
$ipa_map->addpair( 0x63, 0x63 );
|
|
$ipa_map->addpair( 0x64, 0x64 );
|
|
$ipa_map->addpair( 0x65, 0x65 );
|
|
$ipa_map->addpair( 0x66, 0x66 );
|
|
$ipa_map->addpair( 0x67, 0x67 );
|
|
$ipa_map->addpair( 0x68, 0x68 );
|
|
$ipa_map->addpair( 0x69, 0x69 );
|
|
$ipa_map->addpair( 0x6a, 0x6a );
|
|
$ipa_map->addpair( 0x6b, 0x6b );
|
|
$ipa_map->addpair( 0x6c, 0x6c );
|
|
$ipa_map->addpair( 0x6d, 0x6d );
|
|
$ipa_map->addpair( 0x6e, 0x6e );
|
|
$ipa_map->addpair( 0x6f, 0x6f );
|
|
$ipa_map->addpair( 0x70, 0x70 );
|
|
$ipa_map->addpair( 0x71, 0x71 );
|
|
$ipa_map->addpair( 0x72, 0x72 );
|
|
$ipa_map->addpair( 0x73, 0x73 );
|
|
$ipa_map->addpair( 0x74, 0x74 );
|
|
$ipa_map->addpair( 0x75, 0x75 );
|
|
$ipa_map->addpair( 0x76, 0x76 );
|
|
$ipa_map->addpair( 0x77, 0x77 );
|
|
$ipa_map->addpair( 0x78, 0x78 );
|
|
$ipa_map->addpair( 0x79, 0x79 );
|
|
$ipa_map->addpair( 0x7a, 0x7a );
|
|
|
|
$ipa_map->addpair( 0x2d, 0x2e );
|
|
$ipa_map->addpair( 0x2e, 0x2e );
|
|
|
|
|
|
$ipa_map->addpair( 0x54, 0x03b8 );
|
|
$ipa_map->addpair( 0x53, 0x0283 );
|
|
$ipa_map->addpair( 0x4e, 0x014b );
|
|
$ipa_map->addpair( 0xd7, 0x02a7 );
|
|
$ipa_map->addpair( 0x44, 0x00F0 );
|
|
|
|
$ipa_map->addpair( 0x5a, 0x0292 );
|
|
|
|
$ipa_map->addpair( 0x51, 0x00e6 );
|
|
$ipa_map->addpair( 0x49, 0x0131 );
|
|
$ipa_map->addpair( 0xc3, 0x028c );
|
|
$ipa_map->addpair( 0x55, 0x028a );
|
|
$ipa_map->addpair( 0x81, 0x0252 );
|
|
$ipa_map->addpair( 0x45, 0x025b );
|
|
$ipa_map->addpair( 0xab, 0x0259 );
|
|
|
|
$ipa_map->addpair( 0x41, 0x0251 );
|
|
$ipa_map->addpair( 0xce, 0x025c );
|
|
$ipa_map->addpair( 0x8d, 0x0254 );
|
|
|
|
$ipa_map->addpair( 0xc7, 0x02cc );
|
|
$ipa_map->addpair( 0xc8, 0x02c8 );
|
|
|
|
$ipa_map->addpair( 0xf9, 0x02d0 );
|
|
$ipa_map->addpair( 0x3e, 0x02d1 );
|
|
|
|
# dump_map( $ipa_map );
|
|
#
|
|
# exit;
|
|
|
|
sub to_utf {
|
|
return $koi_map->tou($_[0])->utf8;
|
|
}
|
|
|
|
sub ipa_code {
|
|
return $ipa_map->tou($_[0])->utf8;
|
|
}
|
|
|
|
|
|
while( <> ) {
|
|
if( /\[\S+\]/ ) {
|
|
if( /(.*) (.*)/ ){
|
|
my $leftpart = $1;
|
|
my $rightpart = $2;
|
|
print to_utf($leftpart)." ";
|
|
if( substr( $rightpart, 0, 1 ) != "[" ) {
|
|
if( $rightpart =~ /([^[]+)/ ){
|
|
print to_utf($1);
|
|
}
|
|
};
|
|
|
|
while( $rightpart =~ /\[([^]]+)\]([^[]*)/g ){
|
|
print "[".ipa_code($1)."]".to_utf($2);
|
|
};
|
|
|
|
print "\n";
|
|
}else{
|
|
print to_utf($_);
|
|
};
|
|
}else{
|
|
print to_utf($_);
|
|
}
|
|
};
|
|
|
|
sub dump_map
|
|
{
|
|
my $m = shift;
|
|
for (my $i = 0; $i < 256; $i++) {
|
|
my $u = $m->to_char16($i);
|
|
next if $u == NOCHAR;
|
|
printf "0x%02X 0x%04X\n", $i, $u;
|
|
}
|
|
for (my $block = 0; $block < 256; $block++) {
|
|
next if $m->_empty_block($block);
|
|
print "# BLOCK $block\n";
|
|
for (my $i = 0; $i < 256; $i++) {
|
|
my $u = $block*256 + $i;
|
|
my $c = $m->to_char8($u);
|
|
next if $c == NOCHAR;
|
|
printf "0x%04X 0x%02X\n", $u, $c;
|
|
}
|
|
}
|
|
}
|