231 lines
4.6 KiB
Ruby
231 lines
4.6 KiB
Ruby
module IkaConjugations
|
|
class Verb
|
|
TE_TA_DE_DA = {
|
|
"て" => "た", "で" => "だ"
|
|
}
|
|
|
|
attr_reader :dict_kanji, :dict_kana, :definition, :dict
|
|
|
|
def initialize(dict_kanji, dict_kana, definition)
|
|
@dict_kanji = dict_kanji || dict_kana
|
|
@dict_kana = dict_kana
|
|
@dict = KanaKanji.new dict_kana, dict_kanji
|
|
@definition = definition
|
|
end
|
|
|
|
def last_character(new_form=nil)
|
|
dict.last_character(new_form)
|
|
end
|
|
|
|
def all_but_last_character
|
|
dict.all_but_last_character
|
|
end
|
|
|
|
def dictionary
|
|
dict
|
|
end
|
|
|
|
def long_form_present_positive
|
|
stem + "ます"
|
|
end
|
|
|
|
def long_form_present_negative
|
|
stem + "ません"
|
|
end
|
|
|
|
def long_form_past_positive
|
|
stem + "ました"
|
|
end
|
|
|
|
def long_form_past_negative
|
|
long_form_present_negative + "でした"
|
|
end
|
|
|
|
def short_form_present_positive
|
|
dictionary
|
|
end
|
|
|
|
def short_form_present_negative
|
|
negative_stem + "ない"
|
|
end
|
|
|
|
def short_form_past_positive
|
|
te.all_but_last_character + TE_TA_DE_DA[te.last_character]
|
|
end
|
|
|
|
def short_form_past_negative
|
|
short_form_present_negative.all_but_last_character + "かった"
|
|
end
|
|
|
|
def desire
|
|
stem + "たい"
|
|
end
|
|
|
|
def potential
|
|
Ichidan.new(potential_starter.kanji, potential_starter.kana, "to be able #{definition}")
|
|
end
|
|
|
|
def excessive
|
|
Ichidan.new(stem.kanji + "すぎる", stem.kana + "すぎる", "#{definition} too much")
|
|
end
|
|
|
|
def volitional
|
|
negative_stem + "よう"
|
|
end
|
|
|
|
def passive
|
|
Ichidan.new(passive_starter.kanji, passive_starter.kana, "#{definition} (dissatisfied)")
|
|
end
|
|
|
|
class Ichidan < Verb
|
|
def stem
|
|
all_but_last_character
|
|
end
|
|
|
|
def negative_stem
|
|
stem
|
|
end
|
|
|
|
def te
|
|
all_but_last_character + "て"
|
|
end
|
|
|
|
def potential_starter
|
|
stem + "られる"
|
|
end
|
|
|
|
def ba
|
|
stem + "れば"
|
|
end
|
|
|
|
def passive_starter
|
|
stem + "られる"
|
|
end
|
|
end
|
|
|
|
class Godan < Verb
|
|
def iku?
|
|
dict.kanji == "行く"
|
|
end
|
|
|
|
def aru?
|
|
dict.kanji == "ある"
|
|
end
|
|
|
|
def stem
|
|
all_but_last_character + last_character("i")
|
|
end
|
|
|
|
def short_form_present_negative
|
|
return KanaKanji.new("ない") if aru?
|
|
|
|
super
|
|
end
|
|
|
|
def negative_stem
|
|
all_but_last_character + last_character("a")
|
|
end
|
|
|
|
def potential_starter
|
|
all_but_last_character + last_character("e") + "る"
|
|
end
|
|
|
|
def te
|
|
all_but_last_character + case last_character
|
|
when "う"
|
|
"って"
|
|
when "る"
|
|
"って"
|
|
when "つ"
|
|
"って"
|
|
when "す"
|
|
"して"
|
|
when "く"
|
|
iku? ? "って" : "いて"
|
|
when "ぐ"
|
|
"いで"
|
|
when "ぶ"
|
|
"んで"
|
|
when "む"
|
|
"んで"
|
|
when "ぬ"
|
|
"んで"
|
|
end
|
|
end
|
|
|
|
def volitional
|
|
all_but_last_character + last_character("o") + "う"
|
|
end
|
|
|
|
def ba
|
|
all_but_last_character + last_character("e") + "ば"
|
|
end
|
|
|
|
def passive_starter
|
|
all_but_last_character + last_character("a") + "れる"
|
|
end
|
|
end
|
|
|
|
class Suru < Verb
|
|
def prefix
|
|
dict[..-3]
|
|
end
|
|
|
|
def stem
|
|
prefix + "し"
|
|
end
|
|
|
|
def negative_stem
|
|
prefix + "し"
|
|
end
|
|
|
|
def te
|
|
prefix + "して"
|
|
end
|
|
|
|
def potential_starter
|
|
prefix + "できる"
|
|
end
|
|
|
|
def ba
|
|
prefix + "すれば"
|
|
end
|
|
|
|
def passive_starter
|
|
prefix + "される"
|
|
end
|
|
end
|
|
|
|
class Kuru < Verb
|
|
def prefix
|
|
dict[..-3]
|
|
end
|
|
|
|
def te
|
|
stem + "て"
|
|
end
|
|
|
|
def stem
|
|
prefix + KanaKanji.new("き", "来")
|
|
end
|
|
|
|
def negative_stem
|
|
prefix + KanaKanji.new("こ", "来")
|
|
end
|
|
|
|
def potential_starter
|
|
negative_stem + "られる"
|
|
end
|
|
|
|
def ba
|
|
prefix + KanaKanji.new("く", "来") + "れば"
|
|
end
|
|
|
|
def passive_starter
|
|
prefix + KanaKanji.new("こ", "来") + "られる"
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|