44 lines
1.4 KiB
Ruby
44 lines
1.4 KiB
Ruby
module IkaConjugations
|
|
U_VOWEL_CHANGES = {
|
|
"る" => { "a" => "ら", "i" => "り", "u" => "る", "e" => "れ", "o" => "ろ" },
|
|
"う" => { "a" => "あ", "i" => "い", "u" => "う", "e" => "え", "o" => "お" },
|
|
"つ" => { "a" => "た", "i" => "ち", "u" => "つ", "e" => "て", "o" => "と" },
|
|
"す" => { "a" => "さ", "i" => "し", "u" => "す", "e" => "せ", "o" => "そ" },
|
|
"く" => { "a" => "か", "i" => "き", "u" => "く", "e" => "け", "o" => "こ" },
|
|
"ぐ" => { "a" => "が", "i" => "ぎ", "u" => "ぐ", "e" => "げ", "o" => "ご" },
|
|
"ぶ" => { "a" => "ば", "i" => "び", "u" => "ぶ", "e" => "べ", "o" => "ぼ" },
|
|
"む" => { "a" => "ま", "i" => "み", "u" => "む", "e" => "め", "o" => "も" },
|
|
"ぬ" => { "a" => "な", "i" => "に", "u" => "ぬ", "e" => "ね", "o" => "の" },
|
|
}
|
|
|
|
class KanaKanji
|
|
attr_reader :kana, :kanji
|
|
def initialize(kana, kanji=nil)
|
|
@kana = kana
|
|
@kanji = kanji || kana
|
|
end
|
|
|
|
def [](index)
|
|
self.class.new kana[index], kanji[index]
|
|
end
|
|
|
|
def +(other)
|
|
case other
|
|
when String
|
|
self.class.new kana + other, kanji + other
|
|
when KanaKanji
|
|
self.class.new kana + other.kana, kanji + other.kanji
|
|
end
|
|
end
|
|
|
|
def last_character(new_form=nil)
|
|
return kana[-1] unless new_form
|
|
U_VOWEL_CHANGES[kana[-1]][new_form]
|
|
end
|
|
|
|
def all_but_last_character
|
|
self.class.new kana[0...-1], kanji[0...-1]
|
|
end
|
|
end
|
|
end
|