모듈:ja-verbconj
보이기
이 모듈에 대한 설명문서는 모듈:ja-verbconj/설명문서에서 만들 수 있습니다
local export = {}
local util = require("Module:ja-verbconj/util")
local data = require("Module:ja-verbconj/data")
function export.show(frame)
local lemma = mw.title.getCurrentTitle().text
local kana = util.extract_kana_from_template()
local type = util.extract_type_from_template()
if type == nil and kana == "" then
error("{{ja-verb}} 틀이 필요합니다.")
end
if type == "2" then
type = "ichidan"
end
if type == nil then
if kana == "" then
type = "1"
kana = lemma
end
end
if kana == "" then
kana = lemma
end
local romaji = util.kana_to_romaji(kana)
local conjugation_table_html = export.generate_conjugation_table(lemma, kana, romaji, type)
return conjugation_table_html
end
function export.generate_conjugation_table(lemma, kana, romaji, type)
local kana_only = not util.contains_kanji(lemma)
local is_kanji_suru = false
if kana_only then
if type == "suru" then
-- nothing to do here for kana-only suru lemma
end
else
if type == "suru" then
is_kanji_suru = true
if util.umatch(lemma, "する$") then
lemma = util.usub(lemma, 1, -3)
kana = util.usub(kana, 1, -3)
elseif util.umatch(lemma, "ずる$") then
lemma = util.usub(lemma, 1, -3)
kana = util.usub(kana, 1, -3)
else
if kana == "" then
kana = lemma
end
end
else
if kana == "" then
type = util.extract_type_from_template()
if type == nil then
type = "1"
end
kana = lemma
end
end
end
if type == "1" then
local final_kana = util.usub(kana, -1)
return export.generate_godan_table(lemma, kana, romaji, final_kana)
elseif type == "suru" then
return export.generate_suru_table(lemma, kana, romaji, kana_only, is_kanji_suru)
elseif type == "ichidan" then
return export.generate_ichidan_table(lemma, kana, romaji, kana_only)
else
error("지원되지 않는 동사 유형입니다: " .. type)
end
end
function export.generate_godan_table(lemma, kana, romaji, final_kana)
local endings = data.get_conjugation_endings("godan", final_kana)
if not endings then
error("5단 동사 '" .. final_kana .. "'에 대한 활용 어미를 찾을 수 없습니다.")
end
local stem_kana = util.extract_stem(kana)
local kana_only = not util.contains_kanji(lemma)
local rows = {
util.format_row('미연형(<span lang="ja" class="Jpan">未然形</span>)', lemma, stem_kana, endings.mi, false, kana_only),
util.format_row('연용형(<span lang="ja" class="Jpan">連用形</span>)', lemma, stem_kana, endings.yo, false, kana_only),
util.format_row('종지형(<span lang="ja" class="Jpan">終止形</span>)', lemma, stem_kana, endings.shu, false, kana_only),
util.format_row('연체형(<span lang="ja" class="Jpan">連体形</span>)', lemma, stem_kana, endings.ren, false, kana_only),
util.format_row('가정형(<span lang="ja" class="Jpan">仮定形</span>)', lemma, stem_kana, endings.ka, false, kana_only),
util.format_row('명령형(<span lang="ja" class="Jpan">命令形</span>)', lemma, stem_kana, endings.me, false, kana_only)
}
local core_expressions = {
util.format_row('수동형', lemma, stem_kana, endings.pass, false, kana_only),
util.format_row('사역형', lemma, stem_kana, endings.caus, false, kana_only),
util.format_row('가능형', lemma, stem_kana, endings.pot, false, kana_only),
util.format_row('의지 · 권유형', lemma, stem_kana, endings.vol, false, kana_only),
util.format_row('부정형', lemma, stem_kana, endings.neg, false, kana_only),
util.format_row('지속 부정형', lemma, stem_kana, endings.cont_neg, false, kana_only),
util.format_row('경어체', lemma, stem_kana, endings.polite, false, kana_only),
util.format_row('과거형', lemma, stem_kana, endings.past, false, kana_only),
util.format_row('접속형(て형)', lemma, stem_kana, endings.te, false, kana_only),
util.format_row('가정형', lemma, stem_kana, endings.conditional, false, kana_only)
}
return util.generate_base_table_html(lemma, util.concat(rows, "\n"), util.concat(core_expressions, "\n"), kana_only, false, "godan")
end
function export.generate_suru_table(lemma, kana, romaji, kana_only, is_kanji_suru)
local stem_kana
if kana_only then
stem_kana = kana
elseif is_kanji_suru then
stem_kana = kana
else
stem_kana = util.usub(kana, 1, -3)
end
local suru_type = util.determine_suru_type(stem_kana, lemma)
local endings = data.get_conjugation_endings("suru", suru_type)
if not endings then
error("する 동사 '" .. suru_type .. "'에 대한 활용 어미를 찾을 수 없습니다.")
end
local display_lemma
if suru_type == "zuru" then
display_lemma = lemma .. "ずる"
else
display_lemma = lemma .. "する"
end
local rows = {
util.format_row('미연형(<span lang="ja" class="Jpan">未然形</span>)', lemma, stem_kana, endings.mi, true, kana_only, suru_type),
util.format_row('연용형(<span lang="ja" class="Jpan">連用形</span>)', lemma, stem_kana, endings.yo, true, kana_only, suru_type),
util.format_row('종지형(<span lang="ja" class="Jpan">終止形</span>)', lemma, stem_kana, endings.shu, true, kana_only, suru_type),
util.format_row('연체형(<span lang="ja" class="Jpan">連体形</span>)', lemma, stem_kana, endings.ren, true, kana_only, suru_type),
util.format_row('가정형(<span lang="ja" class="Jpan">仮定形</span>)', lemma, stem_kana, endings.ka, true, kana_only, suru_type),
util.format_row('명령형(<span lang="ja" class="Jpan">命令形</span>)', lemma, stem_kana, endings.me, true, kana_only, suru_type)
}
local core_expressions = {
util.format_row('수동형', lemma, stem_kana, endings.pass, true, kana_only, suru_type),
util.format_row('사역형', lemma, stem_kana, endings.caus, true, kana_only, suru_type),
util.format_row('가능형', lemma, stem_kana, endings.pot, true, kana_only, suru_type),
util.format_row('의지 · 권유형', lemma, stem_kana, endings.vol, true, kana_only, suru_type),
util.format_row('부정형', lemma, stem_kana, endings.neg, true, kana_only, suru_type),
util.format_row('지속 부정형', lemma, stem_kana, endings.cont_neg, true, kana_only, suru_type),
util.format_row('경어체', lemma, stem_kana, endings.polite, true, kana_only, suru_type),
util.format_row('과거형', lemma, stem_kana, endings.past, true, kana_only, suru_type),
util.format_row('접속형(て형)', lemma, stem_kana, endings.te, true, kana_only, suru_type),
util.format_row('가정형', lemma, stem_kana, endings.conditional, true, kana_only, suru_type)
}
return util.generate_base_table_html(display_lemma, util.concat(rows, "\n"), util.concat(core_expressions, "\n"), kana_only, true, "suru")
end
function export.generate_ichidan_table(lemma, kana, romaji, kana_only)
local endings = data.get_conjugation_endings("ichidan")
if not endings then
error("1단 동사에 대한 활용 어미를 찾을 수 없습니다.")
end
local stem_kana = util.usub(kana, 1, -2)
local rows = {
util.format_row('미연형(<span lang="ja" class="Jpan">未然形</span>)', lemma, stem_kana, endings.mi .. "" , false, kana_only),
util.format_row('연용형(<span lang="ja" class="Jpan">連用形</span>)', lemma, stem_kana, endings.yo .. "" , false, kana_only),
util.format_row('종지형(<span lang="ja" class="Jpan">終止形</span>)', lemma, stem_kana, endings.shu, false, kana_only),
util.format_row('연체형(<span lang="ja" class="Jpan">連体形</span>)', lemma, stem_kana, endings.ren, false, kana_only),
util.format_row('가정형(<span lang="ja" class="Jpan">仮定形</span>)', lemma, stem_kana, endings.ka, false, kana_only),
util.format_row('명령형(<span lang="ja" class="Jpan">命令形</span>)', lemma, stem_kana, endings.me, false, kana_only)
}
local core_expressions = {
util.format_row('수동형', lemma, stem_kana, endings.pass, false, kana_only),
util.format_row('사역형', lemma, stem_kana, endings.caus, false, kana_only),
util.format_row('가능형', lemma, stem_kana, endings.pot, false, kana_only),
util.format_row('의지 · 권유형', lemma, stem_kana, endings.vol, false, kana_only),
util.format_row('부정형', lemma, stem_kana, endings.neg, false, kana_only),
util.format_row('지속 부정형', lemma, stem_kana, endings.cont_neg, false, kana_only),
util.format_row('경어체', lemma, stem_kana, endings.polite, false, kana_only),
util.format_row('과거형', lemma, stem_kana, endings.past, false, kana_only),
util.format_row('접속형(て형)', lemma, stem_kana, endings.te, false, kana_only),
util.format_row('가정형', lemma, stem_kana, endings.conditional, false, kana_only)
}
return util.generate_base_table_html(lemma, util.concat(rows, "\n"), util.concat(core_expressions, "\n"), kana_only, false, "ichidan")
end
return export