본문으로 이동

모듈: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}