<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://linguifex.com/w/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://linguifex.com/w/index.php?action=history&amp;feed=atom&amp;title=Module%3Arhymes"/>
	<link rel="alternate" type="text/html" href="https://linguifex.com/w/index.php?title=Module:rhymes&amp;action=history"/>
	<updated>2026-05-12T21:47:21Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>https://linguifex.com/w/index.php?title=Module:rhymes&amp;diff=523649&amp;oldid=prev</id>
		<title>Sware: Created page with &quot;local export = {}  local force_cat = false -- for testing  local rhymes_styles_css_module = &quot;Module:rhymes/styles.css&quot;  local IPA_module = &quot;Module:IPA&quot; local parameters_module = &quot;Module:parameters&quot; local parameter_utilities_module = &quot;Module:parameter utilities&quot; local pron_qualifier_module = &quot;Module:pron qualifier&quot; local script_utilities_module = &quot;Module:script utilities&quot; local string_utilities_module = &quot;Module:string utilities&quot; local TemplateStyles_module = &quot;Module:Templ...&quot;</title>
		<link rel="alternate" type="text/html" href="https://linguifex.com/w/index.php?title=Module:rhymes&amp;diff=523649&amp;oldid=prev"/>
		<updated>2026-05-12T18:48:22Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;local export = {}  local force_cat = false -- for testing  local rhymes_styles_css_module = &amp;quot;Module:rhymes/styles.css&amp;quot;  local IPA_module = &amp;quot;Module:IPA&amp;quot; local parameters_module = &amp;quot;Module:parameters&amp;quot; local parameter_utilities_module = &amp;quot;Module:parameter utilities&amp;quot; local pron_qualifier_module = &amp;quot;Module:pron qualifier&amp;quot; local script_utilities_module = &amp;quot;Module:script utilities&amp;quot; local string_utilities_module = &amp;quot;Module:string utilities&amp;quot; local TemplateStyles_module = &amp;quot;Module:Templ...&amp;quot;&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 rhymes_styles_css_module = &amp;quot;Module:rhymes/styles.css&amp;quot;&lt;br /&gt;
&lt;br /&gt;
local IPA_module = &amp;quot;Module:IPA&amp;quot;&lt;br /&gt;
local parameters_module = &amp;quot;Module:parameters&amp;quot;&lt;br /&gt;
local parameter_utilities_module = &amp;quot;Module:parameter utilities&amp;quot;&lt;br /&gt;
local pron_qualifier_module = &amp;quot;Module:pron qualifier&amp;quot;&lt;br /&gt;
local script_utilities_module = &amp;quot;Module:script utilities&amp;quot;&lt;br /&gt;
local string_utilities_module = &amp;quot;Module:string utilities&amp;quot;&lt;br /&gt;
local TemplateStyles_module = &amp;quot;Module:TemplateStyles&amp;quot;&lt;br /&gt;
local utilities_module = &amp;quot;Module:utilities&amp;quot;&lt;br /&gt;
&lt;br /&gt;
local concat = table.concat&lt;br /&gt;
local insert = table.insert&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function rsplit(text, pattern)&lt;br /&gt;
	return require(string_utilities_module).split(text, pattern)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function track(page)&lt;br /&gt;
	require(&amp;quot;Module:debug/track&amp;quot;)(&amp;quot;rhymes/&amp;quot; .. page)&lt;br /&gt;
	return true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function tag_rhyme(rhyme, lang)&lt;br /&gt;
	local formatted_rhyme, cats, err&lt;br /&gt;
	formatted_rhyme, cats, err = require(IPA_module).format_IPA(lang, rhyme, &amp;quot;raw&amp;quot;)&lt;br /&gt;
	return formatted_rhyme, cats, err&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, cats&lt;br /&gt;
	if not link_rhyme then&lt;br /&gt;
		retval = concat{&amp;quot;[[Rhymes:&amp;quot;, lang:getCanonicalName(), &amp;quot;|&amp;quot;, lang:getCanonicalName(), &amp;quot;]]&amp;quot;}&lt;br /&gt;
		cats = {}&lt;br /&gt;
	else&lt;br /&gt;
		local formatted_rhyme&lt;br /&gt;
		formatted_rhyme, cats, err = tag_rhyme(display_rhyme or link_rhyme, lang)&lt;br /&gt;
		retval = concat{&amp;quot;[[Rhymes:&amp;quot;, lang:getCanonicalName(), &amp;quot;/&amp;quot;, link_rhyme, &amp;quot;|&amp;quot;, formatted_rhyme, &amp;quot;]]&amp;quot;, err}&lt;br /&gt;
	end&lt;br /&gt;
	return retval, cats&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[==[&lt;br /&gt;
Implementation of {{tl|rhymes row}}.&lt;br /&gt;
]==]&lt;br /&gt;
function export.show_row(frame)&lt;br /&gt;
	local args = require(parameters_module).process(&lt;br /&gt;
		frame.getParent and frame:getParent().args or frame,&lt;br /&gt;
		{&lt;br /&gt;
			[1] = {required = true, type = &amp;quot;full language&amp;quot;},&lt;br /&gt;
			[2] = {required = true},&lt;br /&gt;
			[3] = {},&lt;br /&gt;
		}&lt;br /&gt;
	)&lt;br /&gt;
&lt;br /&gt;
	if not args[1] then&lt;br /&gt;
		return &amp;quot;[[Rhymes:English/aɪmz|&amp;lt;span class=\&amp;quot;IPA\&amp;quot;&amp;gt;-aɪmz&amp;lt;/span&amp;gt;]]&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Discard cleanup categories from make_rhyme_link().&lt;br /&gt;
	return (make_rhyme_link(args[1], 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;
do&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;
		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;
				insert(categories, c)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
--[==[&lt;br /&gt;
Meant to be called from a module. `data` is a table containing the following fields:&lt;br /&gt;
* `lang`: language object for the rhymes;&lt;br /&gt;
* `rhymes`: a list of rhymes, each described by an object which specifies the rhyme, optional number of syllables, and&lt;br /&gt;
  optional left and right regular and accent qualifier fields:&lt;br /&gt;
** `rhyme`: the rhyme itself;&lt;br /&gt;
** `num_syl`: {nil} or a list of numbers, specifying the number of syllables of the word with this rhyme; optional and&lt;br /&gt;
   currently used only for categorization; if omitted, defaults to the top-level `num_syl`;&lt;br /&gt;
** `separator`: {nil} or the string used to separate this rhyme from the preceding one when displayed; defaults to the&lt;br /&gt;
   top-level `separator`;&lt;br /&gt;
** `q`: {nil} or a list of left regular qualifier strings, formatted using {format_qualifier()} in [[Module:qualifier]]&lt;br /&gt;
   and displayed directly before the rhyme in question;&lt;br /&gt;
** `qq`: {nil} or a list of right regular qualifier strings, displayed directly after the rhyme in question;&lt;br /&gt;
** `qualifiers`: {nil} or a list of qualifier strings; also displayed on the left; for compatibility purposes only, do&lt;br /&gt;
   not use in new code;&lt;br /&gt;
** `a`: {nil} or a list of left accent qualifier strings, formatted using {format_qualifiers()} in&lt;br /&gt;
   [[Module:accent qualifier]] and displayed directly before the rhyme in question;&lt;br /&gt;
** `aa`: {nil} or a list of right accent qualifier strings, displayed directly after the rhyme in question;&lt;br /&gt;
** `refs`: {nil} or a list of references or reference specs to add directly after the rhyme; the value of a list item is&lt;br /&gt;
   either a string containing the reference text (typically a call to a citation template such as {{tl|cite-book}}, or a&lt;br /&gt;
   template wrapping such a call), or an object with fields `text` (the reference text), `name` (the name of the&lt;br /&gt;
   reference, as in {{cd|&amp;lt;nowiki&amp;gt;&amp;lt;ref name=&amp;quot;foo&amp;quot;&amp;gt;...&amp;lt;/ref&amp;gt;&amp;lt;/nowiki&amp;gt;}} or {{cd|&amp;lt;nowiki&amp;gt;&amp;lt;ref name=&amp;quot;foo&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;}})&lt;br /&gt;
   and/or `group` (the group of the reference, as in {{cd|&amp;lt;nowiki&amp;gt;&amp;lt;ref name=&amp;quot;foo&amp;quot; group=&amp;quot;bar&amp;quot;&amp;gt;...&amp;lt;/ref&amp;gt;&amp;lt;/nowiki&amp;gt;}} or&lt;br /&gt;
   {{cd|&amp;lt;nowiki&amp;gt;&amp;lt;ref name=&amp;quot;foo&amp;quot; group=&amp;quot;bar&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;}}); this uses a parser function to format the reference&lt;br /&gt;
   appropriately and insert a footnote number that hyperlinks to the actual reference, located in the&lt;br /&gt;
   {{cd|&amp;lt;nowiki&amp;gt;&amp;lt;references /&amp;gt;&amp;lt;/nowiki&amp;gt;}} section;&lt;br /&gt;
** `nocat`: if {true}, suppress categorization for this rhyme only;&lt;br /&gt;
* `num_syl`: {nil} or a list of numbers, specifying the number of syllables for all rhymes; optional and currently used&lt;br /&gt;
  only for categorization; overridable at the individual rhyme level;&lt;br /&gt;
* `separator`: {nil} or a string, specifying the separator displayed before all rhymes but the first; by default,&lt;br /&gt;
  {&amp;quot;, &amp;quot;}; overridable at the individual rhyme level;&lt;br /&gt;
* `q`: {nil} or a list of left regular qualifier strings, formatted using {format_qualifier()} in [[Module:qualifier]]&lt;br /&gt;
  and displayed before the initial caption;&lt;br /&gt;
* `qq`: {nil} or a list of right regular qualifier strings, displayed after all rhymes;&lt;br /&gt;
* `qualifiers`: {nil} or a list of left regular qualifier strings; for compatibility purposes only, do not use in new&lt;br /&gt;
  code;&lt;br /&gt;
* `a`: {nil} or a list of left accent qualifier strings, formatted using {format_qualifiers()} in&lt;br /&gt;
  [[Module:accent qualifier]] and dispalyed before the initial caption;&lt;br /&gt;
* `aa`: {nil} or a list of right accent qualifier strings, displayed after all rhymes;&lt;br /&gt;
* `sort`: {nil} or sort key;&lt;br /&gt;
* `caption`: {nil} or string specifying the caption to use, in place of {&amp;quot;Rhymes&amp;quot;}; a colon and space is automatically&lt;br /&gt;
  added after the caption;&lt;br /&gt;
* `nocaption`: if {true}, suppress the caption display;&lt;br /&gt;
* `nocat`: if {true}, suppress categorization;&lt;br /&gt;
* `force_cat`: if {true}, force categorization even on non-mainspace pages.&lt;br /&gt;
&lt;br /&gt;
If both regular and accent qualifiers on the same side and at the same level are specified, the accent qualifiers&lt;br /&gt;
precede the regular qualifiers on both left and right.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;WARNING&amp;#039;&amp;#039;&amp;#039;: Destructively modifies the objects inside the `rhymes` field.&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:getFullName()&lt;br /&gt;
		local parts = {}&lt;br /&gt;
		local categories = {}&lt;br /&gt;
		local overall_sep = data.separator or &amp;quot;, &amp;quot;&lt;br /&gt;
		for i, r in ipairs(data.rhymes) do&lt;br /&gt;
			local rhyme = r.rhyme&lt;br /&gt;
			local link, link_cats = make_rhyme_link(data.lang, rhyme, &amp;quot;-&amp;quot; .. rhyme)&lt;br /&gt;
			if not r.nocat and not data.nocat then&lt;br /&gt;
				for _, cat in ipairs(link_cats) do&lt;br /&gt;
					insert(categories, cat)&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			if r.qualifiers then&lt;br /&gt;
				track(&amp;quot;old-qualifiers&amp;quot;)&lt;br /&gt;
			end&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] or r.refs and r.refs[1] then&lt;br /&gt;
				link = require(pron_qualifier_module).format_qualifiers {&lt;br /&gt;
					lang = data.lang,&lt;br /&gt;
					text = link,&lt;br /&gt;
					q = r.q,&lt;br /&gt;
					qq = r.qq,&lt;br /&gt;
					qualifiers = r.qualifiers,&lt;br /&gt;
					a = r.a,&lt;br /&gt;
					aa = r.aa,&lt;br /&gt;
					refs = r.refs,&lt;br /&gt;
				}&lt;br /&gt;
			end&lt;br /&gt;
			insert(parts, r.separator or i &amp;gt; 1 and overall_sep or &amp;quot;&amp;quot;)&lt;br /&gt;
			insert(parts, link)&lt;br /&gt;
			if not r.nocat and not data.nocat then&lt;br /&gt;
				add_syllable_categories(categories, langname, rhyme, r.num_syl or data.num_syl)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		local text = concat(parts)&lt;br /&gt;
		if not data.nocaption then&lt;br /&gt;
			text = (data.caption or &amp;quot;Rhymes&amp;quot;) .. &amp;quot;: &amp;quot; .. text&lt;br /&gt;
		end&lt;br /&gt;
		if data.q and data.q[1] or data.qq and data.qq[1] or data.a and data.a[1] or data.aa and data.aa[1] then&lt;br /&gt;
			text = require(pron_qualifier_module).format_qualifiers {&lt;br /&gt;
				lang = data.lang,&lt;br /&gt;
				text = text,&lt;br /&gt;
				q = data.q,&lt;br /&gt;
				qq = data.qq,&lt;br /&gt;
				a = data.a,&lt;br /&gt;
				aa = data.aa,&lt;br /&gt;
			}&lt;br /&gt;
		end&lt;br /&gt;
		if categories[1] then&lt;br /&gt;
			local categories = require(utilities_module).format_categories(categories, data.lang, data.sort, nil,&lt;br /&gt;
				force_cat or data.force_cat)&lt;br /&gt;
			text = text .. categories&lt;br /&gt;
		end&lt;br /&gt;
		return text&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[==[&lt;br /&gt;
Implementation of {{tl|rhymes}}.&lt;br /&gt;
]==]&lt;br /&gt;
function export.show(frame)&lt;br /&gt;
	local parent_args = frame:getParent().args&lt;br /&gt;
	local compat = parent_args.lang&lt;br /&gt;
	local offset = compat and 0 or 1&lt;br /&gt;
	local lang_param = compat and &amp;quot;lang&amp;quot; or 1&lt;br /&gt;
&lt;br /&gt;
	local plain = {}&lt;br /&gt;
	local boolean = {type = &amp;quot;boolean&amp;quot;}&lt;br /&gt;
	local params = {&lt;br /&gt;
		[lang_param] = {required = true, type = &amp;quot;language&amp;quot;, default = &amp;quot;en&amp;quot;},&lt;br /&gt;
		[1 + offset] = {list = true, required = true, disallow_holes = true, default = &amp;quot;aɪmz&amp;quot;},&lt;br /&gt;
		[&amp;quot;caption&amp;quot;] = plain,&lt;br /&gt;
		[&amp;quot;nocaption&amp;quot;] = boolean,&lt;br /&gt;
		[&amp;quot;nocat&amp;quot;] = boolean,&lt;br /&gt;
		[&amp;quot;sort&amp;quot;] = plain,&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	local m_param_utils = require(parameter_utilities_module)&lt;br /&gt;
&lt;br /&gt;
	local param_mods = m_param_utils.construct_param_mods {&lt;br /&gt;
		{&lt;br /&gt;
			param = &amp;quot;s&amp;quot;,&lt;br /&gt;
			item_dest = &amp;quot;num_syl&amp;quot;,&lt;br /&gt;
			separate_no_index = true,&lt;br /&gt;
			type = &amp;quot;number&amp;quot;,&lt;br /&gt;
			sublist = true,&lt;br /&gt;
		},&lt;br /&gt;
		{group = {&amp;quot;q&amp;quot;, &amp;quot;a&amp;quot;, &amp;quot;ref&amp;quot;}},&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	local rhymes, args = m_param_utils.parse_list_with_inline_modifiers_and_separate_params {&lt;br /&gt;
		params = params,&lt;br /&gt;
		param_mods = param_mods,&lt;br /&gt;
		raw_args = parent_args,&lt;br /&gt;
		termarg = 1 + offset,&lt;br /&gt;
		term_dest = &amp;quot;rhyme&amp;quot;,&lt;br /&gt;
		track_module = &amp;quot;rhymes&amp;quot;,&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	local lang = args[lang_param]&lt;br /&gt;
&lt;br /&gt;
	local data = {&lt;br /&gt;
		lang = lang,&lt;br /&gt;
		rhymes = rhymes,&lt;br /&gt;
		num_syl = args.s.default,&lt;br /&gt;
		caption = args.caption,&lt;br /&gt;
		nocaption = args.nocaption,&lt;br /&gt;
		nocat = args.nocat,&lt;br /&gt;
		sort = args.sort,&lt;br /&gt;
		q = args.q.default,&lt;br /&gt;
		qq = args.qq.default,&lt;br /&gt;
		a = args.a.default,&lt;br /&gt;
		aa = args.aa.default,&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return export.format_rhymes(data)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[==[&lt;br /&gt;
Implementation of {{tl|rhymes nav}}.&lt;br /&gt;
]==]&lt;br /&gt;
function export.show_nav(frame)&lt;br /&gt;
	local args = require(parameters_module).process(&lt;br /&gt;
		frame:getParent().args,&lt;br /&gt;
		{&lt;br /&gt;
			[1] = {required = true, type = &amp;quot;full language&amp;quot;, default = &amp;quot;und&amp;quot;},&lt;br /&gt;
			[2] = {list = true, allow_holes = true},&lt;br /&gt;
			[&amp;quot;nocat&amp;quot;] = {type = &amp;quot;boolean&amp;quot;},&lt;br /&gt;
		}&lt;br /&gt;
	)&lt;br /&gt;
&lt;br /&gt;
	local lang = args[1]&lt;br /&gt;
	local langname = lang:getCanonicalName()&lt;br /&gt;
	local parts = args[2]&lt;br /&gt;
&lt;br /&gt;
	-- Create steps&lt;br /&gt;
	-- FIXME: We should probably use format_categories() in [[Module:utilities]] rather than constructing categories&lt;br /&gt;
	-- manually.&lt;br /&gt;
	local categories = {}&lt;br /&gt;
	-- Here and below, we ignore any cleanup categories coming out of make_rhyme_link() by adding an extra set of parens&lt;br /&gt;
	-- around the call to make_rhyme_link() to cause the second argument (the categories) to be ignored. {{rhymes nav}}&lt;br /&gt;
	-- is run on a rhymes page so it&amp;#039;s not clear we want the page to be added to any such categories, if they exist.&lt;br /&gt;
	local steps = {&amp;quot;[[Wiktionary:Rhymes|Rhymes]]&amp;quot;, (make_rhyme_link(lang))}&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;
			insert(steps, (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;
			insert(steps, (make_rhyme_link(lang, prefix, &amp;quot;-&amp;quot; .. prefix)))&lt;br /&gt;
			insert(categories, &amp;quot;[[Category:&amp;quot; .. langname .. &amp;quot; rhymes&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 == langname .. &amp;quot;/&amp;quot; .. prefix .. last .. &amp;quot;-&amp;quot; then -- DO NOT replace with mw.loadData(&amp;quot;Module:headword/data&amp;quot;).pagename as we need the root portion&lt;br /&gt;
			insert(steps, (make_rhyme_link(lang, prefix .. last .. &amp;quot;-&amp;quot;, &amp;quot;-&amp;quot; .. prefix .. last .. &amp;quot;-&amp;quot;)))&lt;br /&gt;
			insert(categories, &amp;quot;[[Category:&amp;quot; .. langname .. &amp;quot; rhymes/&amp;quot; .. prefix .. last .. &amp;quot;-|-]]&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			insert(steps, (make_rhyme_link(lang, prefix .. last, &amp;quot;-&amp;quot; .. prefix .. last)))&lt;br /&gt;
			insert(categories, &amp;quot;[[Category:&amp;quot; .. langname .. &amp;quot; rhymes&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;
		insert(categories, &amp;quot;[[Category:&amp;quot; .. langname .. &amp;quot; rhymes| ]]&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if mw.title.getCurrentTitle().nsText == &amp;quot;Rhymes&amp;quot; then&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)) -- ignore cleanup categories&lt;br /&gt;
				end))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local templateStyles = require(TemplateStyles_module)(rhymes_styles_css_module)&lt;br /&gt;
&lt;br /&gt;
	local ol = mw.html.create(&amp;quot;ol&amp;quot;)&lt;br /&gt;
	for _, step in ipairs(steps) do&lt;br /&gt;
		ol:node(mw.html.create(&amp;quot;li&amp;quot;):wikitext(step))&lt;br /&gt;
	end&lt;br /&gt;
	local div = mw.html.create(&amp;quot;div&amp;quot;)&lt;br /&gt;
		:attr(&amp;quot;role&amp;quot;, &amp;quot;navigation&amp;quot;)&lt;br /&gt;
		:attr(&amp;quot;aria-label&amp;quot;, &amp;quot;Breadcrumb&amp;quot;)&lt;br /&gt;
		:addClass(&amp;quot;ts-rhymesBreadcrumbs&amp;quot;)&lt;br /&gt;
		:node(ol)&lt;br /&gt;
&lt;br /&gt;
	local formatted_cats = args.nocat and &amp;quot;&amp;quot; or concat(categories)&lt;br /&gt;
	return templateStyles .. tostring(div) .. formatted_cats&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return export&lt;/div&gt;</summary>
		<author><name>Sware</name></author>
	</entry>
</feed>