모듈:category tree/rhymes
외관
이 모듈에 대한 설명문서는 모듈:category tree/rhymes/설명문서에서 만들 수 있습니다
local labels = {}
local raw_categories = {}
local handlers = {}
local raw_handlers = {}
-----------------------------------------------------------------------------
-- --
-- 레이블 --
-- --
-----------------------------------------------------------------------------
labels["운율"] = {
description = "운율별 {{{langname}}} 단어 색인 목록.",
umbrella_parents = "기본",
parents = {{name = "{{{langcat}}}", raw = true}},
}
labels["refractory rhymes"] = {
description = "다른 단어와 운이 맞지 않는 {{{langname}}} 단어 목록.",
umbrella_parents = "언어별 운율 하위 분류",
parents = {"운율"},
}
-----------------------------------------------------------------------------
-- --
-- 원시(RAW) 분류 --
-- --
-----------------------------------------------------------------------------
raw_categories["언어별 운율 하위 분류"] = {
description = "운율과 관련된 주제를 다루는 포괄 분류.",
additional = "{{{umbrella_meta_msg}}}",
parents = {
"포괄 메타분류",
{name = "운율", is_label = true, sort = " "},
},
}
raw_categories["운율"] = {
description = "언어별 운율을 다루는 포괄 분류.",
additional = "{{{umbrella_meta_msg}}}",
parents = {
"포괄 메타분류",
{name = "운율", is_label = true, sort = " "},
},
}
-----------------------------------------------------------------------------
-- --
-- 핸들러 --
-- --
-----------------------------------------------------------------------------
table.insert(handlers, function(data)
local rhyme_beginning = data.label:match("^운율/(.-)%-$")
if rhyme_beginning then
return {
description = ("{{IPAchar|/%s/}}(으)로 시작하는 {{{langname}}} 운율 색인."):format(rhyme_beginning),
additional = "이 분류의 항목들은 사전 항목이 아니라, 특정 방식으로 운이 맞는 {{{langname}}} 낱말의 색인입니다.",
parents = {
{name = "rhymes", sort = rhyme_beginning},
},
breadcrumb = {name = ("{{IPAchar|/%s-/}}"):format(rhyme_beginning), nocap = true},
umbrella = false,
}
end
end)
-----------------------------------------------------------------------------
-- --
-- 원시(RAW) 핸들러 --
-- --
-----------------------------------------------------------------------------
table.insert(raw_handlers, function(data)
local function rhymeTopCategory(lang)
return {
lang = lang:getCode(),
description = lang:makeCategoryLink() .. " 단어의 운율별 목록.",
additional = "이것은 포괄 분류입니다. 사전 항목을 포함하지 않으며, 하위 분류로 가능한 운율들만 포함합니다.",
parents = {
"{{{langcat}}}",
{name = "운율", sort = lang:getCanonicalName()},
},
breadcrumb = "운율",
toctemplateprefix = "rhymetop"
}
end
local function linkRhymeIfExists(lang, rhyme)
if mw.title.new('운율:' .. lang:getCanonicalName() .. "/" .. rhyme).exists then
return "'''[[운율:" .. lang:getCanonicalName() .. "/" .. rhyme ..'|<span class="IPA">-' .. rhyme .. "</span>]]'''"
end
return '<span class="IPA">-' .. rhyme .. '</span>'
end
local function rhymeCategory(lang, rhyme)
return {
lang = lang:getCode(),
description = linkRhymeIfExists(lang, rhyme) .. " 운율을 가진 " .. lang:makeCategoryLink() .. " 단어 목록.",
parents = {
{name = "운율:" .. lang:getCanonicalName(), sort = rhyme},
},
breadcrumb = '<span class="IPA">-' .. rhyme .. '</span>',
displaytitle = '운율:' .. lang:getCanonicalName() .. '/<span class="IPA">' .. rhyme .. '</span>'
}
end
local function rhymeSyllableCountCategory(lang, rhyme, syllableCount)
return {
lang = lang:getCode(),
description = syllableCount .. "음절 " .. lang:makeCategoryLink() .. " 단어 중 " .. linkRhymeIfExists(lang, rhyme) .. " 운율을 가진 단어 목록.",
parents = {
{name = "운율:" .. lang:getCanonicalName() .. "/" .. rhyme, sort = syllableCount},
},
breadcrumb = tostring(syllableCount) .. "음절",
displaytitle = '운율:' .. lang:getCanonicalName() .. '/<span class="IPA">' .. rhyme .. '</span>/' .. tostring(syllableCount) .. "음절"
}
end
local langname = data.category:match("^운율:([^/]+)")
if langname then
local lang = require("Module:languages").getByCanonicalName(langname)
if lang then
local tokens = mw.text.split(data.category, "/")
if #tokens > 1 then
local rhyme = tokens[2]
if #tokens == 3 then
-- 운율 + 음절 수 분류
local syllables = nil
if tokens[3] == "1음절" then
syllables = 1
else
local syllablesregex = tokens[3]:match("(%d+)음절")
if syllablesregex then
syllables = tonumber(syllablesregex)
if syllables < 2 then
syllables = nil
end
end
end
if syllables then
return rhymeSyllableCountCategory(lang, rhyme, syllables)
end
elseif #tokens == 2 then
-- 운율 분류
return rhymeCategory(lang, rhyme)
end
else
-- 언어별 최상위 운율 분류
return rhymeTopCategory(lang)
end
end
end
end)
return {LABELS = labels, RAW_CATEGORIES = raw_categories, HANDLERS = handlers, RAW_HANDLERS = raw_handlers}