to Hiragana, to Katakana, to Romaji subs
parent
32644900a9
commit
d80a065db9
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue