Acme-Shukugawa-Atom
view release on metacpan or search on metacpan
lib/Acme/Shukugawa/Atom.pm view on Meta::CPAN
} elsif ($yomi) {
$ret .= $self->atomize($yomi) || $surface;
} else {
$ret .= $surface;
}
}
}
$$strref = $ret;
}
sub postprocess {}
# ã·ã¼ã¹ã¼ã«ã¼ã«
# 寿å¸âã·ã¼ã¹ã¼
# ã³ããæå¾ã ã£ããã²ã£ããè¿ããªã
sub apply_shisu_rule
{
my ($self, $yomi) = @_;
return $yomi if $yomi =~ s{^($RE_SYLLABLE)($RE_SYLLABLE)$}{
my ($a, $b) = ($1, $2);
$a =~ s/ã¼$//;
$b =~ s/ã¼$//;
"${b}ã¼${a}ã¼";
}e;
return;
}
# ã¯ã¤ãã¼ã«ã¼ã«
# ãã¯ã¤âã¯ã¤ãã¼
sub apply_waiha_rule
{
my ($self, $yomi) = @_;
# warn "WAIHA $yomi";
if ($yomi =~ s/^(${RE_SYLLABLE}[$RE_NBAR]?)([^$RE_NBAR].)$/$2$1/) {
$yomi =~ s/(^.[^ã¼].*[^ã¼])$/$1ã¼/;
return $yomi;
}
return;
}
# ã¯ãªããã«ã¼ã«
# ã³ã£ããâã¯ãªãã
sub apply_kuribitsu_rule
{
my ($self, $yomi) = @_;
# warn "KURIBITSU $yomi";
if ($yomi =~ s/^(${RE_SYLLABLE}.)([^$RE_NBAR]${RE_SYLLABLE}$)/$2$1/) {
return $yomi;
}
return;
}
sub atomize
{
my ($self, $yomi) = @_;
$yomi =~ s/ã¼+/ã¼/g;
# Length
my $word_length = length($yomi);
my $length = $word_length - ($yomi =~ /$RE_SMALL/g);
if ($length == 3 && $yomi =~ s/^(${RE_SYLLABLE})ã/${1}ã/) {
# warn "Special rule!";
$length = 4;
}
my $done = 0;
# warn "$yomi LENGTH: $length";
if ($length == 2) {
my $tmp = $self->apply_shisu_rule($yomi);
if ($tmp) {
$yomi = $tmp;
$done = 1;
}
}
if ($length == 3) {
my $tmp = $self->apply_waiha_rule($yomi);
if ($tmp) {
$yomi = $tmp;
$done = 1;
}
}
if ($length == 4) { # 4 character words tend to have special xformation
my $tmp = $self->apply_kuribitsu_rule($yomi);
if ($tmp) {
$yomi = $tmp;
$done = 1;
}
}
if (! $done) {
$yomi =~ s/(.(?:ã¼+)?)$//;
$yomi = $1 . $yomi;
}
$yomi =~ s/ã$/ã/;
return $yomi;
}
1;
__END__
=encoding UTF-8
=head1 NAME
Acme::Shukugawa::Atom - ã®ãããã³ã«ãããã³ã§ããã£ã
=head1 SYNOPSIS
use Acme::Shukugawa::Atom;
my $newstring = Acme::Shukugawa::Atom->translate($string);
# By default, share/config.yaml is used (via File::ShareDir) for custom
# fixed replacements. You can however override this by specifying the
# alternate config filename at load time
BEGIN
{
$Acme::Shukugawa::Atom::CONFIG = '/path/to/config.yaml';
}
use Acme::Shukugawa::Atom;
# Or you can specify them (on top of the default words) at run time
my $atom = Acme::Shukugawa::Atom->new(
# The default values are stored in @Acme::Shukugawa::Atom::DEFAULT_WORDS
custom_words => [
'regexp1' => 'replacement1'
'regexp2' => 'replacement2'
'regexp3' => 'replacement3'
'regexp4' => 'replacement4'
....
]
);
my $newstring = $atom->translate($string);
# shorter way
my $newstring = Acme::Shukugawa::Atom->translate($string,
custom_words => [ ... ]
);
=head1 DESCRIPTION
( run in 1.269 second using v1.01-cache-2.11-cpan-364913b4093 )