ika_conjugations/lib/ika_conjugations/verb.rb
2025-08-18 06:30:26 -04:00

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