<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://test.st34an.tech/index.php?action=history&amp;feed=atom&amp;title=Module%3ARhymes</id>
	<title>Module:Rhymes - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://test.st34an.tech/index.php?action=history&amp;feed=atom&amp;title=Module%3ARhymes"/>
	<link rel="alternate" type="text/html" href="https://test.st34an.tech/index.php?title=Module:Rhymes&amp;action=history"/>
	<updated>2026-04-10T22:44:03Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://test.st34an.tech/index.php?title=Module:Rhymes&amp;diff=337&amp;oldid=prev</id>
		<title>Jsrs701: 1 revision imported</title>
		<link rel="alternate" type="text/html" href="https://test.st34an.tech/index.php?title=Module:Rhymes&amp;diff=337&amp;oldid=prev"/>
		<updated>2026-04-10T07:29:40Z</updated>

		<summary type="html">&lt;p&gt;1 revision imported&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 07:29, 10 April 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;4&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff cache key mediawikidb:diff:1.41:old-336:rev-337 --&gt;
&lt;/table&gt;</summary>
		<author><name>Jsrs701</name></author>
	</entry>
	<entry>
		<id>https://test.st34an.tech/index.php?title=Module:Rhymes&amp;diff=336&amp;oldid=prev</id>
		<title>bob&gt;Juelos: Changed category format</title>
		<link rel="alternate" type="text/html" href="https://test.st34an.tech/index.php?title=Module:Rhymes&amp;diff=336&amp;oldid=prev"/>
		<updated>2024-08-23T09:00:38Z</updated>

		<summary type="html">&lt;p&gt;Changed category format&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local export = {}&lt;br /&gt;
&lt;br /&gt;
local force_cat = false -- for testing&lt;br /&gt;
&lt;br /&gt;
local function tag_rhyme(rhyme, lang)&lt;br /&gt;
	local formatted_rhyme, cat&lt;br /&gt;
	-- FIXME, should not be here. Telugu should use IPA as well.&lt;br /&gt;
	if lang:getCode() == &amp;quot;te&amp;quot; then&lt;br /&gt;
		formatted_rhyme = require(&amp;quot;Module:script utilities&amp;quot;).tag_text(rhyme, lang)&lt;br /&gt;
		cat = &amp;quot;&amp;quot;&lt;br /&gt;
	else&lt;br /&gt;
		formatted_rhyme, cat = require(&amp;quot;Module:IPA&amp;quot;).format_IPA(lang, rhyme, true)&lt;br /&gt;
	end&lt;br /&gt;
	return formatted_rhyme, cat&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function make_rhyme_link(lang, link_rhyme, display_rhyme)&lt;br /&gt;
	local retval&lt;br /&gt;
	if not link_rhyme then&lt;br /&gt;
		retval = table.concat{&amp;quot;[[:Category:Rhymes:&amp;quot;, lang:getCanonicalName(), &amp;quot;|&amp;quot;, lang:getCanonicalName(), &amp;quot;]]&amp;quot;}&lt;br /&gt;
	else&lt;br /&gt;
		local formatted_rhyme, cat = tag_rhyme(display_rhyme or link_rhyme, lang)&lt;br /&gt;
		retval = table.concat{&amp;quot;[[:Category:Rhymes:&amp;quot;, lang:getCanonicalName(), &amp;quot;/&amp;quot;, link_rhyme, &amp;quot;|&amp;quot;, formatted_rhyme, &amp;quot;]]&amp;quot;, cat}&lt;br /&gt;
	end&lt;br /&gt;
	return retval&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function export.show_row(frame)&lt;br /&gt;
	local params = {&lt;br /&gt;
		[1] = {required = true},&lt;br /&gt;
		[2] = {required = true},&lt;br /&gt;
		[3] = {},&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	local args = frame.getParent and frame:getParent().args or frame&lt;br /&gt;
&lt;br /&gt;
	if (not args[1] or args[1] == &amp;quot;&amp;quot;) and mw.title.getCurrentTitle().nsText == &amp;quot;Template&amp;quot; then&lt;br /&gt;
		return &amp;#039;[[Rhymes:English/aɪmz|&amp;lt;span class=&amp;quot;IPA&amp;quot;&amp;gt;-aɪmz&amp;lt;/span&amp;gt;]]&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local args = require(&amp;quot;Module:parameters&amp;quot;).process(args, params)&lt;br /&gt;
	local lang = require(&amp;quot;Module:languages&amp;quot;).getByCode(args[1], 1)&lt;br /&gt;
&lt;br /&gt;
	return make_rhyme_link(lang, args[2], &amp;quot;-&amp;quot; .. args[2]) .. (args[3] and (&amp;quot; (&amp;#039;&amp;#039;&amp;quot; .. args[3] .. &amp;quot;&amp;#039;&amp;#039;)&amp;quot;) or &amp;quot;&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function add_syllable_categories(categories, lang, rhyme, num_syl)&lt;br /&gt;
	local prefix = &amp;quot;Rhymes:&amp;quot; .. lang .. &amp;quot;/&amp;quot; .. rhyme&lt;br /&gt;
	table.insert(categories, prefix)&lt;br /&gt;
	if num_syl then&lt;br /&gt;
		for _, n in ipairs(num_syl) do&lt;br /&gt;
			local c&lt;br /&gt;
			if n &amp;gt; 1 then&lt;br /&gt;
				c = prefix .. &amp;quot;/&amp;quot; .. n .. &amp;quot; syllables&amp;quot;&lt;br /&gt;
			else&lt;br /&gt;
				c = prefix .. &amp;quot;/1 syllable&amp;quot;&lt;br /&gt;
			end&lt;br /&gt;
			table.insert(categories, c)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[=[&lt;br /&gt;
&lt;br /&gt;
Meant to be called from a module. `data` is a table in the following format:&lt;br /&gt;
{&lt;br /&gt;
  lang = LANGUAGE_OBJECT,&lt;br /&gt;
  rhymes = {&lt;br /&gt;
	{rhyme = &amp;quot;RHYME&amp;quot;,&lt;br /&gt;
	 q = nil or {&amp;quot;LEFT_QUALIFIER&amp;quot;, &amp;quot;LEFT_QUALIFIER&amp;quot;, ...},&lt;br /&gt;
	 qualifiers = nil or {&amp;quot;LEFT_QUALIFIER&amp;quot;, &amp;quot;LEFT_QUALIFIER&amp;quot;, ...},&lt;br /&gt;
	 qq = nil or {&amp;quot;RIGHT_QUALIFIER&amp;quot;, &amp;quot;RIGHT_QUALIFIER&amp;quot;, ...},&lt;br /&gt;
	 a = nil or {&amp;quot;LEFT_ACCENT_QUALIFIER&amp;quot;, &amp;quot;LEFT_ACCENT_QUALIFIER&amp;quot;, ...},&lt;br /&gt;
	 aa = nil or {&amp;quot;RIGHT_ACCENT_QUALIFIER&amp;quot;, &amp;quot;RIGHT_ACCENT_QUALIFIER&amp;quot;, ...},&lt;br /&gt;
	 num_syl = nil or {#SYL, #SYL, ...}&lt;br /&gt;
	 }, ...},&lt;br /&gt;
  qualifiers = nil or {&amp;quot;QUALIFIER&amp;quot;, &amp;quot;QUALIFIER&amp;quot;, ...},&lt;br /&gt;
  num_syl = nil or {#SYL, #SYL, ...},&lt;br /&gt;
  caption = nil or &amp;quot;CAPTION&amp;quot;,&lt;br /&gt;
  nocaption = BOOLEAN,&lt;br /&gt;
  sort = nil or &amp;quot;SORTKEY&amp;quot;,&lt;br /&gt;
  force_cat = BOOLEAN,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Here:&lt;br /&gt;
&lt;br /&gt;
* `lang` is a language object.&lt;br /&gt;
* `rhymes` is the list of rhymes to display. RHYME is the IPA rhyme, without initial hyphen. LEFT_QUALIFIER is a&lt;br /&gt;
  qualifier string to display before the specific rhyme in question, formatted using format_qualifier() in&lt;br /&gt;
  [[Module:qualifier]]. RIGHT_QUALIFIER similarly displays after the rhyme. LEFT_ACCENT_QUALIFIER is an accent qualifier&lt;br /&gt;
  (as in {{a}}) to display before the rhyme, and RIGHT_ACCENT_QUALIFIER similarly displays after the rhyme.&lt;br /&gt;
  #SYL is the number of syllables of the word or words containing this rhyme, for categorization purposes (see below).&lt;br /&gt;
* `qualifiers` (at top level), if non-nil, is a list of qualifier strings to display after the caption &amp;quot;Rhymes:&amp;quot; and&lt;br /&gt;
  before the formatted rhymes, formatted using format_qualifier() in [[Module:qualifier]].&lt;br /&gt;
* `num_syl` (at top level), if non-nil, a list of the number(s) of syllables of the word or words with each rhyme&lt;br /&gt;
  specified in `rhymes`. This applies to all rhymes specified in `rhymes`, while the corresponding `num_syl` attached&lt;br /&gt;
  to an individual rhyme applies only to that rhyme (and overrides the global `num_syl`, if both are given).&lt;br /&gt;
* `caption`, if specified, overrides the default caption &amp;quot;Rhymes&amp;quot;. A colon and space is automatically added after&lt;br /&gt;
  the caption.&lt;br /&gt;
* `nocaption`, if specified, suppresses the caption entirely.&lt;br /&gt;
* `sort`, if specified, is the sort key for categories.&lt;br /&gt;
* `force_cat`, if specified, forces categories even on non-mainspace pages (for testing).&lt;br /&gt;
&lt;br /&gt;
Note that the number of syllables is currently used only for categorization; if present, an extra category will&lt;br /&gt;
be added such as [[Category:Rhymes:Italian/ino/3 syllables]] in addition to [[Category:Rhymes:Italian/ino]].&lt;br /&gt;
]=]&lt;br /&gt;
function export.format_rhymes(data)&lt;br /&gt;
	local langname = data.lang:getCanonicalName()&lt;br /&gt;
	local links = {}&lt;br /&gt;
	local categories = {}&lt;br /&gt;
	for i, r in ipairs(data.rhymes) do&lt;br /&gt;
		local rhyme = r.rhyme&lt;br /&gt;
		local link = make_rhyme_link(data.lang, rhyme, &amp;quot;-&amp;quot; .. rhyme)&lt;br /&gt;
		if r.q and r.q[1] or r.qq and r.qq[1] or r.qualifiers and r.qualifiers[1]&lt;br /&gt;
			or r.a and r.a[1] or r.aa and r.aa[1] then&lt;br /&gt;
			link = require(&amp;quot;Module:pron qualifier&amp;quot;).format_qualifiers(r, link)&lt;br /&gt;
		end&lt;br /&gt;
		table.insert(links, link)&lt;br /&gt;
		add_syllable_categories(categories, langname, rhyme, r.num_syl or data.num_syl)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local ret = data.nocaption and &amp;quot;&amp;quot; or (data.caption or &amp;quot;Rhymes&amp;quot;) .. &amp;quot;: &amp;quot;&lt;br /&gt;
	if data.qualifiers and data.qualifiers[1] then&lt;br /&gt;
		ret = require(&amp;quot;Module:qualifier&amp;quot;).format_qualifier(data.qualifiers) .. &amp;quot; &amp;quot; .. ret&lt;br /&gt;
	end&lt;br /&gt;
	return ret .. table.concat(links, &amp;quot;, &amp;quot;) ..&lt;br /&gt;
		require(&amp;quot;Module:utilities&amp;quot;).format_categories(categories, data.lang, data.sort, nil, force_cat or data.force_cat)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function export.show(frame)&lt;br /&gt;
	local args = frame.getParent and frame:getParent().args or frame&lt;br /&gt;
	local compat = args[&amp;quot;lang&amp;quot;]&lt;br /&gt;
	local offset = compat and 0 or 1&lt;br /&gt;
&lt;br /&gt;
	local params = {&lt;br /&gt;
		[1 + offset] = {required = true, list = true, default = &amp;quot;aɪmz&amp;quot;},&lt;br /&gt;
		[compat and &amp;quot;lang&amp;quot; or 1] = {required = true, default = &amp;quot;en&amp;quot;},&lt;br /&gt;
		[&amp;quot;s&amp;quot;] = {},&lt;br /&gt;
		[&amp;quot;srhymes&amp;quot;] = {list = &amp;quot;s&amp;quot;, allow_holes = true, require_index = true},&lt;br /&gt;
		[&amp;quot;q&amp;quot;] = {},&lt;br /&gt;
		[&amp;quot;qrhymes&amp;quot;] = {list = &amp;quot;q&amp;quot;, allow_holes = true, require_index = true},&lt;br /&gt;
		[&amp;quot;caption&amp;quot;] = {},&lt;br /&gt;
		[&amp;quot;nocaption&amp;quot;] = {type = &amp;quot;boolean&amp;quot;},&lt;br /&gt;
		[&amp;quot;sort&amp;quot;] = {},&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	local args = require(&amp;quot;Module:parameters&amp;quot;).process(args, params)&lt;br /&gt;
	local lang = args[compat and &amp;quot;lang&amp;quot; or 1]&lt;br /&gt;
	lang = require(&amp;quot;Module:languages&amp;quot;).getByCode(lang, compat and &amp;quot;lang&amp;quot; or 1)&lt;br /&gt;
&lt;br /&gt;
	-- temporary tracking code to find usage of {{rhymes}} in various languages&lt;br /&gt;
	-- [[Special:WhatLinksHere/Template:tracking/rhymes/LANGCODE]]&lt;br /&gt;
	local code = lang:getCode()&lt;br /&gt;
	if code == &amp;quot;it&amp;quot; or code == &amp;quot;es&amp;quot; then&lt;br /&gt;
		require(&amp;quot;Module:debug&amp;quot;).track(&amp;quot;rhymes/&amp;quot; .. code)&lt;br /&gt;
	end&lt;br /&gt;
	local function parse_num_syl(val)&lt;br /&gt;
		val = mw.text.split(val, &amp;quot;%s*,%s*&amp;quot;)&lt;br /&gt;
		local ret = {}&lt;br /&gt;
		for _, v in ipairs(val) do&lt;br /&gt;
			local n = tonumber(v) or error(&amp;quot;Unrecognized #syllables &amp;#039;&amp;quot; .. v .. &amp;quot;&amp;#039;, should be a number&amp;quot;)&lt;br /&gt;
			table.insert(ret, n)&lt;br /&gt;
		end&lt;br /&gt;
		return ret&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local rhymes = {}&lt;br /&gt;
	for i, rhyme in ipairs(args[1 + offset]) do&lt;br /&gt;
		local rhymeobj = {rhyme = rhyme}&lt;br /&gt;
		if args.srhymes[i] then&lt;br /&gt;
			rhymeobj.num_syl = parse_num_syl(args.srhymes[i])&lt;br /&gt;
		end&lt;br /&gt;
		if args.qrhymes[i] then&lt;br /&gt;
			rhymeobj.qualifiers = {args.qrhymes[i]}&lt;br /&gt;
		end&lt;br /&gt;
		table.insert(rhymes, rhymeobj)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return export.format_rhymes {&lt;br /&gt;
		lang = lang,&lt;br /&gt;
		rhymes = rhymes,&lt;br /&gt;
		num_syl = args.s and parse_num_syl(args.s) or nil,&lt;br /&gt;
		qualifiers = args.q and {args.q} or nil,&lt;br /&gt;
		caption = args.caption,&lt;br /&gt;
		nocaption = args.nocaption,&lt;br /&gt;
		sort = args.sort,&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- {{rhymes nav}}&lt;br /&gt;
function export.show_nav(frame)&lt;br /&gt;
	-- Gather parameters&lt;br /&gt;
	local args = frame:getParent().args&lt;br /&gt;
	local lang = args[1] or (mw.title.getCurrentTitle().nsText == &amp;quot;Template&amp;quot; and &amp;quot;und&amp;quot;) or error(&amp;quot;Language code has not been specified. Please pass parameter 1 to the template.&amp;quot;)&lt;br /&gt;
	lang = require(&amp;quot;Module:languages&amp;quot;).getByCode(lang, 1)&lt;br /&gt;
&lt;br /&gt;
	local parts = {}&lt;br /&gt;
	local i = 2&lt;br /&gt;
&lt;br /&gt;
	while args[i] do&lt;br /&gt;
		local part = args[i]; if part == &amp;quot;&amp;quot; then part = nil end&lt;br /&gt;
		table.insert(parts, part)&lt;br /&gt;
		i = i + 1&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Create steps&lt;br /&gt;
	local steps = {&amp;quot;» [[Wiktionary:Rhymes|Rhymes]]&amp;quot;, &amp;quot;» &amp;quot; .. make_rhyme_link(lang)}&lt;br /&gt;
	local categories = {}&lt;br /&gt;
&lt;br /&gt;
	if #parts &amp;gt; 0 then&lt;br /&gt;
		local last = parts[#parts]&lt;br /&gt;
		parts[#parts] = nil&lt;br /&gt;
		local prefix = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
		for i, part in ipairs(parts) do&lt;br /&gt;
			prefix = prefix .. part&lt;br /&gt;
			parts[i] = prefix&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		for _, part in ipairs(parts) do&lt;br /&gt;
			table.insert(steps, &amp;quot;» &amp;quot; .. make_rhyme_link(lang, part .. &amp;quot;-&amp;quot;, &amp;quot;-&amp;quot; .. part .. &amp;quot;-&amp;quot;))&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if last == &amp;quot;-&amp;quot; then&lt;br /&gt;
			table.insert(steps, &amp;quot;» &amp;quot; .. make_rhyme_link(lang, prefix, &amp;quot;-&amp;quot; .. prefix))&lt;br /&gt;
			table.insert(categories, &amp;quot;[[Category:Rhymes:&amp;quot; .. lang:getCanonicalName() .. &amp;quot;&amp;quot; .. (prefix == &amp;quot;&amp;quot; and &amp;quot;&amp;quot; or &amp;quot;/&amp;quot; .. prefix .. &amp;quot;-&amp;quot;) .. &amp;quot;| ]]&amp;quot;)&lt;br /&gt;
		elseif mw.title.getCurrentTitle().text == lang:getCanonicalName() .. &amp;quot;/&amp;quot; .. prefix .. last .. &amp;quot;-&amp;quot; then&lt;br /&gt;
			table.insert(steps, &amp;quot;» &amp;quot; .. make_rhyme_link(lang, prefix .. last .. &amp;quot;-&amp;quot;, &amp;quot;-&amp;quot; .. prefix .. last .. &amp;quot;-&amp;quot;))&lt;br /&gt;
			table.insert(categories, &amp;quot;[[Category:Rhymes:&amp;quot; .. lang:getCanonicalName() .. &amp;quot;/&amp;quot; .. prefix .. last .. &amp;quot;-|-]]&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			table.insert(steps, &amp;quot;» &amp;quot; .. make_rhyme_link(lang, prefix .. last, &amp;quot;-&amp;quot; .. prefix .. last))&lt;br /&gt;
			table.insert(categories, &amp;quot;[[Category:Rhymes:&amp;quot; .. lang:getCanonicalName() .. &amp;quot;&amp;quot; .. (prefix == &amp;quot;&amp;quot; and &amp;quot;&amp;quot; or &amp;quot;/&amp;quot; .. prefix .. &amp;quot;-&amp;quot;) .. &amp;quot;|&amp;quot; .. last .. &amp;quot;]]&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	elseif lang:getCode() ~= &amp;quot;und&amp;quot; then&lt;br /&gt;
		table.insert(categories, &amp;quot;[[Category:Rhymes:&amp;quot; .. lang:getCanonicalName() .. &amp;quot;| ]]&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	frame:callParserFunction(&amp;quot;DISPLAYTITLE&amp;quot;,&lt;br /&gt;
		mw.title.getCurrentTitle().fullText:gsub(&lt;br /&gt;
			&amp;quot;/(.+)$&amp;quot;,&lt;br /&gt;
			function (rhyme)&lt;br /&gt;
				return &amp;quot;/&amp;quot; .. tag_rhyme(rhyme, lang)&lt;br /&gt;
			end))&lt;br /&gt;
&lt;br /&gt;
	return table.concat(steps, &amp;quot; &amp;quot;) .. table.concat(categories)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return export&lt;/div&gt;</summary>
		<author><name>bob&gt;Juelos</name></author>
	</entry>
</feed>