Acme-Unicodify

 view release on metacpan or  search on metacpan

lib/Acme/Unicodify.pm  view on Meta::CPAN

my %_TRANSLATE = (
    a => "\N{U+251}",
    b => "\N{U+432}",
    c => "\N{U+63}\N{U+30A}",
    d => "\N{U+64}\N{U+30A}",
    e => "\N{U+3F5}",
    f => "\N{U+4FB}",
    g => "\N{U+260}",
    h => "\N{U+4A3}",
    i => "\N{U+268}",
    j => "\N{U+135}",
    k => "\N{U+1E31}",
    l => "\N{U+2113}",
    m => "\N{U+271}",
    n => "\N{U+1E47}",
    o => "\N{U+26AC}",
    p => "\N{U+3C1}",
    q => "\N{U+24E0}",
    r => "\N{U+27E}",
    s => "\N{U+15B}",
    t => "\N{U+1C0}\N{U+335}",
    u => "\N{U+1D66A}\N{U+30A}",
    v => "\N{U+22C1}",
    w => "\N{U+2375}",
    x => "\N{U+1E8B}",
    y => "\N{U+1EFE}",
    z => "\N{U+1D66F}",
    A => "\N{U+10300}",
    B => "\N{U+1D6C3}",
    C => "\N{U+C7}",
    D => "\N{U+1D673}",
    E => "\N{U+395}",
    F => "\N{U+4FA}",
    G => "\N{U+1E4}",
    H => "\N{U+10199}",
    I => "\N{U+10309}",
    J => "\N{U+1D4AF}",
    K => "\N{U+212A}",
    L => "\N{U+1D473}",
    M => "\N{U+1D4DC}",
    N => "\N{U+2115}",
    O => "\N{U+2B55}",
    P => "\N{U+5C38}",
    Q => "\N{U+1F160}",
    R => "\N{U+5C3A}",
    S => "\N{U+10296}",
    T => "\N{U+4E05}",
    U => "\N{U+2F10}",
    V => "\N{U+1D54D}",
    W => "\N{U+174}",
    X => "\N{U+274C}",
    Y => "\N{U+1F1FE}",
    Z => "\N{U+2621}"
);


sub new {
    my $class = shift;

    my $self = {};
    bless $self, $class;

    $self->_define_cache();

    return $self;
}


sub to_unicode {
    my $self = shift;
    my $str  = shift;

    if ( !defined($str) ) { return; }

    my @parts = split /\b{gcb}/, $str;
    my $out = '';
    foreach my $l (@parts) {
        if ( exists( $_TRANSLATE{$l} ) ) {
            $out .= $_TRANSLATE{$l};
        } else {
            $out .= $l;
        }
    }

    return NFD($out);
}


sub back_to_ascii {
    my $self = shift;
    my $str  = shift;

    if ( !defined($str) ) { return; }

    my @parts = split /\b{gcb}/, $str;
    my $out = '';
    foreach my $l (@parts) {
        if ( exists( $self->{_ASCII_CACHE}->{$l} ) ) {
            $out .= $self->{_ASCII_CACHE}->{$l};
        } else {
            $out .= $l;
        }
    }

    return $out;
}


sub file_to_unicode {
    if ( $#_ != 2 ) { confess 'invalid call' }
    my ( $self, $in_fn, $out_fn ) = @_;

    my $txt = read_text($in_fn);
    $txt = $self->to_unicode($txt);
    write_text( $out_fn, $txt );

    return;
}


sub file_back_to_ascii {



( run in 2.461 seconds using v1.01-cache-2.11-cpan-0d23b851a93 )