<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.digitalcellulose.com/wiki/index.php?action=history&amp;feed=atom&amp;title=Module%3ABiology</id>
	<title>Module:Biology - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://www.digitalcellulose.com/wiki/index.php?action=history&amp;feed=atom&amp;title=Module%3ABiology"/>
	<link rel="alternate" type="text/html" href="https://www.digitalcellulose.com/wiki/index.php?title=Module:Biology&amp;action=history"/>
	<updated>2026-07-18T17:46:27Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.34.2</generator>
	<entry>
		<id>https://www.digitalcellulose.com/wiki/index.php?title=Module:Biology&amp;diff=152303&amp;oldid=prev</id>
		<title>Adminsuzy: 1 revision imported</title>
		<link rel="alternate" type="text/html" href="https://www.digitalcellulose.com/wiki/index.php?title=Module:Biology&amp;diff=152303&amp;oldid=prev"/>
		<updated>2020-09-13T20:46:24Z</updated>

		<summary type="html">&lt;p&gt;1 revision imported&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Revision as of 20:46, 13 September 2020&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Adminsuzy</name></author>
		
	</entry>
	<entry>
		<id>https://www.digitalcellulose.com/wiki/index.php?title=Module:Biology&amp;diff=152302&amp;oldid=prev</id>
		<title>Imported&gt;~riley: Protected &quot;Module:Biology&quot;: High-risk Lua module ([Edit=Allow only template editors and administrators] (indefinite) [Move=Allow only template editors and administrators] (indefinite))</title>
		<link rel="alternate" type="text/html" href="https://www.digitalcellulose.com/wiki/index.php?title=Module:Biology&amp;diff=152302&amp;oldid=prev"/>
		<updated>2019-12-27T19:19:05Z</updated>

		<summary type="html">&lt;p&gt;Protected &amp;quot;&lt;a href=&quot;/wiki/index.php/Module:Biology&quot; title=&quot;Module:Biology&quot;&gt;Module:Biology&lt;/a&gt;&amp;quot;: &lt;a href=&quot;https://commons.wikimedia.org/wiki/Protection_policy&quot; class=&quot;extiw&quot; title=&quot;commons:Protection policy&quot;&gt;High-risk Lua module&lt;/a&gt; ([Edit=Allow only template editors and administrators] (indefinite) [Move=Allow only template editors and administrators] (indefinite))&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local _debug=nil&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
---------- Debug utilities -------------------------------------------------------------------------&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- addDebug() in /sanbox templates/modules adds a debug information to a global variable.&lt;br /&gt;
-- in non sandbox templates/modules is does nothing&lt;br /&gt;
function p.addDebug(functionName, text)&lt;br /&gt;
	if not _debug then&lt;br /&gt;
		return&lt;br /&gt;
	end&lt;br /&gt;
	_debug = _debug .. functionName .. ': ' .. mw.text.nowiki(text) .. '&amp;lt;BR/&amp;gt;'&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- getDebug() returns '' or a string prefixed by &amp;lt;prefix&amp;gt; containing the debug to be displayed&lt;br /&gt;
function p.getDebug(prefix)&lt;br /&gt;
	if string.isNilOrEmpty(_debug) then&lt;br /&gt;
		return ''&lt;br /&gt;
	end&lt;br /&gt;
	return prefix .. _debug&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
---------- String utilities ------------------------------------------------------------------------&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- Equivalent to java startsWith()&lt;br /&gt;
-- It has a testcase/non-regression module Module:Biology/testcases using testcase_string_startsWith()&lt;br /&gt;
function string.startsWith(longString, start)&lt;br /&gt;
	if not longString or not start then&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	local startLen = string.len(start)&lt;br /&gt;
	if startLen &amp;gt; string.len(longString) then&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
   	return string.sub(longString, 1, startLen) == start&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Equivalent to java endsWith()&lt;br /&gt;
-- It has a testcase/non-regression module Module:Biology/testcases using testcase_string_endsWith()&lt;br /&gt;
function string.endsWith(longString, ending)&lt;br /&gt;
	if not longString or not ending then&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	local endingLen = string.len(ending)&lt;br /&gt;
	if endingLen &amp;gt; string.len(longString) then&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
   	return ending=='' or string.sub(longString,-endingLen)==ending&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- stringContains(long,small) is an improvment of string.find(longlower, smalllower)&lt;br /&gt;
-- it is case insensitiv + also returns true if long == small&lt;br /&gt;
-- It has a testcase/non-regression module Module:Biology/testcases using testcase_string_contains()&lt;br /&gt;
function string.contains(long, small)&lt;br /&gt;
	if not long or not small then&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	local longlower = string.lower(long)&lt;br /&gt;
	local smalllower = string.lower(small)&lt;br /&gt;
	if longlower == smalllower or string.find(longlower, smalllower, 1, true) then -- true for plaintext&lt;br /&gt;
		return true&lt;br /&gt;
	else&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- stringUpperFirstLowerOthers(str) returns &amp;quot;Hello&amp;quot; out of &amp;quot;heLLO&amp;quot;&lt;br /&gt;
-- It has a testcase/non-regression module Module:Biology/testcases using testcase_string_upperFirstLowerOthers()&lt;br /&gt;
function string.upperFirstLowerOthers(str)&lt;br /&gt;
	if not str then&lt;br /&gt;
		return Nil&lt;br /&gt;
	end&lt;br /&gt;
	local length = string.len(str)&lt;br /&gt;
	if length == 0 then&lt;br /&gt;
		return ''&lt;br /&gt;
	elseif length == 1 then&lt;br /&gt;
		return string.upper(str)&lt;br /&gt;
	else&lt;br /&gt;
		return string.upper(string.sub(str,1,1)) .. string.lower(string.sub(str,2))&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- stringUpperFirst(str) returns &amp;quot;HeLlO&amp;quot; out of &amp;quot;heLlO&amp;quot;&lt;br /&gt;
-- It has a testcase/non-regression module Module:Biology/testcases using testcase_string_upperFirst()&lt;br /&gt;
function string.upperFirst(str)&lt;br /&gt;
	if not str then&lt;br /&gt;
		return Nil&lt;br /&gt;
	end&lt;br /&gt;
	local length = string.len(str)&lt;br /&gt;
	if length == 0 then&lt;br /&gt;
		return ''&lt;br /&gt;
	elseif length == 1 then&lt;br /&gt;
		return string.upper(str)&lt;br /&gt;
	else&lt;br /&gt;
		return string.upper(string.sub(str,1,1)) .. string.sub(str,2)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- isTrue() transforms a string into a bool&lt;br /&gt;
-- Nil, '', '0', 'false', 'no' return false&lt;br /&gt;
-- other values return true&lt;br /&gt;
-- It has a testcase/non-regression module Module:Biology/testcases using testcase_string_isTrue()&lt;br /&gt;
function string.isTrue(stringValue)&lt;br /&gt;
	if not stringValue then&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	if string.len(stringValue) == 0 then&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	stringValue = string.lower(mw.text.trim(stringValue))&lt;br /&gt;
	if stringValue == '0' or stringValue == 'false' or stringValue == 'no' then&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	return true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- string.trimOrNullify() returns a trimmed string or nil if the trimmed string is empty&lt;br /&gt;
-- It has a testcase/non-regression module Module:Biology/testcases using testcase_string_trimOrNullify()&lt;br /&gt;
function string.trimOrNullify(str)&lt;br /&gt;
	if not str then&lt;br /&gt;
		return Nil&lt;br /&gt;
	end&lt;br /&gt;
	str = mw.text.trim(str)&lt;br /&gt;
	if str == '' then&lt;br /&gt;
		return Nil&lt;br /&gt;
	end&lt;br /&gt;
	return str&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- string.isNilOrEmpty() returns&lt;br /&gt;
-- * true for nil or '' or '   '&lt;br /&gt;
-- * false otherwise&lt;br /&gt;
-- It has a testcase/non-regression module Module:Biology/testcases using testcase_string_isNilOrEmpty()&lt;br /&gt;
function string.isNilOrEmpty(stringValue)&lt;br /&gt;
	if not stringValue then&lt;br /&gt;
		return true&lt;br /&gt;
	end&lt;br /&gt;
	if string.len(stringValue) == 0 then&lt;br /&gt;
		return true&lt;br /&gt;
	end&lt;br /&gt;
	stringValue = mw.text.trim(stringValue)&lt;br /&gt;
	if string.len(stringValue) == 0 then&lt;br /&gt;
		return true&lt;br /&gt;
	end&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
---------- Namespace/articleName utilities ---------------------------------------------------------&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- getCurrentNamespace() returns the current namespace name ('gallery' instead of '')&lt;br /&gt;
-- It has a testcase/non-regression module Module:Biology/testcases using getCurrentNamespace() directly&lt;br /&gt;
function p.getCurrentNamespace()&lt;br /&gt;
	local namespace = string.lower(mw.title.getCurrentTitle().nsText)&lt;br /&gt;
	if string.len(namespace) == 0 then&lt;br /&gt;
		namespace = 'gallery'&lt;br /&gt;
	end&lt;br /&gt;
	return namespace&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- isCurrentNamespaceACategory() returns true when called from a category&lt;br /&gt;
-- It has a testcase/non-regression module Module:Biology/testcases using isCurrentNamespaceACategory() directly&lt;br /&gt;
function p.isCurrentNamespaceACategory()&lt;br /&gt;
	local namespace = string.lower(mw.title.getCurrentTitle().nsText)&lt;br /&gt;
	if namespace == 'category' then&lt;br /&gt;
		return true&lt;br /&gt;
	else&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- isCurrentNamespaceACategoryOrAGallery() returns true when called from a category or gallery&lt;br /&gt;
-- It has a testcase/non-regression module Module:Biology/testcases using isCurrentNamespaceACategoryOrAGallery() directly&lt;br /&gt;
function p.isCurrentNamespaceACategoryOrAGallery()&lt;br /&gt;
	local namespace = string.lower(mw.title.getCurrentTitle().nsText)&lt;br /&gt;
	if string.len(namespace) == 0 then&lt;br /&gt;
		return true&lt;br /&gt;
	elseif namespace == 'category' then&lt;br /&gt;
		return true&lt;br /&gt;
	else&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- isCurrentNamespaceACategoryOrAGalleryOrATemplate() returns true when called from a category or gallery or template&lt;br /&gt;
-- It has a testcase/non-regression module Module:Biology/testcases using isCurrentNamespaceACategoryOrAGalleryOrATemplate() directly&lt;br /&gt;
function p.isCurrentNamespaceACategoryOrAGalleryOrATemplate()&lt;br /&gt;
	local namespace = string.lower(mw.title.getCurrentTitle().nsText)&lt;br /&gt;
	if namespace == '' then&lt;br /&gt;
		return true&lt;br /&gt;
	elseif namespace == 'category' then&lt;br /&gt;
		return true&lt;br /&gt;
	elseif namespace == 'template' then&lt;br /&gt;
		return true&lt;br /&gt;
	else&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- suppressCategory() returns &amp;quot;Platanthera&amp;quot; out of &amp;quot;Category:Platanthera&amp;quot;&lt;br /&gt;
-- It has a testcase/non-regression module Module:Biology/testcases using testcase_suppressCategory()&lt;br /&gt;
function p.suppressCategory(category)&lt;br /&gt;
	local twoPointStartPos, twoPointEndPos = string.find(category, ':', 1, true)&lt;br /&gt;
	if twoPointStartPos then&lt;br /&gt;
		category = string.sub(category,twoPointEndPos+1)&lt;br /&gt;
	end&lt;br /&gt;
	return category&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- suppressDisambiguation() returns &amp;quot;Platanthera&amp;quot; out of &amp;quot;Platanthera (genus)&amp;quot;&lt;br /&gt;
-- It has a testcase/non-regression module Module:Biology/testcases using testcase_suppressDisambiguation()&lt;br /&gt;
function p.suppressDisambiguation(name)&lt;br /&gt;
	name = string.gsub(name, '_', ' ')&lt;br /&gt;
	local start = string.find(name, '(', 1, true)&lt;br /&gt;
	if not start then&lt;br /&gt;
		return name&lt;br /&gt;
	end&lt;br /&gt;
	local endp = string.find(name, ')', start, true)&lt;br /&gt;
	if not endp then&lt;br /&gt;
		return name&lt;br /&gt;
	end&lt;br /&gt;
	local part1 = mw.text.trim(string.sub(name, 1, start-1))&lt;br /&gt;
	local part2 = mw.text.trim(string.sub(name, endp+1))&lt;br /&gt;
	if string.len(part1) == 0 then&lt;br /&gt;
		return part2&lt;br /&gt;
	elseif string.len(part2) == 0 then&lt;br /&gt;
		return part1&lt;br /&gt;
	else&lt;br /&gt;
		return part1 .. ' ' .. part2&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- pageNameCorrespondToSpeciesOrInfraspecies() returns true for &amp;quot;Category:Pantera tigris&amp;quot; or &amp;quot;Pantera tigris subsp. tigris&amp;quot;&lt;br /&gt;
-- pageNameCorrespondToSpeciesOrInfraspecies() returns false for &amp;quot;Category:Phyllosasa&amp;quot;, &amp;quot;× Phyllosasa&amp;quot;, &amp;quot;Rosa nothosect. Cinnastylae&amp;quot;, &amp;quot;Category:Rosa subg. Rosa&amp;quot;&lt;br /&gt;
-- It has a testcase/non-regression module Module:Biology/testcases using testcase_pageNameCorrespondToSpeciesOrInfraspecies()&lt;br /&gt;
function p.pageNameCorrespondToSpeciesOrInfraspecies(pageName)&lt;br /&gt;
	if string.find(pageName, ' nothosect. ') then&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	if string.find(pageName, ' subg. ') then&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	pageName = p.suppressCategory(pageName)&lt;br /&gt;
	pageName = p.suppressDisambiguation(pageName)&lt;br /&gt;
	pageName = string.gsub(pageName, '×', '') -- '× Phyllosasa' is not an infraspecies&lt;br /&gt;
	pageName = mw.text.trim(pageName)&lt;br /&gt;
	if string.find(pageName, ' ') then&lt;br /&gt;
		return true&lt;br /&gt;
	else&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
---------- Error utilities -------------------------------------------------------------------------&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- incorrectBiologyTemplateUsage() returns an error text (optional) and a 'Category:Pages with incorrect biology template usage'&lt;br /&gt;
-- Param sortkey: the sortkey for the category Pages with incorrect biology template usage&lt;br /&gt;
-- Param errorToDisplayOrNil: the error to display or nil in which case no error is displayed (only the category is added)&lt;br /&gt;
-- Param templateNameForDocOrNil: name of a template (without Template:) to which the red error will link. Clicking on the link will lead you to the template documentation.&lt;br /&gt;
--                    If nil, the link will point to 'Category:Pages with incorrect biology template usage'&lt;br /&gt;
-- Param ignoreNamespaceOrNil:&lt;br /&gt;
-- It has a testcase/non-regression module Module:Biology/testcases using testcase_incorrectBiologyTemplateUsage()&lt;br /&gt;
function p.incorrectBiologyTemplateUsage(sortkey, errorToDisplayOrNil, templateNameForDocOrNil, ignoreNamespaceOrNil)&lt;br /&gt;
	if not string.isTrue(ignoreNamespaceOrNil) then&lt;br /&gt;
		if (templateNameForDocOrNil == 'Taxonavigation') then&lt;br /&gt;
			if not p.isCurrentNamespaceACategoryOrAGalleryOrATemplate() then&lt;br /&gt;
				return ''&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			if not p.isCurrentNamespaceACategoryOrAGallery() then&lt;br /&gt;
				return ''&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local text = ''&lt;br /&gt;
	if errorToDisplayOrNil then&lt;br /&gt;
		if templateNameForDocOrNil then&lt;br /&gt;
			templateNameForDocOrNil = 'Template:' .. templateNameForDocOrNil&lt;br /&gt;
		else&lt;br /&gt;
			templateNameForDocOrNil = ':Category:Pages with incorrect biology template usage'&lt;br /&gt;
		end&lt;br /&gt;
		text = ' [[' .. templateNameForDocOrNil .. '|&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;Error: ' .. errorToDisplayOrNil .. '&amp;lt;/span&amp;gt;]]'&lt;br /&gt;
	end&lt;br /&gt;
	text = text .. ' [[Category:Pages with incorrect biology template usage|' .. sortkey .. ']] '&lt;br /&gt;
	return text&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- incorrectBiologyTemplateUsageNoLink() returns an error text (optional) and a Category:Pages with incorrect biology template usage&lt;br /&gt;
-- Param sortkey: the sortkey for the category Pages with incorrect biology template usage&lt;br /&gt;
-- Param errorToDisplayOrNil: the error to display or nil in which case no error is displayed (only the category is added)&lt;br /&gt;
-- Param templateNameForDocOrNil:&lt;br /&gt;
-- Param ignoreNamespaceOrNil:&lt;br /&gt;
-- It has a testcase/non-regression module Module:Biology/testcases using testcase_incorrectBiologyTemplateUsageNoLink()&lt;br /&gt;
function p.incorrectBiologyTemplateUsageNoLink(sortkey, errorToDisplayOrNil, templateNameForDocOrNil, ignoreNamespaceOrNil)&lt;br /&gt;
	if not string.isTrue(ignoreNamespaceOrNil) then&lt;br /&gt;
		if (templateNameForDocOrNil == 'Taxonavigation') then&lt;br /&gt;
			if not p.isCurrentNamespaceACategoryOrAGalleryOrATemplate() then&lt;br /&gt;
				return ''&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			if not p.isCurrentNamespaceACategoryOrAGallery() then&lt;br /&gt;
				return ''&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local text = ''&lt;br /&gt;
	if errorToDisplayOrNil then&lt;br /&gt;
		text = ' &amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;Error: ' .. errorToDisplayOrNil .. '&amp;lt;/span&amp;gt;'&lt;br /&gt;
	end&lt;br /&gt;
	text = text .. ' [[Category:Pages with incorrect biology template usage|' .. sortkey .. ']] '&lt;br /&gt;
	return text&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
---------- Testcase public functions (return string) -----------------------------------------------&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
function p.testcase_string_startsWith(frame)&lt;br /&gt;
	return tostring(string.startsWith(frame.args['string'],frame.args['start']))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.testcase_string_endsWith(frame)&lt;br /&gt;
	return tostring(string.endsWith(frame.args['string'],frame.args['end']))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.testcase_string_contains(frame)&lt;br /&gt;
	return tostring(string.contains(frame.args['long'],frame.args['small']))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.testcase_string_upperFirstLowerOthers(frame)&lt;br /&gt;
	return tostring(string.upperFirstLowerOthers(frame.args['1'])) -- tostring for nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.testcase_string_upperFirst(frame)&lt;br /&gt;
	return tostring(string.upperFirst(frame.args['1'])) -- tostring for nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.testcase_string_isTrue(frame)&lt;br /&gt;
	return tostring(string.isTrue(frame.args['1']))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.testcase_string_trimOrNullify(frame)&lt;br /&gt;
	return tostring(string.trimOrNullify(frame.args['1'])) -- tostring for nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.testcase_string_isNilOrEmpty(frame)&lt;br /&gt;
	return tostring(string.isNilOrEmpty(frame.args['1']))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.testcase_suppressCategory(frame)&lt;br /&gt;
	return p.suppressCategory(frame.args['1'])&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.testcase_suppressDisambiguation(frame)&lt;br /&gt;
	return p.suppressDisambiguation(frame.args['1'])&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.testcase_pageNameCorrespondToSpeciesOrInfraspecies(frame)&lt;br /&gt;
	return tostring(p.pageNameCorrespondToSpeciesOrInfraspecies(frame.args['1']))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.testcase_incorrectBiologyTemplateUsage(frame)&lt;br /&gt;
	local sortkey = frame.args['1']&lt;br /&gt;
	local errorToDisplayOrNil = frame.args['2']&lt;br /&gt;
	local templateNameForDocOrNil = frame.args['3']&lt;br /&gt;
	local ignoreNamespaceOrNil = frame.args.ignoreNamespaceOrNil&lt;br /&gt;
	if not ignoreNamespaceOrNil then&lt;br /&gt;
		ignoreNamespaceOrNil = frame.args['4']&lt;br /&gt;
	end&lt;br /&gt;
	return mw.text.nowiki(p.incorrectBiologyTemplateUsage(sortkey, errorToDisplayOrNil, templateNameForDocOrNil, ignoreNamespaceOrNil))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.testcase_incorrectBiologyTemplateUsageNoLink(frame)&lt;br /&gt;
	local sortkey = frame.args['1']&lt;br /&gt;
	local errorToDisplayOrNil = frame.args['2']&lt;br /&gt;
	local templateNameForDocOrNil = frame.args['3']&lt;br /&gt;
	local ignoreNamespaceOrNil = frame.args.ignoreNamespaceOrNil&lt;br /&gt;
	if not ignoreNamespaceOrNil then&lt;br /&gt;
		ignoreNamespaceOrNil = frame.args['4']&lt;br /&gt;
	end&lt;br /&gt;
	return mw.text.nowiki(p.incorrectBiologyTemplateUsageNoLink(sortkey, errorToDisplayOrNil, templateNameForDocOrNil, ignoreNamespaceOrNil))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Imported&gt;~riley</name></author>
		
	</entry>
</feed>