#!/usr/bin/perl 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->nostrict; $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)."\n"; 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{ if (/(.*) (.*)/) { print to_utf($1)."\n".to_utf($2)."\n"; } } }; 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; } } }