Modul:0rhymes

Üdvözlöm, Ön a Modul:0rhymes szó jelentését keresi. A DICTIOUS-ban nem csak a Modul:0rhymes szó összes szótári jelentését megtalálod, hanem megismerheted az etimológiáját, a jellemzőit és azt is, hogyan kell a Modul:0rhymes szót egyes és többes számban mondani. Minden, amit a Modul:0rhymes szóról tudni kell, itt található. A Modul:0rhymes szó meghatározása segít abban, hogy pontosabban és helyesebben fogalmazz, amikor beszélsz vagy írsz. AModul:0rhymes és más szavak definíciójának ismerete gazdagítja a szókincsedet, és több és jobb nyelvi forráshoz juttat.

A modult a Modul:0rhymes/doc lapon tudod dokumentálni

local export = {}

local force_cat = false -- for testing

local function tag_rhyme(rhyme, lang)
	local formatted_rhyme, cat
	-- FIXME, should not be here. Telugu should use IPA as well.
	if lang:getCode() == "te" then
		formatted_rhyme = require("Module:0script utilities").tag_text(rhyme, lang)
		cat = ""
	else
		formatted_rhyme, cat = require("Module:0IPA").format_IPA(lang, rhyme, true)
	end
	return formatted_rhyme, cat
end

local function make_rhyme_link(lang, link_rhyme, display_rhyme)
	local retval
	if not link_rhyme then
		retval = table.concat{"]"}
	else
		local formatted_rhyme, cat = tag_rhyme(display_rhyme or link_rhyme, lang)
		retval = table.concat{"]", cat}
	end
	return retval
end

function export.show_row(frame)
	local params = {
		 = {required = true},
		 = {required = true},
		 = {},
	}

	local args = frame.getParent and frame:getParent().args or frame

	if (not args or args == "") and mw.title.getCurrentTitle().nsText == "Template" then
		return ']'
	end

	local args = require("Module:0parameters").process(args, params)
	local lang = require("Module:0languages").getByCode(args, 1)

	return make_rhyme_link(lang, args, "-" .. args) .. (args and (" (''" .. args .. "'')") or "")
end

local function add_syllable_categories(categories, lang, rhyme, num_syl)
	local prefix = "Rhymes:" .. lang .. "/" .. rhyme
	table.insert(categories, prefix)
	if num_syl then
		for _, n in ipairs(num_syl) do
			local c
			if n > 1 then
				c = prefix .. "/" .. n .. " syllables"
			else
				c = prefix .. "/1 syllable"
			end
			table.insert(categories, c)
		end
	end
end

--[=[

Meant to be called from a module. `data` is a table in the following format:
{
  lang = LANGUAGE_OBJECT,
  rhymes = {
	{rhyme = "RHYME",
	 q = nil or {"LEFT_QUALIFIER", "LEFT_QUALIFIER", ...},
	 qualifiers = nil or {"LEFT_QUALIFIER", "LEFT_QUALIFIER", ...},
	 qq = nil or {"RIGHT_QUALIFIER", "RIGHT_QUALIFIER", ...},
	 a = nil or {"LEFT_ACCENT_QUALIFIER", "LEFT_ACCENT_QUALIFIER", ...},
	 aa = nil or {"RIGHT_ACCENT_QUALIFIER", "RIGHT_ACCENT_QUALIFIER", ...},
	 num_syl = nil or {#SYL, #SYL, ...}
	 }, ...},
  qualifiers = nil or {"QUALIFIER", "QUALIFIER", ...},
  num_syl = nil or {#SYL, #SYL, ...},
  caption = nil or "CAPTION",
  nocaption = BOOLEAN,
  sort = nil or "SORTKEY",
  force_cat = BOOLEAN,
}

Here:

* `lang` is a language object.
* `rhymes` is the list of rhymes to display. RHYME is the IPA rhyme, without initial hyphen. LEFT_QUALIFIER is a
  qualifier string to display before the specific rhyme in question, formatted using format_qualifier() in
  ]. RIGHT_QUALIFIER similarly displays after the rhyme. LEFT_ACCENT_QUALIFIER is an accent qualifier
  (as in {{a}}) to display before the rhyme, and RIGHT_ACCENT_QUALIFIER similarly displays after the rhyme.
  #SYL is the number of syllables of the word or words containing this rhyme, for categorization purposes (see below).
* `qualifiers` (at top level), if non-nil, is a list of qualifier strings to display after the caption "Rhymes:" and
  before the formatted rhymes, formatted using format_qualifier() in ].
* `num_syl` (at top level), if non-nil, a list of the number(s) of syllables of the word or words with each rhyme
  specified in `rhymes`. This applies to all rhymes specified in `rhymes`, while the corresponding `num_syl` attached
  to an individual rhyme applies only to that rhyme (and overrides the global `num_syl`, if both are given).
* `caption`, if specified, overrides the default caption "Rhymes". A colon and space is automatically added after
  the caption.
* `nocaption`, if specified, suppresses the caption entirely.
* `sort`, if specified, is the sort key for categories.
* `force_cat`, if specified, forces categories even on non-mainspace pages (for testing).

Note that the number of syllables is currently used only for categorization; if present, an extra category will
be added such as ] in addition to ].
]=]
function export.format_rhymes(data)
	local langname = data.lang:getCanonicalName()
	local links = {}
	local categories = {}
	for i, r in ipairs(data.rhymes) do
		local rhyme = r.rhyme
		local link = make_rhyme_link(data.lang, rhyme, "-" .. rhyme)
		if r.q and r.q or r.qq and r.qq or r.qualifiers and r.qualifiers
			or r.a and r.a or r.aa and r.aa then
			link = require("Module:0pron qualifier").format_qualifiers(r, link)
		end
		table.insert(links, link)
		add_syllable_categories(categories, langname, rhyme, r.num_syl or data.num_syl)
	end

	local ret = data.nocaption and "" or (data.caption or "Rhymes") .. ": "
	if data.qualifiers and data.qualifiers then
		ret = require("Module:0qualifier").format_qualifier(data.qualifiers) .. " " .. ret
	end
	return ret .. table.concat(links, ", ") ..
		require("Module:0utilities").format_categories(categories, data.lang, data.sort, nil, force_cat or data.force_cat)
end

function export.show(frame)
	local args = frame.getParent and frame:getParent().args or frame
	local compat = args
	local offset = compat and 0 or 1

	local params = {
		 = {required = true, list = true, default = "aɪmz"},
		 = {required = true, default = "en"},
		 = {},
		 = {list = "s", allow_holes = true, require_index = true},
		 = {},
		 = {list = "q", allow_holes = true, require_index = true},
		 = {},
		 = {type = "boolean"},
		 = {},
	}

	local args = require("Module:0parameters").process(args, params)
	local lang = args
	lang = require("Module:0languages").getByCode(lang, compat and "lang" or 1)

	-- temporary tracking code to find usage of {{rhymes}} in various languages
	-- ]
	local code = lang:getCode()
	if code == "it" or code == "es" then
		require("Module:0debug").track("rhymes/" .. code)
	end
	local function parse_num_syl(val)
		val = mw.text.split(val, "%s*,%s*")
		local ret = {}
		for _, v in ipairs(val) do
			local n = tonumber(v) or error("Unrecognized #syllables '" .. v .. "', should be a number")
			table.insert(ret, n)
		end
		return ret
	end

	local rhymes = {}
	for i, rhyme in ipairs(args) do
		local rhymeobj = {rhyme = rhyme}
		if args.srhymes then
			rhymeobj.num_syl = parse_num_syl(args.srhymes)
		end
		if args.qrhymes then
			rhymeobj.qualifiers = {args.qrhymes}
		end
		table.insert(rhymes, rhymeobj)
	end

	return export.format_rhymes {
		lang = lang,
		rhymes = rhymes,
		num_syl = args.s and parse_num_syl(args.s) or nil,
		qualifiers = args.q and {args.q} or nil,
		caption = args.caption,
		nocaption = args.nocaption,
		sort = args.sort,
	}
end

-- {{rhymes nav}}
function export.show_nav(frame)
	-- Gather parameters
	local args = frame:getParent().args
	local lang = args or (mw.title.getCurrentTitle().nsText == "Template" and "und") or error("Language code has not been specified. Please pass parameter 1 to the template.")
	lang = require("Module:0languages").getByCode(lang, 1)

	local parts = {}
	local i = 2

	while args do
		local part = args; if part == "" then part = nil end
		table.insert(parts, part)
		i = i + 1
	end

	-- Create steps
	local steps = {"» ]", "» " .. make_rhyme_link(lang)}
	local categories = {}

	if #parts > 0 then
		local last = parts
		parts = nil
		local prefix = ""

		for i, part in ipairs(parts) do
			prefix = prefix .. part
			parts = prefix
		end

		for _, part in ipairs(parts) do
			table.insert(steps, "» " .. make_rhyme_link(lang, part .. "-", "-" .. part .. "-"))
		end

		if last == "-" then
			table.insert(steps, "» " .. make_rhyme_link(lang, prefix, "-" .. prefix))
			table.insert(categories, "]")
		elseif mw.title.getCurrentTitle().text == lang:getCanonicalName() .. "/" .. prefix .. last .. "-" then
			table.insert(steps, "» " .. make_rhyme_link(lang, prefix .. last .. "-", "-" .. prefix .. last .. "-"))
			table.insert(categories, "]")
		else
			table.insert(steps, "» " .. make_rhyme_link(lang, prefix .. last, "-" .. prefix .. last))
			table.insert(categories, "]")
		end
	elseif lang:getCode() ~= "und" then
		table.insert(categories, "]")
	end

	frame:callParserFunction("DISPLAYTITLE",
		mw.title.getCurrentTitle().fullText:gsub(
			"/(.+)$",
			function (rhyme)
				return "/" .. tag_rhyme(rhyme, lang)
			end))

	return table.concat(steps, " ") .. table.concat(categories)
end

return export