모듈:ja-verbconj/util
보이기
이 모듈에 대한 설명문서는 모듈:ja-verbconj/util/설명문서에서 만들 수 있습니다
local export = {}
export.ulen = mw.ustring.len
export.usub = mw.ustring.sub
export.umatch = mw.ustring.match
export.ugmatch = mw.ustring.gmatch
export.toNFC = mw.ustring.toNFC
export.toNFD = mw.ustring.toNFD
export.concat = table.concat
local tr_module = require("Module:Hrkt-translit")
local range_module = require("Module:ja/data/range")
local m_str_utils = require("Module:string utilities")
function export.clean_kana_input(text)
return m_str_utils.gsub(text, "[ '%-.]+", "")
end
function export.kana_to_romaji(kana)
local processable_kana = mw.ustring.gsub(kana, "%.", " ")
local romaji_with_space = tr_module.tr(processable_kana, "ja")
return mw.ustring.gsub(romaji_with_space, " ", "")
end
function export.extract_stem(kana)
return export.usub(kana, 1, -2)
end
function export.contains_kanji(word)
return export.umatch(word, "[" .. range_module.kanji .. "]") ~= nil
end
function export.determine_suru_type(stem, lemma)
local page_title = mw.title.getCurrentTitle().text
if page_title:find("ずる") then
return "zuru"
end
local last_char = export.usub(stem, -1)
if last_char == "っ" then
return "suru-tsu"
else
return "general"
end
end
function export.extract_kana_from_template()
local content = mw.title.getCurrentTitle():getContent()
if content then
for template in export.ugmatch(content, "{{ja%-verb|(.-)}}") do
local params = mw.text.split(template, "|")
for i, param in ipairs(params) do
if not param:find("=") then
return mw.text.trim(param)
end
end
end
end
return ""
end
function export.extract_type_from_template()
local content = mw.title.getCurrentTitle():getContent()
if content then
for template in export.ugmatch(content, "{{ja%-verb|(.-)}}") do
for param in mw.text.gsplit(template, "|") do
local type = export.umatch(param, "type=(%w+)")
if type then
return type
end
end
end
end
return nil
end
function export.format_row(label, lemma, stem_kana, ending, is_suru, kana_only, suru_type)
local ending_parts = mw.text.split(ending, "<br>")
local kana_full_list = {}
local romaji_full_list = {}
local lemma_combined_list = {}
for _, part in ipairs(ending_parts) do
local full_kana_raw = stem_kana .. part
local full_kana_clean = export.clean_kana_input(full_kana_raw)
local part_romaji = export.kana_to_romaji(full_kana_raw)
local part_lemma = is_suru and (lemma .. part) or (export.usub(lemma, 1, -2) .. part)
local part_kana_for_annotation = full_kana_clean
if label:match("명령형") then
if is_suru then
if suru_type == "suru-tsu" then
if part == "せよ" then part_lemma = part_lemma .. "<sup>1</sup>"; part_kana_for_annotation = part_kana_for_annotation .. "<sup>1</sup>"; part_romaji = part_romaji .. "<sup>1</sup>"; end
if part == "しろ" then part_lemma = part_lemma .. "<sup>2</sup>"; part_kana_for_annotation = part_kana_for_annotation .. "<sup>2</sup>"; part_romaji = part_romaji .. "<sup>2</sup>"; end
elseif suru_type == "zuru" then
if part == "ぜよ" then part_lemma = part_lemma .. "<sup>1</sup>"; part_kana_for_annotation = part_kana_for_annotation .. "<sup>1</sup>"; part_romaji = part_romaji .. "<sup>1</sup>"; end
if part == "じろ" then part_lemma = part_lemma .. "<sup>2</sup>"; part_kana_for_annotation = part_kana_for_annotation .. "<sup>2</sup>"; part_romaji = part_romaji .. "<sup>2</sup>"; end
elseif suru_type == "general" then
if part == "せよ" then part_lemma = part_lemma .. "<sup>1</sup>"; part_kana_for_annotation = part_kana_for_annotation .. "<sup>1</sup>"; part_romaji = part_romaji .. "<sup>1</sup>"; end
if part == "しろ" then part_lemma = part_lemma .. "<sup>2</sup>"; part_kana_for_annotation = part_kana_for_annotation .. "<sup>2</sup>"; part_romaji = part_romaji .. "<sup>2</sup>"; end
end
else
if part == "よ" then
part_lemma = part_lemma .. "<sup>1</sup>"
part_kana_for_annotation = part_kana_for_annotation .. "<sup>1</sup>"
part_romaji = part_romaji .. "<sup>1</sup>"
elseif part == "ろ" then
part_lemma = part_lemma .. "<sup>2</sup>"
part_kana_for_annotation = part_kana_for_annotation .. "<sup>2</sup>"
part_romaji = part_romaji .. "<sup>2</sup>"
end
end
elseif label:match("가능형") and not is_suru then
if part == "れる" then
part_lemma = part_lemma .. "<sup>3</sup>"
part_kana_for_annotation = part_kana_for_annotation .. "<sup>3</sup>"
part_romaji = part_romaji .. "<sup>3</sup>"
end
end
table.insert(kana_full_list, part_kana_for_annotation)
table.insert(romaji_full_list, part_romaji)
table.insert(lemma_combined_list, part_lemma)
end
local kana_combined = export.concat(kana_full_list, "<br>")
local romaji_combined = export.concat(romaji_full_list, "<br>")
local lemma_combined_str = export.concat(lemma_combined_list, "<br>")
local row_content
if kana_only then
row_content = string.format(
[=[<th style="width: 25%%;">%s</th><td style="width: 37.5%%;"><span class="Jpan" lang="ja-Jpan">%s</span></td><td style="width: 37.5%%;"><i><span class="Latn" lang="ja-Latn">%s</span></i></td>]=],
label, kana_combined, romaji_combined
)
else
row_content = string.format(
[=[<th style="width: 25%%;">%s</th><td style="width: 25%%;"><span class="Jpan" lang="ja-Jpan">%s</span></td><td style="width: 25%%;"><span class="Jpan" lang="ja-Jpan"">%s</span></td><td style="width: 25%%;"><i><span class="Latn" lang="ja-Latn">%s</span></i></td>]=],
label, lemma_combined_str, kana_combined, romaji_combined
)
end
return "<tr>" .. row_content .. "</tr>"
end
function export.generate_base_table_html(display_lemma, rows_html, core_expressions_html, kana_only, is_suru_verb_type, verb_type_string)
local table_header_cells
if kana_only then
table_header_cells = '<th colspan="3">어간 형태</th>'
else
table_header_cells = '<th colspan="4">어간 형태</th>'
end
local core_header_cells = table_header_cells:gsub("어간 형태", "핵심 표현")
local table_template_suffix = ""
if is_suru_verb_type then
table_template_suffix = '<p>¹ <small>문어체</small> ² <small>구어체</small></p>'
elseif verb_type_string == "ichidan" then
table_template_suffix = '<p>¹ <small>문어체</small> ² <small>구어체</small> ³ <small>구어체 가능형</small></p>'
end
local table_template = [=[<div class="NavFrame" style="border:0px;"><div class="NavHead" align="left" style="font-weight:bold; border:1px solid darkgrey; margin-left:-1px; background-color: var(--nav-head-background, #EAECF0); color: var(--nav-head-text-color, #000000);"><span class="Jpan" lang="ja-Jpan" style="font-size:120%%;">"%s"</span>의 동사 활용 ([[부록:일본어 동사|부록:일본어 동사]])</div><div class="NavContent" style="font-size:105%%;"><table class="wikitable" style="margin-top: 0; text-align: center; width: 100%%; color: var(--table-text-color, #000000); background: var(--table-background-color, #FFFFFF);" rules="all"><tr>%s</tr>%s<tr>%s</tr>%s</table>%s</div></div>]=]
return string.format(table_template, display_lemma, table_header_cells, rows_html, core_header_cells, core_expressions_html, table_template_suffix)
end
return export