<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://en.wiki.marraidh.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Fayanz%C4%81r</id>
	<title>Jeyropedia - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://en.wiki.marraidh.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Fayanz%C4%81r"/>
	<link rel="alternate" type="text/html" href="https://en.wiki.marraidh.com/index.php?title=Special:Contributions/Fayanz%C4%81r"/>
	<updated>2026-07-18T00:08:45Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.35.14</generator>
	<entry>
		<id>https://en.wiki.marraidh.com/index.php?title=Template:Taxobox/core&amp;diff=151</id>
		<title>Template:Taxobox/core</title>
		<link rel="alternate" type="text/html" href="https://en.wiki.marraidh.com/index.php?title=Template:Taxobox/core&amp;diff=151"/>
		<updated>2026-07-17T12:45:10Z</updated>

		<summary type="html">&lt;p&gt;Fayanzār: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;infobox biota&amp;quot; style=&amp;quot;text-align: left; width: 200px; font-size: 100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=2 style=&amp;quot;text-align: center{{#if:{{{colour|}}}|{{;}} background-color: {{{colour}}}|}}&amp;quot; | {{#if:{{{name|}}}|{{{name}}}|{{PAGENAME}} }}{{#if:{{{temporal_range|}}}|&amp;lt;br/&amp;gt;&amp;lt;div style=&amp;quot;font-size: 85%;&amp;quot;&amp;gt;Temporal range: {{{temporal_range}}}&amp;lt;/div&amp;gt;}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if:{{{image|}}}|&lt;br /&gt;
{{!}} colspan=2 style=&amp;quot;text-align: center&amp;quot; {{!}} {{#invoke:InfoboxImage|InfoboxImage|image={{{image}}}|size={{{image_width|}}}|sizedefault=frameless|upright={{{upright|1}}}|alt={{{image_alt|}}}}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{#if:{{{image_caption|}}}|&lt;br /&gt;
{{!}} colspan=2 style=&amp;quot;text-align: {{{image_caption_align|center}}}; font-size: 88%&amp;quot; {{!}} {{{image_caption}}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
{{#if:{{{image2|}}}|&lt;br /&gt;
{{!}} colspan=2 style=&amp;quot;text-align: center&amp;quot; {{!}} {{#invoke:InfoboxImage|InfoboxImage|image={{{image2}}}|size={{{image2_width|}}}|sizedefault=frameless|upright={{#if:{{{upright2|}}}|{{{upright2}}}|{{{upright|1}}}}}|alt={{{image2_alt|}}}}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{#if:{{{image2_caption|}}}|&lt;br /&gt;
{{!}} colspan=2 style=&amp;quot;text-align: center; font-size: 88%&amp;quot; {{!}} {{{image2_caption}}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
|- colspan=2 style=&amp;quot;text-align: center{{#if:{{{colour|}}}|{{;}} background-color: {{{colour}}} }}&amp;quot;&lt;br /&gt;
{{#if:{{{status|}}}|{{taxobox/species|{{{status_system|}}}|{{{status|}}}|{{{status_ref|}}}|extinct={{{extinct|}}} }} }}&lt;br /&gt;
|-{{#if:{{{status2|}}}|{{taxobox/species|{{{status2_system|}}}|{{{status2|}}}|{{{status2_ref|}}}|extinct={{{extinct|}}} }} }}&lt;br /&gt;
|-&lt;br /&gt;
! colspan=2 style=&amp;quot;min-width:15em; text-align: center{{#if:{{{colour|}}}|{{;}} background-color: {{{colour}}} }}&amp;quot; | {{#if:{{{virus_group|{{{virus|}}}}}}|[[Virus classification]]|{{#if:{{{ichnos|}}}|[[Trace fossil classification]]|{{#if:{{{veterovata|}}}|[[Egg fossil#Classification|Egg fossil classification]]|[https://en.wikipedia.org/wiki/Taxonomy_(biology) Scientific classification]}} }} }} {{#if:{{{edit link|}}}|{{edit taxonomy|{{{parent|}}} | {{{edit link}}} }} }}{{#if: {{{classification_status|}}} | &amp;lt;br/&amp;gt;&amp;lt;span style=&amp;quot;font-weight:normal&amp;quot;&amp;gt;({{{classification_status}}})&amp;lt;/span&amp;gt; | }}&lt;br /&gt;
|-&lt;br /&gt;
{{#if:{{{parent|}}}|{{#invoke:Autotaxobox|taxoboxList|{{{parent}}}| display_taxa={{{display_taxa|1}}}| authority={{{authority|}}}| parent_authority={{{parent_authority|}}}| gparent_authority={{{grandparent_authority|}}}| ggparent_authority={{{greatgrandparent_authority|}}}| gggparent_authority={{{greatgreatgrandparent_authority|}}}| offset={{{offset|0}}}| bold_first={{{bold_first|{{#if:{{{species|}}}|link|bold}}}}}| virus={{{virus|no}}}}}}}&lt;br /&gt;
{{#if:{{{virus_group|}}}|{{taxonomy|rank=group&lt;br /&gt;
|link= {{#switch:{{lc:{{{virus_group}}} }}&lt;br /&gt;
 |i=Group I &amp;lt;small&amp;gt;([[dsDNA virus|dsDNA]])&amp;lt;/small&amp;gt;&lt;br /&gt;
 |ii=Group II &amp;lt;small&amp;gt;([[ssDNA virus|ssDNA]])&amp;lt;/small&amp;gt;&lt;br /&gt;
 |iii=Group III &amp;lt;small&amp;gt;([[Double-stranded RNA viruses|dsRNA]])&amp;lt;/small&amp;gt;&lt;br /&gt;
 |iv=Group IV &amp;lt;small&amp;gt;([[Positive-sense single-stranded RNA virus|(+)ssRNA]])&amp;lt;/small&amp;gt;&lt;br /&gt;
 |v=Group V &amp;lt;small&amp;gt;([[Negative-sense single-stranded RNA virus|(−)ssRNA]])&amp;lt;/small&amp;gt;&lt;br /&gt;
 |vi=Group VI &amp;lt;small&amp;gt;([[ssRNA-RT virus|ssRNA-RT]])&amp;lt;/small&amp;gt;&lt;br /&gt;
 |vi/vii=Groups VI and VII&lt;br /&gt;
 |vii=Group VII &amp;lt;small&amp;gt;([[dsDNA-RT virus|dsDNA-RT]])&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 |{{{virus_group}}}&lt;br /&gt;
}} }} }}&lt;br /&gt;
{{#if:{{{unranked_superdomain|}}}|{{taxonomy|rank=unranked|link={{{unranked_superdomain}}} | auth={{{unranked_superdomain_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{superdomain|}}}|{{taxonomy|rank=superdomain|link={{{superdomain}}} | auth={{{superdomain_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_domain|}}}|{{taxonomy|rank=unranked|link={{{unranked_domain}}} | auth={{{unranked_domain_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{domain|}}}|{{taxonomy|rank=domain|link={{{domain}}} | auth={{{domain_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_superregnum|}}}|{{taxonomy|rank=unranked|link={{{unranked_superregnum}}} | auth={{{unranked_superregnum_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{superregnum|}}}|{{taxonomy|rank=superregnum|link={{{superregnum}}} | auth={{{superregnum_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_regnum|}}}|{{taxonomy|rank=unranked|link={{{unranked_regnum}}} | auth={{{unranked_regnum_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{regnum|}}}|{{taxonomy|rank=regnum|link={{{regnum}}} | auth={{{regnum_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_subregnum|}}}|{{taxonomy|rank=unranked|link={{{unranked_subregnum}}} | auth={{{unranked_subregnum_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{subregnum|}}}|{{taxonomy|rank=subregnum|link={{{subregnum}}} | auth={{{subregnum_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_superdivisio|}}}|{{taxonomy|rank=unranked|link={{{unranked_superdivisio}}} | auth={{{unranked_superdivisio_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{superdivisio|}}}|{{taxonomy|rank=superdivisio|link={{{superdivisio}}} | auth={{{superdivisio_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_superphylum|}}}|{{taxonomy|rank=unranked|link={{{unranked_superphylum}}} | auth={{{unranked_superphylum_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{superphylum|}}}|{{taxonomy|rank=superphylum|link={{{superphylum}}} | auth={{{superphylum_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_divisio|}}}|{{taxonomy|rank=unranked|link={{{unranked_divisio}}} | auth={{{unranked_divisio_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{divisio|}}}|{{taxonomy|rank=divisio|link={{{divisio}}} | auth={{{divisio_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_phylum|}}}|{{taxonomy|rank=unranked|link={{{unranked_phylum}}} | auth={{{unranked_phylum_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{phylum|}}}|{{taxonomy|rank=phylum|link={{{phylum}}} | auth={{{phylum_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_subdivisio|}}}|{{taxonomy|rank=unranked|link={{{unranked_subdivisio}}} | auth={{{unranked_subdivisio_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{subdivisio|}}}|{{taxonomy|rank=subdivisio|link={{{subdivisio}}} | auth={{{subdivisio_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_subphylum|}}}|{{taxonomy|rank=unranked|link={{{unranked_subphylum}}} | auth={{{unranked_subphylum_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{subphylum|}}}|{{taxonomy|rank=subphylum|link={{{subphylum}}} | auth={{{subphylum_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_infraphylum|}}}|{{taxonomy|rank=unranked|link={{{unranked_infraphylum}}} | auth={{{unranked_infraphylum_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{infraphylum|}}}|{{taxonomy|rank=infraphylum|link={{{infraphylum}}} | auth={{{infraphylum_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_microphylum|}}}|{{taxonomy|rank=unranked|link={{{unranked_microphylum}}} | auth={{{unranked_microphylum_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{microphylum|}}}|{{taxonomy|rank=microphylum|link={{{microphylum}}} | auth={{{microphylum_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_nanophylum|}}}|{{taxonomy|rank=unranked|link={{{unranked_nanophylum}}} | auth={{{unranked_nanophylum_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{nanophylum|}}}|{{taxonomy|rank=nanophylum|link={{{nanophylum}}} | auth={{{nanophylum_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_superclassis|}}}|{{taxonomy|rank=unranked|link={{{unranked_superclassis}}} | auth={{{unranked_superclassis_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{superclassis|}}}|{{taxonomy|rank=superclassis|link={{{superclassis}}} | auth={{{superclassis_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_classis|}}}|{{taxonomy|rank=unranked|link={{{unranked_classis}}} | auth={{{unranked_classis_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{classis|}}}|{{taxonomy|rank=classis|link={{{classis}}} | auth={{{classis_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_subclassis|}}}|{{taxonomy|rank=unranked|link={{{unranked_subclassis}}} | auth={{{unranked_subclassis_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{subclassis|}}}|{{taxonomy|rank=subclassis|link={{{subclassis}}} | auth={{{subclassis_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_infraclassis|}}}|{{taxonomy|rank=unranked|link={{{unranked_infraclassis}}} | auth={{{unranked_infraclassis_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{infraclassis|}}}|{{taxonomy|rank=infraclassis|link={{{infraclassis}}} | auth={{{infraclassis_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_magnordo|}}}|{{taxonomy|rank=unranked|link={{{unranked_magnordo}}} | auth={{{unranked_magnordo_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{magnordo|}}}|{{taxonomy|rank=magnordo|link={{{magnordo}}} | auth={{{magnordo_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_superordo|}}}|{{taxonomy|rank=unranked|link={{{unranked_superordo}}} | auth={{{unranked_superordo_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{superordo|}}}|{{taxonomy|rank=superordo|link={{{superordo}}} | auth={{{superordo_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_ordo|}}}|{{taxonomy|rank=unranked|link={{{unranked_ordo}}} | auth={{{unranked_ordo_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{ordo|}}}|{{taxonomy|rank=ordo|link={{{ordo}}} | auth={{{ordo_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_subordo|}}}|{{taxonomy|rank=unranked|link={{{unranked_subordo}}} | auth={{{unranked_subordo_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{subordo|}}}|{{taxonomy|rank=subordo|link={{{subordo}}} | auth={{{subordo_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_infraordo|}}}|{{taxonomy|rank=unranked|link={{{unranked_infraordo}}} | auth={{{unranked_infraordo_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{infraordo|}}}|{{taxonomy|rank=infraordo|link={{{infraordo}}} | auth={{{infraordo_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_parvordo|}}}|{{taxonomy|rank=unranked|link={{{unranked_parvordo}}} | auth={{{unranked_parvordo_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{parvordo|}}}|{{taxonomy|rank=parvorder|link={{{parvordo}}} | auth={{{parvordo_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_zoodivisio|}}}|{{taxonomy|rank=unranked|link={{{unranked_zoodivisio}}} | auth={{{unranked_zoodivisio_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{zoodivisio|}}}|{{taxonomy|rank=zoodivisio|link={{{zoodivisio}}} | auth={{{zoodivisio_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_zoosectio|}}}|{{taxonomy|rank=unranked|link={{{unranked_zoosectio}}} | auth={{{unranked_zoosectio_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{zoosectio|}}}|{{taxonomy|rank=zoosectio|link={{{zoosectio}}} | auth={{{zoosectio_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_zoosubsectio|}}}|{{taxonomy|rank=unranked|link={{{unranked_zoosubsectio}}} | auth={{{unranked_zoosubsectio_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{zoosubsectio|}}}|{{taxonomy|rank=zoosubsectio|link={{{zoosubsectio}}} | auth={{{zoosubsectio_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_superfamilia|}}}|{{taxonomy|rank=unranked|link={{{unranked_superfamilia}}} | auth={{{unranked_superfamilia_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{superfamilia|}}}|{{taxonomy|rank=superfamilia|link={{{superfamilia}}} | auth={{{superfamilia_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_familia|}}}|{{taxonomy|rank=unranked|link={{{unranked_familia}}} | auth={{{unranked_familia_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{familia|}}}|{{taxonomy|rank=familia|link={{{familia}}} | auth={{{familia_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_subfamilia|}}}|{{taxonomy|rank=unranked|link={{{unranked_subfamilia}}} | auth={{{unranked_subfamilia_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{subfamilia|}}}|{{taxonomy|rank=subfamilia|link={{{subfamilia}}} | auth={{{subfamilia_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_supertribus|}}}|{{taxonomy|rank=unranked|link={{{unranked_supertribus}}} | auth={{{unranked_supertribus_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{supertribus|}}}|{{taxonomy|rank=supertribus|link={{{supertribus}}} | auth={{{supertribus_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_tribus|}}}|{{taxonomy|rank=unranked|link={{{unranked_tribus}}} | auth={{{unranked_tribus_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{tribus|}}}|{{taxonomy|rank=tribus|link={{{tribus}}} | auth={{{tribus_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_subtribus|}}}|{{taxonomy|rank=unranked|link={{{unranked_subtribus}}} | auth={{{unranked_subtribus_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{subtribus|}}}|{{taxonomy|rank=subtribus|link={{{subtribus}}} | auth={{{subtribus_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_alliance|}}}|{{taxonomy|rank=unranked|link={{{unranked_alliance}}} | auth={{{unranked_alliance_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{alliance|}}}|{{taxonomy|rank=alliance|link={{{alliance}}} | auth={{{alliance_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_genus|}}}|{{taxonomy|rank=unranked|link={{{unranked_genus}}} | auth={{{unranked_genus_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{genus|}}}| {{taxonomy|rank=genus|link={{{genus}}}|auth={{{genus_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_subgenus|}}}|{{taxonomy|rank=unranked|link={{{unranked_subgenus}}} | auth={{{unranked_subgenus_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{subgenus|}}}|{{taxonomy|rank=subgenus|link={{{subgenus}}} | auth={{{subgenus_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_sectio|}}}|{{taxonomy|rank=unranked|link={{{unranked_sectio}}} | auth={{{unranked_sectio_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{sectio|}}}|{{taxonomy|rank=sectio|link={{{sectio}}} | auth={{{sectio_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_subsectio|}}}|{{taxonomy|rank=unranked|link={{{unranked_subsectio}}} | auth={{{unranked_subsectio_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{subsectio|}}}|{{taxonomy|rank=subsectio|link={{{subsectio}}} | auth={{{subsectio_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_series|}}}|{{taxonomy|rank=unranked|link={{{unranked_series}}} | auth={{{unranked_series_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{series|}}}|{{taxonomy|rank=series|link={{{series}}} | auth={{{series_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_subseries|}}}|{{taxonomy|rank=unranked|link={{{unranked_subseries}}} | auth={{{unranked_subseries_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{subseries|}}}|{{taxonomy|rank=subseries|link={{{subseries}}}|auth={{{subseries_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_species_group|}}}|{{taxonomy|rank=unranked|link={{{unranked_species_group}}} | auth={{{unranked_species_group_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{species_group|}}}|{{taxonomy|rank=species group|link={{{species_group}}} | auth={{{species_group_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_species_subgroup|}}}|{{taxonomy|rank=unranked|link={{{unranked_species_subgroup}}} | auth={{{unranked_species_subgroup_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{species_subgroup|}}}|{{taxonomy|rank=species subgroup|link={{{species_subgroup}}} | auth={{{species_subgroup_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_species_complex|}}}|{{taxonomy|rank=unranked|link={{{unranked_species_complex}}} | auth={{{unranked_species_complex_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{species_complex|}}}|{{taxonomy|rank=species complex|link={{{species_complex}}} | auth={{{species_complex_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_species|}}}|{{taxonomy|rank=unranked|link={{{unranked_species}}} | auth={{{unranked_species_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{species|}}}|{{taxonomy|rank=species|link={{{species}}} | auth={{{species_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_subspecies|}}}|{{taxonomy|rank=unranked|link={{{unranked_subspecies}}} | auth={{{unranked_subspecies_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{subspecies|}}}|{{taxonomy|rank=subspecies|link={{{subspecies}}} | auth={{{subspecies_authority|}}}&lt;br /&gt;
}} }}&lt;br /&gt;
|-&lt;br /&gt;
{{#if:{{{unranked_varietas|{{{unranked_variety|}}}}}}|{{taxonomy|rank=unranked|link={{{unranked_varietas|{{{unranked_variety|}}}}}} | auth={{{unranked_varietas_authority|{{{unranked_variety_authority|}}}}}} }} }}&lt;br /&gt;
{{#if:{{{varietas|{{{variety|}}}}}}|{{taxonomy|rank=varietas|link={{{varietas|{{{variety}}}}}} | auth={{{varietas_authority|{{{variety_authority|}}}}}}&lt;br /&gt;
}} }}&lt;br /&gt;
{{#if:{{{forma|}}}|{{taxonomy|rank=forma|link={{{forma}}} | auth={{{forma_authority|}}}&lt;br /&gt;
}} }}&lt;br /&gt;
{{#if:{{{virus_infrasp|}}}|{{taxonomy|rank={{{virus_infrasp_rank|RANK MISSING}}}|link={{{virus_infrasp}}} | auth=&lt;br /&gt;
}} }}&lt;br /&gt;
|-&lt;br /&gt;
{{#if:{{{binomial|}}}|&lt;br /&gt;
! colspan=2 style=&amp;quot;text-align: center{{#if:{{{colour|}}}|{{;}} background-color: {{{colour}}} }}&amp;quot; {{!}} Binomial name&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} colspan=2 style=&amp;quot;text-align: center&amp;quot; {{!}} &amp;lt;b&amp;gt;&amp;lt;span class=&amp;quot;binomial&amp;quot;&amp;gt;{{{binomial}}}&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;div style=&amp;quot;font-size: 85%;&amp;quot;&amp;gt;{{{binomial_authority|}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
|- style=&amp;quot;text-align: center{{#if:{{{colour|}}}|{{;}} background-color: {{{colour}}} }}&amp;quot;&lt;br /&gt;
{{#if:{{{trinomial|}}}|&lt;br /&gt;
! colspan=2 style=&amp;quot;text-align: center&amp;quot; {{!}} [[{{#switch:{{{regnum|}}}|[[Animalia]]|[[Animal]]ia|Animalia=Trinomen|[[Plantae]]|[[Plant]]ae|Plantae|[[Fungi]]|[[Fungus|Fungi]]|Fungi|[[Archaeplastida]]|Archaeplastida=Infraspecific name (botany)|Trinomen}}|Trinomial name]]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} colspan=2 style=&amp;quot;text-align: center&amp;quot; {{!}} &amp;lt;b&amp;gt;&amp;lt;span class=&amp;quot;trinomial&amp;quot;&amp;gt;{{{trinomial}}}&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;div style=&amp;quot;font-size: 85%;&amp;quot;&amp;gt;{{{trinomial_authority|}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if:{{{type_genus|}}}|&lt;br /&gt;
! colspan=2 style=&amp;quot;text-align: center{{#if:{{{colour|}}}|{{;}} background-color: {{{colour|}}} }}&amp;quot;{{!}} [[Type genus]]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} colspan=2 style=&amp;quot;text-align: center&amp;quot; {{!}} {{{type_genus}}}&amp;lt;br/&amp;gt;&amp;lt;div style=&amp;quot;font-size: 85%;&amp;quot;&amp;gt;{{{type_genus_authority|}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if:{{{type_ichnogenus|}}}|&lt;br /&gt;
! colspan=2 style=&amp;quot;text-align: center{{#if:{{{colour|}}}|{{;}} background-color: {{{colour|}}} }}&amp;quot;{{!}} [[Type genus|Type ichnogenus]]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} colspan=2 style=&amp;quot;text-align: center&amp;quot; {{!}} {{{type_ichnogenus}}}&amp;lt;br/&amp;gt;&amp;lt;div style=&amp;quot;font-size: 85%;&amp;quot;&amp;gt;{{{type_ichnogenus_authority|}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if:{{{type_oogenus|}}}|&lt;br /&gt;
! colspan=2 style=&amp;quot;text-align: center{{#if:{{{colour|}}}|{{;}} background-color: {{{colour|}}} }}&amp;quot;{{!}} [[Type genus|Type oogenus]]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} colspan=2 style=&amp;quot;text-align: center&amp;quot; {{!}} {{{type_oogenus}}}&amp;lt;br/&amp;gt;&amp;lt;div style=&amp;quot;font-size: 85%;&amp;quot;&amp;gt;{{{type_oogenus_authority|}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if:{{{type_species|}}}|&lt;br /&gt;
! colspan=2 style=&amp;quot;text-align: center{{#if:{{{colour|}}}|{{;}} background-color: {{{colour}}} }}&amp;quot; {{!}} [[Type species]]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} colspan=2 style=&amp;quot;text-align: center&amp;quot; {{!}} {{{type_species}}}&amp;lt;br/&amp;gt;&amp;lt;div style=&amp;quot;font-size: 85%;&amp;quot;&amp;gt;{{{type_species_authority|}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if:{{{type_ichnospecies|}}}|&lt;br /&gt;
! colspan=2 style=&amp;quot;text-align: center{{#if:{{{colour|}}}|{{;}} background-color: {{{colour}}} }}&amp;quot; {{!}} [[Type species|Type ichnospecies]]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} colspan=2 style=&amp;quot;text-align: center&amp;quot; {{!}} {{{type_ichnospecies}}}&amp;lt;br/&amp;gt;&amp;lt;div style=&amp;quot;font-size: 85%;&amp;quot;&amp;gt;{{{type_ichnospecies_authority|}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if:{{{type_oospecies|}}}|&lt;br /&gt;
! colspan=2 style=&amp;quot;text-align: center{{#if:{{{colour|}}}|{{;}} background-color: {{{colour}}} }}&amp;quot; {{!}} [[Type species|Type oospecies]]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} colspan=2 style=&amp;quot;text-align: center&amp;quot; {{!}} {{{type_oospecies}}}&amp;lt;br/&amp;gt;&amp;lt;div style=&amp;quot;font-size: 85%;&amp;quot;&amp;gt;{{{type_oospecies_authority|}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if:{{{type_strain|}}}|&lt;br /&gt;
! colspan=2 style=&amp;quot;text-align: center{{#if:{{{colour|}}}|{{;}} background-color: {{{colour}}} }}&amp;quot; {{!}} [[Type strain]]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} colspan=2 style=&amp;quot;text-align: center&amp;quot; {{!}} {{{type_strain}}}&lt;br /&gt;
}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if:{{{subdivision|}}}|&lt;br /&gt;
! colspan=2 style=&amp;quot;text-align: center{{#if:{{{colour|}}}|{{;}} background-color: {{{colour}}} }}&amp;quot; {{!}} {{{subdivision_ranks}}}{{{subdivision_ref|}}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} colspan=2 style=&amp;quot;text-align: left&amp;quot; {{!}}&lt;br /&gt;
{{{subdivision|}}}&lt;br /&gt;
}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if:{{{possible_subdivision|}}}|&lt;br /&gt;
! colspan=2 style=&amp;quot;text-align: center{{#if:{{{colour|}}}|{{;}} background-color: {{{colour}}} }}&amp;quot; {{!}} {{{possible_subdivision_ranks}}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} colspan=2 style=&amp;quot;text-align: left&amp;quot; {{!}}&lt;br /&gt;
{{{possible_subdivision|}}}&lt;br /&gt;
}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if:{{{diversity|}}}|&lt;br /&gt;
! colspan=2 style=&amp;quot;text-align: center{{#if:{{{colour|}}}|{{;}} background-color: {{{colour}}} }}&amp;quot; {{!}} [[Biodiversity|Diversity]]{{{diversity_ref|}}} {{#ifeq: {{NAMESPACEE}} | {{ns:0}} | [[Category:Articles using diversity taxobox]] | }}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} colspan=2 style=&amp;quot;text-align: center&amp;quot; {{!}} {{#if:{{{diversity_link|}}}|[[{{{diversity_link|}}}|{{{diversity|}}}]]|{{{diversity|}}}}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
}}&lt;br /&gt;
{{#if:{{{range_map|}}}|&lt;br /&gt;
{{!}} colspan=2 style=&amp;quot;text-align: center&amp;quot; {{!}} {{#invoke:InfoboxImage|InfoboxImage|image={{{range_map}}}|size={{{range_map_width|}}}|sizedefault=frameless|upright={{#if:{{{range_map_upright|}}}|{{{range_map_upright}}}|{{{upright|1}}}}}|alt={{{range_map_alt|}}}}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{#if:{{{range_map_caption|}}}|&lt;br /&gt;
{{!}} colspan=2 style=&amp;quot;text-align: center; font-size: 88%&amp;quot; {{!}} {{{range_map_caption}}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
{{#if:{{{binomial2|}}}|&lt;br /&gt;
{{!}} colspan=2 style=&amp;quot;text-align: center&amp;quot; {{!}} '''{{{binomial2}}}'''&amp;lt;br/&amp;gt;&amp;lt;div style=&amp;quot;font-size: 85%;&amp;quot;&amp;gt;{{{binomial2_authority|}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
{{!}}-&lt;br /&gt;
}}&lt;br /&gt;
{{#if:{{{trinomial2|}}}|&lt;br /&gt;
{{!}} colspan=2 style=&amp;quot;text-align: center&amp;quot; {{!}} '''{{{trinomial2}}}'''&amp;lt;br/&amp;gt;&amp;lt;div style=&amp;quot;font-size: 85%;&amp;quot;&amp;gt;{{{trinomial2_authority|}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
{{!}}-&lt;br /&gt;
}}&lt;br /&gt;
{{#if:{{{range_map2|}}}|&lt;br /&gt;
{{!}} colspan=2 style=&amp;quot;text-align: center&amp;quot; {{!}} {{#invoke:InfoboxImage|InfoboxImage|image={{{range_map2}}}|size={{{range_map2_width|}}}|sizedefault=frameless|upright={{#if:{{{range_map2_upright|}}}|{{{range_map2_upright}}}|{{{upright|1}}}}}|alt={{{range_map2_alt|}}}}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{#if:{{{range_map2_caption|}}}|&lt;br /&gt;
{{!}} colspan=2 style=&amp;quot;text-align: center; font-size: 88%&amp;quot; {{!}} {{{range_map2_caption}}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
{{#if:{{{binomial3|}}}|&lt;br /&gt;
{{!}} colspan=2 style=&amp;quot;text-align: center&amp;quot; {{!}} '''{{{binomial3}}}'''&amp;lt;br/&amp;gt;&amp;lt;div style=&amp;quot;font-size: 85%;&amp;quot;&amp;gt;{{{binomial3_authority|}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
{{!}}-&lt;br /&gt;
}}&lt;br /&gt;
{{#if:{{{trinomial3|}}}|&lt;br /&gt;
{{!}} colspan=2 style=&amp;quot;text-align: center&amp;quot; {{!}} '''{{{trinomial3}}}'''&amp;lt;br/&amp;gt;&amp;lt;div style=&amp;quot;font-size: 85%;&amp;quot;&amp;gt;{{{trinomial3_authority|}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
{{!}}-&lt;br /&gt;
}}&lt;br /&gt;
{{#if:{{{range_map3|}}}|&lt;br /&gt;
{{!}} colspan=2 style=&amp;quot;text-align: center&amp;quot; {{!}} {{#invoke:InfoboxImage|InfoboxImage|image={{{range_map3}}}|size={{{range_map3_width|}}}|sizedefault=frameless|upright={{#if:{{{range_map3_upright|}}}|{{{range_map3_upright}}}|{{{upright|1}}}}}|alt={{{range_map3_alt|}}}}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{#if:{{{range_map3_caption|}}}|&lt;br /&gt;
{{!}} colspan=2 style=&amp;quot;text-align: center; font-size: 88%&amp;quot; {{!}} {{{range_map3_caption}}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
{{#if:{{{binomial4|}}}|&lt;br /&gt;
{{!}} colspan=2 style=&amp;quot;text-align: center&amp;quot; {{!}} '''{{{binomial4}}}'''&amp;lt;br/&amp;gt;&amp;lt;div style=&amp;quot;font-size: 85%;&amp;quot;&amp;gt;{{{binomial4_authority|}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
{{!}}-&lt;br /&gt;
}}&lt;br /&gt;
{{#if:{{{trinomial4|}}}|&lt;br /&gt;
{{!}} colspan=2 style=&amp;quot;text-align: center&amp;quot; {{!}} '''{{{trinomial4}}}'''&amp;lt;br/&amp;gt;&amp;lt;div style=&amp;quot;font-size: 85%;&amp;quot;&amp;gt;{{{trinomial4_authority|}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
{{!}}-&lt;br /&gt;
}}&lt;br /&gt;
{{#if:{{{range_map4|}}}|&lt;br /&gt;
{{!}} colspan=2 style=&amp;quot;text-align: center&amp;quot; {{!}} {{#invoke:InfoboxImage|InfoboxImage|image={{{range_map4}}}|size={{{range_map4_width|}}}|sizedefault=frameless|upright={{#if:{{{range_map4_upright|}}}|{{{range_map4_upright}}}|{{{upright|1}}}}}|alt={{{range_map4_alt|}}}}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{#if:{{{range_map4_caption|}}}|&lt;br /&gt;
{{!}} colspan=2 style=&amp;quot;text-align: center; font-size: 88%&amp;quot; {{!}} {{{range_map4_caption}}}&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if:{{{synonyms|}}}|&lt;br /&gt;
! colspan=2 style=&amp;quot;text-align: center{{#if:{{{colour|}}}|{{;}} background-color: {{{colour}}} }}&amp;quot; {{!}} [[Synonym (taxonomy)|Synonyms]]{{{synonyms_ref|}}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} colspan=2 style=&amp;quot;text-align: left&amp;quot; {{!}}&lt;br /&gt;
{{{synonyms}}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
}}&lt;br /&gt;
{{#if:{{{footer|}}}|&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} colspan=2 style=&amp;quot;text-align: left&amp;quot; {{!}}&lt;br /&gt;
{{{footer}}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
}}&lt;br /&gt;
|}&amp;lt;!--&lt;br /&gt;
Define any categories to be displayed on the page here:&lt;br /&gt;
--&amp;gt;{{#ifeq:{{NAMESPACE}}|{{ns:0}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;| [[Категория:Статьи с микроформатом «вид»]]&amp;lt;!--&lt;br /&gt;
 --&amp;gt;{{#ifeq:{{{colour|none}}}|{{Taxobox/Error_colour}}| [[Category:Taxoboxes with the error color]]}}&amp;lt;!--&lt;br /&gt;
 --&amp;gt;{{#ifeq:{{{colour|none}}}|{{Taxobox colour|incertae sedis}}| [[Category:Taxoboxes with the incertae sedis color]]}}&amp;lt;!--&lt;br /&gt;
 --&amp;gt;{{#ifeq:{{{colour|none}}}|{{Taxobox colour|}}| [[Category:Taxoboxes with no color]]}}&amp;lt;!--&lt;br /&gt;
 --&amp;gt;{{Taxonbar/candidate}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;}}&amp;lt;noinclude&amp;gt;{{documentation}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fayanzār</name></author>
	</entry>
	<entry>
		<id>https://en.wiki.marraidh.com/index.php?title=Template:Taxobox/core&amp;diff=150</id>
		<title>Template:Taxobox/core</title>
		<link rel="alternate" type="text/html" href="https://en.wiki.marraidh.com/index.php?title=Template:Taxobox/core&amp;diff=150"/>
		<updated>2026-07-17T12:44:11Z</updated>

		<summary type="html">&lt;p&gt;Fayanzār: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;infobox biota&amp;quot; style=&amp;quot;text-align: left; width: 200px; font-size: 100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=2 style=&amp;quot;text-align: center{{#if:{{{colour|}}}|{{;}} background-color: {{{colour}}}|}}&amp;quot; | {{#if:{{{name|}}}|{{{name}}}|{{PAGENAME}} }}{{#if:{{{temporal_range|}}}|&amp;lt;br/&amp;gt;&amp;lt;div style=&amp;quot;font-size: 85%;&amp;quot;&amp;gt;Temporal range: {{{temporal_range}}}&amp;lt;/div&amp;gt;}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if:{{{image|}}}|&lt;br /&gt;
{{!}} colspan=2 style=&amp;quot;text-align: center&amp;quot; {{!}} {{#invoke:InfoboxImage|InfoboxImage|image={{{image}}}|size={{{image_width|}}}|sizedefault=frameless|upright={{{upright|1}}}|alt={{{image_alt|}}}}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{#if:{{{image_caption|}}}|&lt;br /&gt;
{{!}} colspan=2 style=&amp;quot;text-align: {{{image_caption_align|center}}}; font-size: 88%&amp;quot; {{!}} {{{image_caption}}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
{{#if:{{{image2|}}}|&lt;br /&gt;
{{!}} colspan=2 style=&amp;quot;text-align: center&amp;quot; {{!}} {{#invoke:InfoboxImage|InfoboxImage|image={{{image2}}}|size={{{image2_width|}}}|sizedefault=frameless|upright={{#if:{{{upright2|}}}|{{{upright2}}}|{{{upright|1}}}}}|alt={{{image2_alt|}}}}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{#if:{{{image2_caption|}}}|&lt;br /&gt;
{{!}} colspan=2 style=&amp;quot;text-align: center; font-size: 88%&amp;quot; {{!}} {{{image2_caption}}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
|- colspan=2 style=&amp;quot;text-align: center{{#if:{{{colour|}}}|{{;}} background-color: {{{colour}}} }}&amp;quot;&lt;br /&gt;
{{#if:{{{status|}}}|{{taxobox/species|{{{status_system|}}}|{{{status|}}}|{{{status_ref|}}}|extinct={{{extinct|}}} }} }}&lt;br /&gt;
|-{{#if:{{{status2|}}}|{{taxobox/species|{{{status2_system|}}}|{{{status2|}}}|{{{status2_ref|}}}|extinct={{{extinct|}}} }} }}&lt;br /&gt;
|-&lt;br /&gt;
! colspan=2 style=&amp;quot;min-width:15em; text-align: center{{#if:{{{colour|}}}|{{;}} background-color: {{{colour}}} }}&amp;quot; | {{#if:{{{virus_group|{{{virus|}}}}}}|[[Virus classification]]|{{#if:{{{ichnos|}}}|[[Trace fossil classification]]|{{#if:{{{veterovata|}}}|[[Egg fossil#Classification|Egg fossil classification]]|[https://ru.wikipedia.org/wiki/Таксон Научная классификация]}} }} }} {{#if:{{{edit link|}}}|{{edit taxonomy|{{{parent|}}} | {{{edit link}}} }} }}{{#if: {{{classification_status|}}} | &amp;lt;br/&amp;gt;&amp;lt;span style=&amp;quot;font-weight:normal&amp;quot;&amp;gt;({{{classification_status}}})&amp;lt;/span&amp;gt; | }}&lt;br /&gt;
|-&lt;br /&gt;
{{#if:{{{parent|}}}|{{#invoke:Autotaxobox|taxoboxList|{{{parent}}}| display_taxa={{{display_taxa|1}}}| authority={{{authority|}}}| parent_authority={{{parent_authority|}}}| gparent_authority={{{grandparent_authority|}}}| ggparent_authority={{{greatgrandparent_authority|}}}| gggparent_authority={{{greatgreatgrandparent_authority|}}}| offset={{{offset|0}}}| bold_first={{{bold_first|{{#if:{{{species|}}}|link|bold}}}}}| virus={{{virus|no}}}}}}}&lt;br /&gt;
{{#if:{{{virus_group|}}}|{{taxonomy|rank=group&lt;br /&gt;
|link= {{#switch:{{lc:{{{virus_group}}} }}&lt;br /&gt;
 |i=Group I &amp;lt;small&amp;gt;([[dsDNA virus|dsDNA]])&amp;lt;/small&amp;gt;&lt;br /&gt;
 |ii=Group II &amp;lt;small&amp;gt;([[ssDNA virus|ssDNA]])&amp;lt;/small&amp;gt;&lt;br /&gt;
 |iii=Group III &amp;lt;small&amp;gt;([[Double-stranded RNA viruses|dsRNA]])&amp;lt;/small&amp;gt;&lt;br /&gt;
 |iv=Group IV &amp;lt;small&amp;gt;([[Positive-sense single-stranded RNA virus|(+)ssRNA]])&amp;lt;/small&amp;gt;&lt;br /&gt;
 |v=Group V &amp;lt;small&amp;gt;([[Negative-sense single-stranded RNA virus|(−)ssRNA]])&amp;lt;/small&amp;gt;&lt;br /&gt;
 |vi=Group VI &amp;lt;small&amp;gt;([[ssRNA-RT virus|ssRNA-RT]])&amp;lt;/small&amp;gt;&lt;br /&gt;
 |vi/vii=Groups VI and VII&lt;br /&gt;
 |vii=Group VII &amp;lt;small&amp;gt;([[dsDNA-RT virus|dsDNA-RT]])&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 |{{{virus_group}}}&lt;br /&gt;
}} }} }}&lt;br /&gt;
{{#if:{{{unranked_superdomain|}}}|{{taxonomy|rank=unranked|link={{{unranked_superdomain}}} | auth={{{unranked_superdomain_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{superdomain|}}}|{{taxonomy|rank=superdomain|link={{{superdomain}}} | auth={{{superdomain_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_domain|}}}|{{taxonomy|rank=unranked|link={{{unranked_domain}}} | auth={{{unranked_domain_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{domain|}}}|{{taxonomy|rank=domain|link={{{domain}}} | auth={{{domain_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_superregnum|}}}|{{taxonomy|rank=unranked|link={{{unranked_superregnum}}} | auth={{{unranked_superregnum_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{superregnum|}}}|{{taxonomy|rank=superregnum|link={{{superregnum}}} | auth={{{superregnum_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_regnum|}}}|{{taxonomy|rank=unranked|link={{{unranked_regnum}}} | auth={{{unranked_regnum_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{regnum|}}}|{{taxonomy|rank=regnum|link={{{regnum}}} | auth={{{regnum_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_subregnum|}}}|{{taxonomy|rank=unranked|link={{{unranked_subregnum}}} | auth={{{unranked_subregnum_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{subregnum|}}}|{{taxonomy|rank=subregnum|link={{{subregnum}}} | auth={{{subregnum_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_superdivisio|}}}|{{taxonomy|rank=unranked|link={{{unranked_superdivisio}}} | auth={{{unranked_superdivisio_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{superdivisio|}}}|{{taxonomy|rank=superdivisio|link={{{superdivisio}}} | auth={{{superdivisio_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_superphylum|}}}|{{taxonomy|rank=unranked|link={{{unranked_superphylum}}} | auth={{{unranked_superphylum_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{superphylum|}}}|{{taxonomy|rank=superphylum|link={{{superphylum}}} | auth={{{superphylum_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_divisio|}}}|{{taxonomy|rank=unranked|link={{{unranked_divisio}}} | auth={{{unranked_divisio_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{divisio|}}}|{{taxonomy|rank=divisio|link={{{divisio}}} | auth={{{divisio_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_phylum|}}}|{{taxonomy|rank=unranked|link={{{unranked_phylum}}} | auth={{{unranked_phylum_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{phylum|}}}|{{taxonomy|rank=phylum|link={{{phylum}}} | auth={{{phylum_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_subdivisio|}}}|{{taxonomy|rank=unranked|link={{{unranked_subdivisio}}} | auth={{{unranked_subdivisio_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{subdivisio|}}}|{{taxonomy|rank=subdivisio|link={{{subdivisio}}} | auth={{{subdivisio_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_subphylum|}}}|{{taxonomy|rank=unranked|link={{{unranked_subphylum}}} | auth={{{unranked_subphylum_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{subphylum|}}}|{{taxonomy|rank=subphylum|link={{{subphylum}}} | auth={{{subphylum_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_infraphylum|}}}|{{taxonomy|rank=unranked|link={{{unranked_infraphylum}}} | auth={{{unranked_infraphylum_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{infraphylum|}}}|{{taxonomy|rank=infraphylum|link={{{infraphylum}}} | auth={{{infraphylum_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_microphylum|}}}|{{taxonomy|rank=unranked|link={{{unranked_microphylum}}} | auth={{{unranked_microphylum_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{microphylum|}}}|{{taxonomy|rank=microphylum|link={{{microphylum}}} | auth={{{microphylum_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_nanophylum|}}}|{{taxonomy|rank=unranked|link={{{unranked_nanophylum}}} | auth={{{unranked_nanophylum_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{nanophylum|}}}|{{taxonomy|rank=nanophylum|link={{{nanophylum}}} | auth={{{nanophylum_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_superclassis|}}}|{{taxonomy|rank=unranked|link={{{unranked_superclassis}}} | auth={{{unranked_superclassis_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{superclassis|}}}|{{taxonomy|rank=superclassis|link={{{superclassis}}} | auth={{{superclassis_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_classis|}}}|{{taxonomy|rank=unranked|link={{{unranked_classis}}} | auth={{{unranked_classis_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{classis|}}}|{{taxonomy|rank=classis|link={{{classis}}} | auth={{{classis_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_subclassis|}}}|{{taxonomy|rank=unranked|link={{{unranked_subclassis}}} | auth={{{unranked_subclassis_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{subclassis|}}}|{{taxonomy|rank=subclassis|link={{{subclassis}}} | auth={{{subclassis_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_infraclassis|}}}|{{taxonomy|rank=unranked|link={{{unranked_infraclassis}}} | auth={{{unranked_infraclassis_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{infraclassis|}}}|{{taxonomy|rank=infraclassis|link={{{infraclassis}}} | auth={{{infraclassis_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_magnordo|}}}|{{taxonomy|rank=unranked|link={{{unranked_magnordo}}} | auth={{{unranked_magnordo_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{magnordo|}}}|{{taxonomy|rank=magnordo|link={{{magnordo}}} | auth={{{magnordo_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_superordo|}}}|{{taxonomy|rank=unranked|link={{{unranked_superordo}}} | auth={{{unranked_superordo_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{superordo|}}}|{{taxonomy|rank=superordo|link={{{superordo}}} | auth={{{superordo_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_ordo|}}}|{{taxonomy|rank=unranked|link={{{unranked_ordo}}} | auth={{{unranked_ordo_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{ordo|}}}|{{taxonomy|rank=ordo|link={{{ordo}}} | auth={{{ordo_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_subordo|}}}|{{taxonomy|rank=unranked|link={{{unranked_subordo}}} | auth={{{unranked_subordo_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{subordo|}}}|{{taxonomy|rank=subordo|link={{{subordo}}} | auth={{{subordo_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_infraordo|}}}|{{taxonomy|rank=unranked|link={{{unranked_infraordo}}} | auth={{{unranked_infraordo_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{infraordo|}}}|{{taxonomy|rank=infraordo|link={{{infraordo}}} | auth={{{infraordo_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_parvordo|}}}|{{taxonomy|rank=unranked|link={{{unranked_parvordo}}} | auth={{{unranked_parvordo_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{parvordo|}}}|{{taxonomy|rank=parvorder|link={{{parvordo}}} | auth={{{parvordo_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_zoodivisio|}}}|{{taxonomy|rank=unranked|link={{{unranked_zoodivisio}}} | auth={{{unranked_zoodivisio_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{zoodivisio|}}}|{{taxonomy|rank=zoodivisio|link={{{zoodivisio}}} | auth={{{zoodivisio_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_zoosectio|}}}|{{taxonomy|rank=unranked|link={{{unranked_zoosectio}}} | auth={{{unranked_zoosectio_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{zoosectio|}}}|{{taxonomy|rank=zoosectio|link={{{zoosectio}}} | auth={{{zoosectio_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_zoosubsectio|}}}|{{taxonomy|rank=unranked|link={{{unranked_zoosubsectio}}} | auth={{{unranked_zoosubsectio_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{zoosubsectio|}}}|{{taxonomy|rank=zoosubsectio|link={{{zoosubsectio}}} | auth={{{zoosubsectio_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_superfamilia|}}}|{{taxonomy|rank=unranked|link={{{unranked_superfamilia}}} | auth={{{unranked_superfamilia_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{superfamilia|}}}|{{taxonomy|rank=superfamilia|link={{{superfamilia}}} | auth={{{superfamilia_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_familia|}}}|{{taxonomy|rank=unranked|link={{{unranked_familia}}} | auth={{{unranked_familia_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{familia|}}}|{{taxonomy|rank=familia|link={{{familia}}} | auth={{{familia_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_subfamilia|}}}|{{taxonomy|rank=unranked|link={{{unranked_subfamilia}}} | auth={{{unranked_subfamilia_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{subfamilia|}}}|{{taxonomy|rank=subfamilia|link={{{subfamilia}}} | auth={{{subfamilia_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_supertribus|}}}|{{taxonomy|rank=unranked|link={{{unranked_supertribus}}} | auth={{{unranked_supertribus_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{supertribus|}}}|{{taxonomy|rank=supertribus|link={{{supertribus}}} | auth={{{supertribus_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_tribus|}}}|{{taxonomy|rank=unranked|link={{{unranked_tribus}}} | auth={{{unranked_tribus_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{tribus|}}}|{{taxonomy|rank=tribus|link={{{tribus}}} | auth={{{tribus_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_subtribus|}}}|{{taxonomy|rank=unranked|link={{{unranked_subtribus}}} | auth={{{unranked_subtribus_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{subtribus|}}}|{{taxonomy|rank=subtribus|link={{{subtribus}}} | auth={{{subtribus_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_alliance|}}}|{{taxonomy|rank=unranked|link={{{unranked_alliance}}} | auth={{{unranked_alliance_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{alliance|}}}|{{taxonomy|rank=alliance|link={{{alliance}}} | auth={{{alliance_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_genus|}}}|{{taxonomy|rank=unranked|link={{{unranked_genus}}} | auth={{{unranked_genus_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{genus|}}}| {{taxonomy|rank=genus|link={{{genus}}}|auth={{{genus_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_subgenus|}}}|{{taxonomy|rank=unranked|link={{{unranked_subgenus}}} | auth={{{unranked_subgenus_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{subgenus|}}}|{{taxonomy|rank=subgenus|link={{{subgenus}}} | auth={{{subgenus_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_sectio|}}}|{{taxonomy|rank=unranked|link={{{unranked_sectio}}} | auth={{{unranked_sectio_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{sectio|}}}|{{taxonomy|rank=sectio|link={{{sectio}}} | auth={{{sectio_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_subsectio|}}}|{{taxonomy|rank=unranked|link={{{unranked_subsectio}}} | auth={{{unranked_subsectio_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{subsectio|}}}|{{taxonomy|rank=subsectio|link={{{subsectio}}} | auth={{{subsectio_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_series|}}}|{{taxonomy|rank=unranked|link={{{unranked_series}}} | auth={{{unranked_series_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{series|}}}|{{taxonomy|rank=series|link={{{series}}} | auth={{{series_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_subseries|}}}|{{taxonomy|rank=unranked|link={{{unranked_subseries}}} | auth={{{unranked_subseries_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{subseries|}}}|{{taxonomy|rank=subseries|link={{{subseries}}}|auth={{{subseries_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_species_group|}}}|{{taxonomy|rank=unranked|link={{{unranked_species_group}}} | auth={{{unranked_species_group_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{species_group|}}}|{{taxonomy|rank=species group|link={{{species_group}}} | auth={{{species_group_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_species_subgroup|}}}|{{taxonomy|rank=unranked|link={{{unranked_species_subgroup}}} | auth={{{unranked_species_subgroup_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{species_subgroup|}}}|{{taxonomy|rank=species subgroup|link={{{species_subgroup}}} | auth={{{species_subgroup_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_species_complex|}}}|{{taxonomy|rank=unranked|link={{{unranked_species_complex}}} | auth={{{unranked_species_complex_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{species_complex|}}}|{{taxonomy|rank=species complex|link={{{species_complex}}} | auth={{{species_complex_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_species|}}}|{{taxonomy|rank=unranked|link={{{unranked_species}}} | auth={{{unranked_species_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{species|}}}|{{taxonomy|rank=species|link={{{species}}} | auth={{{species_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{unranked_subspecies|}}}|{{taxonomy|rank=unranked|link={{{unranked_subspecies}}} | auth={{{unranked_subspecies_authority|}}} }} }}&lt;br /&gt;
{{#if:{{{subspecies|}}}|{{taxonomy|rank=subspecies|link={{{subspecies}}} | auth={{{subspecies_authority|}}}&lt;br /&gt;
}} }}&lt;br /&gt;
|-&lt;br /&gt;
{{#if:{{{unranked_varietas|{{{unranked_variety|}}}}}}|{{taxonomy|rank=unranked|link={{{unranked_varietas|{{{unranked_variety|}}}}}} | auth={{{unranked_varietas_authority|{{{unranked_variety_authority|}}}}}} }} }}&lt;br /&gt;
{{#if:{{{varietas|{{{variety|}}}}}}|{{taxonomy|rank=varietas|link={{{varietas|{{{variety}}}}}} | auth={{{varietas_authority|{{{variety_authority|}}}}}}&lt;br /&gt;
}} }}&lt;br /&gt;
{{#if:{{{forma|}}}|{{taxonomy|rank=forma|link={{{forma}}} | auth={{{forma_authority|}}}&lt;br /&gt;
}} }}&lt;br /&gt;
{{#if:{{{virus_infrasp|}}}|{{taxonomy|rank={{{virus_infrasp_rank|RANK MISSING}}}|link={{{virus_infrasp}}} | auth=&lt;br /&gt;
}} }}&lt;br /&gt;
|-&lt;br /&gt;
{{#if:{{{binomial|}}}|&lt;br /&gt;
! colspan=2 style=&amp;quot;text-align: center{{#if:{{{colour|}}}|{{;}} background-color: {{{colour}}} }}&amp;quot; {{!}} Binomial name&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} colspan=2 style=&amp;quot;text-align: center&amp;quot; {{!}} &amp;lt;b&amp;gt;&amp;lt;span class=&amp;quot;binomial&amp;quot;&amp;gt;{{{binomial}}}&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;div style=&amp;quot;font-size: 85%;&amp;quot;&amp;gt;{{{binomial_authority|}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
|- style=&amp;quot;text-align: center{{#if:{{{colour|}}}|{{;}} background-color: {{{colour}}} }}&amp;quot;&lt;br /&gt;
{{#if:{{{trinomial|}}}|&lt;br /&gt;
! colspan=2 style=&amp;quot;text-align: center&amp;quot; {{!}} [[{{#switch:{{{regnum|}}}|[[Animalia]]|[[Animal]]ia|Animalia=Trinomen|[[Plantae]]|[[Plant]]ae|Plantae|[[Fungi]]|[[Fungus|Fungi]]|Fungi|[[Archaeplastida]]|Archaeplastida=Infraspecific name (botany)|Trinomen}}|Trinomial name]]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} colspan=2 style=&amp;quot;text-align: center&amp;quot; {{!}} &amp;lt;b&amp;gt;&amp;lt;span class=&amp;quot;trinomial&amp;quot;&amp;gt;{{{trinomial}}}&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;div style=&amp;quot;font-size: 85%;&amp;quot;&amp;gt;{{{trinomial_authority|}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if:{{{type_genus|}}}|&lt;br /&gt;
! colspan=2 style=&amp;quot;text-align: center{{#if:{{{colour|}}}|{{;}} background-color: {{{colour|}}} }}&amp;quot;{{!}} [[Type genus]]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} colspan=2 style=&amp;quot;text-align: center&amp;quot; {{!}} {{{type_genus}}}&amp;lt;br/&amp;gt;&amp;lt;div style=&amp;quot;font-size: 85%;&amp;quot;&amp;gt;{{{type_genus_authority|}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if:{{{type_ichnogenus|}}}|&lt;br /&gt;
! colspan=2 style=&amp;quot;text-align: center{{#if:{{{colour|}}}|{{;}} background-color: {{{colour|}}} }}&amp;quot;{{!}} [[Type genus|Type ichnogenus]]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} colspan=2 style=&amp;quot;text-align: center&amp;quot; {{!}} {{{type_ichnogenus}}}&amp;lt;br/&amp;gt;&amp;lt;div style=&amp;quot;font-size: 85%;&amp;quot;&amp;gt;{{{type_ichnogenus_authority|}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if:{{{type_oogenus|}}}|&lt;br /&gt;
! colspan=2 style=&amp;quot;text-align: center{{#if:{{{colour|}}}|{{;}} background-color: {{{colour|}}} }}&amp;quot;{{!}} [[Type genus|Type oogenus]]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} colspan=2 style=&amp;quot;text-align: center&amp;quot; {{!}} {{{type_oogenus}}}&amp;lt;br/&amp;gt;&amp;lt;div style=&amp;quot;font-size: 85%;&amp;quot;&amp;gt;{{{type_oogenus_authority|}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if:{{{type_species|}}}|&lt;br /&gt;
! colspan=2 style=&amp;quot;text-align: center{{#if:{{{colour|}}}|{{;}} background-color: {{{colour}}} }}&amp;quot; {{!}} [[Type species]]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} colspan=2 style=&amp;quot;text-align: center&amp;quot; {{!}} {{{type_species}}}&amp;lt;br/&amp;gt;&amp;lt;div style=&amp;quot;font-size: 85%;&amp;quot;&amp;gt;{{{type_species_authority|}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if:{{{type_ichnospecies|}}}|&lt;br /&gt;
! colspan=2 style=&amp;quot;text-align: center{{#if:{{{colour|}}}|{{;}} background-color: {{{colour}}} }}&amp;quot; {{!}} [[Type species|Type ichnospecies]]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} colspan=2 style=&amp;quot;text-align: center&amp;quot; {{!}} {{{type_ichnospecies}}}&amp;lt;br/&amp;gt;&amp;lt;div style=&amp;quot;font-size: 85%;&amp;quot;&amp;gt;{{{type_ichnospecies_authority|}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if:{{{type_oospecies|}}}|&lt;br /&gt;
! colspan=2 style=&amp;quot;text-align: center{{#if:{{{colour|}}}|{{;}} background-color: {{{colour}}} }}&amp;quot; {{!}} [[Type species|Type oospecies]]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} colspan=2 style=&amp;quot;text-align: center&amp;quot; {{!}} {{{type_oospecies}}}&amp;lt;br/&amp;gt;&amp;lt;div style=&amp;quot;font-size: 85%;&amp;quot;&amp;gt;{{{type_oospecies_authority|}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if:{{{type_strain|}}}|&lt;br /&gt;
! colspan=2 style=&amp;quot;text-align: center{{#if:{{{colour|}}}|{{;}} background-color: {{{colour}}} }}&amp;quot; {{!}} [[Type strain]]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} colspan=2 style=&amp;quot;text-align: center&amp;quot; {{!}} {{{type_strain}}}&lt;br /&gt;
}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if:{{{subdivision|}}}|&lt;br /&gt;
! colspan=2 style=&amp;quot;text-align: center{{#if:{{{colour|}}}|{{;}} background-color: {{{colour}}} }}&amp;quot; {{!}} {{{subdivision_ranks}}}{{{subdivision_ref|}}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} colspan=2 style=&amp;quot;text-align: left&amp;quot; {{!}}&lt;br /&gt;
{{{subdivision|}}}&lt;br /&gt;
}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if:{{{possible_subdivision|}}}|&lt;br /&gt;
! colspan=2 style=&amp;quot;text-align: center{{#if:{{{colour|}}}|{{;}} background-color: {{{colour}}} }}&amp;quot; {{!}} {{{possible_subdivision_ranks}}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} colspan=2 style=&amp;quot;text-align: left&amp;quot; {{!}}&lt;br /&gt;
{{{possible_subdivision|}}}&lt;br /&gt;
}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if:{{{diversity|}}}|&lt;br /&gt;
! colspan=2 style=&amp;quot;text-align: center{{#if:{{{colour|}}}|{{;}} background-color: {{{colour}}} }}&amp;quot; {{!}} [[Biodiversity|Diversity]]{{{diversity_ref|}}} {{#ifeq: {{NAMESPACEE}} | {{ns:0}} | [[Category:Articles using diversity taxobox]] | }}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} colspan=2 style=&amp;quot;text-align: center&amp;quot; {{!}} {{#if:{{{diversity_link|}}}|[[{{{diversity_link|}}}|{{{diversity|}}}]]|{{{diversity|}}}}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
}}&lt;br /&gt;
{{#if:{{{range_map|}}}|&lt;br /&gt;
{{!}} colspan=2 style=&amp;quot;text-align: center&amp;quot; {{!}} {{#invoke:InfoboxImage|InfoboxImage|image={{{range_map}}}|size={{{range_map_width|}}}|sizedefault=frameless|upright={{#if:{{{range_map_upright|}}}|{{{range_map_upright}}}|{{{upright|1}}}}}|alt={{{range_map_alt|}}}}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{#if:{{{range_map_caption|}}}|&lt;br /&gt;
{{!}} colspan=2 style=&amp;quot;text-align: center; font-size: 88%&amp;quot; {{!}} {{{range_map_caption}}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
{{#if:{{{binomial2|}}}|&lt;br /&gt;
{{!}} colspan=2 style=&amp;quot;text-align: center&amp;quot; {{!}} '''{{{binomial2}}}'''&amp;lt;br/&amp;gt;&amp;lt;div style=&amp;quot;font-size: 85%;&amp;quot;&amp;gt;{{{binomial2_authority|}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
{{!}}-&lt;br /&gt;
}}&lt;br /&gt;
{{#if:{{{trinomial2|}}}|&lt;br /&gt;
{{!}} colspan=2 style=&amp;quot;text-align: center&amp;quot; {{!}} '''{{{trinomial2}}}'''&amp;lt;br/&amp;gt;&amp;lt;div style=&amp;quot;font-size: 85%;&amp;quot;&amp;gt;{{{trinomial2_authority|}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
{{!}}-&lt;br /&gt;
}}&lt;br /&gt;
{{#if:{{{range_map2|}}}|&lt;br /&gt;
{{!}} colspan=2 style=&amp;quot;text-align: center&amp;quot; {{!}} {{#invoke:InfoboxImage|InfoboxImage|image={{{range_map2}}}|size={{{range_map2_width|}}}|sizedefault=frameless|upright={{#if:{{{range_map2_upright|}}}|{{{range_map2_upright}}}|{{{upright|1}}}}}|alt={{{range_map2_alt|}}}}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{#if:{{{range_map2_caption|}}}|&lt;br /&gt;
{{!}} colspan=2 style=&amp;quot;text-align: center; font-size: 88%&amp;quot; {{!}} {{{range_map2_caption}}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
{{#if:{{{binomial3|}}}|&lt;br /&gt;
{{!}} colspan=2 style=&amp;quot;text-align: center&amp;quot; {{!}} '''{{{binomial3}}}'''&amp;lt;br/&amp;gt;&amp;lt;div style=&amp;quot;font-size: 85%;&amp;quot;&amp;gt;{{{binomial3_authority|}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
{{!}}-&lt;br /&gt;
}}&lt;br /&gt;
{{#if:{{{trinomial3|}}}|&lt;br /&gt;
{{!}} colspan=2 style=&amp;quot;text-align: center&amp;quot; {{!}} '''{{{trinomial3}}}'''&amp;lt;br/&amp;gt;&amp;lt;div style=&amp;quot;font-size: 85%;&amp;quot;&amp;gt;{{{trinomial3_authority|}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
{{!}}-&lt;br /&gt;
}}&lt;br /&gt;
{{#if:{{{range_map3|}}}|&lt;br /&gt;
{{!}} colspan=2 style=&amp;quot;text-align: center&amp;quot; {{!}} {{#invoke:InfoboxImage|InfoboxImage|image={{{range_map3}}}|size={{{range_map3_width|}}}|sizedefault=frameless|upright={{#if:{{{range_map3_upright|}}}|{{{range_map3_upright}}}|{{{upright|1}}}}}|alt={{{range_map3_alt|}}}}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{#if:{{{range_map3_caption|}}}|&lt;br /&gt;
{{!}} colspan=2 style=&amp;quot;text-align: center; font-size: 88%&amp;quot; {{!}} {{{range_map3_caption}}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
{{#if:{{{binomial4|}}}|&lt;br /&gt;
{{!}} colspan=2 style=&amp;quot;text-align: center&amp;quot; {{!}} '''{{{binomial4}}}'''&amp;lt;br/&amp;gt;&amp;lt;div style=&amp;quot;font-size: 85%;&amp;quot;&amp;gt;{{{binomial4_authority|}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
{{!}}-&lt;br /&gt;
}}&lt;br /&gt;
{{#if:{{{trinomial4|}}}|&lt;br /&gt;
{{!}} colspan=2 style=&amp;quot;text-align: center&amp;quot; {{!}} '''{{{trinomial4}}}'''&amp;lt;br/&amp;gt;&amp;lt;div style=&amp;quot;font-size: 85%;&amp;quot;&amp;gt;{{{trinomial4_authority|}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
{{!}}-&lt;br /&gt;
}}&lt;br /&gt;
{{#if:{{{range_map4|}}}|&lt;br /&gt;
{{!}} colspan=2 style=&amp;quot;text-align: center&amp;quot; {{!}} {{#invoke:InfoboxImage|InfoboxImage|image={{{range_map4}}}|size={{{range_map4_width|}}}|sizedefault=frameless|upright={{#if:{{{range_map4_upright|}}}|{{{range_map4_upright}}}|{{{upright|1}}}}}|alt={{{range_map4_alt|}}}}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{#if:{{{range_map4_caption|}}}|&lt;br /&gt;
{{!}} colspan=2 style=&amp;quot;text-align: center; font-size: 88%&amp;quot; {{!}} {{{range_map4_caption}}}&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if:{{{synonyms|}}}|&lt;br /&gt;
! colspan=2 style=&amp;quot;text-align: center{{#if:{{{colour|}}}|{{;}} background-color: {{{colour}}} }}&amp;quot; {{!}} [[Synonym (taxonomy)|Synonyms]]{{{synonyms_ref|}}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} colspan=2 style=&amp;quot;text-align: left&amp;quot; {{!}}&lt;br /&gt;
{{{synonyms}}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
}}&lt;br /&gt;
{{#if:{{{footer|}}}|&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} colspan=2 style=&amp;quot;text-align: left&amp;quot; {{!}}&lt;br /&gt;
{{{footer}}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
}}&lt;br /&gt;
|}&amp;lt;!--&lt;br /&gt;
Define any categories to be displayed on the page here:&lt;br /&gt;
--&amp;gt;{{#ifeq:{{NAMESPACE}}|{{ns:0}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;| [[Категория:Статьи с микроформатом «вид»]]&amp;lt;!--&lt;br /&gt;
 --&amp;gt;{{#ifeq:{{{colour|none}}}|{{Taxobox/Error_colour}}| [[Category:Taxoboxes with the error color]]}}&amp;lt;!--&lt;br /&gt;
 --&amp;gt;{{#ifeq:{{{colour|none}}}|{{Taxobox colour|incertae sedis}}| [[Category:Taxoboxes with the incertae sedis color]]}}&amp;lt;!--&lt;br /&gt;
 --&amp;gt;{{#ifeq:{{{colour|none}}}|{{Taxobox colour|}}| [[Category:Taxoboxes with no color]]}}&amp;lt;!--&lt;br /&gt;
 --&amp;gt;{{Taxonbar/candidate}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;}}&amp;lt;noinclude&amp;gt;{{documentation}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fayanzār</name></author>
	</entry>
	<entry>
		<id>https://en.wiki.marraidh.com/index.php?title=Jearth&amp;diff=149</id>
		<title>Jearth</title>
		<link rel="alternate" type="text/html" href="https://en.wiki.marraidh.com/index.php?title=Jearth&amp;diff=149"/>
		<updated>2026-07-17T12:43:20Z</updated>

		<summary type="html">&lt;p&gt;Fayanzār: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Taxobox &lt;br /&gt;
| name               = Dears modernus&lt;br /&gt;
| image              = Jearth.png&lt;br /&gt;
| image_width        = 260px&lt;br /&gt;
| image_alt          = &lt;br /&gt;
| image_caption      = Graphic representation of a male and female of the most common subspecies, ''D. modernus leoides''.&lt;br /&gt;
| regnum             = Animalia&lt;br /&gt;
| phylum             = Chordata&lt;br /&gt;
| classis            = Mammalia&lt;br /&gt;
| ordo               = Carnivora&lt;br /&gt;
| subordo            = Feliformia&lt;br /&gt;
| familia            = Felidae&lt;br /&gt;
| genus              = Dears&lt;br /&gt;
| species            = Dears modernus&lt;br /&gt;
| binomial           = ''Dears modernus''&lt;br /&gt;
| binomial_authority = Gur Royq, 1760&lt;br /&gt;
| subdivision_ranks = Subspecies&lt;br /&gt;
| subdivision = &lt;br /&gt;
{{Species list&lt;br /&gt;
|Dears modernus canoides|&lt;br /&gt;
|Dears modernus leoides|&lt;br /&gt;
|Dears modernus lyncoides|}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[ru:Джеарт современный]]&lt;/div&gt;</summary>
		<author><name>Fayanzār</name></author>
	</entry>
	<entry>
		<id>https://en.wiki.marraidh.com/index.php?title=File:Jearth.png&amp;diff=148</id>
		<title>File:Jearth.png</title>
		<link rel="alternate" type="text/html" href="https://en.wiki.marraidh.com/index.php?title=File:Jearth.png&amp;diff=148"/>
		<updated>2026-07-17T12:42:18Z</updated>

		<summary type="html">&lt;p&gt;Fayanzār: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Fayanzār</name></author>
	</entry>
	<entry>
		<id>https://en.wiki.marraidh.com/index.php?title=Jearth&amp;diff=147</id>
		<title>Jearth</title>
		<link rel="alternate" type="text/html" href="https://en.wiki.marraidh.com/index.php?title=Jearth&amp;diff=147"/>
		<updated>2026-07-17T12:40:45Z</updated>

		<summary type="html">&lt;p&gt;Fayanzār: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Taxobox &lt;br /&gt;
| name               = Dears modernus&lt;br /&gt;
| image              = Jearth.png&lt;br /&gt;
| image_width        = 260px&lt;br /&gt;
| image_alt          = &lt;br /&gt;
| image_caption      = Графическое представление мужчины и женщины наиболее распространённого подвида — ''D. modernus leoides''.&lt;br /&gt;
| regnum             = Animalia&lt;br /&gt;
| phylum             = Chordata&lt;br /&gt;
| classis            = Mammalia&lt;br /&gt;
| ordo               = Carnivora&lt;br /&gt;
| subordo            = Feliformia&lt;br /&gt;
| familia            = Felidae&lt;br /&gt;
| genus              = Dears&lt;br /&gt;
| species            = Dears modernus&lt;br /&gt;
| binomial           = ''Dears modernus''&lt;br /&gt;
| binomial_authority = Gur Royq, 1760&lt;br /&gt;
| subdivision_ranks = Subspecies&lt;br /&gt;
| subdivision = &lt;br /&gt;
{{Species list&lt;br /&gt;
|Dears modernus canoides|&lt;br /&gt;
|Dears modernus leoides|&lt;br /&gt;
|Dears modernus lyncoides|}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[ru:Джеарт современный]]&lt;/div&gt;</summary>
		<author><name>Fayanzār</name></author>
	</entry>
	<entry>
		<id>https://en.wiki.marraidh.com/index.php?title=Template:Anglicise_rank&amp;diff=146</id>
		<title>Template:Anglicise rank</title>
		<link rel="alternate" type="text/html" href="https://en.wiki.marraidh.com/index.php?title=Template:Anglicise_rank&amp;diff=146"/>
		<updated>2026-07-17T12:37:28Z</updated>

		<summary type="html">&lt;p&gt;Fayanzār: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&amp;lt;!--Note that #titleparts: is used to replace underscores by spaces before other processing.&lt;br /&gt;
--&amp;gt;&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;{{#ifeq:{{str_left|{{lc:{{{1}}}}}|8}}|unranked|(unranked)|{{#switch:{{lc:{{#titleparts:{{{1}}}|1}} }}&amp;lt;!--&lt;br /&gt;
--Special cases, alphabetic order--&amp;gt;&lt;br /&gt;
|alliance=''Alliance''&lt;br /&gt;
|basic shell type=''Basic shell type''&lt;br /&gt;
|branch=''Branch''&lt;br /&gt;
|clade|cladus=''Clade''&lt;br /&gt;
|form taxon=''Form taxon''&lt;br /&gt;
|grade|gradus=''Grade''&lt;br /&gt;
|informal|informal group=''Informal group''&lt;br /&gt;
|morphotype=''Morphotype''&lt;br /&gt;
|node=''Node''&lt;br /&gt;
|plesion=''Plesion''&lt;br /&gt;
|plesion-group=''Plesion-group''&lt;br /&gt;
|possible clade=''Clade?''&lt;br /&gt;
|species complex=''Species complex''&lt;br /&gt;
|species group=''Species group''&lt;br /&gt;
|species subgroup=''Species subgroup''&lt;br /&gt;
|stem group=''Stem group''&lt;br /&gt;
|total group=''Total group''&lt;br /&gt;
&amp;lt;!--Specia virus ranks --&amp;gt;&lt;br /&gt;
|realm=Realm&lt;br /&gt;
|serotype=Serotype&lt;br /&gt;
|strain=Strain&lt;br /&gt;
|virus=Virus&lt;br /&gt;
|virus group=Group&lt;br /&gt;
&amp;lt;!--Linnaean taxonomy, alphabetic order--&amp;gt;&lt;br /&gt;
|classis=Class&lt;br /&gt;
|cohort=Cohort&lt;br /&gt;
|divisio=Division&lt;br /&gt;
|domain=Domain&lt;br /&gt;
|epifamilia=Epifamily&lt;br /&gt;
|familia=Family&lt;br /&gt;
|forma=Form&lt;br /&gt;
|genus=Genus&lt;br /&gt;
|grandordo|grandordo-mb&amp;lt;!--McKenna &amp;amp; Bell version--&amp;gt;=Grandorder&lt;br /&gt;
|hyperfamilia=Hyperfamily&lt;br /&gt;
|infraclassis=Infraclass&lt;br /&gt;
|infralegio|infralegion=Infralegion&lt;br /&gt;
|infraordo=Infraorder&lt;br /&gt;
|infraphylum=Infraphylum&lt;br /&gt;
|infraregnum=Infrakingdom&lt;br /&gt;
|infratribus=Infratribe&lt;br /&gt;
|legio|legion=Legion&lt;br /&gt;
|magnordo=Magnorder&lt;br /&gt;
|micrordo=Microrder&lt;br /&gt;
|microphylum=Microphylum&lt;br /&gt;
|mirordo|mirordo-mb&amp;lt;!--McKenna &amp;amp; Bell version--&amp;gt;=Mirorder&lt;br /&gt;
|nanordo=Nanorder&lt;br /&gt;
|nanophylum=Nanophylum&lt;br /&gt;
|ordo=Order&lt;br /&gt;
|parafamilia=Parafamily&lt;br /&gt;
|parvclassis=Parvclass&lt;br /&gt;
|parvordo=Parvorder&lt;br /&gt;
|phylum=Phylum&lt;br /&gt;
|regnum=Kingdom&lt;br /&gt;
|sectio=Section&lt;br /&gt;
|series=Series&lt;br /&gt;
|species=Species&lt;br /&gt;
|subclassis=Subclass&lt;br /&gt;
|subcohort=Subcohort&lt;br /&gt;
|subdivisio=Subdivision&lt;br /&gt;
|subfamilia=Subfamily&lt;br /&gt;
|subgenus=Subgenus&lt;br /&gt;
|sublegio|sublegion=Sublegion&lt;br /&gt;
|subordo=Suborder&lt;br /&gt;
|subphylum=Subphylum&lt;br /&gt;
|subregnum=Subkingdom&lt;br /&gt;
|subsectio=Subsection&lt;br /&gt;
|subseries=Subseries&lt;br /&gt;
|subspecies=Subspecies&lt;br /&gt;
|subterclassis=Subterclass&amp;lt;!--used in WoRMS--&amp;gt;&lt;br /&gt;
|subtribus=Subtribe&lt;br /&gt;
|superclassis=Superclass&lt;br /&gt;
|supercohort=Supercohort&lt;br /&gt;
|superdivisio=Superdivision&lt;br /&gt;
|superdomain=Superdomain&lt;br /&gt;
|superfamilia=Superfamily&lt;br /&gt;
|superlegio|superlegion=Superlegion&lt;br /&gt;
|superordo=Superorder&lt;br /&gt;
|superphylum=Superphylum&lt;br /&gt;
|superregnum=Superkingdom&lt;br /&gt;
|supersectio=Supersection&lt;br /&gt;
|supertribus=Supertribe&lt;br /&gt;
|tribus=Tribe&lt;br /&gt;
|varietas=Variety&lt;br /&gt;
|zoodivisio=Division&lt;br /&gt;
|zoosectio=Section&lt;br /&gt;
|zooseries=Series&lt;br /&gt;
|zoosubdivisio=Subdivision&lt;br /&gt;
|zoosubsectio=Subsection&lt;br /&gt;
&amp;lt;!--trace fossil taxonomy, alphabetic order--&amp;gt;&lt;br /&gt;
|ichnoclassis=Ichnoclass&lt;br /&gt;
|ichnocohort=Ichnocohort&lt;br /&gt;
|ichnodivisio=Ichnodivision&lt;br /&gt;
|ichnofamilia=Ichnofamily&lt;br /&gt;
|ichnogenus=Ichnogenus&lt;br /&gt;
|ichnograndordo|ichnograndordo-mb&amp;lt;!--McKenna &amp;amp; Bell version--&amp;gt;=Ichnograndorder&lt;br /&gt;
|ichnoinfraclassis=Ichnoinfraclass&lt;br /&gt;
|ichnoinfradivisio=Ichnoinfradivision&lt;br /&gt;
|ichnoinfraordo=Ichnoinfraorder&lt;br /&gt;
|ichnolegio|ichnolegion=Ichnolegion&lt;br /&gt;
|ichnomagnordo=Ichnomagnorder&lt;br /&gt;
|ichnomicrordo=Ichnomicrorder&lt;br /&gt;
|ichnoordo=Ichnoorder&lt;br /&gt;
|ichnoparvordo=Ichnoparvorder&lt;br /&gt;
|ichnospecies=Ichnospecies&lt;br /&gt;
|ichnostem-group=Ichnostem-Group&lt;br /&gt;
|ichnosubclassis=Ichnosubclass&lt;br /&gt;
|ichnosubdivisio=Ichnosubdivision&lt;br /&gt;
|ichnosubfamilia=Ichnosubfamily&lt;br /&gt;
|ichnosublegio|ichnosublegion=Ichnosublegion&lt;br /&gt;
|ichnosubordo=Ichnosuborder&lt;br /&gt;
|ichnosuperclassis=Ichnosuperclass&lt;br /&gt;
|ichnosupercohort=Ichnosupercohort&lt;br /&gt;
|ichnosuperfamilia=Ichnosuperfamily&lt;br /&gt;
|ichnosuperordo=Ichnosuperorder&lt;br /&gt;
&amp;lt;!--fossilized egg taxonomy, alphabetic order--&amp;gt;&lt;br /&gt;
|ooclassis=Ooclass&lt;br /&gt;
|oocohort=Oocohort&lt;br /&gt;
|oofamilia=Oofamily&lt;br /&gt;
|oogenus=Oogenus&lt;br /&gt;
|oomagnordo=Oomagnorder&lt;br /&gt;
|oordo=Oorder&lt;br /&gt;
|oospecies=Oospecies&lt;br /&gt;
|oosubclassis=Oosubclass&lt;br /&gt;
|oosubgenus=Oosubgenus&lt;br /&gt;
|oosubspecies=Oosubspecies&lt;br /&gt;
|oosupercohort=Oosupercohort&lt;br /&gt;
|oosuperordo=Oosuperorder&lt;br /&gt;
&amp;lt;!--default is to capitalize first letter and then put calling page in error category--&amp;gt;&lt;br /&gt;
|#default={{#ifeq:{{{check|no}}}|yes|&amp;lt;span style=&amp;quot;background-color:#F99&amp;quot;&amp;gt;}}{{ucfirst:{{#titleparts:{{{1}}}|1}}}}{{#ifeq:{{{check|no}}}|yes|&amp;lt;/span&amp;gt;{{#ifeq:{{#titleparts:{{PAGENAME}}|1}}|Taxonomy|[[Category:Taxonomy templates using unrecognized rank parameters]]}}}}&lt;br /&gt;
}}{{#ifeq:{{{check|no}}}|yes|{{#ifeq:{{lcfirst:{{{1}}}}}|{{{1}}}||{{#ifeq:{{#titleparts:{{PAGENAME}}|1}}|Taxonomy|[[Category:Taxonomy templates using capitalized rank parameters]]}}}}}}}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;{{documentation}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fayanzār</name></author>
	</entry>
	<entry>
		<id>https://en.wiki.marraidh.com/index.php?title=Template:Template_other&amp;diff=145</id>
		<title>Template:Template other</title>
		<link rel="alternate" type="text/html" href="https://en.wiki.marraidh.com/index.php?title=Template:Template_other&amp;diff=145"/>
		<updated>2026-07-17T12:33:58Z</updated>

		<summary type="html">&lt;p&gt;Fayanzār: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#switch:&lt;br /&gt;
  &amp;lt;!--If no or empty &amp;quot;demospace&amp;quot; parameter then detect namespace--&amp;gt;&lt;br /&gt;
  {{#if:{{{demospace|}}}&lt;br /&gt;
  | {{lc: {{{demospace}}} }}    &amp;lt;!--Use lower case &amp;quot;demospace&amp;quot;--&amp;gt;&lt;br /&gt;
  | {{#ifeq:{{NAMESPACE}}|{{ns:Template}}&lt;br /&gt;
    | template&lt;br /&gt;
    | other&lt;br /&gt;
    }}&lt;br /&gt;
  }}&lt;br /&gt;
| template = {{{1|}}}&lt;br /&gt;
| other&lt;br /&gt;
| #default = {{{2|}}}&lt;br /&gt;
}}&amp;lt;!--End switch--&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&amp;lt;!-- Add categories and interwikis to the /doc subpage, not here! --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fayanzār</name></author>
	</entry>
	<entry>
		<id>https://en.wiki.marraidh.com/index.php?title=Template:Taxonomy/nobreak&amp;diff=143</id>
		<title>Template:Taxonomy/nobreak</title>
		<link rel="alternate" type="text/html" href="https://en.wiki.marraidh.com/index.php?title=Template:Taxonomy/nobreak&amp;diff=143"/>
		<updated>2026-07-17T12:33:57Z</updated>

		<summary type="html">&lt;p&gt;Fayanzār: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#invoke:String|replace|{{#invoke:String|replace|{{#invoke:String|replace|{{#ifexpr:{{Str find|{{{1|}}}|. }}&amp;gt;1|{{str rep|{{{1|}}}|. |.&amp;amp;nbsp;}}|{{{1|}}}}}|&amp;lt;br&amp;gt;&lt;br /&gt;
|&amp;lt;br&amp;gt;|plain_flag=false}}|&amp;lt;br/&amp;gt;&lt;br /&gt;
|&amp;lt;br&amp;gt;|plain_flag=false}}|&amp;lt;br /&amp;gt;&lt;br /&gt;
|&amp;lt;br&amp;gt;|plain_flag=false}}&amp;lt;noinclude&amp;gt;{{documentation}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fayanzār</name></author>
	</entry>
	<entry>
		<id>https://en.wiki.marraidh.com/index.php?title=Template:Taxonomy&amp;diff=141</id>
		<title>Template:Taxonomy</title>
		<link rel="alternate" type="text/html" href="https://en.wiki.marraidh.com/index.php?title=Template:Taxonomy&amp;diff=141"/>
		<updated>2026-07-17T12:33:57Z</updated>

		<summary type="html">&lt;p&gt;Fayanzār: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{#if:{{{rank|}}}|&amp;lt;!--&lt;br /&gt;
Cell stating the rank: &lt;br /&gt;
--&amp;gt;&lt;br /&gt;
{{!}} {{anglicise rank|{{{rank|}}}}}:&amp;lt;!--&lt;br /&gt;
Cell stating the taxon's name, with authority:&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
{{!}} &amp;lt;div style=&amp;quot;display:inline&amp;quot; class=&amp;quot;{{lc:{{anglicise rank|{{{rank}}} }} }}&amp;quot;&amp;gt;{{Taxonomy/nobreak|{{{link}}}}}&amp;lt;/div&amp;gt;{{#if:{{{auth|}}}&lt;br /&gt;
|&amp;lt;br /&amp;gt;&amp;lt;div style=&amp;quot;font-size: 85%;&amp;quot;&amp;gt;{{{auth}}}&amp;lt;/div&amp;gt;}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;{{documentation}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fayanzār</name></author>
	</entry>
	<entry>
		<id>https://en.wiki.marraidh.com/index.php?title=Template:Taxonbar/candidate&amp;diff=139</id>
		<title>Template:Taxonbar/candidate</title>
		<link rel="alternate" type="text/html" href="https://en.wiki.marraidh.com/index.php?title=Template:Taxonbar/candidate&amp;diff=139"/>
		<updated>2026-07-17T12:33:57Z</updated>

		<summary type="html">&lt;p&gt;Fayanzār: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fayanzār</name></author>
	</entry>
	<entry>
		<id>https://en.wiki.marraidh.com/index.php?title=Template:Taxon_list&amp;diff=137</id>
		<title>Template:Taxon list</title>
		<link rel="alternate" type="text/html" href="https://en.wiki.marraidh.com/index.php?title=Template:Taxon_list&amp;diff=137"/>
		<updated>2026-07-17T12:33:57Z</updated>

		<summary type="html">&lt;p&gt;Fayanzār: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{#invoke:TaxonList|main|incomplete={{{incomplete|no}}}}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;{{documentation|content={{Template:Species list/doc|Taxonlist}}}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fayanzār</name></author>
	</entry>
	<entry>
		<id>https://en.wiki.marraidh.com/index.php?title=Template:Subst&amp;diff=135</id>
		<title>Template:Subst</title>
		<link rel="alternate" type="text/html" href="https://en.wiki.marraidh.com/index.php?title=Template:Subst&amp;diff=135"/>
		<updated>2026-07-17T12:33:55Z</updated>

		<summary type="html">&lt;p&gt;Fayanzār: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;amp;#123;&amp;amp;#123;subst:[[Template:{{{1}}}|{{{1}}}]]&amp;amp;#125;&amp;amp;#125;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Documentation}}&lt;br /&gt;
&amp;lt;!-- Please add categories to the /doc subpage; interwikis go to Wikidata --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fayanzār</name></author>
	</entry>
	<entry>
		<id>https://en.wiki.marraidh.com/index.php?title=Template:Stub_documentation&amp;diff=133</id>
		<title>Template:Stub documentation</title>
		<link rel="alternate" type="text/html" href="https://en.wiki.marraidh.com/index.php?title=Template:Stub_documentation&amp;diff=133"/>
		<updated>2026-07-17T12:33:55Z</updated>

		<summary type="html">&lt;p&gt;Fayanzār: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a '''stub template'''. A brief explanation of these templates follows; for full details please consult [[Wikipedia:Stub]]. &lt;br /&gt;
&lt;br /&gt;
=== What is a stub? ===&lt;br /&gt;
A stub is an article containing only a few sentences of text which is too short to provide encyclopedic coverage of a subject.&lt;br /&gt;
&lt;br /&gt;
=== How is a stub identified? ===&lt;br /&gt;
* If possible, try to find the most appropriate stub template for the article. A full list can be found at [[Wikipedia:WikiProject Stub sorting/List of stubs]].&lt;br /&gt;
* More than one stub template may be used, if necessary, though no more than four should be used on any article.&lt;br /&gt;
* Place a stub template ''[[Wikipedia:Manual of Style/Layout#Order of article elements|at the very end]]'' of the article, after the &amp;quot;External links&amp;quot; section, any navigation templates, and the category tags. As usual, templates are added by including their name inside double braces, e.g. &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{stub}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Further information ===&lt;br /&gt;
&lt;br /&gt;
Further information can be found at:&lt;br /&gt;
* [[Wikipedia:Stub]]&lt;br /&gt;
* [[Wikipedia:WikiProject Stub sorting]]&lt;br /&gt;
&lt;br /&gt;
New stub templates and categories (collectively &amp;quot;stub types&amp;quot;) should not be created without prior proposal at [[Wikipedia:WikiProject Stub sorting/Proposals]]. This allows for the proper coordination of all stub types across Wikipedia, and for the checking of any new stub type for possible problems prior to its creation.&lt;br /&gt;
&lt;br /&gt;
=== See also ===&lt;br /&gt;
* [[Template:Empty section]] – To flag an empty section as a '''stub section'''&lt;br /&gt;
* [[Template:Expand section]] – To flag sections selectively as incomplete&lt;br /&gt;
* [[Template:Data missing]] – To flag missing information or other data&lt;br /&gt;
* [[Wikipedia:Content assessment]] &lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Template documentation]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fayanzār</name></author>
	</entry>
	<entry>
		<id>https://en.wiki.marraidh.com/index.php?title=Template:Stub-meta&amp;diff=131</id>
		<title>Template:Stub-meta</title>
		<link rel="alternate" type="text/html" href="https://en.wiki.marraidh.com/index.php?title=Template:Stub-meta&amp;diff=131"/>
		<updated>2026-07-17T12:33:54Z</updated>

		<summary type="html">&lt;p&gt;Fayanzār: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ambox&lt;br /&gt;
 |name       = Stub-meta&lt;br /&gt;
 |type       = style&lt;br /&gt;
 |style      = border:0; background:none; margin:0; font-style:italic;&lt;br /&gt;
 |image      = {{#if: {{{texticon|}}} | {{{texticon|}}} | [[Файл:{{{image|Wiki letter w.svg}}}|{{#if: {{{size|}}} | {{#if: {{без цифр|{{{size}}}}} | {{{size}}} | {{{size}}}x{{{size}}}px }} | 40x40px }}|{{{alt|Заготовка статьи}}}]] }}&lt;br /&gt;
 |text       = Это [[Википедия:Заготовка статьи|заготовка статьи]]{{#if: {{{article|}}} | {{sp}}{{{article}}} }}. Вы можете помочь проекту, дополнив её.&lt;br /&gt;
 |text-small = {{#if: {{{specification|}}} |Это примечание по возможности следует заменить [[:{{{specification}}}|более точным]].}}&lt;br /&gt;
}}&amp;lt;includeonly&amp;gt;{{#switch: {{NAMESPACE}}&lt;br /&gt;
| {{ns:10}} &amp;lt;!-- если в шаблоне --&amp;gt; = Template автоматически включает статьи в категорию «Незавершённые статьи &amp;lt;nowiki&amp;gt;{{{category}}}&amp;lt;/nowiki&amp;gt;», в данном случае в {{c|Незавершённые статьи {{{category|}}}|В}}.&lt;br /&gt;
{{#ifeq: {{SUBPAGENAME}} | doc || [[Категория:Templateы:Незавершённые статьи:Все]] }}{{#if: {{{specification|}}} | [[Категория:Templateы:Незавершённые статьи:Требующие уточнения]] }}&lt;br /&gt;
| {{ns:0}} &amp;lt;!-- если в статье --&amp;gt; = [[Категория:Незавершённые статьи {{{category|}}}]]{{#if: {{{specification|}}} | [[Категория:Незавершённые статьи, требующие уточнения шаблона]] }}&lt;br /&gt;
}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{doc}}&lt;br /&gt;
&amp;lt;!-- Пожалуйста, добавляйте категории на страницу документации! --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fayanzār</name></author>
	</entry>
	<entry>
		<id>https://en.wiki.marraidh.com/index.php?title=Template:Str_rep&amp;diff=129</id>
		<title>Template:Str rep</title>
		<link rel="alternate" type="text/html" href="https://en.wiki.marraidh.com/index.php?title=Template:Str_rep&amp;diff=129"/>
		<updated>2026-07-17T12:33:54Z</updated>

		<summary type="html">&lt;p&gt;Fayanzār: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#invoke:String|replace|source={{{1}}}|{{{2}}}|{{{3}}}|1}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Documentation}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fayanzār</name></author>
	</entry>
	<entry>
		<id>https://en.wiki.marraidh.com/index.php?title=Template:Str_left&amp;diff=127</id>
		<title>Template:Str left</title>
		<link rel="alternate" type="text/html" href="https://en.wiki.marraidh.com/index.php?title=Template:Str_left&amp;diff=127"/>
		<updated>2026-07-17T12:33:54Z</updated>

		<summary type="html">&lt;p&gt;Fayanzār: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{safesubst:padleft:|{{{2|1}}}|{{{1}}}}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&amp;lt;!-- Categories go on the /doc subpage, and interwikis go on Wikidata. --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fayanzār</name></author>
	</entry>
	<entry>
		<id>https://en.wiki.marraidh.com/index.php?title=Template:Str_find0&amp;diff=125</id>
		<title>Template:Str find0</title>
		<link rel="alternate" type="text/html" href="https://en.wiki.marraidh.com/index.php?title=Template:Str_find0&amp;diff=125"/>
		<updated>2026-07-17T12:33:54Z</updated>

		<summary type="html">&lt;p&gt;Fayanzār: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#expr:{{#invoke:String|find|source={{{1}}}|target={{{2}}}}} - 1}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fayanzār</name></author>
	</entry>
	<entry>
		<id>https://en.wiki.marraidh.com/index.php?title=Template:Str_find&amp;diff=123</id>
		<title>Template:Str find</title>
		<link rel="alternate" type="text/html" href="https://en.wiki.marraidh.com/index.php?title=Template:Str_find&amp;diff=123"/>
		<updated>2026-07-17T12:33:54Z</updated>

		<summary type="html">&lt;p&gt;Fayanzār: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#invoke:String|str_find|source={{{1|}}}|{{{2|}}}}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fayanzār</name></author>
	</entry>
	<entry>
		<id>https://en.wiki.marraidh.com/index.php?title=Template:Species_list&amp;diff=121</id>
		<title>Template:Species list</title>
		<link rel="alternate" type="text/html" href="https://en.wiki.marraidh.com/index.php?title=Template:Species_list&amp;diff=121"/>
		<updated>2026-07-17T12:33:53Z</updated>

		<summary type="html">&lt;p&gt;Fayanzār: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{#invoke:TaxonList|main|italic=yes|incomplete={{{incomplete|no}}}}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;{{documentation|Template:Species list/doc}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fayanzār</name></author>
	</entry>
	<entry>
		<id>https://en.wiki.marraidh.com/index.php?title=Template:Sets_taxobox_colour&amp;diff=119</id>
		<title>Template:Sets taxobox colour</title>
		<link rel="alternate" type="text/html" href="https://en.wiki.marraidh.com/index.php?title=Template:Sets_taxobox_colour&amp;diff=119"/>
		<updated>2026-07-17T12:33:53Z</updated>

		<summary type="html">&lt;p&gt;Fayanzār: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{#ifeq:{{padleft:|1|{{Taxobox colour|{{{1|}}}}}}}|r&lt;br /&gt;
|{{#ifexpr:{{str find0|{{{1|}}}|incertae}}=-1|{{{1|}}}{{{sep|,}}}}}&lt;br /&gt;
}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fayanzār</name></author>
	</entry>
	<entry>
		<id>https://en.wiki.marraidh.com/index.php?title=Template:Linked_taxon_list&amp;diff=117</id>
		<title>Template:Linked taxon list</title>
		<link rel="alternate" type="text/html" href="https://en.wiki.marraidh.com/index.php?title=Template:Linked_taxon_list&amp;diff=117"/>
		<updated>2026-07-17T12:33:53Z</updated>

		<summary type="html">&lt;p&gt;Fayanzār: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{#invoke:TaxonList|main|linked=yes|incomplete={{{incomplete|no}}}}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;{{documentation|content={{Template:Species list/doc|Taxonlist}}}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fayanzār</name></author>
	</entry>
	<entry>
		<id>https://en.wiki.marraidh.com/index.php?title=Template:Infobox&amp;diff=115</id>
		<title>Template:Infobox</title>
		<link rel="alternate" type="text/html" href="https://en.wiki.marraidh.com/index.php?title=Template:Infobox&amp;diff=115"/>
		<updated>2026-07-17T12:33:53Z</updated>

		<summary type="html">&lt;p&gt;Fayanzār: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#invoke:Infobox|infobox}}&amp;lt;includeonly&amp;gt;{{template other|{{#ifeq:{{PAGENAME}}|Infobox||{{#ifeq:{{str left|{{SUBPAGENAME}}|7}}|Infobox|[[Category:Infobox templates|{{remove first word|{{SUBPAGENAME}}}}]]}}}}|}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&amp;lt;!-- Categories go in the /doc subpage, and interwikis go in Wikidata. --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fayanzār</name></author>
	</entry>
	<entry>
		<id>https://en.wiki.marraidh.com/index.php?title=Template:If_empty&amp;diff=113</id>
		<title>Template:If empty</title>
		<link rel="alternate" type="text/html" href="https://en.wiki.marraidh.com/index.php?title=Template:If_empty&amp;diff=113"/>
		<updated>2026-07-17T12:33:52Z</updated>

		<summary type="html">&lt;p&gt;Fayanzār: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{&amp;lt;includeonly&amp;gt;safesubst:&amp;lt;/includeonly&amp;gt;#invoke:If empty|main}}&amp;lt;noinclude&amp;gt;{{Documentation}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fayanzār</name></author>
	</entry>
	<entry>
		<id>https://en.wiki.marraidh.com/index.php?title=Template:Hiddencat&amp;diff=111</id>
		<title>Template:Hiddencat</title>
		<link rel="alternate" type="text/html" href="https://en.wiki.marraidh.com/index.php?title=Template:Hiddencat&amp;diff=111"/>
		<updated>2026-07-17T12:33:52Z</updated>

		<summary type="html">&lt;p&gt;Fayanzār: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__HIDDENCAT__{{cmbox&lt;br /&gt;
| type = notice&lt;br /&gt;
| textstyle = text-align: center;&lt;br /&gt;
| text = This category is [[:Category:Hidden categories|not shown]] on its member pages unless the appropriate [[Special:Preferences#mw-input-wpshowhiddencats|user preference]] (appearance → show hidden categories) is set.&lt;br /&gt;
}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Documentation}}&lt;br /&gt;
&amp;lt;!-- PLEASE ADD CATEGORIES AND INTERWIKIS TO THE /doc SUBPAGE, THANKS --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fayanzār</name></author>
	</entry>
	<entry>
		<id>https://en.wiki.marraidh.com/index.php?title=Template:Edit_taxonomy&amp;diff=109</id>
		<title>Template:Edit taxonomy</title>
		<link rel="alternate" type="text/html" href="https://en.wiki.marraidh.com/index.php?title=Template:Edit_taxonomy&amp;diff=109"/>
		<updated>2026-07-17T12:33:52Z</updated>

		<summary type="html">&lt;p&gt;Fayanzār: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&amp;lt;span class='plainlinks' style='font-size:smaller; float:right; padding-right:0.4em; margin-left:-3em;'&amp;gt;[[File:Red Pencil Icon.png|link=Template:Taxonomy/{{{1}}}|{{{2|Edit this classification}}}]]&amp;lt;/span&amp;gt;&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;{{documentation}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fayanzār</name></author>
	</entry>
	<entry>
		<id>https://en.wiki.marraidh.com/index.php?title=Template:Delink&amp;diff=107</id>
		<title>Template:Delink</title>
		<link rel="alternate" type="text/html" href="https://en.wiki.marraidh.com/index.php?title=Template:Delink&amp;diff=107"/>
		<updated>2026-07-17T12:33:51Z</updated>

		<summary type="html">&lt;p&gt;Fayanzār: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{&amp;lt;includeonly&amp;gt;safesubst:&amp;lt;/includeonly&amp;gt;#invoke:delink|delink}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&amp;lt;!-- Categories go on the /doc subpage, and interwikis go on Wikidata. --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fayanzār</name></author>
	</entry>
	<entry>
		<id>https://en.wiki.marraidh.com/index.php?title=Template:Colour&amp;diff=105</id>
		<title>Template:Colour</title>
		<link rel="alternate" type="text/html" href="https://en.wiki.marraidh.com/index.php?title=Template:Colour&amp;diff=105"/>
		<updated>2026-07-17T12:33:51Z</updated>

		<summary type="html">&lt;p&gt;Fayanzār: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span style=&amp;quot;color:{{{1|}}}&amp;quot;&amp;gt;{{{2|{{{1|}}}}}}&amp;lt;/span&amp;gt;&amp;lt;noinclude&amp;gt;{{Documentation}}&amp;lt;!-- PLEASE ADD THIS TEMPLATE'S CATEGORIES AND INTERWIKIS TO THE /doc SUBPAGE, THANKS --&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fayanzār</name></author>
	</entry>
	<entry>
		<id>https://en.wiki.marraidh.com/index.php?title=Template:Cmbox&amp;diff=103</id>
		<title>Template:Cmbox</title>
		<link rel="alternate" type="text/html" href="https://en.wiki.marraidh.com/index.php?title=Template:Cmbox&amp;diff=103"/>
		<updated>2026-07-17T12:33:51Z</updated>

		<summary type="html">&lt;p&gt;Fayanzār: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#invoke:Message box|cmbox}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&amp;lt;!-- Categories go on the /doc subpage, and interwikis go on Wikidata. --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fayanzār</name></author>
	</entry>
	<entry>
		<id>https://en.wiki.marraidh.com/index.php?title=Template:CatAutoTOC&amp;diff=101</id>
		<title>Template:CatAutoTOC</title>
		<link rel="alternate" type="text/html" href="https://en.wiki.marraidh.com/index.php?title=Template:CatAutoTOC&amp;diff=101"/>
		<updated>2026-07-17T12:33:51Z</updated>

		<summary type="html">&lt;p&gt;Fayanzār: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&amp;lt;!--&lt;br /&gt;
   # TOC, depending on category size&lt;br /&gt;
   # &amp;lt;= 100 pages → no TOC&lt;br /&gt;
   # 101–1200 pages → {{Category TOC}}&lt;br /&gt;
   # &amp;gt; 1200 pages → {{Large category TOC}}&lt;br /&gt;
--&amp;gt;{{Category other|&amp;lt;!--&lt;br /&gt;
         #################################################################################&lt;br /&gt;
         #### This is a category page, so generate a TOC if needed.                   ####&lt;br /&gt;
         ####                                                                         ####&lt;br /&gt;
         #### Use a sub-template [[Template:CatAutoTOC/core]], so that we never have  ####&lt;br /&gt;
         #### more than one call to the [[WP:EXPENSIVE]] function {{PAGESINCATEGORY}} ####&lt;br /&gt;
         #################################################################################&lt;br /&gt;
    --&amp;gt;{{CatAutoTOC/core&amp;lt;!--&lt;br /&gt;
        --&amp;gt;|pagecount={{PAGESINCATEGORY:{{#invoke:HTMLDecode | HTMLDecode | text={{PAGENAME}} }}|R}}&amp;lt;!--&lt;br /&gt;
        --&amp;gt;|align     = {{{align|}}}&amp;lt;!--&lt;br /&gt;
        --&amp;gt;|top       = {{{top|}}}&amp;lt;!--&lt;br /&gt;
        --&amp;gt;|numerals  = {{{numerals|}}}&amp;lt;!--&lt;br /&gt;
        --&amp;gt;|uppercase = {{{uppercase|}}}&amp;lt;!--&lt;br /&gt;
        --&amp;gt;|lowercase = {{{lowercase|}}}&amp;lt;!-- &lt;br /&gt;
    --&amp;gt;}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;{{Template other&amp;lt;!--&lt;br /&gt;
    --&amp;gt;|&amp;lt;!--&lt;br /&gt;
        #################################################################################&lt;br /&gt;
        #### This page is a template, so categorise it                               ####&lt;br /&gt;
        #### in [[Category:Templates using CatAutoTOC]] ...                          ####&lt;br /&gt;
        ####                                                                         ####&lt;br /&gt;
        #### ... unless it is a /doc, /testcases or /sandbox                         ####&lt;br /&gt;
        ####                                                                         ####&lt;br /&gt;
        #### There is no point categorising every sub-page of the same template      ####&lt;br /&gt;
        #################################################################################&lt;br /&gt;
        --&amp;gt;{{#if: {{Str endswith|{{PAGENAME}}|/doc}}{{Str endswith|{{PAGENAME}}|/testcases}}{{Str endswith|{{PAGENAME}}|/sandbox}}&amp;lt;!--&lt;br /&gt;
        --&amp;gt;|&amp;lt;!--&lt;br /&gt;
               ### Don't categorise /doc, /testcases or /sandbox pages&lt;br /&gt;
        --&amp;gt;|&amp;lt;!--&lt;br /&gt;
               ### Not a /doc, /testcases or /sandbox page, so categorise it&lt;br /&gt;
            --&amp;gt;[[Category:Templates using CatAutoTOC]]&amp;lt;!--&lt;br /&gt;
    --&amp;gt;}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Documentation}}&lt;br /&gt;
[[Category:Wikipedia CatAutoTOC]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fayanzār</name></author>
	</entry>
	<entry>
		<id>https://en.wiki.marraidh.com/index.php?title=Template:Biology-stub&amp;diff=99</id>
		<title>Template:Biology-stub</title>
		<link rel="alternate" type="text/html" href="https://en.wiki.marraidh.com/index.php?title=Template:Biology-stub&amp;diff=99"/>
		<updated>2026-07-17T12:33:51Z</updated>

		<summary type="html">&lt;p&gt;Fayanzār: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{asbox&lt;br /&gt;
| image     = Blue morpho butterfly.jpg&lt;br /&gt;
| pix       = 30&lt;br /&gt;
| subject   = [[биология|по биологии]]&lt;br /&gt;
| qualifier =&lt;br /&gt;
| category  = Незавершённые статьи по биологии&lt;br /&gt;
| tempsort  = μ&lt;br /&gt;
| name      = Template:Biology-stub&lt;br /&gt;
}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
[[Категория:Templateы незавершённых статей по биологии|*]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fayanzār</name></author>
	</entry>
	<entry>
		<id>https://en.wiki.marraidh.com/index.php?title=Template:Asbox&amp;diff=97</id>
		<title>Template:Asbox</title>
		<link rel="alternate" type="text/html" href="https://en.wiki.marraidh.com/index.php?title=Template:Asbox&amp;diff=97"/>
		<updated>2026-07-17T12:33:50Z</updated>

		<summary type="html">&lt;p&gt;Fayanzār: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{#invoke:Asbox|main}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&amp;lt;!-- Add categories to the /doc subpage and interwikis to Wikidata. --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fayanzār</name></author>
	</entry>
	<entry>
		<id>https://en.wiki.marraidh.com/index.php?title=Template:Anglicise_rank&amp;diff=95</id>
		<title>Template:Anglicise rank</title>
		<link rel="alternate" type="text/html" href="https://en.wiki.marraidh.com/index.php?title=Template:Anglicise_rank&amp;diff=95"/>
		<updated>2026-07-17T12:33:50Z</updated>

		<summary type="html">&lt;p&gt;Fayanzār: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&amp;lt;!--Note that #titleparts: is used to replace underscores by spaces before other processing.&lt;br /&gt;
--&amp;gt;&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;{{#ifeq:{{str_left|{{lc:{{{1}}}}}|8}}|unranked|(unranked)|{{#switch:{{lc:{{#titleparts:{{{1}}}|1}} }}&amp;lt;!--&lt;br /&gt;
--Special cases, alphabetic order--&amp;gt;&lt;br /&gt;
|alliance=''Alliance''&lt;br /&gt;
|basic shell type=''Basic shell type''&lt;br /&gt;
|branch=''Branch''&lt;br /&gt;
|clade|cladus=''Клада''&lt;br /&gt;
|form taxon=''Form taxon''&lt;br /&gt;
|grade|gradus=''Grade''&lt;br /&gt;
|informal|informal group=''Informal group''&lt;br /&gt;
|morphotype=''Morphotype''&lt;br /&gt;
|node=''Node''&lt;br /&gt;
|plesion=''Plesion''&lt;br /&gt;
|plesion-group=''Plesion-group''&lt;br /&gt;
|possible clade=''Clade?''&lt;br /&gt;
|realm=''Realm''&lt;br /&gt;
|species complex=''Species complex''&lt;br /&gt;
|species group=''Species group''&lt;br /&gt;
|species subgroup=''Species subgroup''&lt;br /&gt;
|stem group=''Stem group''&lt;br /&gt;
|total group=''Total group''&lt;br /&gt;
&amp;lt;!--Virus ranks below species--&amp;gt;&lt;br /&gt;
|serotype=Serotype&lt;br /&gt;
|strain=Strain&lt;br /&gt;
|virus=Virus&lt;br /&gt;
|virus group=Group&lt;br /&gt;
&amp;lt;!--Linnaean taxonomy, alphabetic order--&amp;gt;&lt;br /&gt;
|classis=Класс&lt;br /&gt;
|cohort=Cohort&lt;br /&gt;
|divisio=Отдел&lt;br /&gt;
|domain=Домен&lt;br /&gt;
|epifamilia=Epifamily&lt;br /&gt;
|familia=Семейство&lt;br /&gt;
|forma=Форма&lt;br /&gt;
|genus=Род&lt;br /&gt;
|grandordo|grandordo-mb&amp;lt;!--McKenna &amp;amp; Bell version--&amp;gt;=Grandorder&lt;br /&gt;
|hyperfamilia=Hyperfamily&lt;br /&gt;
|infraclassis=Infraclass&lt;br /&gt;
|infralegio|infralegion=Infralegion&lt;br /&gt;
|infraordo=Инфраотряд&lt;br /&gt;
|infraphylum=Инфратип&lt;br /&gt;
|infraregnum=Инфрацарство&lt;br /&gt;
|infratribus=Инфратриба&lt;br /&gt;
|legio|legion=Legion&lt;br /&gt;
|magnordo=Магнотряд&lt;br /&gt;
|micrordo=Микротряд&lt;br /&gt;
|microphylum=Microphylum&lt;br /&gt;
|mirordo|mirordo-mb&amp;lt;!--McKenna &amp;amp; Bell version--&amp;gt;=Mirorder&lt;br /&gt;
|nanordo=Нанотряд&lt;br /&gt;
|nanophylum=Nanophylum&lt;br /&gt;
|ordo=Отряд&lt;br /&gt;
|parafamilia=Parafamily&lt;br /&gt;
|parvclassis=Parvclass&lt;br /&gt;
|parvordo=Parvorder&lt;br /&gt;
|phylum=Тип&lt;br /&gt;
|regnum=Царство&lt;br /&gt;
|sectio=Секция&lt;br /&gt;
|series=Series&lt;br /&gt;
|species=Вид&lt;br /&gt;
|subclassis=Подкласс&lt;br /&gt;
|subcohort=Subcohort&lt;br /&gt;
|subdivisio=Подотдел&lt;br /&gt;
|subfamilia=Подсемейство&lt;br /&gt;
|subgenus=Подрод&lt;br /&gt;
|sublegio|sublegion=Sublegion&lt;br /&gt;
|subordo=Подотряд&lt;br /&gt;
|subphylum=Подтип&lt;br /&gt;
|subregnum=Подцарство&lt;br /&gt;
|subsectio=Подсекция&lt;br /&gt;
|subspecies=Подвид&lt;br /&gt;
|subterclassis=Subterclass&amp;lt;!--used in WoRMS--&amp;gt;&lt;br /&gt;
|subtribus=Подтриба&lt;br /&gt;
|superclassis=Надкласс&lt;br /&gt;
|supercohort=Supercohort&lt;br /&gt;
|superdivisio=Надотдел&lt;br /&gt;
|superdomain=Наддомен&lt;br /&gt;
|superfamilia=Надсемейство&lt;br /&gt;
|superlegio|superlegion=Superlegion&lt;br /&gt;
|superordo=Надотряд&lt;br /&gt;
|superphylum=Надтип&lt;br /&gt;
|superregnum=Надцарство&lt;br /&gt;
|supersectio=Supersection&lt;br /&gt;
|supertribus=Supertribe&lt;br /&gt;
|tribus=Триба&lt;br /&gt;
|varietas=Variety&lt;br /&gt;
|zoodivisio=Отдел&lt;br /&gt;
|zoosectio=Section&lt;br /&gt;
|zoosubdivisio=Подотдел&lt;br /&gt;
|zoosubsectio=Subsection&lt;br /&gt;
&amp;lt;!--trace fossil taxonomy, alphabetic order--&amp;gt;&lt;br /&gt;
|ichnoclassis=Ichnoclass&lt;br /&gt;
|ichnocohort=Ichnocohort&lt;br /&gt;
|ichnodivisio=Ichnodivision&lt;br /&gt;
|ichnofamilia=Ichnofamily&lt;br /&gt;
|ichnogenus=Ichnogenus&lt;br /&gt;
|ichnograndordo|ichnograndordo-mb&amp;lt;!--McKenna &amp;amp; Bell version--&amp;gt;=Ichnograndorder&lt;br /&gt;
|ichnoinfraclassis=Ichnoinfraclass&lt;br /&gt;
|ichnoinfradivisio=Ichnoinfradivision&lt;br /&gt;
|ichnoinfraordo=Ichnoinfraorder&lt;br /&gt;
|ichnolegio|ichnolegion=Ichnolegion&lt;br /&gt;
|ichnomagnordo=Ichnomagnorder&lt;br /&gt;
|ichnomicrordo=Ichnomicrorder&lt;br /&gt;
|ichnoordo=Ichnoorder&lt;br /&gt;
|ichnoparvordo=Ichnoparvorder&lt;br /&gt;
|ichnospecies=Ichnospecies&lt;br /&gt;
|ichnostem-group=Ichnostem-Group&lt;br /&gt;
|ichnosubclassis=Ichnosubclass&lt;br /&gt;
|ichnosubdivisio=Ichnosubdivision&lt;br /&gt;
|ichnosubfamilia=Ichnosubfamily&lt;br /&gt;
|ichnosublegio|ichnosublegion=Ichnosublegion&lt;br /&gt;
|ichnosubordo=Ichnosuborder&lt;br /&gt;
|ichnosuperclassis=Ichnosuperclass&lt;br /&gt;
|ichnosupercohort=Ichnosupercohort&lt;br /&gt;
|ichnosuperfamilia=Ichnosuperfamily&lt;br /&gt;
|ichnosuperordo=Ichnosuperorder&lt;br /&gt;
&amp;lt;!--fossilized egg taxonomy, alphabetic order--&amp;gt;&lt;br /&gt;
|ooclassis=Ooclass&lt;br /&gt;
|oocohort=Oocohort&lt;br /&gt;
|oofamilia=Oofamily&lt;br /&gt;
|oogenus=Oogenus&lt;br /&gt;
|oomagnordo=Oomagnorder&lt;br /&gt;
|oordo=Oorder&lt;br /&gt;
|oospecies=Oospecies&lt;br /&gt;
|oosubclassis=Oosubclass&lt;br /&gt;
|oosubgenus=Oosubgenus&lt;br /&gt;
|oosubspecies=Oosubspecies&lt;br /&gt;
|oosupercohort=Oosupercohort&lt;br /&gt;
|oosuperordo=Oosuperorder&lt;br /&gt;
&amp;lt;!--default is to capitalize first letter and then put calling page in error category--&amp;gt;&lt;br /&gt;
|#default={{#ifeq:{{{check|no}}}|yes|&amp;lt;span style=&amp;quot;background-color:#F99&amp;quot;&amp;gt;}}{{ucfirst:{{#titleparts:{{{1}}}|1}}}}{{#ifeq:{{{check|no}}}|yes|&amp;lt;/span&amp;gt;{{#ifeq:{{#titleparts:{{PAGENAME}}|1}}|Taxonomy|[[Category:Taxonomy templates using unrecognized rank parameters]]}}}}&lt;br /&gt;
}}{{#ifeq:{{{check|no}}}|yes|{{#ifeq:{{lcfirst:{{{1}}}}}|{{{1}}}||{{#ifeq:{{#titleparts:{{PAGENAME}}|1}}|Taxonomy|[[Category:Taxonomy templates using capitalized rank parameters]]}}}}}}}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;{{documentation}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fayanzār</name></author>
	</entry>
	<entry>
		<id>https://en.wiki.marraidh.com/index.php?title=Template:Ambox&amp;diff=93</id>
		<title>Template:Ambox</title>
		<link rel="alternate" type="text/html" href="https://en.wiki.marraidh.com/index.php?title=Template:Ambox&amp;diff=93"/>
		<updated>2026-07-17T12:33:50Z</updated>

		<summary type="html">&lt;p&gt;Fayanzār: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#invoke:Message box|ambox}}{{#ifeq:{{{small}}}|left|[[Категория:Страницы, использующие малые шаблоны-сообщения]]}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{doc}}&lt;br /&gt;
&amp;lt;!-- Categories go on the /doc subpage, and interwikis go on Wikidata. --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fayanzār</name></author>
	</entry>
	<entry>
		<id>https://en.wiki.marraidh.com/index.php?title=Template:;&amp;diff=91</id>
		<title>Template:;</title>
		<link rel="alternate" type="text/html" href="https://en.wiki.marraidh.com/index.php?title=Template:;&amp;diff=91"/>
		<updated>2026-07-17T12:33:49Z</updated>

		<summary type="html">&lt;p&gt;Fayanzār: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;amp;#59;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Documentation}}&lt;br /&gt;
&amp;lt;!-- PLEASE ADD THIS TEMPLATE'S CATEGORIES AND INTERWIKIS TO THE /doc SUBPAGE, THANKS --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fayanzār</name></author>
	</entry>
	<entry>
		<id>https://en.wiki.marraidh.com/index.php?title=Module:Yesno&amp;diff=89</id>
		<title>Module:Yesno</title>
		<link rel="alternate" type="text/html" href="https://en.wiki.marraidh.com/index.php?title=Module:Yesno&amp;diff=89"/>
		<updated>2026-07-17T12:33:49Z</updated>

		<summary type="html">&lt;p&gt;Fayanzār: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- Function allowing for consistent treatment of boolean-like wikitext input.&lt;br /&gt;
-- It works similarly to the template {{yesno}}.&lt;br /&gt;
&lt;br /&gt;
return function (val, default)&lt;br /&gt;
	-- If your wiki uses non-ascii characters for any of &amp;quot;yes&amp;quot;, &amp;quot;no&amp;quot;, etc., you&lt;br /&gt;
	-- should replace &amp;quot;val:lower()&amp;quot; with &amp;quot;mw.ustring.lower(val)&amp;quot; in the&lt;br /&gt;
	-- following line.&lt;br /&gt;
	val = type(val) == 'string' and val:lower() or val&lt;br /&gt;
	if val == nil then&lt;br /&gt;
		return nil&lt;br /&gt;
	elseif val == true &lt;br /&gt;
		or val == 'yes'&lt;br /&gt;
		or val == 'y'&lt;br /&gt;
		or val == 'true'&lt;br /&gt;
		or val == 't'&lt;br /&gt;
		or val == 'on'&lt;br /&gt;
		or tonumber(val) == 1&lt;br /&gt;
	then&lt;br /&gt;
		return true&lt;br /&gt;
	elseif val == false&lt;br /&gt;
		or val == 'no'&lt;br /&gt;
		or val == 'n'&lt;br /&gt;
		or val == 'false'&lt;br /&gt;
		or val == 'f'&lt;br /&gt;
		or val == 'off'&lt;br /&gt;
		or tonumber(val) == 0&lt;br /&gt;
	then&lt;br /&gt;
		return false&lt;br /&gt;
	else&lt;br /&gt;
		return default&lt;br /&gt;
	end&lt;br /&gt;
end&lt;/div&gt;</summary>
		<author><name>Fayanzār</name></author>
	</entry>
	<entry>
		<id>https://en.wiki.marraidh.com/index.php?title=Module:Taxonbar/exists&amp;diff=87</id>
		<title>Module:Taxonbar/exists</title>
		<link rel="alternate" type="text/html" href="https://en.wiki.marraidh.com/index.php?title=Module:Taxonbar/exists&amp;diff=87"/>
		<updated>2026-07-17T12:33:48Z</updated>

		<summary type="html">&lt;p&gt;Fayanzār: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
function p.check( frame )&lt;br /&gt;
	local pagename = mw.title.getCurrentTitle().baseText&lt;br /&gt;
	local content = mw.title.new(pagename):getContent() or ''&lt;br /&gt;
	local found = string.match(content, '%{%{ *[Tt]axon?[ _-]?[bB]ar') or --5 redirects as of 2019/9&lt;br /&gt;
				  string.match(content, '%{%{ *[Tt]axonIds')&lt;br /&gt;
	if found then return true end&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Fayanzār</name></author>
	</entry>
	<entry>
		<id>https://en.wiki.marraidh.com/index.php?title=Module:Taxonbar/candidate&amp;diff=85</id>
		<title>Module:Taxonbar/candidate</title>
		<link rel="alternate" type="text/html" href="https://en.wiki.marraidh.com/index.php?title=Module:Taxonbar/candidate&amp;diff=85"/>
		<updated>2026-07-17T12:33:48Z</updated>

		<summary type="html">&lt;p&gt;Fayanzār: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
function p.check(frame)&lt;br /&gt;
	local taxonbarExists = require('Module:Taxonbar/exists').check&lt;br /&gt;
	if taxonbarExists(frame) then&lt;br /&gt;
		return ''&lt;br /&gt;
	else&lt;br /&gt;
		local resolveEntity = require( 'Module:ResolveEntityId' )&lt;br /&gt;
		local currentTitle = mw.title.getCurrentTitle()&lt;br /&gt;
		local currentItem = nil&lt;br /&gt;
		local categories = {&lt;br /&gt;
			'[[Category:Taxobox articles possibly missing a taxonbar]]' --unset if acceptable or unacceptable found&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		--preliminary exclusion criteria&lt;br /&gt;
		if string.match( currentTitle.text, '^List of ') then&lt;br /&gt;
			return ''&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		--find Wikidata item&lt;br /&gt;
		if currentTitle.namespace == 0 then --mainspace&lt;br /&gt;
			local currentEntityId = mw.wikibase.getEntityIdForCurrentPage()&lt;br /&gt;
			if resolveEntity._id(currentEntityId) then&lt;br /&gt;
				currentItem = mw.wikibase.getEntity(currentEntityId)&lt;br /&gt;
			else --currentEntityId == nil/unresolvable&lt;br /&gt;
				return categories[1]&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			return ''&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if currentItem then --currentItem should not be nil here, but check just in case&lt;br /&gt;
			--determine if {{Taxonbar}} is *possibly* missing, or *definitely* missing&lt;br /&gt;
			local acceptableInstanceOf_All = { --copied from [[Module:Taxonbar]]&lt;br /&gt;
				['Q16521'] = 'taxon',                      --strict&lt;br /&gt;
				['Q310890'] = 'monotypic taxon',           --strict&lt;br /&gt;
				['Q2568288'] = 'ichnotaxon',               --strict&lt;br /&gt;
				['Q23038290'] = 'fossil taxon',            --strict&lt;br /&gt;
				['Q47487597'] = 'monotypic fossil taxon',  --strict&lt;br /&gt;
				['Q42621'] = 'hybrid',                     --lax&lt;br /&gt;
				['Q235536'] = 'incertae sedis',            --lax&lt;br /&gt;
				['Q713623'] = 'clade',                     --lax&lt;br /&gt;
				['Q848328'] = 'serotype',                  --lax&lt;br /&gt;
				['Q857968'] = 'candidatus',                --lax&lt;br /&gt;
				['Q17487588'] = 'unavailable combination', --lax&lt;br /&gt;
			}&lt;br /&gt;
			local unacceptableInstanceOf = {&lt;br /&gt;
				['Q913170'] = 'trivial name',&lt;br /&gt;
				['Q55983715'] = 'group of organisms known by one particular common name',&lt;br /&gt;
				['Q937228'] = 'property',&lt;br /&gt;
				['Q14712'] = 'drupe',&lt;br /&gt;
				['Q163233'] = 'compound drupe',&lt;br /&gt;
				['Q747463'] = 'compound fruit',&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			local acceptableCount = 0&lt;br /&gt;
			local unacceptableCount = 0&lt;br /&gt;
			for _, instanceOfState in pairs ( currentItem:getBestStatements('P31') ) do --instance of&lt;br /&gt;
				local instanceOf = instanceOfState.mainsnak.datavalue.value.id&lt;br /&gt;
				if acceptableInstanceOf_All[instanceOf] then&lt;br /&gt;
					acceptableCount = acceptableCount + 1&lt;br /&gt;
				elseif unacceptableInstanceOf[instanceOf] then&lt;br /&gt;
					unacceptableCount = unacceptableCount + 1&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			for _, subclassOfState in pairs ( currentItem:getBestStatements('P279') ) do --subclass of&lt;br /&gt;
				local subclassOf = subclassOfState.mainsnak.datavalue.value.id&lt;br /&gt;
				if acceptableInstanceOf_All[subclassOf] then&lt;br /&gt;
					acceptableCount = acceptableCount + 1&lt;br /&gt;
				elseif unacceptableInstanceOf[subclassOf] then&lt;br /&gt;
					unacceptableCount = unacceptableCount + 1&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			if acceptableCount &amp;gt; 0 then&lt;br /&gt;
				categories[1] = ''&lt;br /&gt;
				categories[2] = '[[Category:Taxobox articles missing a taxonbar]]'&lt;br /&gt;
			elseif unacceptableCount &amp;gt; 0 then&lt;br /&gt;
				categories[1] = ''&lt;br /&gt;
				categories[2] = ''&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			return table.concat(categories)&lt;br /&gt;
			&lt;br /&gt;
		else&lt;br /&gt;
			return ''&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Fayanzār</name></author>
	</entry>
	<entry>
		<id>https://en.wiki.marraidh.com/index.php?title=Module:TaxonList&amp;diff=83</id>
		<title>Module:TaxonList</title>
		<link rel="alternate" type="text/html" href="https://en.wiki.marraidh.com/index.php?title=Module:TaxonList&amp;diff=83"/>
		<updated>2026-07-17T12:33:48Z</updated>

		<summary type="html">&lt;p&gt;Fayanzār: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;--[[&lt;br /&gt;
This module provides the core functionality to a set of templates used to&lt;br /&gt;
display a list of taxon name/authority pairs, with the taxon names optionally&lt;br /&gt;
italicized, wikilinked and/or emboldened. Such lists are usually part of&lt;br /&gt;
taxoboxes.&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
-- use a function from Module:TaxonItalics to italicize a taxon name&lt;br /&gt;
local TaxonItalics = require(&amp;quot;Module:TaxonItalics&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
--[[=========================================================================&lt;br /&gt;
Utility function to strip off any initial † present to mark the taxon as&lt;br /&gt;
extinct. The † must not be italicized, emboldened, or included in the&lt;br /&gt;
wikilinked text, so needs to be added back afterwards.&lt;br /&gt;
† is assumed to be present as one of:&lt;br /&gt;
* the unicode character †&lt;br /&gt;
* the HTML entity &amp;amp;dagger;&lt;br /&gt;
* the output of {{extinct}} – this will have been expanded before reaching this&lt;br /&gt;
  module and is assumed to have the form '&amp;lt;span ... &amp;lt;/span&amp;gt;'&lt;br /&gt;
The function returns two values: the taxon name with any † before it removed&lt;br /&gt;
and either '†' if it was present or the empty string if not.&lt;br /&gt;
=============================================================================]]&lt;br /&gt;
function p.stripDagger(taxonName)&lt;br /&gt;
	local dagger = ''&lt;br /&gt;
	if mw.ustring.sub(taxonName,1,1) == '†' then&lt;br /&gt;
		taxonName = mw.ustring.sub(taxonName,2,#taxonName)&lt;br /&gt;
		dagger = '†'&lt;br /&gt;
	else &lt;br /&gt;
		if string.sub(taxonName,1,8) == '&amp;amp;dagger;' then&lt;br /&gt;
			taxonName = string.sub(taxonName,9,#taxonName)&lt;br /&gt;
			dagger = '†'&lt;br /&gt;
		else&lt;br /&gt;
			-- did the taxon name originally have {{extinct}} before it?&lt;br /&gt;
			if (string.sub(taxonName,1,5) == '&amp;lt;span') and mw.ustring.find(taxonName, '†') then&lt;br /&gt;
				taxonName = string.gsub(taxonName, '^.*&amp;lt;/span&amp;gt;', '', 1)&lt;br /&gt;
				dagger = '†'&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return taxonName, dagger&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[=========================================================================&lt;br /&gt;
The function returns a list of taxon names and authorities, appropriately&lt;br /&gt;
formatted.&lt;br /&gt;
Usage:&lt;br /&gt;
{{#invoke:TaxonList|main&lt;br /&gt;
|italic = yes - to italicize the taxon name&lt;br /&gt;
|linked = yes - to wikilink the taxon name&lt;br /&gt;
|bold = yes - to emboldent the taxon name&lt;br /&gt;
|incomplete = yes - to output &amp;quot;(incomplete)&amp;quot; at the end of the list&lt;br /&gt;
}}&lt;br /&gt;
The template that transcludes the invoking template must supply an indefinite&lt;br /&gt;
even number of arguments in the format&lt;br /&gt;
|Name1|Author1 |Name2|Author2| ... |NameN|AuthorN&lt;br /&gt;
=============================================================================]]&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local italic = frame.args['italic'] == 'yes'&lt;br /&gt;
	local bold = frame.args['bold'] == 'yes'&lt;br /&gt;
	local linked = frame.args['linked'] == 'yes'&lt;br /&gt;
	if bold then linked = false end -- must not have bold and wikilinked&lt;br /&gt;
	local incomplete = frame.args['incomplete'] == 'yes'&lt;br /&gt;
	local taxonArgs = frame:getParent().args&lt;br /&gt;
	local result = ''&lt;br /&gt;
	-- iterate over unnamed variables&lt;br /&gt;
	local taxonName&lt;br /&gt;
	local dagger&lt;br /&gt;
	local first = true -- is this the first of a taxon name/author pair?&lt;br /&gt;
	for param, value in ipairs(taxonArgs) do&lt;br /&gt;
		if tonumber(param) then&lt;br /&gt;
			if first then&lt;br /&gt;
				taxonName = mw.text.trim(value)&lt;br /&gt;
				-- if necessary separate any initial † from the taxon name&lt;br /&gt;
				if linked or italic or bold then&lt;br /&gt;
					taxonName, dagger = p.stripDagger(taxonName)&lt;br /&gt;
				else&lt;br /&gt;
					dagger = ''&lt;br /&gt;
				end&lt;br /&gt;
				if linked and not italic then&lt;br /&gt;
					taxonName = '[[' .. taxonName .. ']]'&lt;br /&gt;
				end&lt;br /&gt;
				if italic then&lt;br /&gt;
					taxonName = TaxonItalics.italicizeTaxonName(taxonName, linked)&lt;br /&gt;
				end&lt;br /&gt;
				if bold then&lt;br /&gt;
					taxonName = '&amp;lt;b&amp;gt;' .. taxonName .. '&amp;lt;/b&amp;gt;'&lt;br /&gt;
				end&lt;br /&gt;
				result = result .. '&amp;lt;li&amp;gt;' .. dagger .. taxonName&lt;br /&gt;
			else&lt;br /&gt;
				result = result .. ' &amp;lt;small&amp;gt;' .. value .. '&amp;lt;/small&amp;gt;&amp;lt;/li&amp;gt;'&lt;br /&gt;
			end&lt;br /&gt;
			first = not first&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if incomplete then&lt;br /&gt;
		result = result .. '&amp;lt;small&amp;gt;(incomplete list)&amp;lt;/small&amp;gt;'&lt;br /&gt;
	end&lt;br /&gt;
	return '&amp;lt;ul style=&amp;quot;plainlist&amp;quot;&amp;gt;' .. result .. '&amp;lt;/ul&amp;gt;'&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Fayanzār</name></author>
	</entry>
	<entry>
		<id>https://en.wiki.marraidh.com/index.php?title=Module:TaxonItalics&amp;diff=81</id>
		<title>Module:TaxonItalics</title>
		<link rel="alternate" type="text/html" href="https://en.wiki.marraidh.com/index.php?title=Module:TaxonItalics&amp;diff=81"/>
		<updated>2026-07-17T12:33:48Z</updated>

		<summary type="html">&lt;p&gt;Fayanzār: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;--[[=========================================================================&lt;br /&gt;
Italicize a taxon name appropriately by invoking italicizeTaxonName.&lt;br /&gt;
The algorithm used is:&lt;br /&gt;
* If the name has italic markup at the start or the end, do nothing.&lt;br /&gt;
* Else&lt;br /&gt;
  * Remove (internal) italic markup.&lt;br /&gt;
  * If the name is made up of four words and the third word is a&lt;br /&gt;
    botanical connecting term, de-italicize the connecting term and add italic&lt;br /&gt;
    markup to the outside of the name.&lt;br /&gt;
  * Else if the name is made up of three words and the second word is a&lt;br /&gt;
    botanical connecting term or a variant of &amp;quot;cf.&amp;quot;, de-italicize the&lt;br /&gt;
    connecting term and add italic markup to the outside of the name.&lt;br /&gt;
  * Else just add italic markup to the outside of the name.&lt;br /&gt;
 The module also:&lt;br /&gt;
 * Ensures that the hybrid symbol, ×, and parentheses are not italicized&lt;br /&gt;
 * Has an option to abbreviate all parts of taxon names other than the last&lt;br /&gt;
   to the first letter (e.g. &amp;quot;Pinus sylvestris var. sylvestris&amp;quot; becomes&lt;br /&gt;
   &amp;quot;P. s. var. sylvestris&amp;quot;).&lt;br /&gt;
 * Has an option to wikilink the italicized name to the input name.&lt;br /&gt;
=============================================================================]]&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
local l = {} -- used to store purely local functions&lt;br /&gt;
&lt;br /&gt;
--connecting terms in three part names (e.g. Pinus sylvestris var. sylvestris)&lt;br /&gt;
local cTerms3 = {&lt;br /&gt;
	--subsp.&lt;br /&gt;
    subspecies = &amp;quot;subsp.&amp;quot;,&lt;br /&gt;
    [&amp;quot;subsp.&amp;quot;] = &amp;quot;subsp.&amp;quot;,&lt;br /&gt;
    subsp = &amp;quot;subsp.&amp;quot;,&lt;br /&gt;
    [&amp;quot;ssp.&amp;quot;] = &amp;quot;subsp.&amp;quot;,&lt;br /&gt;
    ssp = &amp;quot;subsp.&amp;quot;,&lt;br /&gt;
    --var.&lt;br /&gt;
    varietas = &amp;quot;var.&amp;quot;,&lt;br /&gt;
    [&amp;quot;var.&amp;quot;] = &amp;quot;var.&amp;quot;,&lt;br /&gt;
    var = &amp;quot;var.&amp;quot;,&lt;br /&gt;
    --subvar.&lt;br /&gt;
    subvarietas = &amp;quot;subvar.&amp;quot;,&lt;br /&gt;
    [&amp;quot;subvar.&amp;quot;] = &amp;quot;subvar.&amp;quot;,&lt;br /&gt;
    subvar = &amp;quot;subvar.&amp;quot;,&lt;br /&gt;
    --f.&lt;br /&gt;
    forma = &amp;quot;f.&amp;quot;,&lt;br /&gt;
    [&amp;quot;f.&amp;quot;] = &amp;quot;f.&amp;quot;,&lt;br /&gt;
    f = &amp;quot;f.&amp;quot;,&lt;br /&gt;
    --subf.&lt;br /&gt;
    subforma = &amp;quot;subf.&amp;quot;,&lt;br /&gt;
    [&amp;quot;subf.&amp;quot;] = &amp;quot;subf.&amp;quot;,&lt;br /&gt;
    subf = &amp;quot;subf.&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
--connecting terms in two part names (e.g. Pinus sect. Pinus)&lt;br /&gt;
local cTerms2 = {&lt;br /&gt;
	--subg.&lt;br /&gt;
    subgenus = &amp;quot;subg.&amp;quot;,&lt;br /&gt;
    [&amp;quot;subgen.&amp;quot;] = &amp;quot;subg.&amp;quot;,&lt;br /&gt;
    [&amp;quot;subg.&amp;quot;] = &amp;quot;subg.&amp;quot;,&lt;br /&gt;
    subg = &amp;quot;subg.&amp;quot;,&lt;br /&gt;
    --supersect.&lt;br /&gt;
    supersection = &amp;quot;supersect.&amp;quot;,&lt;br /&gt;
    [&amp;quot;supersect.&amp;quot;] = &amp;quot;supersect.&amp;quot;,&lt;br /&gt;
    supersect = &amp;quot;supersect.&amp;quot;,&lt;br /&gt;
    --sect.&lt;br /&gt;
    section = &amp;quot;sect.&amp;quot;,&lt;br /&gt;
    [&amp;quot;sect.&amp;quot;] = &amp;quot;sect.&amp;quot;,&lt;br /&gt;
    sect = &amp;quot;sect.&amp;quot;,&lt;br /&gt;
    --subsect.&lt;br /&gt;
    subsection = &amp;quot;subsect.&amp;quot;,&lt;br /&gt;
    [&amp;quot;subsect.&amp;quot;] = &amp;quot;subsect.&amp;quot;,&lt;br /&gt;
    subsect = &amp;quot;subsect.&amp;quot;,&lt;br /&gt;
    --ser.&lt;br /&gt;
    series = &amp;quot;ser.&amp;quot;,&lt;br /&gt;
    [&amp;quot;ser.&amp;quot;] = &amp;quot;ser.&amp;quot;,&lt;br /&gt;
    ser = &amp;quot;ser.&amp;quot;,&lt;br /&gt;
    --subser.&lt;br /&gt;
    subseries = &amp;quot;subser.&amp;quot;,&lt;br /&gt;
    [&amp;quot;subser.&amp;quot;] = &amp;quot;subser.&amp;quot;,&lt;br /&gt;
    subser = &amp;quot;subser.&amp;quot;,&lt;br /&gt;
    --cf.&lt;br /&gt;
    cf = &amp;quot;cf.&amp;quot;,&lt;br /&gt;
    [&amp;quot;cf.&amp;quot;] = &amp;quot;cf.&amp;quot;,&lt;br /&gt;
    [&amp;quot;c.f.&amp;quot;] = &amp;quot;cf.&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
--[[=========================================================================&lt;br /&gt;
Main function to italicize a taxon name appropriately.&lt;br /&gt;
=============================================================================]]&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
    local name = frame.args[1] or ''&lt;br /&gt;
    local linked = frame.args['linked'] == 'yes'&lt;br /&gt;
    local abbreviated = frame.args['abbreviated'] == 'yes'&lt;br /&gt;
    return p.italicizeTaxonName(name, linked, abbreviated)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[=========================================================================&lt;br /&gt;
Utility local function to abbreviate an input string to its first character&lt;br /&gt;
followed by &amp;quot;.&amp;quot;.&lt;br /&gt;
Both &amp;quot;×&amp;quot; and an HTML entity at the start of the string are skipped over in&lt;br /&gt;
determining first character, as is an opening parenthesis and an opening &amp;quot;,&lt;br /&gt;
which cause a matching closing character to be included.&lt;br /&gt;
=============================================================================]]&lt;br /&gt;
function l.abbreviate(str)&lt;br /&gt;
	local result = &amp;quot;&amp;quot;&lt;br /&gt;
	local hasParentheses = false&lt;br /&gt;
	local isQuoted = false&lt;br /&gt;
	if mw.ustring.len(str) &amp;lt; 2 then&lt;br /&gt;
		--single character strings are left unchanged&lt;br /&gt;
		result = str&lt;br /&gt;
	else&lt;br /&gt;
		--skip over an opening parenthesis that could be present at the start of the string&lt;br /&gt;
		if mw.ustring.sub(str,1,1) == &amp;quot;(&amp;quot; then&lt;br /&gt;
			hasParentheses = true&lt;br /&gt;
			result = &amp;quot;(&amp;quot; &lt;br /&gt;
			str = mw.ustring.sub(str,2,mw.ustring.len(str))&lt;br /&gt;
		elseif mw.ustring.sub(str,1,1) == '&amp;quot;' then&lt;br /&gt;
			isQuoted = true&lt;br /&gt;
			result = '&amp;quot;'&lt;br /&gt;
			str = mw.ustring.sub(str,2,mw.ustring.len(str))&lt;br /&gt;
		end&lt;br /&gt;
		--skip over a hybrid symbol that could be present at the start of the string&lt;br /&gt;
		if mw.ustring.sub(str,1,1) == &amp;quot;×&amp;quot; then&lt;br /&gt;
			result = &amp;quot;×&amp;quot; &lt;br /&gt;
			str = mw.ustring.sub(str,2,mw.ustring.len(str))&lt;br /&gt;
		end&lt;br /&gt;
		--skip over an HTML entity that could be present at the start of the string&lt;br /&gt;
		if mw.ustring.sub(str,1,1) == &amp;quot;&amp;amp;&amp;quot; then&lt;br /&gt;
			local i,dummy = mw.ustring.find(str,&amp;quot;;&amp;quot;,2,plain)&lt;br /&gt;
			result = result .. mw.ustring.sub(str,1,i)&lt;br /&gt;
			str = mw.ustring.sub(str,i+1,mw.ustring.len(str))&lt;br /&gt;
		end&lt;br /&gt;
		--if there's anything left, reduce it to its first character plus &amp;quot;.&amp;quot;,&lt;br /&gt;
		--adding the closing parenthesis or quote if required&lt;br /&gt;
		if str ~= &amp;quot;&amp;quot; then &lt;br /&gt;
			result = result .. mw.ustring.sub(str,1,1) .. &amp;quot;.&amp;quot;&lt;br /&gt;
			if hasParentheses then result = result .. &amp;quot;)&amp;quot;&lt;br /&gt;
			elseif isQuoted then result = result .. '&amp;quot;'&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[=========================================================================&lt;br /&gt;
The function which does the italicization.&lt;br /&gt;
=============================================================================]]&lt;br /&gt;
function p.italicizeTaxonName(name, linked, abbreviated)&lt;br /&gt;
    name = mw.text.trim(name)&lt;br /&gt;
    -- if the name begins with '[', then assume formatting is present&lt;br /&gt;
    if  mw.ustring.sub(name,1,1) == '[' then return name end&lt;br /&gt;
    -- otherwise begin by replacing any use of the HTML italic tags&lt;br /&gt;
    -- by Wikimedia markup; replace any entity alternatives to the hybrid symbol&lt;br /&gt;
    -- by the symbol itself; prevent the hybrid symbol being treated as&lt;br /&gt;
    -- a 'word' by converting a following space to the HTML entity&lt;br /&gt;
    local italMarker = &amp;quot;''&amp;quot;&lt;br /&gt;
    name = string.gsub(mw.text.trim(name), &amp;quot;&amp;lt;/?i&amp;gt;&amp;quot;, italMarker)&lt;br /&gt;
    name = string.gsub(string.gsub(name, &amp;quot;&amp;amp;#215;&amp;quot;, &amp;quot;×&amp;quot;), &amp;quot;&amp;amp;times;&amp;quot;, &amp;quot;×&amp;quot;)&lt;br /&gt;
    name = string.gsub(name, &amp;quot;&amp;lt;/?span.-&amp;gt;&amp;quot;, &amp;quot;&amp;quot;) -- remove any span markup&lt;br /&gt;
    name = string.gsub(name, &amp;quot;× &amp;quot;, &amp;quot;×&amp;amp;#32;&amp;quot;)&lt;br /&gt;
    -- now italicize and abbreviate if required&lt;br /&gt;
    local result = name&lt;br /&gt;
    if name ~= '' then&lt;br /&gt;
        if string.sub(name,1,2) == italMarker or string.sub(name,-2) == italMarker then&lt;br /&gt;
            -- do nothing if the name already has italic markers at the start or end&lt;br /&gt;
        else&lt;br /&gt;
            name = string.gsub(name, italMarker, &amp;quot;&amp;quot;) -- first remove any internal italics&lt;br /&gt;
            local words = mw.text.split(name, &amp;quot; &amp;quot;, true)&lt;br /&gt;
            if #words == 4 and cTerms3[words[3]] then&lt;br /&gt;
                -- the third word of a four word name is a connecting term&lt;br /&gt;
                -- ensure the connecting term isn't italicized&lt;br /&gt;
                words[3] = '&amp;lt;span style=&amp;quot;font-style:normal;&amp;quot;&amp;gt;' .. cTerms3[words[3]] .. '&amp;lt;/span&amp;gt;'&lt;br /&gt;
                if abbreviated then&lt;br /&gt;
                	words[1] = l.abbreviate(words[1])&lt;br /&gt;
                    words[2] = l.abbreviate(words[2])&lt;br /&gt;
            	end&lt;br /&gt;
                result = words[1] .. &amp;quot; &amp;quot; .. words[2] .. &amp;quot; &amp;quot; .. words[3] .. &amp;quot; &amp;quot; .. words[4]&lt;br /&gt;
            elseif #words == 3 and cTerms2[words[2]] then&lt;br /&gt;
                -- the second word of a three word name is a connecting term&lt;br /&gt;
                -- ensure the connecting term isn't italicized&lt;br /&gt;
                words[2] = '&amp;lt;span style=&amp;quot;font-style:normal;&amp;quot;&amp;gt;' .. cTerms2[words[2]] .. '&amp;lt;/span&amp;gt;'&lt;br /&gt;
                if abbreviated then&lt;br /&gt;
                	words[1] = l.abbreviate(words[1])&lt;br /&gt;
                end&lt;br /&gt;
                result = words[1] .. &amp;quot; &amp;quot; .. words[2] .. &amp;quot; &amp;quot; .. words[3]&lt;br /&gt;
            else&lt;br /&gt;
                -- not a name as above; only deal with abbreviation&lt;br /&gt;
                if abbreviated then&lt;br /&gt;
                	if #words &amp;gt; 1 then&lt;br /&gt;
                		result = l.abbreviate(words[1])&lt;br /&gt;
                		for i = 2, #words-1, 1 do&lt;br /&gt;
                			result = result .. &amp;quot; &amp;quot; .. l.abbreviate(words[i])&lt;br /&gt;
                		end&lt;br /&gt;
                		result = result .. &amp;quot; &amp;quot; .. words[#words]&lt;br /&gt;
                	end&lt;br /&gt;
                else&lt;br /&gt;
                	result = name&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
            -- deal with any hybrid symbol as it should not be italicized&lt;br /&gt;
            result = string.gsub(result, &amp;quot;×&amp;quot;, '&amp;lt;span style=&amp;quot;font-style:normal;&amp;quot;&amp;gt;×&amp;lt;/span&amp;gt;')&lt;br /&gt;
             -- deal with any parentheses as they should not be italicized&lt;br /&gt;
            result = string.gsub(string.gsub(result,&amp;quot;%(&amp;quot;,'&amp;lt;span style=&amp;quot;font-style:normal;&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;'),&amp;quot;%)&amp;quot;,'&amp;lt;span style=&amp;quot;font-style:normal;&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;')&lt;br /&gt;
            -- any question marks surrounded by spans can have the spans joined&lt;br /&gt;
            result = string.gsub(result,'&amp;lt;/span&amp;gt;%?&amp;lt;span style=&amp;quot;font%-style:normal;&amp;quot;&amp;gt;','?')&lt;br /&gt;
        	-- add outside markup&lt;br /&gt;
            if linked then&lt;br /&gt;
                if result ~= name then&lt;br /&gt;
                    result = &amp;quot;[[&amp;quot; .. name .. &amp;quot;|&amp;quot; .. italMarker .. result .. italMarker .. &amp;quot;]]&amp;quot;&lt;br /&gt;
                else&lt;br /&gt;
                    result = italMarker .. &amp;quot;[[&amp;quot; .. name .. &amp;quot;]]&amp;quot; .. italMarker&lt;br /&gt;
                end&lt;br /&gt;
            else&lt;br /&gt;
                result = italMarker .. result .. italMarker&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[=========================================================================&lt;br /&gt;
Utility function used by other modules to check if a connecting term is&lt;br /&gt;
present in a name. The value of name is assumed to be plain text.&lt;br /&gt;
=============================================================================]]&lt;br /&gt;
function p.hasCT(frame)&lt;br /&gt;
    return p.hasConnectingTerm(frame.args[1] or '')&lt;br /&gt;
end&lt;br /&gt;
    &lt;br /&gt;
function p.hasConnectingTerm(name)&lt;br /&gt;
	local words = mw.text.split(name, &amp;quot; &amp;quot;, true)&lt;br /&gt;
	if #words == 4 and cTerms3[words[3]] then return true&lt;br /&gt;
	elseif #words == 3 and cTerms2[words[2]] then return true&lt;br /&gt;
	else return false&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
	&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Fayanzār</name></author>
	</entry>
	<entry>
		<id>https://en.wiki.marraidh.com/index.php?title=Module:String&amp;diff=79</id>
		<title>Module:String</title>
		<link rel="alternate" type="text/html" href="https://en.wiki.marraidh.com/index.php?title=Module:String&amp;diff=79"/>
		<updated>2026-07-17T12:33:48Z</updated>

		<summary type="html">&lt;p&gt;Fayanzār: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;--[[&lt;br /&gt;
&lt;br /&gt;
This module is intended to provide access to basic string functions.&lt;br /&gt;
&lt;br /&gt;
Most of the functions provided here can be invoked with named parameters,&lt;br /&gt;
unnamed parameters, or a mixture.  If named parameters are used, Mediawiki will&lt;br /&gt;
automatically remove any leading or trailing whitespace from the parameter.&lt;br /&gt;
Depending on the intended use, it may be advantageous to either preserve or&lt;br /&gt;
remove such whitespace.&lt;br /&gt;
&lt;br /&gt;
Global options&lt;br /&gt;
    ignore_errors: If set to 'true' or 1, any error condition will result in&lt;br /&gt;
        an empty string being returned rather than an error message.&lt;br /&gt;
&lt;br /&gt;
    error_category: If an error occurs, specifies the name of a category to&lt;br /&gt;
        include with the error message.  The default category is&lt;br /&gt;
        [Category:Errors reported by Module String].&lt;br /&gt;
&lt;br /&gt;
    no_category: If set to 'true' or 1, no category will be added if an error&lt;br /&gt;
        is generated.&lt;br /&gt;
&lt;br /&gt;
Unit tests for this module are available at Module:String/tests.&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local str = {}&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
len&lt;br /&gt;
&lt;br /&gt;
This function returns the length of the target string.&lt;br /&gt;
&lt;br /&gt;
Usage:&lt;br /&gt;
{{#invoke:String|len|target_string|}}&lt;br /&gt;
OR&lt;br /&gt;
{{#invoke:String|len|s=target_string}}&lt;br /&gt;
&lt;br /&gt;
Parameters&lt;br /&gt;
    s: The string whose length to report&lt;br /&gt;
&lt;br /&gt;
If invoked using named parameters, Mediawiki will automatically remove any leading or&lt;br /&gt;
trailing whitespace from the target string.&lt;br /&gt;
]]&lt;br /&gt;
function str.len( frame )&lt;br /&gt;
	local new_args = str._getParameters( frame.args, {'s'} )&lt;br /&gt;
	local s = new_args['s'] or ''&lt;br /&gt;
	return mw.ustring.len( s )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
sub&lt;br /&gt;
&lt;br /&gt;
This function returns a substring of the target string at specified indices.&lt;br /&gt;
&lt;br /&gt;
Usage:&lt;br /&gt;
{{#invoke:String|sub|target_string|start_index|end_index}}&lt;br /&gt;
OR&lt;br /&gt;
{{#invoke:String|sub|s=target_string|i=start_index|j=end_index}}&lt;br /&gt;
&lt;br /&gt;
Parameters&lt;br /&gt;
    s: The string to return a subset of&lt;br /&gt;
    i: The fist index of the substring to return, defaults to 1.&lt;br /&gt;
    j: The last index of the string to return, defaults to the last character.&lt;br /&gt;
&lt;br /&gt;
The first character of the string is assigned an index of 1.  If either i or j&lt;br /&gt;
is a negative value, it is interpreted the same as selecting a character by&lt;br /&gt;
counting from the end of the string.  Hence, a value of -1 is the same as&lt;br /&gt;
selecting the last character of the string.&lt;br /&gt;
&lt;br /&gt;
If the requested indices are out of range for the given string, an error is&lt;br /&gt;
reported.&lt;br /&gt;
]]&lt;br /&gt;
function str.sub( frame )&lt;br /&gt;
	local new_args = str._getParameters( frame.args, { 's', 'i', 'j' } )&lt;br /&gt;
	local s = new_args['s'] or ''&lt;br /&gt;
	local i = tonumber( new_args['i'] ) or 1&lt;br /&gt;
	local j = tonumber( new_args['j'] ) or -1&lt;br /&gt;
&lt;br /&gt;
	local len = mw.ustring.len( s )&lt;br /&gt;
&lt;br /&gt;
	-- Convert negatives for range checking&lt;br /&gt;
	if i &amp;lt; 0 then&lt;br /&gt;
		i = len + i + 1&lt;br /&gt;
	end&lt;br /&gt;
	if j &amp;lt; 0 then&lt;br /&gt;
		j = len + j + 1&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if i &amp;gt; len or j &amp;gt; len or i &amp;lt; 1 or j &amp;lt; 1 then&lt;br /&gt;
		return str._error( 'String subset index out of range' )&lt;br /&gt;
	end&lt;br /&gt;
	if j &amp;lt; i then&lt;br /&gt;
		return str._error( 'String subset indices out of order' )&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return mw.ustring.sub( s, i, j )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
This function implements that features of {{str sub old}} and is kept in order&lt;br /&gt;
to maintain these older templates.&lt;br /&gt;
]]&lt;br /&gt;
function str.sublength( frame )&lt;br /&gt;
	local i = tonumber( frame.args.i ) or 0&lt;br /&gt;
	local len = tonumber( frame.args.len )&lt;br /&gt;
	return mw.ustring.sub( frame.args.s, i + 1, len and ( i + len ) )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
_match&lt;br /&gt;
&lt;br /&gt;
This function returns a substring from the source string that matches a&lt;br /&gt;
specified pattern. It is exported for use in other modules&lt;br /&gt;
&lt;br /&gt;
Usage:&lt;br /&gt;
strmatch = require(&amp;quot;Module:String&amp;quot;)._match&lt;br /&gt;
sresult = strmatch( s, pattern, start, match, plain, nomatch )&lt;br /&gt;
&lt;br /&gt;
Parameters&lt;br /&gt;
    s: The string to search&lt;br /&gt;
    pattern: The pattern or string to find within the string&lt;br /&gt;
    start: The index within the source string to start the search.  The first&lt;br /&gt;
        character of the string has index 1.  Defaults to 1.&lt;br /&gt;
    match: In some cases it may be possible to make multiple matches on a single&lt;br /&gt;
        string.  This specifies which match to return, where the first match is&lt;br /&gt;
        match= 1.  If a negative number is specified then a match is returned&lt;br /&gt;
        counting from the last match.  Hence match = -1 is the same as requesting&lt;br /&gt;
        the last match.  Defaults to 1.&lt;br /&gt;
    plain: A flag indicating that the pattern should be understood as plain&lt;br /&gt;
        text.  Defaults to false.&lt;br /&gt;
    nomatch: If no match is found, output the &amp;quot;nomatch&amp;quot; value rather than an error.&lt;br /&gt;
&lt;br /&gt;
For information on constructing Lua patterns, a form of [regular expression], see:&lt;br /&gt;
&lt;br /&gt;
* http://www.lua.org/manual/5.1/manual.html#5.4.1&lt;br /&gt;
* http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Patterns&lt;br /&gt;
* http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Ustring_patterns&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
-- This sub-routine is exported for use in other modules&lt;br /&gt;
function str._match( s, pattern, start, match_index, plain_flag, nomatch )&lt;br /&gt;
	if s == '' then&lt;br /&gt;
		return str._error( 'Target string is empty' )&lt;br /&gt;
	end&lt;br /&gt;
	if pattern == '' then&lt;br /&gt;
		return str._error( 'Pattern string is empty' )&lt;br /&gt;
	end&lt;br /&gt;
	start = tonumber(start) or 1&lt;br /&gt;
	if math.abs(start) &amp;lt; 1 or math.abs(start) &amp;gt; mw.ustring.len( s ) then&lt;br /&gt;
		return str._error( 'Requested start is out of range' )&lt;br /&gt;
	end&lt;br /&gt;
	if match_index == 0 then&lt;br /&gt;
		return str._error( 'Match index is out of range' )&lt;br /&gt;
	end&lt;br /&gt;
	if plain_flag then&lt;br /&gt;
		pattern = str._escapePattern( pattern )&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local result&lt;br /&gt;
	if match_index == 1 then&lt;br /&gt;
		-- Find first match is simple case&lt;br /&gt;
		result = mw.ustring.match( s, pattern, start )&lt;br /&gt;
	else&lt;br /&gt;
		if start &amp;gt; 1 then&lt;br /&gt;
			s = mw.ustring.sub( s, start )&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		local iterator = mw.ustring.gmatch(s, pattern)&lt;br /&gt;
		if match_index &amp;gt; 0 then&lt;br /&gt;
			-- Forward search&lt;br /&gt;
			for w in iterator do&lt;br /&gt;
				match_index = match_index - 1&lt;br /&gt;
				if match_index == 0 then&lt;br /&gt;
					result = w&lt;br /&gt;
					break&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			-- Reverse search&lt;br /&gt;
			local result_table = {}&lt;br /&gt;
			local count = 1&lt;br /&gt;
			for w in iterator do&lt;br /&gt;
				result_table[count] = w&lt;br /&gt;
				count = count + 1&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			result = result_table[ count + match_index ]&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if result == nil then&lt;br /&gt;
		if nomatch == nil then&lt;br /&gt;
			return str._error( 'Match not found' )&lt;br /&gt;
		else&lt;br /&gt;
			return nomatch&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		return result&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
match&lt;br /&gt;
&lt;br /&gt;
This function returns a substring from the source string that matches a&lt;br /&gt;
specified pattern.&lt;br /&gt;
&lt;br /&gt;
Usage:&lt;br /&gt;
{{#invoke:String|match|source_string|pattern_string|start_index|match_number|plain_flag|nomatch_output}}&lt;br /&gt;
OR&lt;br /&gt;
{{#invoke:String|match|s=source_string|pattern=pattern_string|start=start_index&lt;br /&gt;
    |match=match_number|plain=plain_flag|nomatch=nomatch_output}}&lt;br /&gt;
&lt;br /&gt;
Parameters&lt;br /&gt;
    s: The string to search&lt;br /&gt;
    pattern: The pattern or string to find within the string&lt;br /&gt;
    start: The index within the source string to start the search.  The first&lt;br /&gt;
        character of the string has index 1.  Defaults to 1.&lt;br /&gt;
    match: In some cases it may be possible to make multiple matches on a single&lt;br /&gt;
        string.  This specifies which match to return, where the first match is&lt;br /&gt;
        match= 1.  If a negative number is specified then a match is returned&lt;br /&gt;
        counting from the last match.  Hence match = -1 is the same as requesting&lt;br /&gt;
        the last match.  Defaults to 1.&lt;br /&gt;
    plain: A flag indicating that the pattern should be understood as plain&lt;br /&gt;
        text.  Defaults to false.&lt;br /&gt;
    nomatch: If no match is found, output the &amp;quot;nomatch&amp;quot; value rather than an error.&lt;br /&gt;
&lt;br /&gt;
If invoked using named parameters, Mediawiki will automatically remove any leading or&lt;br /&gt;
trailing whitespace from each string.  In some circumstances this is desirable, in&lt;br /&gt;
other cases one may want to preserve the whitespace.&lt;br /&gt;
&lt;br /&gt;
If the match_number or start_index are out of range for the string being queried, then&lt;br /&gt;
this function generates an error.  An error is also generated if no match is found.&lt;br /&gt;
If one adds the parameter ignore_errors=true, then the error will be suppressed and&lt;br /&gt;
an empty string will be returned on any failure.&lt;br /&gt;
&lt;br /&gt;
For information on constructing Lua patterns, a form of [regular expression], see:&lt;br /&gt;
&lt;br /&gt;
* http://www.lua.org/manual/5.1/manual.html#5.4.1&lt;br /&gt;
* http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Patterns&lt;br /&gt;
* http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Ustring_patterns&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
-- This is the entry point for #invoke:String|match&lt;br /&gt;
function str.match( frame )&lt;br /&gt;
	local new_args = str._getParameters( frame.args, {'s', 'pattern', 'start', 'match', 'plain', 'nomatch'} )&lt;br /&gt;
	local s = new_args['s'] or ''&lt;br /&gt;
	local start = tonumber( new_args['start'] ) or 1&lt;br /&gt;
	local plain_flag = str._getBoolean( new_args['plain'] or false )&lt;br /&gt;
	local pattern = new_args['pattern'] or ''&lt;br /&gt;
	local match_index = math.floor( tonumber(new_args['match']) or 1 )&lt;br /&gt;
	local nomatch = new_args['nomatch']&lt;br /&gt;
&lt;br /&gt;
	return str._match( s, pattern, start, match_index, plain_flag, nomatch )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
pos&lt;br /&gt;
&lt;br /&gt;
This function returns a single character from the target string at position pos.&lt;br /&gt;
&lt;br /&gt;
Usage:&lt;br /&gt;
{{#invoke:String|pos|target_string|index_value}}&lt;br /&gt;
OR&lt;br /&gt;
{{#invoke:String|pos|target=target_string|pos=index_value}}&lt;br /&gt;
&lt;br /&gt;
Parameters&lt;br /&gt;
    target: The string to search&lt;br /&gt;
    pos: The index for the character to return&lt;br /&gt;
&lt;br /&gt;
If invoked using named parameters, Mediawiki will automatically remove any leading or&lt;br /&gt;
trailing whitespace from the target string.  In some circumstances this is desirable, in&lt;br /&gt;
other cases one may want to preserve the whitespace.&lt;br /&gt;
&lt;br /&gt;
The first character has an index value of 1.&lt;br /&gt;
&lt;br /&gt;
If one requests a negative value, this function will select a character by counting backwards&lt;br /&gt;
from the end of the string.  In other words pos = -1 is the same as asking for the last character.&lt;br /&gt;
&lt;br /&gt;
A requested value of zero, or a value greater than the length of the string returns an error.&lt;br /&gt;
]]&lt;br /&gt;
function str.pos( frame )&lt;br /&gt;
	local new_args = str._getParameters( frame.args, {'target', 'pos'} )&lt;br /&gt;
	local target_str = new_args['target'] or ''&lt;br /&gt;
	local pos = tonumber( new_args['pos'] ) or 0&lt;br /&gt;
&lt;br /&gt;
	if pos == 0 or math.abs(pos) &amp;gt; mw.ustring.len( target_str ) then&lt;br /&gt;
		return str._error( 'String index out of range' )&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return mw.ustring.sub( target_str, pos, pos )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
str_find&lt;br /&gt;
&lt;br /&gt;
This function duplicates the behavior of {{str_find}}, including all of its quirks.&lt;br /&gt;
This is provided in order to support existing templates, but is NOT RECOMMENDED for&lt;br /&gt;
new code and templates.  New code is recommended to use the &amp;quot;find&amp;quot; function instead.&lt;br /&gt;
&lt;br /&gt;
Returns the first index in &amp;quot;source&amp;quot; that is a match to &amp;quot;target&amp;quot;.  Indexing is 1-based,&lt;br /&gt;
and the function returns -1 if the &amp;quot;target&amp;quot; string is not present in &amp;quot;source&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Important Note: If the &amp;quot;target&amp;quot; string is empty / missing, this function returns a&lt;br /&gt;
value of &amp;quot;1&amp;quot;, which is generally unexpected behavior, and must be accounted for&lt;br /&gt;
separatetly.&lt;br /&gt;
]]&lt;br /&gt;
function str.str_find( frame )&lt;br /&gt;
	local new_args = str._getParameters( frame.args, {'source', 'target'} )&lt;br /&gt;
	local source_str = new_args['source'] or ''&lt;br /&gt;
	local target_str = new_args['target'] or ''&lt;br /&gt;
&lt;br /&gt;
	if target_str == '' then&lt;br /&gt;
		return 1&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local start = mw.ustring.find( source_str, target_str, 1, true )&lt;br /&gt;
	if start == nil then&lt;br /&gt;
		start = -1&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return start&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
find&lt;br /&gt;
&lt;br /&gt;
This function allows one to search for a target string or pattern within another&lt;br /&gt;
string.&lt;br /&gt;
&lt;br /&gt;
Usage:&lt;br /&gt;
{{#invoke:String|find|source_str|target_string|start_index|plain_flag}}&lt;br /&gt;
OR&lt;br /&gt;
{{#invoke:String|find|source=source_str|target=target_str|start=start_index|plain=plain_flag}}&lt;br /&gt;
&lt;br /&gt;
Parameters&lt;br /&gt;
    source: The string to search&lt;br /&gt;
    target: The string or pattern to find within source&lt;br /&gt;
    start: The index within the source string to start the search, defaults to 1&lt;br /&gt;
    plain: Boolean flag indicating that target should be understood as plain&lt;br /&gt;
        text and not as a Lua style regular expression, defaults to true&lt;br /&gt;
&lt;br /&gt;
If invoked using named parameters, Mediawiki will automatically remove any leading or&lt;br /&gt;
trailing whitespace from the parameter.  In some circumstances this is desirable, in&lt;br /&gt;
other cases one may want to preserve the whitespace.&lt;br /&gt;
&lt;br /&gt;
This function returns the first index &amp;gt;= &amp;quot;start&amp;quot; where &amp;quot;target&amp;quot; can be found&lt;br /&gt;
within &amp;quot;source&amp;quot;.  Indices are 1-based.  If &amp;quot;target&amp;quot; is not found, then this&lt;br /&gt;
function returns 0.  If either &amp;quot;source&amp;quot; or &amp;quot;target&amp;quot; are missing / empty, this&lt;br /&gt;
function also returns 0.&lt;br /&gt;
&lt;br /&gt;
This function should be safe for UTF-8 strings.&lt;br /&gt;
]]&lt;br /&gt;
function str.find( frame )&lt;br /&gt;
	local new_args = str._getParameters( frame.args, {'source', 'target', 'start', 'plain' } )&lt;br /&gt;
	local source_str = new_args['source'] or ''&lt;br /&gt;
	local pattern = new_args['target'] or ''&lt;br /&gt;
	local start_pos = tonumber(new_args['start']) or 1&lt;br /&gt;
	local plain = new_args['plain'] or true&lt;br /&gt;
&lt;br /&gt;
	if source_str == '' or pattern == '' then&lt;br /&gt;
		return 0&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	plain = str._getBoolean( plain )&lt;br /&gt;
&lt;br /&gt;
	local start = mw.ustring.find( source_str, pattern, start_pos, plain )&lt;br /&gt;
	if start == nil then&lt;br /&gt;
		start = 0&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return start&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
replace&lt;br /&gt;
&lt;br /&gt;
This function allows one to replace a target string or pattern within another&lt;br /&gt;
string.&lt;br /&gt;
&lt;br /&gt;
Usage:&lt;br /&gt;
{{#invoke:String|replace|source_str|pattern_string|replace_string|replacement_count|plain_flag}}&lt;br /&gt;
OR&lt;br /&gt;
{{#invoke:String|replace|source=source_string|pattern=pattern_string|replace=replace_string|&lt;br /&gt;
   count=replacement_count|plain=plain_flag}}&lt;br /&gt;
&lt;br /&gt;
Parameters&lt;br /&gt;
    source: The string to search&lt;br /&gt;
    pattern: The string or pattern to find within source&lt;br /&gt;
    replace: The replacement text&lt;br /&gt;
    count: The number of occurences to replace, defaults to all.&lt;br /&gt;
    plain: Boolean flag indicating that pattern should be understood as plain&lt;br /&gt;
        text and not as a Lua style regular expression, defaults to true&lt;br /&gt;
]]&lt;br /&gt;
function str.replace( frame )&lt;br /&gt;
	local new_args = str._getParameters( frame.args, {'source', 'pattern', 'replace', 'count', 'plain' } )&lt;br /&gt;
	local source_str = new_args['source'] or ''&lt;br /&gt;
	local pattern = new_args['pattern'] or ''&lt;br /&gt;
	local replace = new_args['replace'] or ''&lt;br /&gt;
	local count = tonumber( new_args['count'] )&lt;br /&gt;
	local plain = new_args['plain'] or true&lt;br /&gt;
&lt;br /&gt;
	if source_str == '' or pattern == '' then&lt;br /&gt;
		return source_str&lt;br /&gt;
	end&lt;br /&gt;
	plain = str._getBoolean( plain )&lt;br /&gt;
&lt;br /&gt;
	if plain then&lt;br /&gt;
		pattern = str._escapePattern( pattern )&lt;br /&gt;
		replace = mw.ustring.gsub( replace, &amp;quot;%%&amp;quot;, &amp;quot;%%%%&amp;quot; ) --Only need to escape replacement sequences.&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local result&lt;br /&gt;
&lt;br /&gt;
	if count ~= nil then&lt;br /&gt;
		result = mw.ustring.gsub( source_str, pattern, replace, count )&lt;br /&gt;
	else&lt;br /&gt;
		result = mw.ustring.gsub( source_str, pattern, replace )&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
    simple function to pipe string.rep to templates.&lt;br /&gt;
]]&lt;br /&gt;
function str.rep( frame )&lt;br /&gt;
	local repetitions = tonumber( frame.args[2] )&lt;br /&gt;
	if not repetitions then&lt;br /&gt;
		return str._error( 'function rep expects a number as second parameter, received &amp;quot;' .. ( frame.args[2] or '' ) .. '&amp;quot;' )&lt;br /&gt;
	end&lt;br /&gt;
	return string.rep( frame.args[1] or '', repetitions )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
escapePattern&lt;br /&gt;
&lt;br /&gt;
This function escapes special characters from a Lua string pattern. See [1]&lt;br /&gt;
for details on how patterns work.&lt;br /&gt;
&lt;br /&gt;
[1] https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Patterns&lt;br /&gt;
&lt;br /&gt;
Usage:&lt;br /&gt;
{{#invoke:String|escapePattern|pattern_string}}&lt;br /&gt;
&lt;br /&gt;
Parameters&lt;br /&gt;
    pattern_string: The pattern string to escape.&lt;br /&gt;
]]&lt;br /&gt;
function str.escapePattern( frame )&lt;br /&gt;
	local pattern_str = frame.args[1]&lt;br /&gt;
	if not pattern_str then&lt;br /&gt;
		return str._error( 'No pattern string specified' )&lt;br /&gt;
	end&lt;br /&gt;
	local result = str._escapePattern( pattern_str )&lt;br /&gt;
	return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
count&lt;br /&gt;
This function counts the number of occurrences of one string in another.&lt;br /&gt;
]]&lt;br /&gt;
function str.count(frame)&lt;br /&gt;
	local args = str._getParameters(frame.args, {'source', 'pattern', 'plain'})&lt;br /&gt;
	local source = args.source or ''&lt;br /&gt;
	local pattern = args.pattern or ''&lt;br /&gt;
	local plain = str._getBoolean(args.plain or true)&lt;br /&gt;
	if plain then&lt;br /&gt;
		pattern = str._escapePattern(pattern)&lt;br /&gt;
	end&lt;br /&gt;
	local _, count = mw.ustring.gsub(source, pattern, '')&lt;br /&gt;
	return count&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
endswith&lt;br /&gt;
This function determines whether a string ends with another string.&lt;br /&gt;
]]&lt;br /&gt;
function str.endswith(frame)&lt;br /&gt;
	local args = str._getParameters(frame.args, {'source', 'pattern'})&lt;br /&gt;
	local source = args.source or ''&lt;br /&gt;
	local pattern = args.pattern or ''&lt;br /&gt;
	if pattern == '' then&lt;br /&gt;
		-- All strings end with the empty string.&lt;br /&gt;
		return &amp;quot;yes&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	if mw.ustring.sub(source, -mw.ustring.len(pattern), -1) == pattern then&lt;br /&gt;
		return &amp;quot;yes&amp;quot;&lt;br /&gt;
	else&lt;br /&gt;
		return &amp;quot;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
join&lt;br /&gt;
&lt;br /&gt;
Join all non empty arguments together; the first argument is the separator.&lt;br /&gt;
Usage:&lt;br /&gt;
{{#invoke:String|join|sep|one|two|three}}&lt;br /&gt;
]]&lt;br /&gt;
function str.join(frame)&lt;br /&gt;
	local args = {}&lt;br /&gt;
	local sep&lt;br /&gt;
	for _, v in ipairs( frame.args ) do&lt;br /&gt;
		if sep then&lt;br /&gt;
			if v ~= '' then&lt;br /&gt;
				table.insert(args, v)&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			sep = v&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return table.concat( args, sep or '' )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
Helper function that populates the argument list given that user may need to use a mix of&lt;br /&gt;
named and unnamed parameters.  This is relevant because named parameters are not&lt;br /&gt;
identical to unnamed parameters due to string trimming, and when dealing with strings&lt;br /&gt;
we sometimes want to either preserve or remove that whitespace depending on the application.&lt;br /&gt;
]]&lt;br /&gt;
function str._getParameters( frame_args, arg_list )&lt;br /&gt;
	local new_args = {}&lt;br /&gt;
	local index = 1&lt;br /&gt;
	local value&lt;br /&gt;
&lt;br /&gt;
	for _, arg in ipairs( arg_list ) do&lt;br /&gt;
		value = frame_args[arg]&lt;br /&gt;
		if value == nil then&lt;br /&gt;
			value = frame_args[index]&lt;br /&gt;
			index = index + 1&lt;br /&gt;
		end&lt;br /&gt;
		new_args[arg] = value&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return new_args&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
Helper function to handle error messages.&lt;br /&gt;
]]&lt;br /&gt;
function str._error( error_str )&lt;br /&gt;
	local frame = mw.getCurrentFrame()&lt;br /&gt;
	local error_category = frame.args.error_category or 'Errors reported by Module String'&lt;br /&gt;
	local ignore_errors = frame.args.ignore_errors or false&lt;br /&gt;
	local no_category = frame.args.no_category or false&lt;br /&gt;
&lt;br /&gt;
	if str._getBoolean(ignore_errors) then&lt;br /&gt;
		return ''&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local error_str = '&amp;lt;strong class=&amp;quot;error&amp;quot;&amp;gt;String Module Error: ' .. error_str .. '&amp;lt;/strong&amp;gt;'&lt;br /&gt;
	if error_category ~= '' and not str._getBoolean( no_category ) then&lt;br /&gt;
		error_str = '[[Category:' .. error_category .. ']]' .. error_str&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return error_str&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
Helper Function to interpret boolean strings&lt;br /&gt;
]]&lt;br /&gt;
function str._getBoolean( boolean_str )&lt;br /&gt;
	local boolean_value&lt;br /&gt;
&lt;br /&gt;
	if type( boolean_str ) == 'string' then&lt;br /&gt;
		boolean_str = boolean_str:lower()&lt;br /&gt;
		if boolean_str == 'false' or boolean_str == 'no' or boolean_str == '0'&lt;br /&gt;
				or boolean_str == '' then&lt;br /&gt;
			boolean_value = false&lt;br /&gt;
		else&lt;br /&gt;
			boolean_value = true&lt;br /&gt;
		end&lt;br /&gt;
	elseif type( boolean_str ) == 'boolean' then&lt;br /&gt;
		boolean_value = boolean_str&lt;br /&gt;
	else&lt;br /&gt;
		error( 'No boolean value found' )&lt;br /&gt;
	end&lt;br /&gt;
	return boolean_value&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
Helper function that escapes all pattern characters so that they will be treated&lt;br /&gt;
as plain text.&lt;br /&gt;
]]&lt;br /&gt;
function str._escapePattern( pattern_str )&lt;br /&gt;
	return mw.ustring.gsub( pattern_str, &amp;quot;([%(%)%.%%%+%-%*%?%[%^%$%]])&amp;quot;, &amp;quot;%%%1&amp;quot; )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return str&lt;/div&gt;</summary>
		<author><name>Fayanzār</name></author>
	</entry>
	<entry>
		<id>https://en.wiki.marraidh.com/index.php?title=Module:ResolveEntityId&amp;diff=77</id>
		<title>Module:ResolveEntityId</title>
		<link rel="alternate" type="text/html" href="https://en.wiki.marraidh.com/index.php?title=Module:ResolveEntityId&amp;diff=77"/>
		<updated>2026-07-17T12:33:48Z</updated>

		<summary type="html">&lt;p&gt;Fayanzār: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
function p._entityid(_,id,alt)&lt;br /&gt;
	-- backwards compatibility for deprecated _entityid function&lt;br /&gt;
	return p._id(id,alt)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._id(id,alt)&lt;br /&gt;
	if type(id) == 'string' then&lt;br /&gt;
		id = mw.ustring.upper(mw.ustring.sub(id,1,1))..mw.ustring.sub(id,2)&lt;br /&gt;
		if mw.ustring.match(id,'^Q%d+$') then&lt;br /&gt;
			-- id is in the proper format for a Wikidata entity&lt;br /&gt;
			if mw.wikibase.isValidEntityId(id) then&lt;br /&gt;
				-- id is valid&lt;br /&gt;
				id = mw.wikibase.getEntity(id)&lt;br /&gt;
				if id then&lt;br /&gt;
					-- entity exists&lt;br /&gt;
					return id.id&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			id = mw.wikibase.getEntityIdForTitle(id)&lt;br /&gt;
			if id then&lt;br /&gt;
				-- id is a title that matches a Wikidata entity&lt;br /&gt;
				local instanceOf = mw.wikibase.getBestStatements(id, 'P31')[1] --instance of&lt;br /&gt;
				if instanceOf and instanceOf.mainsnak.datavalue.value.id ~= 'Q4167410' then&lt;br /&gt;
					-- not disambiguation&lt;br /&gt;
					return mw.wikibase.getEntity(id).id&lt;br /&gt;
				elseif instanceOf == nil then&lt;br /&gt;
					-- id is a title, but is missing an instance-of value&lt;br /&gt;
					return mw.wikibase.getEntity(id).id&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return alt or nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.entityid(frame)&lt;br /&gt;
	return p._id(frame.args[1], frame.args[2])&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Fayanzār</name></author>
	</entry>
	<entry>
		<id>https://en.wiki.marraidh.com/index.php?title=Module:No_globals&amp;diff=75</id>
		<title>Module:No globals</title>
		<link rel="alternate" type="text/html" href="https://en.wiki.marraidh.com/index.php?title=Module:No_globals&amp;diff=75"/>
		<updated>2026-07-17T12:33:47Z</updated>

		<summary type="html">&lt;p&gt;Fayanzār: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local mt = getmetatable(_G) or {}&lt;br /&gt;
function mt.__index (t, k)&lt;br /&gt;
	if k ~= 'arg' then&lt;br /&gt;
		error('Tried to read nil global ' .. tostring(k), 2)&lt;br /&gt;
	end&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
function mt.__newindex(t, k, v)&lt;br /&gt;
	if k ~= 'arg' then&lt;br /&gt;
		error('Tried to write global ' .. tostring(k), 2)&lt;br /&gt;
	end&lt;br /&gt;
	rawset(t, k, v)&lt;br /&gt;
end&lt;br /&gt;
setmetatable(_G, mt)&lt;/div&gt;</summary>
		<author><name>Fayanzār</name></author>
	</entry>
	<entry>
		<id>https://en.wiki.marraidh.com/index.php?title=Module:Navbar/styles.css&amp;diff=73</id>
		<title>Module:Navbar/styles.css</title>
		<link rel="alternate" type="text/html" href="https://en.wiki.marraidh.com/index.php?title=Module:Navbar/styles.css&amp;diff=73"/>
		<updated>2026-07-17T12:33:47Z</updated>

		<summary type="html">&lt;p&gt;Fayanzār: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* {{pp|small=yes}} */&lt;br /&gt;
.navbar {&lt;br /&gt;
	display: inline;&lt;br /&gt;
	font-size: 88%;&lt;br /&gt;
	font-weight: normal;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbar-collapse {&lt;br /&gt;
	float: left;&lt;br /&gt;
	text-align: left;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbar-boxtext {&lt;br /&gt;
	word-spacing: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbar ul {&lt;br /&gt;
	display: inline-block;&lt;br /&gt;
	white-space: nowrap;&lt;br /&gt;
	line-height: inherit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbar-brackets::before {&lt;br /&gt;
	margin-right: -0.125em;&lt;br /&gt;
	content: '[ ';&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbar-brackets::after {&lt;br /&gt;
	margin-left: -0.125em;&lt;br /&gt;
	content: ' ]';&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbar li {&lt;br /&gt;
	word-spacing: -0.125em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbar-mini abbr {&lt;br /&gt;
	font-variant: small-caps;&lt;br /&gt;
	border-bottom: none;&lt;br /&gt;
	text-decoration: none;&lt;br /&gt;
	cursor: inherit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbar-ct-full {&lt;br /&gt;
	font-size: 114%;&lt;br /&gt;
	margin: 0 7em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbar-ct-mini {&lt;br /&gt;
	font-size: 114%;&lt;br /&gt;
	margin: 0 4em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Navbar styling when nested in infobox and navbox&lt;br /&gt;
Should consider having a separate TemplateStyles for those specific places&lt;br /&gt;
using an infobox/navbox and a navbar, or possibly override from using template */&lt;br /&gt;
.infobox .navbar {&lt;br /&gt;
	font-size: 100%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox .navbar {&lt;br /&gt;
	display: block;&lt;br /&gt;
	font-size: 100%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-title .navbar {&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	float: left;&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	text-align: left;&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	margin-right: 0.5em;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Fayanzār</name></author>
	</entry>
	<entry>
		<id>https://en.wiki.marraidh.com/index.php?title=Module:Navbar/configuration&amp;diff=71</id>
		<title>Module:Navbar/configuration</title>
		<link rel="alternate" type="text/html" href="https://en.wiki.marraidh.com/index.php?title=Module:Navbar/configuration&amp;diff=71"/>
		<updated>2026-07-17T12:33:47Z</updated>

		<summary type="html">&lt;p&gt;Fayanzār: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local configuration = {&lt;br /&gt;
	['templatestyles'] = 'Module:Navbar/styles.css',&lt;br /&gt;
	['box_text'] = 'This box: ',			-- default text box when not plain or mini&lt;br /&gt;
	['title_namespace'] = 'Template',		-- namespace to default to for title&lt;br /&gt;
	['invalid_title'] = 'Invalid title ',&lt;br /&gt;
	['classes'] = { -- set a line to nil if you don't want it&lt;br /&gt;
		['navbar'] = 'navbar',&lt;br /&gt;
		['plainlinks'] = 'plainlinks', -- plainlinks&lt;br /&gt;
		['horizontal_list'] = 'hlist', -- horizontal list class&lt;br /&gt;
		['mini'] = 'navbar-mini', -- class indicating small links in the navbar&lt;br /&gt;
		['this_box'] = 'navbar-boxtext',&lt;br /&gt;
		['brackets'] = 'navbar-brackets',&lt;br /&gt;
		-- 'collapsible' is the key for a class to indicate the navbar is&lt;br /&gt;
		-- setting up the collapsible element in addition to the normal&lt;br /&gt;
		-- navbar.&lt;br /&gt;
		['collapsible'] = 'navbar-collapse',&lt;br /&gt;
		['collapsible_title_mini'] = 'navbar-ct-mini',&lt;br /&gt;
		['collapsible_title_full'] = 'navbar-ct-full'&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
return configuration&lt;/div&gt;</summary>
		<author><name>Fayanzār</name></author>
	</entry>
	<entry>
		<id>https://en.wiki.marraidh.com/index.php?title=Module:Navbar&amp;diff=69</id>
		<title>Module:Navbar</title>
		<link rel="alternate" type="text/html" href="https://en.wiki.marraidh.com/index.php?title=Module:Navbar&amp;diff=69"/>
		<updated>2026-07-17T12:33:46Z</updated>

		<summary type="html">&lt;p&gt;Fayanzār: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
local cfg = mw.loadData('Module:Navbar/configuration')&lt;br /&gt;
&lt;br /&gt;
local function get_title_arg(is_collapsible, template)&lt;br /&gt;
	local title_arg = 1&lt;br /&gt;
	if is_collapsible then title_arg = 2 end&lt;br /&gt;
	if template then title_arg = 'template' end&lt;br /&gt;
	return title_arg&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function choose_links(template, args)&lt;br /&gt;
	-- The show table indicates the default displayed items.&lt;br /&gt;
	-- view, talk, edit, hist, move, watch&lt;br /&gt;
	-- TODO: Move to configuration.&lt;br /&gt;
	local show = {true, true, true, false, false, false}&lt;br /&gt;
	if template then&lt;br /&gt;
		show[2] = false&lt;br /&gt;
		show[3] = false&lt;br /&gt;
		local index = {t = 2, d = 2, e = 3, h = 4, m = 5, w = 6,&lt;br /&gt;
			talk = 2, edit = 3, hist = 4, move = 5, watch = 6}&lt;br /&gt;
		-- TODO: Consider removing TableTools dependency.&lt;br /&gt;
		for _, v in ipairs(require ('Module:TableTools').compressSparseArray(args)) do&lt;br /&gt;
			local num = index[v]&lt;br /&gt;
			if num then show[num] = true end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local remove_edit_link = args.noedit&lt;br /&gt;
	if remove_edit_link then show[3] = false end&lt;br /&gt;
	&lt;br /&gt;
	return show&lt;br /&gt;
	&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function add_link(link_description, ul, is_mini, font_style)&lt;br /&gt;
	local l&lt;br /&gt;
	if link_description.url then&lt;br /&gt;
		l = {'[', '', ']'}&lt;br /&gt;
	else&lt;br /&gt;
		l = {'[[', '|', ']]'}&lt;br /&gt;
	end&lt;br /&gt;
	ul:tag('li')&lt;br /&gt;
		:addClass('nv-' .. link_description.full)&lt;br /&gt;
		:wikitext(l[1] .. link_description.link .. l[2])&lt;br /&gt;
		:tag(is_mini and 'abbr' or 'span')&lt;br /&gt;
			:attr('title', link_description.html_title)&lt;br /&gt;
			:cssText(font_style)&lt;br /&gt;
			:wikitext(is_mini and link_description.mini or link_description.full)&lt;br /&gt;
			:done()&lt;br /&gt;
		:wikitext(l[3])&lt;br /&gt;
		:done()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function make_list(title_text, has_brackets, displayed_links, is_mini, font_style)&lt;br /&gt;
	&lt;br /&gt;
	local title = mw.title.new(mw.text.trim(title_text), cfg.title_namespace)&lt;br /&gt;
	if not title then&lt;br /&gt;
		error(cfg.invalid_title .. title_text)&lt;br /&gt;
	end&lt;br /&gt;
	local talkpage = title.talkPageTitle and title.talkPageTitle.fullText or ''&lt;br /&gt;
	&lt;br /&gt;
	-- TODO: Get link_descriptions and show into the configuration module.&lt;br /&gt;
	-- link_descriptions should be easier...&lt;br /&gt;
	local link_descriptions = {&lt;br /&gt;
		{ ['mini'] = 'v', ['full'] = 'view', ['html_title'] = 'View this template',&lt;br /&gt;
			['link'] = title.fullText, ['url'] = false },&lt;br /&gt;
		{ ['mini'] = 't', ['full'] = 'talk', ['html_title'] = 'Discuss this template',&lt;br /&gt;
			['link'] = talkpage, ['url'] = false },&lt;br /&gt;
		{ ['mini'] = 'e', ['full'] = 'edit', ['html_title'] = 'Edit this template',&lt;br /&gt;
			['link'] = title:fullUrl('action=edit'), ['url'] = true },&lt;br /&gt;
		{ ['mini'] = 'h', ['full'] = 'hist', ['html_title'] = 'History of this template',&lt;br /&gt;
			['link'] = title:fullUrl('action=history'), ['url'] = true },&lt;br /&gt;
		{ ['mini'] = 'm', ['full'] = 'move', ['html_title'] = 'Move this template',&lt;br /&gt;
			['link'] = mw.title.new('Special:Movepage'):fullUrl('target='..title.fullText), ['url'] = true },&lt;br /&gt;
		{ ['mini'] = 'w', ['full'] = 'watch', ['html_title'] = 'Watch this template', &lt;br /&gt;
			['link'] = title:fullUrl('action=watch'), ['url'] = true }&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	local ul = mw.html.create('ul')&lt;br /&gt;
	if has_brackets then&lt;br /&gt;
		ul:addClass(cfg.classes.brackets)&lt;br /&gt;
			:cssText(font_style)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	for i, _ in ipairs(displayed_links) do&lt;br /&gt;
		if displayed_links[i] then add_link(link_descriptions[i], ul, is_mini, font_style) end&lt;br /&gt;
	end&lt;br /&gt;
	return ul:done()&lt;br /&gt;
	&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._navbar(args)&lt;br /&gt;
	&lt;br /&gt;
	-- TODO: We probably don't need both fontstyle and fontcolor...&lt;br /&gt;
	local font_style = args.fontstyle&lt;br /&gt;
	local font_color = args.fontcolor&lt;br /&gt;
	local is_collapsible = args.collapsible&lt;br /&gt;
	local is_mini = args.mini&lt;br /&gt;
	local is_plain = args.plain&lt;br /&gt;
	&lt;br /&gt;
	local collapsible_class = nil&lt;br /&gt;
	if is_collapsible then&lt;br /&gt;
		collapsible_class = cfg.classes.collapsible&lt;br /&gt;
		if not is_plain then is_mini = 1 end&lt;br /&gt;
		if font_color then&lt;br /&gt;
			font_style = (font_style or '') .. '; color: ' .. font_color .. ';'&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local navbar_style = args.style&lt;br /&gt;
	local div = mw.html.create():tag('div')&lt;br /&gt;
	div&lt;br /&gt;
		:addClass(cfg.classes.navbar)&lt;br /&gt;
		:addClass(cfg.classes.plainlinks)&lt;br /&gt;
		:addClass(cfg.classes.horizontal_list)&lt;br /&gt;
		:addClass(collapsible_class) -- we made the determination earlier&lt;br /&gt;
		:cssText(navbar_style)&lt;br /&gt;
&lt;br /&gt;
	if is_mini then div:addClass(cfg.classes.mini) end&lt;br /&gt;
&lt;br /&gt;
	local box_text = (args.text or cfg.box_text) .. ' '&lt;br /&gt;
	 -- the concatenated space guarantees the box text is separated&lt;br /&gt;
	if not (is_mini or is_plain) then&lt;br /&gt;
		div&lt;br /&gt;
			:tag('span')&lt;br /&gt;
				:addClass(cfg.classes.box_text)&lt;br /&gt;
				:cssText(font_style)&lt;br /&gt;
				:wikitext(box_text)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local template = args.template&lt;br /&gt;
	local displayed_links = choose_links(template, args)&lt;br /&gt;
	local has_brackets = args.brackets&lt;br /&gt;
	local title_arg = get_title_arg(is_collapsible, template)&lt;br /&gt;
	local title_text = args[title_arg] or (':' .. mw.getCurrentFrame():getParent():getTitle())&lt;br /&gt;
	local list = make_list(title_text, has_brackets, displayed_links, is_mini, font_style)&lt;br /&gt;
	div:node(list)&lt;br /&gt;
&lt;br /&gt;
	if is_collapsible then&lt;br /&gt;
		local title_text_class&lt;br /&gt;
		if is_mini then&lt;br /&gt;
			title_text_class = cfg.classes.collapsible_title_mini&lt;br /&gt;
		else&lt;br /&gt;
			title_text_class = cfg.classes.collapsible_title_full&lt;br /&gt;
		end&lt;br /&gt;
		div:done()&lt;br /&gt;
			:tag('div')&lt;br /&gt;
			:addClass(title_text_class)&lt;br /&gt;
			:cssText(font_style)&lt;br /&gt;
			:wikitext(args[1])&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return mw.getCurrentFrame():extensionTag{&lt;br /&gt;
		name = 'templatestyles', args = { src = cfg.templatestyles }&lt;br /&gt;
	} .. tostring(div:done())&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.navbar(frame)&lt;br /&gt;
	return p._navbar(require('Module:Arguments').getArgs(frame))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Fayanzār</name></author>
	</entry>
	<entry>
		<id>https://en.wiki.marraidh.com/index.php?title=Module:Message_box/configuration&amp;diff=67</id>
		<title>Module:Message box/configuration</title>
		<link rel="alternate" type="text/html" href="https://en.wiki.marraidh.com/index.php?title=Module:Message_box/configuration&amp;diff=67"/>
		<updated>2026-07-17T12:33:46Z</updated>

		<summary type="html">&lt;p&gt;Fayanzār: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;--------------------------------------------------------------------------------&lt;br /&gt;
--                          Message box configuration                         --&lt;br /&gt;
--                                                                            --&lt;br /&gt;
-- This module contains configuration data for [[Module:Message box]].        --&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
return {&lt;br /&gt;
	ambox = {&lt;br /&gt;
		types = {&lt;br /&gt;
			speedy = {&lt;br /&gt;
				class = 'ambox-speedy',&lt;br /&gt;
				image = 'Ambox warning pn.svg'&lt;br /&gt;
			},&lt;br /&gt;
			delete = {&lt;br /&gt;
				class = 'ambox-delete',&lt;br /&gt;
				image = 'Ambox warning pn.svg'&lt;br /&gt;
			},&lt;br /&gt;
			content = {&lt;br /&gt;
				class = 'ambox-content',&lt;br /&gt;
				image = 'Ambox important.svg'&lt;br /&gt;
			},&lt;br /&gt;
			style = {&lt;br /&gt;
				class = 'ambox-style',&lt;br /&gt;
				image = 'Edit-clear.svg'&lt;br /&gt;
			},&lt;br /&gt;
			move = {&lt;br /&gt;
				class = 'ambox-move',&lt;br /&gt;
				image = 'Merge-split-transwiki default.svg'&lt;br /&gt;
			},&lt;br /&gt;
			protection = {&lt;br /&gt;
				class = 'ambox-protection',&lt;br /&gt;
				image = 'Semi-protection-shackle-keyhole.svg'&lt;br /&gt;
			},&lt;br /&gt;
			notice = {&lt;br /&gt;
				class = 'ambox-notice',&lt;br /&gt;
				image = 'Information icon4.svg'&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		default                     = 'notice',&lt;br /&gt;
		allowBlankParams            = {'talk', 'sect', 'date', 'issue', 'fix', 'subst', 'hidden'},&lt;br /&gt;
		allowSmall                  = true,&lt;br /&gt;
		smallParam                  = 'left',&lt;br /&gt;
		smallClass                  = 'mbox-small-left',&lt;br /&gt;
		substCheck                  = true,&lt;br /&gt;
		classes                     = {'metadata', 'ambox'},&lt;br /&gt;
		imageEmptyCell              = true,&lt;br /&gt;
		imageCheckBlank             = true,&lt;br /&gt;
		imageSmallSize              = '20x20px',&lt;br /&gt;
		imageCellDiv                = true,&lt;br /&gt;
		useCollapsibleTextFields    = true,&lt;br /&gt;
		imageRightNone              = true,&lt;br /&gt;
		sectionDefault              = 'article',&lt;br /&gt;
		allowMainspaceCategories    = true,&lt;br /&gt;
		templateCategory            = 'Article message templates',&lt;br /&gt;
	        templateCategoryRequireName = true,&lt;br /&gt;
		templateErrorCategory       = 'Article message templates with missing parameters',&lt;br /&gt;
		templateErrorParamsToCheck  = {'issue', 'fix', 'subst'},&lt;br /&gt;
		removalNotice               = '[[Help:Maintenance template removal|Learn how and when to remove this template message]]'&lt;br /&gt;
	},&lt;br /&gt;
	&lt;br /&gt;
	cmbox = {&lt;br /&gt;
		types = {&lt;br /&gt;
			speedy = {&lt;br /&gt;
				class = 'cmbox-speedy',&lt;br /&gt;
				image = 'Ambox warning pn.svg'&lt;br /&gt;
			},&lt;br /&gt;
			delete = {&lt;br /&gt;
				class = 'cmbox-delete',&lt;br /&gt;
				image = 'Ambox warning pn.svg'&lt;br /&gt;
			},&lt;br /&gt;
			content = {&lt;br /&gt;
				class = 'cmbox-content',&lt;br /&gt;
				image = 'Ambox important.svg'&lt;br /&gt;
			},&lt;br /&gt;
			style = {&lt;br /&gt;
				class = 'cmbox-style',&lt;br /&gt;
				image = 'Edit-clear.svg'&lt;br /&gt;
			},&lt;br /&gt;
			move = {&lt;br /&gt;
				class = 'cmbox-move',&lt;br /&gt;
				image = 'Merge-split-transwiki default.svg'&lt;br /&gt;
			},&lt;br /&gt;
			protection = {&lt;br /&gt;
				class = 'cmbox-protection',&lt;br /&gt;
				image = 'Semi-protection-shackle-keyhole.svg'&lt;br /&gt;
			},&lt;br /&gt;
			notice = {&lt;br /&gt;
				class = 'cmbox-notice',&lt;br /&gt;
				image = 'Information icon4.svg'&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		default              = 'notice',&lt;br /&gt;
		showInvalidTypeError = true,&lt;br /&gt;
		classes              = {'cmbox'},&lt;br /&gt;
		imageEmptyCell       = true&lt;br /&gt;
	},&lt;br /&gt;
	&lt;br /&gt;
	fmbox = {&lt;br /&gt;
		types = {&lt;br /&gt;
			warning = {&lt;br /&gt;
				class = 'fmbox-warning',&lt;br /&gt;
				image = 'Ambox warning pn.svg'&lt;br /&gt;
			},&lt;br /&gt;
			editnotice = {&lt;br /&gt;
				class = 'fmbox-editnotice',&lt;br /&gt;
				image = 'Information icon4.svg'&lt;br /&gt;
			},&lt;br /&gt;
			system = {&lt;br /&gt;
				class = 'fmbox-system',&lt;br /&gt;
				image = 'Information icon4.svg'&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		default              = 'system',&lt;br /&gt;
		showInvalidTypeError = true,&lt;br /&gt;
		classes              = {'fmbox'},&lt;br /&gt;
		imageEmptyCell       = false,&lt;br /&gt;
		imageRightNone       = false&lt;br /&gt;
	},&lt;br /&gt;
	&lt;br /&gt;
	imbox = {&lt;br /&gt;
		types = {&lt;br /&gt;
			speedy = {&lt;br /&gt;
				class = 'imbox-speedy',&lt;br /&gt;
				image = 'Ambox warning pn.svg'&lt;br /&gt;
			},&lt;br /&gt;
			delete = {&lt;br /&gt;
				class = 'imbox-delete',&lt;br /&gt;
				image = 'Ambox warning pn.svg'&lt;br /&gt;
			},&lt;br /&gt;
			content = {&lt;br /&gt;
				class = 'imbox-content',&lt;br /&gt;
				image = 'Ambox important.svg'&lt;br /&gt;
			},&lt;br /&gt;
			style = {&lt;br /&gt;
				class = 'imbox-style',&lt;br /&gt;
				image = 'Edit-clear.svg'&lt;br /&gt;
			},&lt;br /&gt;
			move = {&lt;br /&gt;
				class = 'imbox-move',&lt;br /&gt;
				image = 'Merge-split-transwiki default.svg'&lt;br /&gt;
			},&lt;br /&gt;
			protection = {&lt;br /&gt;
				class = 'imbox-protection',&lt;br /&gt;
				image = 'Semi-protection-shackle-keyhole.svg'&lt;br /&gt;
			},&lt;br /&gt;
			license = {&lt;br /&gt;
				class = 'imbox-license licensetpl',&lt;br /&gt;
				image = 'Imbox license.png' -- @todo We need an SVG version of this&lt;br /&gt;
			},&lt;br /&gt;
			featured = {&lt;br /&gt;
				class = 'imbox-featured',&lt;br /&gt;
				image = 'Cscr-featured.svg'&lt;br /&gt;
			},&lt;br /&gt;
			notice = {&lt;br /&gt;
				class = 'imbox-notice',&lt;br /&gt;
				image = 'Information icon4.svg'&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		default              = 'notice',&lt;br /&gt;
		showInvalidTypeError = true,&lt;br /&gt;
		classes              = {'imbox'},&lt;br /&gt;
		imageEmptyCell       = true,&lt;br /&gt;
		below                = true,&lt;br /&gt;
		templateCategory     = 'File message boxes'&lt;br /&gt;
	},&lt;br /&gt;
	&lt;br /&gt;
	ombox = {&lt;br /&gt;
		types = {&lt;br /&gt;
			speedy = {&lt;br /&gt;
				class = 'ombox-speedy',&lt;br /&gt;
				image = 'Ambox warning pn.svg'&lt;br /&gt;
			},&lt;br /&gt;
			delete = {&lt;br /&gt;
				class = 'ombox-delete',&lt;br /&gt;
				image = 'Ambox warning pn.svg'&lt;br /&gt;
			},&lt;br /&gt;
			content = {&lt;br /&gt;
				class = 'ombox-content',&lt;br /&gt;
				image = 'Ambox important.svg'&lt;br /&gt;
			},&lt;br /&gt;
			style = {&lt;br /&gt;
				class = 'ombox-style',&lt;br /&gt;
				image = 'Edit-clear.svg'&lt;br /&gt;
			},&lt;br /&gt;
			move = {&lt;br /&gt;
				class = 'ombox-move',&lt;br /&gt;
				image = 'Merge-split-transwiki default.svg'&lt;br /&gt;
			},&lt;br /&gt;
			protection = {&lt;br /&gt;
				class = 'ombox-protection',&lt;br /&gt;
				image = 'Semi-protection-shackle-keyhole.svg'&lt;br /&gt;
			},&lt;br /&gt;
			notice = {&lt;br /&gt;
				class = 'ombox-notice',&lt;br /&gt;
				image = 'Information icon4.svg'&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		default              = 'notice',&lt;br /&gt;
		showInvalidTypeError = true,&lt;br /&gt;
		classes              = {'ombox'},&lt;br /&gt;
		allowSmall           = true,&lt;br /&gt;
		imageEmptyCell       = true,&lt;br /&gt;
		imageRightNone       = true&lt;br /&gt;
	},&lt;br /&gt;
	&lt;br /&gt;
	tmbox = {&lt;br /&gt;
		types = {&lt;br /&gt;
			speedy = {&lt;br /&gt;
				class = 'tmbox-speedy',&lt;br /&gt;
				image = 'Ambox warning pn.svg'&lt;br /&gt;
			},&lt;br /&gt;
			delete = {&lt;br /&gt;
				class = 'tmbox-delete',&lt;br /&gt;
				image = 'Ambox warning pn.svg'&lt;br /&gt;
			},&lt;br /&gt;
			content = {&lt;br /&gt;
				class = 'tmbox-content',&lt;br /&gt;
				image = 'Ambox important.svg'&lt;br /&gt;
			},&lt;br /&gt;
			style = {&lt;br /&gt;
				class = 'tmbox-style',&lt;br /&gt;
				image = 'Edit-clear.svg'&lt;br /&gt;
			},&lt;br /&gt;
			move = {&lt;br /&gt;
				class = 'tmbox-move',&lt;br /&gt;
				image = 'Merge-split-transwiki default.svg'&lt;br /&gt;
			},&lt;br /&gt;
			protection = {&lt;br /&gt;
				class = 'tmbox-protection',&lt;br /&gt;
				image = 'Semi-protection-shackle-keyhole.svg'&lt;br /&gt;
			},&lt;br /&gt;
			notice = {&lt;br /&gt;
				class = 'tmbox-notice',&lt;br /&gt;
				image = 'Information icon4.svg'&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		default              = 'notice',&lt;br /&gt;
		showInvalidTypeError = true,&lt;br /&gt;
		classes              = {'tmbox'},&lt;br /&gt;
		allowSmall           = true,&lt;br /&gt;
		imageRightNone       = true,&lt;br /&gt;
		imageEmptyCell       = true,&lt;br /&gt;
		imageEmptyCellStyle  = true,&lt;br /&gt;
		templateCategory     = 'Talk message boxes'&lt;br /&gt;
	}&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Fayanzār</name></author>
	</entry>
	<entry>
		<id>https://en.wiki.marraidh.com/index.php?title=Module:Message_box&amp;diff=65</id>
		<title>Module:Message box</title>
		<link rel="alternate" type="text/html" href="https://en.wiki.marraidh.com/index.php?title=Module:Message_box&amp;diff=65"/>
		<updated>2026-07-17T12:33:46Z</updated>

		<summary type="html">&lt;p&gt;Fayanzār: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- This is a meta-module for producing message box templates, including&lt;br /&gt;
-- {{mbox}}, {{ambox}}, {{imbox}}, {{tmbox}}, {{ombox}}, {{cmbox}} and {{fmbox}}.&lt;br /&gt;
&lt;br /&gt;
-- Load necessary modules.&lt;br /&gt;
require('Module:No globals')&lt;br /&gt;
local getArgs&lt;br /&gt;
local yesno = require('Module:Yesno')&lt;br /&gt;
&lt;br /&gt;
-- Get a language object for formatDate and ucfirst.&lt;br /&gt;
local lang = mw.language.getContentLanguage()&lt;br /&gt;
&lt;br /&gt;
-- Define constants&lt;br /&gt;
local CONFIG_MODULE = 'Module:Message box/configuration'&lt;br /&gt;
local DEMOSPACES = {talk = 'tmbox', image = 'imbox', file = 'imbox', category = 'cmbox', article = 'ambox', main = 'ambox'}&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Helper functions&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local function getTitleObject(...)&lt;br /&gt;
	-- Get the title object, passing the function through pcall&lt;br /&gt;
	-- in case we are over the expensive function count limit.&lt;br /&gt;
	local success, title = pcall(mw.title.new, ...)&lt;br /&gt;
	if success then&lt;br /&gt;
		return title&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function union(t1, t2)&lt;br /&gt;
	-- Returns the union of two arrays.&lt;br /&gt;
	local vals = {}&lt;br /&gt;
	for i, v in ipairs(t1) do&lt;br /&gt;
		vals[v] = true&lt;br /&gt;
	end&lt;br /&gt;
	for i, v in ipairs(t2) do&lt;br /&gt;
		vals[v] = true&lt;br /&gt;
	end&lt;br /&gt;
	local ret = {}&lt;br /&gt;
	for k in pairs(vals) do&lt;br /&gt;
		table.insert(ret, k)&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(ret)&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getArgNums(args, prefix)&lt;br /&gt;
	local nums = {}&lt;br /&gt;
	for k, v in pairs(args) do&lt;br /&gt;
		local num = mw.ustring.match(tostring(k), '^' .. prefix .. '([1-9]%d*)$')&lt;br /&gt;
		if num then&lt;br /&gt;
			table.insert(nums, tonumber(num))&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(nums)&lt;br /&gt;
	return nums&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Box class definition&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local MessageBox = {}&lt;br /&gt;
MessageBox.__index = MessageBox&lt;br /&gt;
&lt;br /&gt;
function MessageBox.new(boxType, args, cfg)&lt;br /&gt;
	args = args or {}&lt;br /&gt;
	local obj = {}&lt;br /&gt;
&lt;br /&gt;
	-- Set the title object and the namespace.&lt;br /&gt;
	obj.title = getTitleObject(args.page) or mw.title.getCurrentTitle()&lt;br /&gt;
&lt;br /&gt;
	-- Set the config for our box type.&lt;br /&gt;
	obj.cfg = cfg[boxType]&lt;br /&gt;
	if not obj.cfg then&lt;br /&gt;
		local ns = obj.title.namespace&lt;br /&gt;
		-- boxType is &amp;quot;mbox&amp;quot; or invalid input&lt;br /&gt;
		if args.demospace and args.demospace ~= '' then&lt;br /&gt;
			-- implement demospace parameter of mbox&lt;br /&gt;
			local demospace = string.lower(args.demospace)&lt;br /&gt;
			if DEMOSPACES[demospace] then&lt;br /&gt;
				-- use template from DEMOSPACES&lt;br /&gt;
				obj.cfg = cfg[DEMOSPACES[demospace]]&lt;br /&gt;
			elseif string.find( demospace, 'talk' ) then&lt;br /&gt;
				-- demo as a talk page&lt;br /&gt;
				obj.cfg = cfg.tmbox&lt;br /&gt;
			else&lt;br /&gt;
				-- default to ombox&lt;br /&gt;
				obj.cfg = cfg.ombox&lt;br /&gt;
			end&lt;br /&gt;
		elseif ns == 0 then&lt;br /&gt;
			obj.cfg = cfg.ambox -- main namespace&lt;br /&gt;
		elseif ns == 6 then&lt;br /&gt;
			obj.cfg = cfg.imbox -- file namespace&lt;br /&gt;
		elseif ns == 14 then&lt;br /&gt;
			obj.cfg = cfg.cmbox -- category namespace&lt;br /&gt;
		else&lt;br /&gt;
			local nsTable = mw.site.namespaces[ns]&lt;br /&gt;
			if nsTable and nsTable.isTalk then&lt;br /&gt;
				obj.cfg = cfg.tmbox -- any talk namespace&lt;br /&gt;
			else&lt;br /&gt;
				obj.cfg = cfg.ombox -- other namespaces or invalid input&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Set the arguments, and remove all blank arguments except for the ones&lt;br /&gt;
	-- listed in cfg.allowBlankParams.&lt;br /&gt;
	do&lt;br /&gt;
		local newArgs = {}&lt;br /&gt;
		for k, v in pairs(args) do&lt;br /&gt;
			if v ~= '' then&lt;br /&gt;
				newArgs[k] = v&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		for i, param in ipairs(obj.cfg.allowBlankParams or {}) do&lt;br /&gt;
			newArgs[param] = args[param]&lt;br /&gt;
		end&lt;br /&gt;
		obj.args = newArgs&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Define internal data structure.&lt;br /&gt;
	obj.categories = {}&lt;br /&gt;
	obj.classes = {}&lt;br /&gt;
	-- For lazy loading of [[Module:Category handler]].&lt;br /&gt;
	obj.hasCategories = false&lt;br /&gt;
&lt;br /&gt;
	return setmetatable(obj, MessageBox)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function MessageBox:addCat(ns, cat, sort)&lt;br /&gt;
	if not cat then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	if sort then&lt;br /&gt;
		cat = string.format('[[Category:%s|%s]]', cat, sort)&lt;br /&gt;
	else&lt;br /&gt;
		cat = string.format('[[Category:%s]]', cat)&lt;br /&gt;
	end&lt;br /&gt;
	self.hasCategories = true&lt;br /&gt;
	self.categories[ns] = self.categories[ns] or {}&lt;br /&gt;
	table.insert(self.categories[ns], cat)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function MessageBox:addClass(class)&lt;br /&gt;
	if not class then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	table.insert(self.classes, class)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function MessageBox:setParameters()&lt;br /&gt;
	local args = self.args&lt;br /&gt;
	local cfg = self.cfg&lt;br /&gt;
&lt;br /&gt;
	-- Get type data.&lt;br /&gt;
	self.type = args.type&lt;br /&gt;
	local typeData = cfg.types[self.type]&lt;br /&gt;
	self.invalidTypeError = cfg.showInvalidTypeError&lt;br /&gt;
		and self.type&lt;br /&gt;
		and not typeData&lt;br /&gt;
	typeData = typeData or cfg.types[cfg.default]&lt;br /&gt;
	self.typeClass = typeData.class&lt;br /&gt;
	self.typeImage = typeData.image&lt;br /&gt;
&lt;br /&gt;
	-- Find if the box has been wrongly substituted.&lt;br /&gt;
	self.isSubstituted = cfg.substCheck and args.subst == 'SUBST'&lt;br /&gt;
&lt;br /&gt;
	-- Find whether we are using a small message box.&lt;br /&gt;
	self.isSmall = cfg.allowSmall and (&lt;br /&gt;
		cfg.smallParam and args.small == cfg.smallParam&lt;br /&gt;
		or not cfg.smallParam and yesno(args.small)&lt;br /&gt;
	)&lt;br /&gt;
&lt;br /&gt;
	-- Add attributes, classes and styles.&lt;br /&gt;
	self.id = args.id&lt;br /&gt;
	self.name = args.name&lt;br /&gt;
	if self.name then&lt;br /&gt;
		self:addClass('box-' .. string.gsub(self.name,' ','_'))&lt;br /&gt;
	end&lt;br /&gt;
	if yesno(args.plainlinks) ~= false then&lt;br /&gt;
		self:addClass('plainlinks')&lt;br /&gt;
	end&lt;br /&gt;
	for _, class in ipairs(cfg.classes or {}) do&lt;br /&gt;
		self:addClass(class)&lt;br /&gt;
	end&lt;br /&gt;
	if self.isSmall then&lt;br /&gt;
		self:addClass(cfg.smallClass or 'mbox-small')&lt;br /&gt;
	end&lt;br /&gt;
	self:addClass(self.typeClass)&lt;br /&gt;
	self:addClass(args.class)&lt;br /&gt;
	self.style = args.style&lt;br /&gt;
	self.attrs = args.attrs&lt;br /&gt;
&lt;br /&gt;
	-- Set text style.&lt;br /&gt;
	self.textstyle = args.textstyle&lt;br /&gt;
&lt;br /&gt;
	-- Find if we are on the template page or not. This functionality is only&lt;br /&gt;
	-- used if useCollapsibleTextFields is set, or if both cfg.templateCategory&lt;br /&gt;
	-- and cfg.templateCategoryRequireName are set.&lt;br /&gt;
	self.useCollapsibleTextFields = cfg.useCollapsibleTextFields&lt;br /&gt;
	if self.useCollapsibleTextFields&lt;br /&gt;
		or cfg.templateCategory&lt;br /&gt;
		and cfg.templateCategoryRequireName&lt;br /&gt;
	then&lt;br /&gt;
		if self.name then&lt;br /&gt;
			local templateName = mw.ustring.match(&lt;br /&gt;
				self.name,&lt;br /&gt;
				'^[tT][eE][mM][pP][lL][aA][tT][eE][%s_]*:[%s_]*(.*)$'&lt;br /&gt;
			) or self.name&lt;br /&gt;
			templateName = 'Template:' .. templateName&lt;br /&gt;
			self.templateTitle = getTitleObject(templateName)&lt;br /&gt;
		end&lt;br /&gt;
		self.isTemplatePage = self.templateTitle&lt;br /&gt;
			and mw.title.equals(self.title, self.templateTitle)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Process data for collapsible text fields. At the moment these are only&lt;br /&gt;
	-- used in {{ambox}}.&lt;br /&gt;
	if self.useCollapsibleTextFields then&lt;br /&gt;
		-- Get the self.issue value.&lt;br /&gt;
		if self.isSmall and args.smalltext then&lt;br /&gt;
			self.issue = args.smalltext&lt;br /&gt;
		else&lt;br /&gt;
			local sect&lt;br /&gt;
			if args.sect == '' then&lt;br /&gt;
				sect = 'This ' .. (cfg.sectionDefault or 'page')&lt;br /&gt;
			elseif type(args.sect) == 'string' then&lt;br /&gt;
				sect = 'This ' .. args.sect&lt;br /&gt;
			end&lt;br /&gt;
			local issue = args.issue&lt;br /&gt;
			issue = type(issue) == 'string' and issue ~= '' and issue or nil&lt;br /&gt;
			local text = args.text&lt;br /&gt;
			text = type(text) == 'string' and text or nil&lt;br /&gt;
			local issues = {}&lt;br /&gt;
			table.insert(issues, sect)&lt;br /&gt;
			table.insert(issues, issue)&lt;br /&gt;
			table.insert(issues, text)&lt;br /&gt;
			self.issue = table.concat(issues, ' ')&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- Get the self.talk value.&lt;br /&gt;
		local talk = args.talk&lt;br /&gt;
		-- Show talk links on the template page or template subpages if the talk&lt;br /&gt;
		-- parameter is blank.&lt;br /&gt;
		if talk == ''&lt;br /&gt;
			and self.templateTitle&lt;br /&gt;
			and (&lt;br /&gt;
				mw.title.equals(self.templateTitle, self.title)&lt;br /&gt;
				or self.title:isSubpageOf(self.templateTitle)&lt;br /&gt;
			)&lt;br /&gt;
		then&lt;br /&gt;
			talk = '#'&lt;br /&gt;
		elseif talk == '' then&lt;br /&gt;
			talk = nil&lt;br /&gt;
		end&lt;br /&gt;
		if talk then&lt;br /&gt;
			-- If the talk value is a talk page, make a link to that page. Else&lt;br /&gt;
			-- assume that it's a section heading, and make a link to the talk&lt;br /&gt;
			-- page of the current page with that section heading.&lt;br /&gt;
			local talkTitle = getTitleObject(talk)&lt;br /&gt;
			local talkArgIsTalkPage = true&lt;br /&gt;
			if not talkTitle or not talkTitle.isTalkPage then&lt;br /&gt;
				talkArgIsTalkPage = false&lt;br /&gt;
				talkTitle = getTitleObject(&lt;br /&gt;
					self.title.text,&lt;br /&gt;
					mw.site.namespaces[self.title.namespace].talk.id&lt;br /&gt;
				)&lt;br /&gt;
			end&lt;br /&gt;
			if talkTitle and talkTitle.exists then&lt;br /&gt;
                local talkText&lt;br /&gt;
                if self.isSmall then&lt;br /&gt;
                    local talkLink = talkArgIsTalkPage and talk or (talkTitle.prefixedText .. '#' .. talk)&lt;br /&gt;
                    talkText = string.format('([[%s|talk]])', talkLink)&lt;br /&gt;
                else&lt;br /&gt;
                    talkText = 'Relevant discussion may be found on'&lt;br /&gt;
                    if talkArgIsTalkPage then&lt;br /&gt;
                        talkText = string.format(&lt;br /&gt;
                            '%s [[%s|%s]].',&lt;br /&gt;
                            talkText,&lt;br /&gt;
                            talk,&lt;br /&gt;
                            talkTitle.prefixedText&lt;br /&gt;
                        )&lt;br /&gt;
                    else&lt;br /&gt;
                        talkText = string.format(&lt;br /&gt;
                            '%s the [[%s#%s|talk page]].',&lt;br /&gt;
                            talkText,&lt;br /&gt;
                            talkTitle.prefixedText,&lt;br /&gt;
                            talk&lt;br /&gt;
                        )&lt;br /&gt;
                    end&lt;br /&gt;
                end&lt;br /&gt;
				self.talk = talkText&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- Get other values.&lt;br /&gt;
		self.fix = args.fix ~= '' and args.fix or nil&lt;br /&gt;
		local date&lt;br /&gt;
		if args.date and args.date ~= '' then&lt;br /&gt;
			date = args.date&lt;br /&gt;
		elseif args.date == '' and self.isTemplatePage then&lt;br /&gt;
			date = lang:formatDate('F Y')&lt;br /&gt;
		end&lt;br /&gt;
		if date then&lt;br /&gt;
			self.date = string.format(&amp;quot; &amp;lt;small class='date-container'&amp;gt;''(&amp;lt;span class='date'&amp;gt;%s&amp;lt;/span&amp;gt;)''&amp;lt;/small&amp;gt;&amp;quot;, date)&lt;br /&gt;
		end&lt;br /&gt;
		self.info = args.info&lt;br /&gt;
		if yesno(args.removalnotice) then&lt;br /&gt;
			self.removalNotice = cfg.removalNotice&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Set the non-collapsible text field. At the moment this is used by all box&lt;br /&gt;
	-- types other than ambox, and also by ambox when small=yes.&lt;br /&gt;
	if self.isSmall then&lt;br /&gt;
		self.text = args.smalltext or args.text&lt;br /&gt;
	else&lt;br /&gt;
		self.text = args.text&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Set the below row.&lt;br /&gt;
	self.below = cfg.below and args.below&lt;br /&gt;
&lt;br /&gt;
	-- General image settings.&lt;br /&gt;
	self.imageCellDiv = not self.isSmall and cfg.imageCellDiv&lt;br /&gt;
	self.imageEmptyCell = cfg.imageEmptyCell&lt;br /&gt;
	if cfg.imageEmptyCellStyle then&lt;br /&gt;
		self.imageEmptyCellStyle = 'border:none;padding:0px;width:1px'&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Left image settings.&lt;br /&gt;
	local imageLeft = self.isSmall and args.smallimage or args.image&lt;br /&gt;
	if cfg.imageCheckBlank and imageLeft ~= 'blank' and imageLeft ~= 'none'&lt;br /&gt;
		or not cfg.imageCheckBlank and imageLeft ~= 'none'&lt;br /&gt;
	then&lt;br /&gt;
		self.imageLeft = imageLeft&lt;br /&gt;
		if not imageLeft then&lt;br /&gt;
			local imageSize = self.isSmall&lt;br /&gt;
				and (cfg.imageSmallSize or '30x30px')&lt;br /&gt;
				or '40x40px'&lt;br /&gt;
			self.imageLeft = string.format('[[File:%s|%s|link=|alt=]]', self.typeImage&lt;br /&gt;
				or 'Imbox notice.png', imageSize)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Right image settings.&lt;br /&gt;
	local imageRight = self.isSmall and args.smallimageright or args.imageright&lt;br /&gt;
	if not (cfg.imageRightNone and imageRight == 'none') then&lt;br /&gt;
		self.imageRight = imageRight&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function MessageBox:setMainspaceCategories()&lt;br /&gt;
	local args = self.args&lt;br /&gt;
	local cfg = self.cfg&lt;br /&gt;
&lt;br /&gt;
	if not cfg.allowMainspaceCategories then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local nums = {}&lt;br /&gt;
	for _, prefix in ipairs{'cat', 'category', 'all'} do&lt;br /&gt;
		args[prefix .. '1'] = args[prefix]&lt;br /&gt;
		nums = union(nums, getArgNums(args, prefix))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- The following is roughly equivalent to the old {{Ambox/category}}.&lt;br /&gt;
	local date = args.date&lt;br /&gt;
	date = type(date) == 'string' and date&lt;br /&gt;
	local preposition = 'from'&lt;br /&gt;
	for _, num in ipairs(nums) do&lt;br /&gt;
		local mainCat = args['cat' .. tostring(num)]&lt;br /&gt;
			or args['category' .. tostring(num)]&lt;br /&gt;
		local allCat = args['all' .. tostring(num)]&lt;br /&gt;
		mainCat = type(mainCat) == 'string' and mainCat&lt;br /&gt;
		allCat = type(allCat) == 'string' and allCat&lt;br /&gt;
		if mainCat and date and date ~= '' then&lt;br /&gt;
			local catTitle = string.format('%s %s %s', mainCat, preposition, date)&lt;br /&gt;
			self:addCat(0, catTitle)&lt;br /&gt;
			catTitle = getTitleObject('Category:' .. catTitle)&lt;br /&gt;
			if not catTitle or not catTitle.exists then&lt;br /&gt;
				self:addCat(0, 'Articles with invalid date parameter in template')&lt;br /&gt;
			end&lt;br /&gt;
		elseif mainCat and (not date or date == '') then&lt;br /&gt;
			self:addCat(0, mainCat)&lt;br /&gt;
		end&lt;br /&gt;
		if allCat then&lt;br /&gt;
			self:addCat(0, allCat)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function MessageBox:setTemplateCategories()&lt;br /&gt;
	local args = self.args&lt;br /&gt;
	local cfg = self.cfg&lt;br /&gt;
&lt;br /&gt;
	-- Add template categories.&lt;br /&gt;
	if cfg.templateCategory then&lt;br /&gt;
		if cfg.templateCategoryRequireName then&lt;br /&gt;
			if self.isTemplatePage then&lt;br /&gt;
				self:addCat(10, cfg.templateCategory)&lt;br /&gt;
			end&lt;br /&gt;
		elseif not self.title.isSubpage then&lt;br /&gt;
			self:addCat(10, cfg.templateCategory)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Add template error categories.&lt;br /&gt;
	if cfg.templateErrorCategory then&lt;br /&gt;
		local templateErrorCategory = cfg.templateErrorCategory&lt;br /&gt;
		local templateCat, templateSort&lt;br /&gt;
		if not self.name and not self.title.isSubpage then&lt;br /&gt;
			templateCat = templateErrorCategory&lt;br /&gt;
		elseif self.isTemplatePage then&lt;br /&gt;
			local paramsToCheck = cfg.templateErrorParamsToCheck or {}&lt;br /&gt;
			local count = 0&lt;br /&gt;
			for i, param in ipairs(paramsToCheck) do&lt;br /&gt;
				if not args[param] then&lt;br /&gt;
					count = count + 1&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			if count &amp;gt; 0 then&lt;br /&gt;
				templateCat = templateErrorCategory&lt;br /&gt;
				templateSort = tostring(count)&lt;br /&gt;
			end&lt;br /&gt;
			if self.categoryNums and #self.categoryNums &amp;gt; 0 then&lt;br /&gt;
				templateCat = templateErrorCategory&lt;br /&gt;
				templateSort = 'C'&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		self:addCat(10, templateCat, templateSort)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function MessageBox:setAllNamespaceCategories()&lt;br /&gt;
	-- Set categories for all namespaces.&lt;br /&gt;
	if self.invalidTypeError then&lt;br /&gt;
		local allSort = (self.title.namespace == 0 and 'Main:' or '') .. self.title.prefixedText&lt;br /&gt;
		self:addCat('all', 'Wikipedia message box parameter needs fixing', allSort)&lt;br /&gt;
	end&lt;br /&gt;
	if self.isSubstituted then&lt;br /&gt;
		self:addCat('all', 'Pages with incorrectly substituted templates')&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function MessageBox:setCategories()&lt;br /&gt;
	if self.title.namespace == 0 then&lt;br /&gt;
		self:setMainspaceCategories()&lt;br /&gt;
	elseif self.title.namespace == 10 then&lt;br /&gt;
		self:setTemplateCategories()&lt;br /&gt;
	end&lt;br /&gt;
	self:setAllNamespaceCategories()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function MessageBox:renderCategories()&lt;br /&gt;
	if not self.hasCategories then&lt;br /&gt;
		-- No categories added, no need to pass them to Category handler so,&lt;br /&gt;
		-- if it was invoked, it would return the empty string.&lt;br /&gt;
		-- So we shortcut and return the empty string.&lt;br /&gt;
		return &amp;quot;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	-- Convert category tables to strings and pass them through&lt;br /&gt;
	-- [[Module:Category handler]].&lt;br /&gt;
	return require('Module:Category handler')._main{&lt;br /&gt;
		main = table.concat(self.categories[0] or {}),&lt;br /&gt;
		template = table.concat(self.categories[10] or {}),&lt;br /&gt;
		all = table.concat(self.categories.all or {}),&lt;br /&gt;
		nocat = self.args.nocat,&lt;br /&gt;
		page = self.args.page&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function MessageBox:export()&lt;br /&gt;
	local root = mw.html.create()&lt;br /&gt;
&lt;br /&gt;
	-- Add the subst check error.&lt;br /&gt;
	if self.isSubstituted and self.name then&lt;br /&gt;
		root:tag('b')&lt;br /&gt;
			:addClass('error')&lt;br /&gt;
			:wikitext(string.format(&lt;br /&gt;
				'Template &amp;lt;code&amp;gt;%s[[Template:%s|%s]]%s&amp;lt;/code&amp;gt; has been incorrectly substituted.',&lt;br /&gt;
				mw.text.nowiki('{{'), self.name, self.name, mw.text.nowiki('}}')&lt;br /&gt;
			))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Create the box table.&lt;br /&gt;
	local boxTable = root:tag('table')&lt;br /&gt;
	boxTable:attr('id', self.id or nil)&lt;br /&gt;
	for i, class in ipairs(self.classes or {}) do&lt;br /&gt;
		boxTable:addClass(class or nil)&lt;br /&gt;
	end&lt;br /&gt;
	boxTable&lt;br /&gt;
		:cssText(self.style or nil)&lt;br /&gt;
		:attr('role', 'presentation')&lt;br /&gt;
&lt;br /&gt;
	if self.attrs then&lt;br /&gt;
		boxTable:attr(self.attrs)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Add the left-hand image.&lt;br /&gt;
	local row = boxTable:tag('tr')&lt;br /&gt;
	if self.imageLeft then&lt;br /&gt;
		local imageLeftCell = row:tag('td'):addClass('mbox-image')&lt;br /&gt;
		if self.imageCellDiv then&lt;br /&gt;
			-- If we are using a div, redefine imageLeftCell so that the image&lt;br /&gt;
			-- is inside it. Divs use style=&amp;quot;width: 52px;&amp;quot;, which limits the&lt;br /&gt;
			-- image width to 52px. If any images in a div are wider than that,&lt;br /&gt;
			-- they may overlap with the text or cause other display problems.&lt;br /&gt;
			imageLeftCell = imageLeftCell:tag('div'):css('width', '52px')&lt;br /&gt;
		end&lt;br /&gt;
		imageLeftCell:wikitext(self.imageLeft or nil)&lt;br /&gt;
	elseif self.imageEmptyCell then&lt;br /&gt;
		-- Some message boxes define an empty cell if no image is specified, and&lt;br /&gt;
		-- some don't. The old template code in templates where empty cells are&lt;br /&gt;
		-- specified gives the following hint: &amp;quot;No image. Cell with some width&lt;br /&gt;
		-- or padding necessary for text cell to have 100% width.&amp;quot;&lt;br /&gt;
		row:tag('td')&lt;br /&gt;
			:addClass('mbox-empty-cell')&lt;br /&gt;
			:cssText(self.imageEmptyCellStyle or nil)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Add the text.&lt;br /&gt;
	local textCell = row:tag('td'):addClass('mbox-text')&lt;br /&gt;
	if self.useCollapsibleTextFields then&lt;br /&gt;
		-- The message box uses advanced text parameters that allow things to be&lt;br /&gt;
		-- collapsible. At the moment, only ambox uses this.&lt;br /&gt;
		textCell:cssText(self.textstyle or nil)&lt;br /&gt;
		local textCellDiv = textCell:tag('div')&lt;br /&gt;
		textCellDiv&lt;br /&gt;
			:addClass('mbox-text-span')&lt;br /&gt;
			:wikitext(self.issue or nil)&lt;br /&gt;
		if (self.talk or self.fix) then&lt;br /&gt;
			textCellDiv:tag('span')&lt;br /&gt;
				:addClass('hide-when-compact')&lt;br /&gt;
				:wikitext(self.talk and (' ' .. self.talk) or nil)&lt;br /&gt;
				:wikitext(self.fix and (' ' .. self.fix) or nil)&lt;br /&gt;
		end&lt;br /&gt;
		textCellDiv:wikitext(self.date and (' ' .. self.date) or nil)&lt;br /&gt;
		if self.info and not self.isSmall then&lt;br /&gt;
			textCellDiv&lt;br /&gt;
				:tag('span')&lt;br /&gt;
				:addClass('hide-when-compact')&lt;br /&gt;
				:wikitext(self.info and (' ' .. self.info) or nil)&lt;br /&gt;
		end&lt;br /&gt;
		if self.removalNotice then&lt;br /&gt;
			textCellDiv:tag('small')&lt;br /&gt;
				:addClass('hide-when-compact')&lt;br /&gt;
				:tag('i')&lt;br /&gt;
					:wikitext(string.format(&amp;quot; (%s)&amp;quot;, self.removalNotice))&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		-- Default text formatting - anything goes.&lt;br /&gt;
		textCell&lt;br /&gt;
			:cssText(self.textstyle or nil)&lt;br /&gt;
			:wikitext(self.text or nil)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Add the right-hand image.&lt;br /&gt;
	if self.imageRight then&lt;br /&gt;
		local imageRightCell = row:tag('td'):addClass('mbox-imageright')&lt;br /&gt;
		if self.imageCellDiv then&lt;br /&gt;
			-- If we are using a div, redefine imageRightCell so that the image&lt;br /&gt;
			-- is inside it.&lt;br /&gt;
			imageRightCell = imageRightCell:tag('div'):css('width', '52px')&lt;br /&gt;
		end&lt;br /&gt;
		imageRightCell&lt;br /&gt;
			:wikitext(self.imageRight or nil)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Add the below row.&lt;br /&gt;
	if self.below then&lt;br /&gt;
		boxTable:tag('tr')&lt;br /&gt;
			:tag('td')&lt;br /&gt;
				:attr('colspan', self.imageRight and '3' or '2')&lt;br /&gt;
				:addClass('mbox-text')&lt;br /&gt;
				:cssText(self.textstyle or nil)&lt;br /&gt;
				:wikitext(self.below or nil)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Add error message for invalid type parameters.&lt;br /&gt;
	if self.invalidTypeError then&lt;br /&gt;
		root:tag('div')&lt;br /&gt;
			:css('text-align', 'center')&lt;br /&gt;
			:wikitext(string.format(&lt;br /&gt;
				'This message box is using an invalid &amp;quot;type=%s&amp;quot; parameter and needs fixing.',&lt;br /&gt;
				self.type or ''&lt;br /&gt;
			))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Add categories.&lt;br /&gt;
	root:wikitext(self:renderCategories() or nil)&lt;br /&gt;
&lt;br /&gt;
	return tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Exports&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local p, mt = {}, {}&lt;br /&gt;
&lt;br /&gt;
function p._exportClasses()&lt;br /&gt;
	-- For testing.&lt;br /&gt;
	return {&lt;br /&gt;
		MessageBox = MessageBox&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(boxType, args, cfgTables)&lt;br /&gt;
	local box = MessageBox.new(boxType, args, cfgTables or mw.loadData(CONFIG_MODULE))&lt;br /&gt;
	box:setParameters()&lt;br /&gt;
	box:setCategories()&lt;br /&gt;
	return box:export()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function mt.__index(t, k)&lt;br /&gt;
	return function (frame)&lt;br /&gt;
		if not getArgs then&lt;br /&gt;
			getArgs = require('Module:Arguments').getArgs&lt;br /&gt;
		end&lt;br /&gt;
		return t.main(k, getArgs(frame, {trim = false, removeBlanks = false}))&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return setmetatable(p, mt)&lt;/div&gt;</summary>
		<author><name>Fayanzār</name></author>
	</entry>
	<entry>
		<id>https://en.wiki.marraidh.com/index.php?title=Module:InfoboxImage&amp;diff=63</id>
		<title>Module:InfoboxImage</title>
		<link rel="alternate" type="text/html" href="https://en.wiki.marraidh.com/index.php?title=Module:InfoboxImage&amp;diff=63"/>
		<updated>2026-07-17T12:33:46Z</updated>

		<summary type="html">&lt;p&gt;Fayanzār: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- Inputs:&lt;br /&gt;
--    image - Can either be a bare filename (with or without the File:/Image: prefix) or a fully formatted image link&lt;br /&gt;
--    page - page to display for multipage images (DjVu)&lt;br /&gt;
--    size - size to display the image&lt;br /&gt;
--    maxsize - maximum size for image&lt;br /&gt;
--    sizedefault - default size to display the image if size param is blank&lt;br /&gt;
--    alt - alt text for image&lt;br /&gt;
--    title - title text for image&lt;br /&gt;
--    border - set to yes if border&lt;br /&gt;
--    center - set to yes, if the image has to be centered&lt;br /&gt;
--    upright - upright image param&lt;br /&gt;
--    suppressplaceholder - if yes then checks to see if image is a placeholder and suppresses it&lt;br /&gt;
--    link - page to visit when clicking on image&lt;br /&gt;
-- Outputs:&lt;br /&gt;
--    Formatted image.&lt;br /&gt;
-- More details available at the &amp;quot;Module:InfoboxImage/doc&amp;quot; page&lt;br /&gt;
&lt;br /&gt;
local i = {};&lt;br /&gt;
&lt;br /&gt;
local placeholder_image = {&lt;br /&gt;
    &amp;quot;Blue - Replace this image female.svg&amp;quot;,&lt;br /&gt;
    &amp;quot;Blue - Replace this image male.svg&amp;quot;,&lt;br /&gt;
    &amp;quot;Female no free image yet.png&amp;quot;,&lt;br /&gt;
    &amp;quot;Flag of None (square).svg&amp;quot;,&lt;br /&gt;
    &amp;quot;Flag of None.svg&amp;quot;,&lt;br /&gt;
    &amp;quot;Flag of.svg&amp;quot;,&lt;br /&gt;
    &amp;quot;Green - Replace this image female.svg&amp;quot;,&lt;br /&gt;
    &amp;quot;Green - Replace this image male.svg&amp;quot;,&lt;br /&gt;
    &amp;quot;Image is needed female.svg&amp;quot;,&lt;br /&gt;
    &amp;quot;Image is needed male.svg&amp;quot;,&lt;br /&gt;
    &amp;quot;Location map of None.svg&amp;quot;,&lt;br /&gt;
    &amp;quot;Male no free image yet.png&amp;quot;,&lt;br /&gt;
    &amp;quot;Missing flag.png&amp;quot;,&lt;br /&gt;
    &amp;quot;No flag.svg&amp;quot;,&lt;br /&gt;
    &amp;quot;No free portrait.svg&amp;quot;,&lt;br /&gt;
    &amp;quot;No portrait (female).svg&amp;quot;,&lt;br /&gt;
    &amp;quot;No portrait (male).svg&amp;quot;,&lt;br /&gt;
    &amp;quot;Red - Replace this image female.svg&amp;quot;,&lt;br /&gt;
    &amp;quot;Red - Replace this image male.svg&amp;quot;,&lt;br /&gt;
    &amp;quot;Replace this image female (blue).svg&amp;quot;,&lt;br /&gt;
    &amp;quot;Replace this image female.svg&amp;quot;,&lt;br /&gt;
    &amp;quot;Replace this image male (blue).svg&amp;quot;,&lt;br /&gt;
    &amp;quot;Replace this image male.svg&amp;quot;,&lt;br /&gt;
    &amp;quot;Silver - Replace this image female.svg&amp;quot;,&lt;br /&gt;
    &amp;quot;Silver - Replace this image male.svg&amp;quot;,&lt;br /&gt;
    &amp;quot;Replace this image.svg&amp;quot;,&lt;br /&gt;
	&amp;quot;Cricket no pic.png&amp;quot;,&lt;br /&gt;
	&amp;quot;CarersLogo.gif&amp;quot;,&lt;br /&gt;
	&amp;quot;Diagram Needed.svg&amp;quot;,&lt;br /&gt;
	&amp;quot;Example.jpg&amp;quot;,&lt;br /&gt;
	&amp;quot;Image placeholder.png&amp;quot;,&lt;br /&gt;
	&amp;quot;No male portrait.svg&amp;quot;,&lt;br /&gt;
	&amp;quot;Nocover-upload.png&amp;quot;,&lt;br /&gt;
	&amp;quot;NoDVDcover copy.png&amp;quot;,&lt;br /&gt;
	&amp;quot;Noribbon.svg&amp;quot;,&lt;br /&gt;
	&amp;quot;No portrait-BFD-test.svg&amp;quot;,&lt;br /&gt;
	&amp;quot;Placeholder barnstar ribbon.png&amp;quot;,&lt;br /&gt;
	&amp;quot;Project Trains no image.png&amp;quot;,&lt;br /&gt;
	&amp;quot;Image-request.png&amp;quot;,&lt;br /&gt;
	&amp;quot;Sin bandera.svg&amp;quot;,&lt;br /&gt;
	&amp;quot;Sin escudo.svg&amp;quot;,&lt;br /&gt;
	&amp;quot;Replace this image - temple.png&amp;quot;,&lt;br /&gt;
	&amp;quot;Replace this image butterfly.png&amp;quot;,&lt;br /&gt;
	&amp;quot;Replace this image.svg&amp;quot;,&lt;br /&gt;
	&amp;quot;Replace this image1.svg&amp;quot;,&lt;br /&gt;
	&amp;quot;Resolution angle.png&amp;quot;,&lt;br /&gt;
	&amp;quot;Image-No portrait-text-BFD-test.svg&amp;quot;,&lt;br /&gt;
	&amp;quot;Insert image here.svg&amp;quot;,&lt;br /&gt;
	&amp;quot;No image available.png&amp;quot;,&lt;br /&gt;
	&amp;quot;NO IMAGE YET square.png&amp;quot;,&lt;br /&gt;
	&amp;quot;NO IMAGE YET.png&amp;quot;,&lt;br /&gt;
	&amp;quot;No Photo Available.svg&amp;quot;,&lt;br /&gt;
	&amp;quot;No Screenshot.svg&amp;quot;,&lt;br /&gt;
	&amp;quot;No-image-available.jpg&amp;quot;,&lt;br /&gt;
	&amp;quot;Null.png&amp;quot;,&lt;br /&gt;
	&amp;quot;PictureNeeded.gif&amp;quot;,&lt;br /&gt;
	&amp;quot;Place holder.jpg&amp;quot;,&lt;br /&gt;
	&amp;quot;Unbenannt.JPG&amp;quot;,&lt;br /&gt;
	&amp;quot;UploadACopyrightFreeImage.svg&amp;quot;,&lt;br /&gt;
	&amp;quot;UploadAnImage.gif&amp;quot;,&lt;br /&gt;
	&amp;quot;UploadAnImage.svg&amp;quot;,&lt;br /&gt;
	&amp;quot;UploadAnImageShort.svg&amp;quot;,&lt;br /&gt;
	&amp;quot;CarersLogo.gif&amp;quot;,&lt;br /&gt;
	&amp;quot;Diagram Needed.svg&amp;quot;,&lt;br /&gt;
	&amp;quot;No male portrait.svg&amp;quot;,&lt;br /&gt;
	&amp;quot;NoDVDcover copy.png&amp;quot;,&lt;br /&gt;
	&amp;quot;Placeholder barnstar ribbon.png&amp;quot;,&lt;br /&gt;
	&amp;quot;Project Trains no image.png&amp;quot;,&lt;br /&gt;
	&amp;quot;Image-request.png&amp;quot;,&lt;br /&gt;
	&amp;quot;Noimage.gif&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function i.IsPlaceholder(image)&lt;br /&gt;
    -- change underscores to spaces&lt;br /&gt;
    image = mw.ustring.gsub(image, &amp;quot;_&amp;quot;, &amp;quot; &amp;quot;);&lt;br /&gt;
    assert(image ~= nil, 'mw.ustring.gsub(image, &amp;quot;_&amp;quot;, &amp;quot; &amp;quot;) must not return nil')&lt;br /&gt;
    -- if image starts with [[ then remove that and anything after |&lt;br /&gt;
    if mw.ustring.sub(image,1,2) == &amp;quot;[[&amp;quot; then&lt;br /&gt;
        image = mw.ustring.sub(image,3);&lt;br /&gt;
        image = mw.ustring.gsub(image, &amp;quot;([^|]*)|.*&amp;quot;, &amp;quot;%1&amp;quot;);&lt;br /&gt;
        assert(image ~= nil, 'mw.ustring.gsub(image, &amp;quot;([^|]*)|.*&amp;quot;, &amp;quot;%1&amp;quot;) must not return nil')&lt;br /&gt;
    end&lt;br /&gt;
    -- Trim spaces&lt;br /&gt;
    image = mw.ustring.gsub(image, '^[ ]*(.-)[ ]*$', '%1');&lt;br /&gt;
    assert(image ~= nil, &amp;quot;mw.ustring.gsub(image, '^[ ]*(.-)[ ]*$', '%1') must not return nil&amp;quot;)&lt;br /&gt;
    -- remove prefix if exists&lt;br /&gt;
    local allNames = mw.site.namespaces[6].aliases&lt;br /&gt;
    allNames[#allNames + 1] = mw.site.namespaces[6].name&lt;br /&gt;
    allNames[#allNames + 1] = mw.site.namespaces[6].canonicalName&lt;br /&gt;
    for i, name in ipairs(allNames) do&lt;br /&gt;
        if mw.ustring.lower(mw.ustring.sub(image, 1, mw.ustring.len(name) + 1)) == mw.ustring.lower(name .. &amp;quot;:&amp;quot;) then&lt;br /&gt;
            image = mw.ustring.sub(image, mw.ustring.len(name) + 2);&lt;br /&gt;
            break&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    -- Trim spaces&lt;br /&gt;
    image = mw.ustring.gsub(image, '^[ ]*(.-)[ ]*$', '%1');&lt;br /&gt;
    -- capitalise first letter&lt;br /&gt;
    image = mw.ustring.upper(mw.ustring.sub(image,1,1)) .. mw.ustring.sub(image,2);&lt;br /&gt;
&lt;br /&gt;
    for i,j in pairs(placeholder_image) do&lt;br /&gt;
        if image == j then&lt;br /&gt;
            return true&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function i.InfoboxImage(frame)&lt;br /&gt;
    local image = frame.args[&amp;quot;image&amp;quot;];&lt;br /&gt;
    &lt;br /&gt;
    if image == &amp;quot;&amp;quot; or image == nil then&lt;br /&gt;
        return &amp;quot;&amp;quot;;&lt;br /&gt;
    end&lt;br /&gt;
    if image == &amp;quot;&amp;amp;nbsp;&amp;quot; then&lt;br /&gt;
        return image;&lt;br /&gt;
    end&lt;br /&gt;
    if frame.args[&amp;quot;suppressplaceholder&amp;quot;] ~= &amp;quot;no&amp;quot; then&lt;br /&gt;
        if i.IsPlaceholder(image) == true then&lt;br /&gt;
            return &amp;quot;&amp;quot;;&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if mw.ustring.lower(mw.ustring.sub(image,1,5)) == &amp;quot;http:&amp;quot; then&lt;br /&gt;
        return &amp;quot;&amp;quot;;&lt;br /&gt;
    end&lt;br /&gt;
    if mw.ustring.lower(mw.ustring.sub(image,1,6)) == &amp;quot;[http:&amp;quot; then&lt;br /&gt;
        return &amp;quot;&amp;quot;;&lt;br /&gt;
    end&lt;br /&gt;
    if mw.ustring.lower(mw.ustring.sub(image,1,7)) == &amp;quot;[[http:&amp;quot; then&lt;br /&gt;
        return &amp;quot;&amp;quot;;&lt;br /&gt;
    end&lt;br /&gt;
    if mw.ustring.lower(mw.ustring.sub(image,1,6)) == &amp;quot;https:&amp;quot; then&lt;br /&gt;
        return &amp;quot;&amp;quot;;&lt;br /&gt;
    end&lt;br /&gt;
    if mw.ustring.lower(mw.ustring.sub(image,1,7)) == &amp;quot;[https:&amp;quot; then&lt;br /&gt;
        return &amp;quot;&amp;quot;;&lt;br /&gt;
    end&lt;br /&gt;
    if mw.ustring.lower(mw.ustring.sub(image,1,8)) == &amp;quot;[[https:&amp;quot; then&lt;br /&gt;
        return &amp;quot;&amp;quot;;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if mw.ustring.sub(image,1,2) == &amp;quot;[[&amp;quot; then&lt;br /&gt;
        -- search for thumbnail images and add to tracking cat if found&lt;br /&gt;
        local cat = &amp;quot;&amp;quot;;&lt;br /&gt;
        if mw.title.getCurrentTitle().namespace == 0 and (mw.ustring.find(image, &amp;quot;|%s*thumb%s*[|%]]&amp;quot;) or mw.ustring.find(image, &amp;quot;|%s*thumbnail%s*[|%]]&amp;quot;)) then&lt;br /&gt;
            cat = &amp;quot;[[Category:Pages using infoboxes with thumbnail images]]&amp;quot;;&lt;br /&gt;
        end&lt;br /&gt;
        return image .. cat;&lt;br /&gt;
    elseif mw.ustring.sub(image,1,2) == &amp;quot;{{&amp;quot; and mw.ustring.sub(image,1,3) ~= &amp;quot;{{{&amp;quot; then&lt;br /&gt;
        return image;&lt;br /&gt;
    elseif mw.ustring.sub(image,1,1) == &amp;quot;&amp;lt;&amp;quot; then&lt;br /&gt;
        return image;&lt;br /&gt;
    elseif mw.ustring.sub(image,1,5) == mw.ustring.char(127)..&amp;quot;UNIQ&amp;quot; then&lt;br /&gt;
        -- Found strip marker at begining, so pass don't process at all&lt;br /&gt;
        return image;&lt;br /&gt;
    elseif mw.ustring.sub(image,4,9) == &amp;quot;`UNIQ-&amp;quot; then&lt;br /&gt;
        -- Found strip marker at begining, so pass don't process at all&lt;br /&gt;
        return image;&lt;br /&gt;
    else&lt;br /&gt;
        local result = &amp;quot;&amp;quot;;&lt;br /&gt;
        local page = frame.args[&amp;quot;page&amp;quot;];&lt;br /&gt;
        local size = frame.args[&amp;quot;size&amp;quot;];&lt;br /&gt;
        local maxsize = frame.args[&amp;quot;maxsize&amp;quot;];&lt;br /&gt;
        local sizedefault = frame.args[&amp;quot;sizedefault&amp;quot;];&lt;br /&gt;
        local alt = frame.args[&amp;quot;alt&amp;quot;];&lt;br /&gt;
        local link = frame.args[&amp;quot;link&amp;quot;];&lt;br /&gt;
        local title = frame.args[&amp;quot;title&amp;quot;];&lt;br /&gt;
        local border = frame.args[&amp;quot;border&amp;quot;];&lt;br /&gt;
        local upright = frame.args[&amp;quot;upright&amp;quot;] or &amp;quot;&amp;quot;;&lt;br /&gt;
        local thumbtime = frame.args[&amp;quot;thumbtime&amp;quot;] or &amp;quot;&amp;quot;;&lt;br /&gt;
        local center= frame.args[&amp;quot;center&amp;quot;];&lt;br /&gt;
        &lt;br /&gt;
        -- remove prefix if exists&lt;br /&gt;
        local allNames = mw.site.namespaces[6].aliases&lt;br /&gt;
        allNames[#allNames + 1] = mw.site.namespaces[6].name&lt;br /&gt;
        allNames[#allNames + 1] = mw.site.namespaces[6].canonicalName&lt;br /&gt;
        for i, name in ipairs(allNames) do&lt;br /&gt;
            if mw.ustring.lower(mw.ustring.sub(image, 1, mw.ustring.len(name) + 1)) == mw.ustring.lower(name .. &amp;quot;:&amp;quot;) then&lt;br /&gt;
                image = mw.ustring.sub(image, mw.ustring.len(name) + 2);&lt;br /&gt;
                break&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        &lt;br /&gt;
        if maxsize ~= &amp;quot;&amp;quot; and maxsize ~= nil then&lt;br /&gt;
            -- if no sizedefault then set to maxsize&lt;br /&gt;
            if sizedefault == &amp;quot;&amp;quot; or sizedefault == nil then&lt;br /&gt;
                sizedefault = maxsize&lt;br /&gt;
            end&lt;br /&gt;
            -- check to see if size bigger than maxsize&lt;br /&gt;
            if size ~= &amp;quot;&amp;quot; and size ~= nil then&lt;br /&gt;
                local sizenumber = tonumber(mw.ustring.match(size,&amp;quot;%d*&amp;quot;)) or 0;&lt;br /&gt;
                local maxsizenumber = tonumber(mw.ustring.match(maxsize,&amp;quot;%d*&amp;quot;)) or 0;&lt;br /&gt;
                if sizenumber&amp;gt;maxsizenumber and maxsizenumber&amp;gt;0 then&lt;br /&gt;
                    size = maxsize;&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        -- add px to size if just a number&lt;br /&gt;
        if (tonumber(size) or 0) &amp;gt; 0 then&lt;br /&gt;
            size = size .. &amp;quot;px&amp;quot;;&lt;br /&gt;
        end&lt;br /&gt;
        -- add px to sizedefault if just a number&lt;br /&gt;
        if (tonumber(sizedefault) or 0) &amp;gt; 0 then&lt;br /&gt;
            sizedefault = sizedefault .. &amp;quot;px&amp;quot;;&lt;br /&gt;
        end&lt;br /&gt;
        &lt;br /&gt;
        result = &amp;quot;[[File:&amp;quot; .. image;&lt;br /&gt;
        if page ~= &amp;quot;&amp;quot; and page ~= nil then&lt;br /&gt;
            result = result .. &amp;quot;|page=&amp;quot; .. page;&lt;br /&gt;
        end&lt;br /&gt;
        if size ~= &amp;quot;&amp;quot; and size ~= nil then&lt;br /&gt;
            result = result .. &amp;quot;|&amp;quot; .. size;&lt;br /&gt;
        elseif sizedefault ~= &amp;quot;&amp;quot; and sizedefault ~= nil then&lt;br /&gt;
            result = result .. &amp;quot;|&amp;quot; .. sizedefault;&lt;br /&gt;
        else&lt;br /&gt;
            result = result .. &amp;quot;|frameless&amp;quot;;&lt;br /&gt;
        end&lt;br /&gt;
        if center == &amp;quot;yes&amp;quot; then&lt;br /&gt;
            result = result .. &amp;quot;|center&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        if alt ~= &amp;quot;&amp;quot; and alt ~= nil then&lt;br /&gt;
            result = result .. &amp;quot;|alt=&amp;quot; .. alt;&lt;br /&gt;
        end&lt;br /&gt;
        if link ~= &amp;quot;&amp;quot; and link ~= nil then&lt;br /&gt;
            result = result .. &amp;quot;|link=&amp;quot; .. link;&lt;br /&gt;
        end&lt;br /&gt;
        if border == &amp;quot;yes&amp;quot; then&lt;br /&gt;
            result = result .. &amp;quot;|border&amp;quot;;&lt;br /&gt;
        end&lt;br /&gt;
        if upright == &amp;quot;yes&amp;quot; then&lt;br /&gt;
            result = result .. &amp;quot;|upright&amp;quot;;&lt;br /&gt;
        elseif upright ~= &amp;quot;&amp;quot; then&lt;br /&gt;
            result = result .. &amp;quot;|upright=&amp;quot; .. upright;&lt;br /&gt;
        end&lt;br /&gt;
        if thumbtime ~= &amp;quot;&amp;quot; then&lt;br /&gt;
            result = result .. &amp;quot;|thumbtime=&amp;quot; .. thumbtime;&lt;br /&gt;
        end&lt;br /&gt;
        if title ~= &amp;quot;&amp;quot; and title ~= nil then&lt;br /&gt;
            result = result .. &amp;quot;|&amp;quot; .. title;&lt;br /&gt;
        elseif alt ~= &amp;quot;&amp;quot; and alt ~= nil then&lt;br /&gt;
            result = result .. &amp;quot;|&amp;quot; .. alt;&lt;br /&gt;
        end&lt;br /&gt;
        result = result .. &amp;quot;]]&amp;quot;;&lt;br /&gt;
        &lt;br /&gt;
        return result;&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return i;&lt;/div&gt;</summary>
		<author><name>Fayanzār</name></author>
	</entry>
	<entry>
		<id>https://en.wiki.marraidh.com/index.php?title=Module:Infobox&amp;diff=61</id>
		<title>Module:Infobox</title>
		<link rel="alternate" type="text/html" href="https://en.wiki.marraidh.com/index.php?title=Module:Infobox&amp;diff=61"/>
		<updated>2026-07-17T12:33:45Z</updated>

		<summary type="html">&lt;p&gt;Fayanzār: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;--&lt;br /&gt;
-- This module implements {{Infobox}}&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local navbar = require('Module:Navbar')._navbar&lt;br /&gt;
&lt;br /&gt;
local args = {}&lt;br /&gt;
local origArgs = {}&lt;br /&gt;
local root&lt;br /&gt;
&lt;br /&gt;
local function notempty( s ) return s and s:match( '%S' ) end&lt;br /&gt;
&lt;br /&gt;
local function fixChildBoxes(sval, tt)&lt;br /&gt;
	if notempty(sval) then&lt;br /&gt;
		local marker = '&amp;lt;span class=special_infobox_marker&amp;gt;'&lt;br /&gt;
		local s = sval&lt;br /&gt;
		s = mw.ustring.gsub(s, '(&amp;lt;%s*[Tt][Rr])', marker .. '%1')&lt;br /&gt;
		s = mw.ustring.gsub(s, '(&amp;lt;/[Tt][Rr]%s*&amp;gt;)', '%1' .. marker)&lt;br /&gt;
		if s:match(marker) then&lt;br /&gt;
			s = mw.ustring.gsub(s, marker .. '%s*' .. marker, '')&lt;br /&gt;
			s = mw.ustring.gsub(s, '([\r\n]|-[^\r\n]*[\r\n])%s*' .. marker, '%1')&lt;br /&gt;
			s = mw.ustring.gsub(s, marker .. '%s*([\r\n]|-)', '%1')&lt;br /&gt;
			s = mw.ustring.gsub(s, '(&amp;lt;/[Cc][Aa][Pp][Tt][Ii][Oo][Nn]%s*&amp;gt;%s*)' .. marker, '%1')&lt;br /&gt;
			s = mw.ustring.gsub(s, '(&amp;lt;%s*[Tt][Aa][Bb][Ll][Ee][^&amp;lt;&amp;gt;]*&amp;gt;%s*)' .. marker, '%1')&lt;br /&gt;
			s = mw.ustring.gsub(s, '^(%{|[^\r\n]*[\r\n]%s*)' .. marker, '%1')&lt;br /&gt;
			s = mw.ustring.gsub(s, '([\r\n]%{|[^\r\n]*[\r\n]%s*)' .. marker, '%1')&lt;br /&gt;
			s = mw.ustring.gsub(s, marker .. '(%s*&amp;lt;/[Tt][Aa][Bb][Ll][Ee]%s*&amp;gt;)', '%1')&lt;br /&gt;
			s = mw.ustring.gsub(s, marker .. '(%s*\n|%})', '%1')&lt;br /&gt;
		end&lt;br /&gt;
		if s:match(marker) then&lt;br /&gt;
			local subcells = mw.text.split(s, marker)&lt;br /&gt;
			s = ''&lt;br /&gt;
			for k = 1, #subcells do&lt;br /&gt;
				if k == 1 then&lt;br /&gt;
					s = s .. subcells[k] .. '&amp;lt;/' .. tt .. '&amp;gt;&amp;lt;/tr&amp;gt;'&lt;br /&gt;
				elseif k == #subcells then&lt;br /&gt;
					local rowstyle = ' style=&amp;quot;display:none&amp;quot;'&lt;br /&gt;
					if notempty(subcells[k]) then rowstyle = ''	end&lt;br /&gt;
					s = s .. '&amp;lt;tr' .. rowstyle ..'&amp;gt;&amp;lt;' .. tt .. ' colspan=2&amp;gt;\n' .. subcells[k]&lt;br /&gt;
				elseif notempty(subcells[k]) then&lt;br /&gt;
					if (k % 2) == 0 then&lt;br /&gt;
						s = s .. subcells[k]&lt;br /&gt;
					else&lt;br /&gt;
						s = s .. '&amp;lt;tr&amp;gt;&amp;lt;' .. tt .. ' colspan=2&amp;gt;\n' .. subcells[k] .. '&amp;lt;/' .. tt .. '&amp;gt;&amp;lt;/tr&amp;gt;'&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		-- the next two lines add a newline at the end of lists for the PHP parser&lt;br /&gt;
		-- https://en.wikipedia.org/w/index.php?title=Template_talk:Infobox_musical_artist&amp;amp;oldid=849054481&lt;br /&gt;
		-- remove when [[:phab:T191516]] is fixed or OBE&lt;br /&gt;
		s = mw.ustring.gsub(s, '([\r\n][%*#;:][^\r\n]*)$', '%1\n')&lt;br /&gt;
		s = mw.ustring.gsub(s, '^([%*#;:][^\r\n]*)$', '%1\n')&lt;br /&gt;
		s = mw.ustring.gsub(s, '^([%*#;:])', '\n%1')&lt;br /&gt;
		s = mw.ustring.gsub(s, '^(%{%|)', '\n%1')&lt;br /&gt;
		return s&lt;br /&gt;
	else&lt;br /&gt;
		return sval&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function union(t1, t2)&lt;br /&gt;
	-- Returns the union of the values of two tables, as a sequence.&lt;br /&gt;
	local vals = {}&lt;br /&gt;
	for k, v in pairs(t1) do&lt;br /&gt;
		vals[v] = true&lt;br /&gt;
	end&lt;br /&gt;
	for k, v in pairs(t2) do&lt;br /&gt;
		vals[v] = true&lt;br /&gt;
	end&lt;br /&gt;
	local ret = {}&lt;br /&gt;
	for k, v in pairs(vals) do&lt;br /&gt;
		table.insert(ret, k)&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getArgNums(prefix)&lt;br /&gt;
	-- Returns a table containing the numbers of the arguments that exist&lt;br /&gt;
	-- for the specified prefix. For example, if the prefix was 'data', and&lt;br /&gt;
	-- 'data1', 'data2', and 'data5' exist, it would return {1, 2, 5}.&lt;br /&gt;
	local nums = {}&lt;br /&gt;
	for k, v in pairs(args) do&lt;br /&gt;
		local num = tostring(k):match('^' .. prefix .. '([1-9]%d*)$')&lt;br /&gt;
		if num then table.insert(nums, tonumber(num)) end&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(nums)&lt;br /&gt;
	return nums&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function addRow(rowArgs)&lt;br /&gt;
	-- Adds a row to the infobox, with either a header cell&lt;br /&gt;
	-- or a label/data cell combination.&lt;br /&gt;
	if rowArgs.header and rowArgs.header ~= '_BLANK_' then&lt;br /&gt;
		root&lt;br /&gt;
			:tag('tr')&lt;br /&gt;
				:addClass(rowArgs.rowclass)&lt;br /&gt;
				:cssText(rowArgs.rowstyle)&lt;br /&gt;
				:attr('id', rowArgs.rowid)&lt;br /&gt;
				:tag('th')&lt;br /&gt;
					:attr('colspan', 2)&lt;br /&gt;
					:attr('id', rowArgs.headerid)&lt;br /&gt;
					:addClass(rowArgs.class)&lt;br /&gt;
					:addClass(args.headerclass)&lt;br /&gt;
					:css('text-align', 'center')&lt;br /&gt;
					:cssText(args.headerstyle)&lt;br /&gt;
					:cssText(rowArgs.rowcellstyle)&lt;br /&gt;
					:wikitext(fixChildBoxes(rowArgs.header, 'th'))&lt;br /&gt;
		if rowArgs.data then&lt;br /&gt;
			root:wikitext('[[Category:Pages which use infobox templates with ignored data cells]]')&lt;br /&gt;
		end&lt;br /&gt;
	elseif rowArgs.data then&lt;br /&gt;
		if not rowArgs.data:gsub('%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:[^]]*]]', ''):match('^%S') then&lt;br /&gt;
			rowArgs.rowstyle = 'display:none'&lt;br /&gt;
		end&lt;br /&gt;
		local row = root:tag('tr')&lt;br /&gt;
		row:addClass(rowArgs.rowclass)&lt;br /&gt;
		row:cssText(rowArgs.rowstyle)&lt;br /&gt;
		row:attr('id', rowArgs.rowid)&lt;br /&gt;
		if rowArgs.label then&lt;br /&gt;
			row&lt;br /&gt;
				:tag('th')&lt;br /&gt;
					:attr('scope', 'row')&lt;br /&gt;
					:attr('id', rowArgs.labelid)&lt;br /&gt;
					:cssText(args.labelstyle)&lt;br /&gt;
					:cssText(rowArgs.rowcellstyle)&lt;br /&gt;
					:wikitext(rowArgs.label)&lt;br /&gt;
					:done()&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		local dataCell = row:tag('td')&lt;br /&gt;
		if not rowArgs.label then&lt;br /&gt;
			dataCell&lt;br /&gt;
				:attr('colspan', 2)&lt;br /&gt;
				:css('text-align', 'center')&lt;br /&gt;
		end&lt;br /&gt;
		dataCell&lt;br /&gt;
			:attr('id', rowArgs.dataid)&lt;br /&gt;
			:addClass(rowArgs.class)&lt;br /&gt;
			:cssText(rowArgs.datastyle)&lt;br /&gt;
			:cssText(rowArgs.rowcellstyle)&lt;br /&gt;
			:wikitext(fixChildBoxes(rowArgs.data, 'td'))&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderTitle()&lt;br /&gt;
	if not args.title then return end&lt;br /&gt;
&lt;br /&gt;
	root&lt;br /&gt;
		:tag('caption')&lt;br /&gt;
			:addClass(args.titleclass)&lt;br /&gt;
			:cssText(args.titlestyle)&lt;br /&gt;
			:wikitext(args.title)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderAboveRow()&lt;br /&gt;
	if not args.above then return end&lt;br /&gt;
&lt;br /&gt;
	root&lt;br /&gt;
		:tag('tr')&lt;br /&gt;
			:tag('th')&lt;br /&gt;
				:attr('colspan', 2)&lt;br /&gt;
				:addClass(args.aboveclass)&lt;br /&gt;
				:css('text-align', 'center')&lt;br /&gt;
				:css('font-size', '125%')&lt;br /&gt;
				:css('font-weight', 'bold')&lt;br /&gt;
				:cssText(args.abovestyle)&lt;br /&gt;
				:wikitext(fixChildBoxes(args.above,'th'))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderBelowRow()&lt;br /&gt;
	if not args.below then return end&lt;br /&gt;
&lt;br /&gt;
	root&lt;br /&gt;
		:tag('tr')&lt;br /&gt;
			:tag('td')&lt;br /&gt;
				:attr('colspan', '2')&lt;br /&gt;
				:addClass(args.belowclass)&lt;br /&gt;
				:css('text-align', 'center')&lt;br /&gt;
				:cssText(args.belowstyle)&lt;br /&gt;
				:wikitext(fixChildBoxes(args.below,'td'))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderSubheaders()&lt;br /&gt;
	if args.subheader then&lt;br /&gt;
		args.subheader1 = args.subheader&lt;br /&gt;
	end&lt;br /&gt;
	if args.subheaderrowclass then&lt;br /&gt;
		args.subheaderrowclass1 = args.subheaderrowclass&lt;br /&gt;
	end&lt;br /&gt;
	local subheadernums = getArgNums('subheader')&lt;br /&gt;
	for k, num in ipairs(subheadernums) do&lt;br /&gt;
		addRow({&lt;br /&gt;
			data = args['subheader' .. tostring(num)],&lt;br /&gt;
			datastyle = args.subheaderstyle,&lt;br /&gt;
			rowcellstyle = args['subheaderstyle' .. tostring(num)],&lt;br /&gt;
			class = args.subheaderclass,&lt;br /&gt;
			rowclass = args['subheaderrowclass' .. tostring(num)]&lt;br /&gt;
		})&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderImages()&lt;br /&gt;
	if args.image then&lt;br /&gt;
		args.image1 = args.image&lt;br /&gt;
	end&lt;br /&gt;
	if args.caption then&lt;br /&gt;
		args.caption1 = args.caption&lt;br /&gt;
	end&lt;br /&gt;
	local imagenums = getArgNums('image')&lt;br /&gt;
	for k, num in ipairs(imagenums) do&lt;br /&gt;
		local caption = args['caption' .. tostring(num)]&lt;br /&gt;
		local data = mw.html.create():wikitext(args['image' .. tostring(num)])&lt;br /&gt;
		if caption then&lt;br /&gt;
			data&lt;br /&gt;
				:tag('div')&lt;br /&gt;
					:cssText(args.captionstyle)&lt;br /&gt;
					:wikitext(caption)&lt;br /&gt;
		end&lt;br /&gt;
		addRow({&lt;br /&gt;
			data = tostring(data),&lt;br /&gt;
			datastyle = args.imagestyle,&lt;br /&gt;
			class = args.imageclass,&lt;br /&gt;
			rowclass = args['imagerowclass' .. tostring(num)]&lt;br /&gt;
		})&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function preprocessRows()&lt;br /&gt;
	-- Gets the union of the header and data argument numbers,&lt;br /&gt;
	-- and renders them all in order using addRow.&lt;br /&gt;
	local rownums = union(getArgNums('header'), getArgNums('data'))&lt;br /&gt;
	table.sort(rownums)&lt;br /&gt;
	local lastheader&lt;br /&gt;
	for k, num in ipairs(rownums) do&lt;br /&gt;
		if args['header' .. tostring(num)] then&lt;br /&gt;
			if lastheader then&lt;br /&gt;
				args['header' .. tostring(lastheader)] = nil&lt;br /&gt;
			end&lt;br /&gt;
			lastheader = num&lt;br /&gt;
		elseif args['data' .. tostring(num)] and args['data' .. tostring(num)]:gsub('%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:[^]]*]]', ''):match('^%S') then&lt;br /&gt;
			local data = args['data' .. tostring(num)]&lt;br /&gt;
			if data:gsub('%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:[^]]*]]', ''):match('%S') then&lt;br /&gt;
				lastheader = nil&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if lastheader then&lt;br /&gt;
		args['header' .. tostring(lastheader)] = nil&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderRows()&lt;br /&gt;
	-- Gets the union of the header and data argument numbers,&lt;br /&gt;
	-- and renders them all in order using addRow.&lt;br /&gt;
	local rownums = union(getArgNums('header'), getArgNums('data'))&lt;br /&gt;
	table.sort(rownums)&lt;br /&gt;
	for k, num in ipairs(rownums) do&lt;br /&gt;
		addRow({&lt;br /&gt;
			header = args['header' .. tostring(num)],&lt;br /&gt;
			label = args['label' .. tostring(num)],&lt;br /&gt;
			data = args['data' .. tostring(num)],&lt;br /&gt;
			datastyle = args.datastyle,&lt;br /&gt;
			class = args['class' .. tostring(num)],&lt;br /&gt;
			rowclass = args['rowclass' .. tostring(num)],&lt;br /&gt;
			rowstyle = args['rowstyle' .. tostring(num)],&lt;br /&gt;
			rowcellstyle = args['rowcellstyle' .. tostring(num)],&lt;br /&gt;
			dataid = args['dataid' .. tostring(num)],&lt;br /&gt;
			labelid = args['labelid' .. tostring(num)],&lt;br /&gt;
			headerid = args['headerid' .. tostring(num)],&lt;br /&gt;
			rowid = args['rowid' .. tostring(num)]&lt;br /&gt;
		})&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderNavBar()&lt;br /&gt;
	if not args.name then return end&lt;br /&gt;
&lt;br /&gt;
	root&lt;br /&gt;
		:tag('tr')&lt;br /&gt;
			:tag('td')&lt;br /&gt;
				:attr('colspan', '2')&lt;br /&gt;
				:css('text-align', 'right')&lt;br /&gt;
				:wikitext(navbar{&lt;br /&gt;
					args.name,&lt;br /&gt;
					mini = 1,&lt;br /&gt;
				})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderItalicTitle()&lt;br /&gt;
	local italicTitle = args['italic title'] and mw.ustring.lower(args['italic title'])&lt;br /&gt;
	if italicTitle == '' or italicTitle == 'force' or italicTitle == 'yes' then&lt;br /&gt;
		root:wikitext(mw.getCurrentFrame():expandTemplate({title = 'italic title'}))&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderTrackingCategories()&lt;br /&gt;
	if args.decat ~= 'yes' then&lt;br /&gt;
		if args.child == 'yes' then&lt;br /&gt;
			if args.title then&lt;br /&gt;
				root:wikitext('[[Category:Pages which use embedded infobox templates with the title parameter]]')&lt;br /&gt;
			end&lt;br /&gt;
		elseif #(getArgNums('data')) == 0 and mw.title.getCurrentTitle().namespace == 0 then&lt;br /&gt;
			root:wikitext('[[Category:Articles which use infobox templates with no data rows]]')&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function _infobox()&lt;br /&gt;
	-- Specify the overall layout of the infobox, with special settings&lt;br /&gt;
	-- if the infobox is used as a 'child' inside another infobox.&lt;br /&gt;
	if args.child ~= 'yes' then&lt;br /&gt;
		root = mw.html.create('table')&lt;br /&gt;
&lt;br /&gt;
		root&lt;br /&gt;
			:addClass((args.subbox ~= 'yes') and 'infobox' or nil)&lt;br /&gt;
			:addClass(args.bodyclass)&lt;br /&gt;
&lt;br /&gt;
			if args.subbox == 'yes' then&lt;br /&gt;
				root&lt;br /&gt;
					:css('padding', '0')&lt;br /&gt;
					:css('border', 'none')&lt;br /&gt;
					:css('margin', '-3px')&lt;br /&gt;
					:css('width', 'auto')&lt;br /&gt;
					:css('min-width', '100%')&lt;br /&gt;
					:css('font-size', '100%')&lt;br /&gt;
					:css('clear', 'none')&lt;br /&gt;
					:css('float', 'none')&lt;br /&gt;
					:css('background-color', 'transparent')&lt;br /&gt;
			else&lt;br /&gt;
				root&lt;br /&gt;
					:css('width', '22em')&lt;br /&gt;
			end&lt;br /&gt;
		root&lt;br /&gt;
			:cssText(args.bodystyle)&lt;br /&gt;
&lt;br /&gt;
		renderTitle()&lt;br /&gt;
		renderAboveRow()&lt;br /&gt;
	else&lt;br /&gt;
		root = mw.html.create()&lt;br /&gt;
&lt;br /&gt;
		root&lt;br /&gt;
			:wikitext(args.title)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	renderSubheaders()&lt;br /&gt;
	renderImages()&lt;br /&gt;
	if args.autoheaders then&lt;br /&gt;
		preprocessRows()&lt;br /&gt;
	end&lt;br /&gt;
	renderRows()&lt;br /&gt;
	renderBelowRow()&lt;br /&gt;
	renderNavBar()&lt;br /&gt;
	renderItalicTitle()&lt;br /&gt;
	renderTrackingCategories()&lt;br /&gt;
&lt;br /&gt;
	return tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function preprocessSingleArg(argName)&lt;br /&gt;
	-- If the argument exists and isn't blank, add it to the argument table.&lt;br /&gt;
	-- Blank arguments are treated as nil to match the behaviour of ParserFunctions.&lt;br /&gt;
	if origArgs[argName] and origArgs[argName] ~= '' then&lt;br /&gt;
		args[argName] = origArgs[argName]&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function preprocessArgs(prefixTable, step)&lt;br /&gt;
	-- Assign the parameters with the given prefixes to the args table, in order, in batches&lt;br /&gt;
	-- of the step size specified. This is to prevent references etc. from appearing in the&lt;br /&gt;
	-- wrong order. The prefixTable should be an array containing tables, each of which has&lt;br /&gt;
	-- two possible fields, a &amp;quot;prefix&amp;quot; string and a &amp;quot;depend&amp;quot; table. The function always parses&lt;br /&gt;
	-- parameters containing the &amp;quot;prefix&amp;quot; string, but only parses parameters in the &amp;quot;depend&amp;quot;&lt;br /&gt;
	-- table if the prefix parameter is present and non-blank.&lt;br /&gt;
	if type(prefixTable) ~= 'table' then&lt;br /&gt;
		error(&amp;quot;Non-table value detected for the prefix table&amp;quot;, 2)&lt;br /&gt;
	end&lt;br /&gt;
	if type(step) ~= 'number' then&lt;br /&gt;
		error(&amp;quot;Invalid step value detected&amp;quot;, 2)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Get arguments without a number suffix, and check for bad input.&lt;br /&gt;
	for i,v in ipairs(prefixTable) do&lt;br /&gt;
		if type(v) ~= 'table' or type(v.prefix) ~= &amp;quot;string&amp;quot; or (v.depend and type(v.depend) ~= 'table') then&lt;br /&gt;
			error('Invalid input detected to preprocessArgs prefix table', 2)&lt;br /&gt;
		end&lt;br /&gt;
		preprocessSingleArg(v.prefix)&lt;br /&gt;
		-- Only parse the depend parameter if the prefix parameter is present and not blank.&lt;br /&gt;
		if args[v.prefix] and v.depend then&lt;br /&gt;
			for j, dependValue in ipairs(v.depend) do&lt;br /&gt;
				if type(dependValue) ~= 'string' then&lt;br /&gt;
					error('Invalid &amp;quot;depend&amp;quot; parameter value detected in preprocessArgs')&lt;br /&gt;
				end&lt;br /&gt;
				preprocessSingleArg(dependValue)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Get arguments with number suffixes.&lt;br /&gt;
	local a = 1 -- Counter variable.&lt;br /&gt;
	local moreArgumentsExist = true&lt;br /&gt;
	while moreArgumentsExist == true do&lt;br /&gt;
		moreArgumentsExist = false&lt;br /&gt;
		for i = a, a + step - 1 do&lt;br /&gt;
			for j,v in ipairs(prefixTable) do&lt;br /&gt;
				local prefixArgName = v.prefix .. tostring(i)&lt;br /&gt;
				if origArgs[prefixArgName] then&lt;br /&gt;
					moreArgumentsExist = true -- Do another loop if any arguments are found, even blank ones.&lt;br /&gt;
					preprocessSingleArg(prefixArgName)&lt;br /&gt;
				end&lt;br /&gt;
				-- Process the depend table if the prefix argument is present and not blank, or&lt;br /&gt;
				-- we are processing &amp;quot;prefix1&amp;quot; and &amp;quot;prefix&amp;quot; is present and not blank, and&lt;br /&gt;
				-- if the depend table is present.&lt;br /&gt;
				if v.depend and (args[prefixArgName] or (i == 1 and args[v.prefix])) then&lt;br /&gt;
					for j,dependValue in ipairs(v.depend) do&lt;br /&gt;
						local dependArgName = dependValue .. tostring(i)&lt;br /&gt;
						preprocessSingleArg(dependArgName)&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		a = a + step&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function parseDataParameters()&lt;br /&gt;
	-- Parse the data parameters in the same order that the old {{infobox}} did, so that&lt;br /&gt;
	-- references etc. will display in the expected places. Parameters that depend on&lt;br /&gt;
	-- another parameter are only processed if that parameter is present, to avoid&lt;br /&gt;
	-- phantom references appearing in article reference lists.&lt;br /&gt;
	preprocessSingleArg('autoheaders')&lt;br /&gt;
	preprocessSingleArg('child')&lt;br /&gt;
	preprocessSingleArg('bodyclass')&lt;br /&gt;
	preprocessSingleArg('subbox')&lt;br /&gt;
	preprocessSingleArg('bodystyle')&lt;br /&gt;
	preprocessSingleArg('title')&lt;br /&gt;
	preprocessSingleArg('titleclass')&lt;br /&gt;
	preprocessSingleArg('titlestyle')&lt;br /&gt;
	preprocessSingleArg('above')&lt;br /&gt;
	preprocessSingleArg('aboveclass')&lt;br /&gt;
	preprocessSingleArg('abovestyle')&lt;br /&gt;
	preprocessArgs({&lt;br /&gt;
		{prefix = 'subheader', depend = {'subheaderstyle', 'subheaderrowclass'}}&lt;br /&gt;
	}, 10)&lt;br /&gt;
	preprocessSingleArg('subheaderstyle')&lt;br /&gt;
	preprocessSingleArg('subheaderclass')&lt;br /&gt;
	preprocessArgs({&lt;br /&gt;
		{prefix = 'image', depend = {'caption', 'imagerowclass'}}&lt;br /&gt;
	}, 10)&lt;br /&gt;
	preprocessSingleArg('captionstyle')&lt;br /&gt;
	preprocessSingleArg('imagestyle')&lt;br /&gt;
	preprocessSingleArg('imageclass')&lt;br /&gt;
	preprocessArgs({&lt;br /&gt;
		{prefix = 'header'},&lt;br /&gt;
		{prefix = 'data', depend = {'label'}},&lt;br /&gt;
		{prefix = 'rowclass'},&lt;br /&gt;
		{prefix = 'rowstyle'},&lt;br /&gt;
		{prefix = 'rowcellstyle'},&lt;br /&gt;
		{prefix = 'class'},&lt;br /&gt;
		{prefix = 'dataid'},&lt;br /&gt;
		{prefix = 'labelid'},&lt;br /&gt;
		{prefix = 'headerid'},&lt;br /&gt;
		{prefix = 'rowid'}&lt;br /&gt;
	}, 50)&lt;br /&gt;
	preprocessSingleArg('headerclass')&lt;br /&gt;
	preprocessSingleArg('headerstyle')&lt;br /&gt;
	preprocessSingleArg('labelstyle')&lt;br /&gt;
	preprocessSingleArg('datastyle')&lt;br /&gt;
	preprocessSingleArg('below')&lt;br /&gt;
	preprocessSingleArg('belowclass')&lt;br /&gt;
	preprocessSingleArg('belowstyle')&lt;br /&gt;
	preprocessSingleArg('name')&lt;br /&gt;
	args['italic title'] = origArgs['italic title'] -- different behaviour if blank or absent&lt;br /&gt;
	preprocessSingleArg('decat')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.infobox(frame)&lt;br /&gt;
	-- If called via #invoke, use the args passed into the invoking template.&lt;br /&gt;
	-- Otherwise, for testing purposes, assume args are being passed directly in.&lt;br /&gt;
	if frame == mw.getCurrentFrame() then&lt;br /&gt;
		origArgs = frame:getParent().args&lt;br /&gt;
	else&lt;br /&gt;
		origArgs = frame&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	parseDataParameters()&lt;br /&gt;
	&lt;br /&gt;
	return _infobox()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.infoboxTemplate(frame)&lt;br /&gt;
	-- For calling via #invoke within a template&lt;br /&gt;
	origArgs = {}&lt;br /&gt;
	for k,v in pairs(frame.args) do origArgs[k] = mw.text.trim(v) end&lt;br /&gt;
	&lt;br /&gt;
	parseDataParameters()&lt;br /&gt;
	&lt;br /&gt;
	return _infobox()&lt;br /&gt;
end&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Fayanzār</name></author>
	</entry>
	<entry>
		<id>https://en.wiki.marraidh.com/index.php?title=Module:If_empty&amp;diff=59</id>
		<title>Module:If empty</title>
		<link rel="alternate" type="text/html" href="https://en.wiki.marraidh.com/index.php?title=Module:If_empty&amp;diff=59"/>
		<updated>2026-07-17T12:33:45Z</updated>

		<summary type="html">&lt;p&gt;Fayanzār: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local args = require('Module:Arguments').getArgs(frame, {wrappers = 'Template:If empty', removeBlanks = false})&lt;br /&gt;
&lt;br /&gt;
	-- For backwards compatibility reasons, the first 8 parameters can be unset instead of being blank,&lt;br /&gt;
	-- even though there's really no legitimate use case for this. At some point, this will be removed.&lt;br /&gt;
	local lowestNil = math.huge&lt;br /&gt;
	for i = 8,1,-1 do&lt;br /&gt;
		if args[i] == nil then&lt;br /&gt;
			args[i] = ''&lt;br /&gt;
			lowestNil = i&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	for k,v in ipairs(args) do&lt;br /&gt;
		if v ~= '' then&lt;br /&gt;
			if lowestNil &amp;lt; k then&lt;br /&gt;
				-- If any uses of this template depend on the behavior above, add them to a tracking category.&lt;br /&gt;
				-- This is a rather fragile, convoluted, hacky way to do it, but it ensures that this module's output won't be modified&lt;br /&gt;
				-- by it.&lt;br /&gt;
				frame:extensionTag('ref', '[[Category:Instances of Template:If_empty missing arguments]]', {group = 'TrackingCategory'})&lt;br /&gt;
				frame:extensionTag('references', '', {group = 'TrackingCategory'})&lt;br /&gt;
			end&lt;br /&gt;
			return v&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Fayanzār</name></author>
	</entry>
</feed>