Module:category tree/poscatboiler/data/rhymes

Hello, you have come here looking for the meaning of the word Module:category tree/poscatboiler/data/rhymes. In DICTIOUS you will not only get to know all the dictionary meanings for the word Module:category tree/poscatboiler/data/rhymes, but we will also tell you about its etymology, its characteristics and you will know how to say Module:category tree/poscatboiler/data/rhymes in singular and plural. Everything you need to know about the word Module:category tree/poscatboiler/data/rhymes you have here. The definition of the word Module:category tree/poscatboiler/data/rhymes will help you to be more precise and correct when speaking or writing your texts. Knowing the definition ofModule:category tree/poscatboiler/data/rhymes, as well as those of other words, enriches your vocabulary and provides you with more and better linguistic resources.

This data submodule defines part of Wiktionary's category structure.

For an introduction to the poscatboiler system and a description of how to add or modify categories, see Module:category tree/poscatboiler/data/documentation.


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



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


labels = {
	description = "List of indexes of {{{langname}}} words by their rhymes.",
	umbrella_parents = "Fundamental",
	parents = {{name = "{{{langcat}}}", raw = true}},
}

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



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


raw_categories = {
	description = "Umbrella categories covering topics related to rhymes.",
	additional = "{{{umbrella_meta_msg}}}",
	parents = {
		"Umbrella metacategories",
		{name = "rhymes", is_label = true, sort = " "},
	},
}


raw_categories = {
	description = "Umbrella categories covering rhymes by language.",
	additional = "{{{umbrella_meta_msg}}}",
	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 = ("{{{langname}}} rhyme indexes beginning with {{IPAchar|/%s/}}."):format(rhyme_beginning),
			additional = "The entries in this category are not dictionary entries, but rather indexes of {{{langname}}} terms that rhyme in specific ways.",
			parents = {
				{name = "rhymes", sort = rhyme_beginning},
			},
			breadcrumb = {name = ("{{IPAchar|/%s-/}}"):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 = {
				"{{{langcat}}}",
				{name = "Rhymes", sort = langname},
			},
			breadcrumb = "Rhymes",
			toctemplateprefix = "rhymetop"
		}
	end
	
	local function linkRhymeIfExists(lang, rhyme) -- {{change new|Though this could be ported to Wiktionary}}
		if mw.title.new('Rhymes:' .. lang:getCanonicalName() .. "/" .. rhyme).exists then
			return "''']'''"
		end
		return '<span class="IPA">-' .. rhyme .. '</span>'
	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 = '<span class="IPA">-' .. rhyme .. '</span>',
			displaytitle = 'Rhymes:' .. lang:getCanonicalName() .. '/<span class="IPA">' .. rhyme .. '</span>'
		}
	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() .. '/<span class="IPA">' .. rhyme .. '</span>/' .. 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
				if #tokens == 3 then
					-- rhyme + syllable count category
					local syllables = nil
					if tokens == "1 syllable" then
						syllables = 1
					else
						local syllablesregex = tokens: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}