to Hiragana, to Katakana, to Romaji subs

master
Ivo Hradek 2014-12-03 17:30:16 +01:00 committed by hradecek
parent 32644900a9
commit d80a065db9
1 changed files with 38 additions and 1 deletions

View File

@ -10,6 +10,7 @@ use Lingua::JA::Moji qw/
hira2kata
kata2hira
kana2romaji
romaji2kana
romaji2hiragana/;
name 'Kana';
@ -30,7 +31,43 @@ zci answer_type => 'kana';
triggers query_lc => qr/^(?<text>.*?)(?: to| in)?\s+(?<syll>hiragana|katakana|romaji)$/;
handle query_lc => {
my %dispatch = (
'hiragana' => \&to_hiragana,
'katakana' => \&to_katakana,
'romaji' => \&to_romaji
);
my $jp_punc = 'ー、。〜・「」「」『』〽0123456789';
sub trim_jp_punc {
local $_ = shift @_;
s/[\Q$jp_punc\E]//g;
return $_;
};
sub to_hiragana {
my $text = shift @_;
return kata2hira($text) if is_kana(trim_jp_punc($text));
return romaji2hiragana($text, { ime => 1 }) if is_romaji($text);
};
sub to_katakana {
my $text = shift @_;
return hira2kata($text) if is_kana(trim_jp_punc($text));
return romaji2kana($text, { ime => 1 }) if is_romaji($text);
};
sub to_romaji {
my $text = shift @_;
kana2romaji($text, {style => 'hepburn', wo => 1}) if is_kana(trim_jp_punc($text));
};
handle query_lc => sub {
my $text = $+{text};
my $syll = $+{syll};
my $answer = $dispatch{$syll}($text);
return unless $answer;
return $answer;
};
1;