Acme-Nyaa
view release on metacpan or search on metacpan
lib/Acme/Nyaa/Ja.pm view on Meta::CPAN
eval {
$self->reckon( \$r );
$nekobuffer .= $self->toutf8( $r );
};
next if $@;
} else {
$nekobuffer .= $r;
}
for my $e ( keys %$entityrmap ) {
# Convert character entity reference to character itself.
next unless $nekobuffer =~ m/$e/;
$nekobuffer =~ s/$e/$entityrmap->{ $e }/g;
}
if( length $nekobuffer < $buffersize ) {
if( $nekobuffer =~ m/(.+$RxPeriod)(.*)/msx ) {
$nekobuffer = $1;
$leftbuffer = $2;
} else {
next;
}
}
if( $nekobuffer =~ m|[^\x20-\x7e]+| ) {
# Convert if any multibyte character exsits
$nekobuffer = $self->cat( \$nekobuffer, 1 );
}
if( $noun ) {
# Convert noun
$nekobuffer = $self->neko( \$nekobuffer, 1 ) if $nekobuffer =~ m|[^\x20-\x7e]+|;
$leftbuffer = $self->neko( \$leftbuffer, 1 ) if $leftbuffer =~ m|[^\x20-\x7e]+|;
}
$text .= $nekobuffer;
$nekobuffer = $leftbuffer;
$leftbuffer = q();
}
$text .= $nekobuffer if length $nekobuffer;
return $self->utf8to( $text );
}
sub reckon {
# Recognize text encoding
my $self = shift;
my $argv = shift;
my $ref1 = ref $argv;
my $text = $ref1 eq 'SCALAR' ? $$argv: $argv;
return q() unless length $text;
use Encode::Guess qw(shiftjis euc-jp 7bit-jis);
$self->{'utf8flag'} = utf8::is_utf8 $text;
my $code = Encode::Guess->guess( $text );
my $name = q();
return q() unless ref $code;
# What encoding
$name = $code->name;
$name = $1 if $name =~ m/\A(.+) or .+/;
if( $name ne 'ascii' ) {
$self->{'encoding'} ||= $name;
}
return $self->{'encoding'};
}
1;
__END__
=encoding utf8
=head1 NAME
Acme::Nyaa - Convert texts like which a cat is talking in Japanese
=head1 SYNOPSIS
use Acme::Nyaa::Ja;
my $kijitora = Acme::Nyaa::Ja->new();
# the following code is equivalent to the above.
use Acme::Nyaa;
my $kijitora = Acme::Nyaa->new( 'language' => 'ja' );
print $kijitora->cat( \'ç«ãããããã' ); # => ç«ããããããã£ã¼ã
print $kijitora->neko( \'ç¥ã¨åè§£ãã' ); # => ãã³ã¨åè§£ãã
=head1 DESCRIPTION
Acme::Nyaa is a converter which translate Japanese texts to texts like which a cat talking.
Language modules are available only Japanese (L<Acme::Nyaa::Ja>) for now.
=head1 CLASS METHODS
=head2 B<new()>
new() is a constructor of Acme::Nyaa::Ja
my $kijitora = Acme::Nyaa::Ja->new();
my $sabatora = Acme::Nyaa->new( 'language' => 'ja' );
=head1 INSTANCE METHODS
=head2 B<cat( I<\$text> )>
cat() is a converter that appends string C<ãã£ã¼> at the end of each sentence.
my $kijitora = Acme::Nyaa::Ja->new;
my $nekotext = 'ç«ãããããã';
print $kijitora->cat( \$nekotext );
# ç«ããããããã£ã¼ã¼!!
( run in 1.288 second using v1.01-cache-2.11-cpan-e1769b4cff6 )