Module:category tree/poscatboiler/data/rhymes

local labels = {} local raw_categories = {} local handlers = {} local raw_handlers = {}

- --                                                                        -- --                                  LABELS                                 -- --                                                                        -- -

labels["rhymes"] = { description = "List of indexes of words by their rhymes.", umbrella_parents = "Fundamental", parents = , }

labels["refractory rhymes"] = { description = "Lists of words that don't rhyme with other words.", umbrella_parents = "Rhymes subcategories by language", parents = {"rhymes"}, }

- --                                                                        -- --                              RAW CATEGORIES                             -- --                                                                        -- -

raw_categories["Rhymes subcategories by language"] = { description = "Umbrella categories covering topics related to rhymes.", additional = "", parents = { "Umbrella metacategories", {name = "rhymes", is_label = true, sort = " "}, }, }

raw_categories["Rhymes"] = { description = "Umbrella categories covering rhymes by language.", additional = "", parents = { "Umbrella metacategories", {name = "rhymes", is_label = true, sort = " "}, }, }

- --                                                                        -- --                                 HANDLERS                                -- --                                                                        -- -

table.insert(handlers, function(data)	local rhyme_beginning = data.label:match("^rhymes/(.-)%-$")	if rhyme_beginning then		return {			description = (" rhyme indexes beginning with ."):format(rhyme_beginning),			additional = "The entries in this category are not dictionary entries, but rather indexes of terms that rhyme in specific ways.",			parents = {				{name = "rhymes", sort = rhyme_beginning},			},			breadcrumb = {name = (""):format(rhyme_beginning), nocap = true},			umbrella = false,		}	end end)

- --                                                                        -- --                               RAW HANDLERS                              -- --                                                                        -- -

table.insert(raw_handlers, function(data)	local function rhymeTopCategory(lang)		return {			lang = lang:getCode,			description = "Lists of " .. lang:makeCategoryLink .. " words by their rhymes.",			additional = "This is an umbrella category. It contains no dictionary entries, but rather possible rhymes as subcategories.",			parents = {				"",				{name = "Rhymes", sort = langname},			},			breadcrumb = "Rhymes",			toctemplateprefix = "rhymetop"		}	end	local function linkRhymeIfExists(lang, rhyme) -- 		if mw.title.new('Rhymes:' .. lang:getCanonicalName .. "/" .. rhyme).exists then			return " -' .. rhyme .. " "		end		return ' -' .. rhyme .. ' '	end	local function rhymeCategory(lang, rhyme)		return {			lang = lang:getCode,			description = "List of " .. lang:makeCategoryLink .. ' words with the rhyme ' .. linkRhymeIfExists(lang, rhyme) .. '.',			parents = {				{name = "Rhymes:" .. lang:getCanonicalName, sort = rhyme},			},			breadcrumb = ' -' .. rhyme .. ' ',			displaytitle = 'Rhymes:' .. lang:getCanonicalName .. '/ ' .. rhyme .. ' '		}	end	local function rhymeSyllableCountCategory(lang, rhyme, syllableCount)		return {			lang = lang:getCode,			description = "List of " .. syllableCount .. "-syllable " .. lang:makeCategoryLink .. ' words with the rhyme ' .. linkRhymeIfExists(lang, rhyme) .. '.',			parents = {				{name = "Rhymes:" .. lang:getCanonicalName .. "/" .. rhyme, sort = syllableCount}, },			breadcrumb = tostring(syllableCount) .. " syllables", displaytitle = 'Rhymes:' .. lang:getCanonicalName .. '/ ' .. rhyme .. ' /' .. tostring(syllableCount) .. " syllable" .. (syllableCount > 1 and "s" or "") }	end local langname = data.category:match("^Rhymes:([^/]+)") 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 -- rhyme + syllable count category local syllables = nil if tokens[3] == "1 syllable" then syllables = 1 else local syllablesregex = tokens[3]:match("(%d+) syllables") 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 -- rhyme category return rhymeCategory(lang, rhyme) end else -- rhyme language top category return rhymeTopCategory(lang) end end end end)

return {LABELS = labels, RAW_CATEGORIES = raw_categories, HANDLERS = handlers, RAW_HANDLERS = raw_handlers}