#!/usr/bin/perl use strict; use lib "lib"; use warnings; use YAML; use Encode; use Encode::JP::Mobile 0.20; use Encode::JP::Mobile::Charnames qw( unicode2name unicode2name_en ); my($file, $to, $force) = @ARGV; my $dat = YAML::LoadFile($file); my $from = ($file =~ /(\w*)-table\.yaml/)[0] or die; $to ||= 'docomo'; warn "Updating $from table by mapping to $to pictograms\n"; for my $r (@$dat) { for my $key ( qw( name name_en ) ) { next if exists $r->{$key} && !$force; my $code = $from eq 'kddi' ? 'unicode_auto' : 'unicode'; my $char = chr hex $r->{$code}; eval { my $mapped = decode("x-utf8-$to", encode("x-utf8-$to", $char, Encode::FB_CROAK)); my $func = $key eq 'name' ? \&unicode2name : \&unicode2name_en; my $name = $func->(ord $mapped); $r->{$key} = encode_utf8($name) if $name; }; warn $@ if $@; } } YAML::DumpFile($file, $dat);